본문 바로가기

전체 글

(60)
[Java] @Requiredargsconstructor 그리고 NPE 에러 [Spring Boot] @Requiredargsconstructor 그리고 NPE 에러 개요 프로젝트를 진행하고 규모가 커지면서 많아진 생성자들의 의존성을 편리하게 주입하게 위해 사용하였던 @Requiredargsconstructor 어노테이션과 이에 따라 발생한 NPE에 대해 같은 실수를 반복하지 않기 위해 글을 작성해본다. 소개 @Requiredargsconstructor는 무엇일까? Lombok을 통해 초기화 되지않은 final 필드 혹은 @NonNull이 붙은 필드에 대해, 생성자를 자동으로 생성하여 의존성을 주입해주는 어노테이션 어노테이션 사용에 대한 고찰 Spring Boot를 활용한 프로젝트 경험은 없었고, JAVA만을 사용한 프로젝트의 경험은 적었기에 Lombok을 통한 어노테이션의 사..
[JAVA] final 키워드에 대하여 [JAVA] final 키워드에 대하여 개요 JAVA의 final 키워드에 대해 알아보고, 미처 생각하지 못했던 final 배열 변수의 값의 수정에 대해서 고민해본다. 목차 내가 갖고 있던 final 키워드에 대한 잘못된 생각 final 키워드의 특징 소개 내가 알고있던 final 키워드 기존에는 final 키워드를 사용하면, 단순히 값을 재할당하지 못해 변경이 불가능하다고만 생각하였다. 그래서, 코드를 구현할 때 재사용을 하면 안되는 변수에 final 키워드를 사용해 왔었다. 하지만 코드를 구현하면서 List형의 변수에 요소들이 추가되는것을 보며 아래와 같은 의문을 갖게 되었다. "final 키워드는 정말 변수의 값이 재할당되는것을 막아줄까?" 대답을 해보자면, 변수의 값이 재할당 되는 것은 막아준다..
[Spring JPA] EntityManager with 영속성 컨텍스트(Persistence Context) EntityManager with 영속성 컨텍스트(Persistence Context) 개요 EntityManager를 통해 영속성 컨텍스트(Persistence Context)를 활용하는 방법에 대해 알아본다. 목차 EntityManager & EntityManagerFactory EntityManager Life-Cycle 영속성 컨텍스트(Persistence Context)의 이슈 영속성 컨텍스트의 이슈에 대한 해결방안 소개 EntityManager란? "Entity(엔티티)를 Manager(관리)해주는 역할을 하는 메모리상에 존재하는 가상의 데이터베이스"라고 할 수 있다. 가상의 데이터베이스이기 때문에, EntityManager는 Entity를 생성하고, 수정하고, 삭제할 수 있다. EntityM..
[Spring JPA] JPA의 영속성(Persistence)에 관하여 JPA가 갖는 영속성(Persistence)에 관하여 개요 JPA가 갖는 영속성(Persistence)이라는 특징에 대해 집중적으로 알아본다. 목차 JPA의 영속성 컨텍스트(Persistence Context)란? JPA, 그리고 영속성 컨텍스트(Persistence Context)의 등장배경 영속성 컨텍스트(Persistence Context)의 이점에 관하여 소개 JPA의 영속성 컨텍스트(Persistence Context)란? 영속성(Persistency)는 지속 혹은 영구적이라는 의미이다. 즉, 영속성 컨텍스트란 객체로 관리되는 엔티티를 영속화시켜 관리하는 논리적인 공간이라고 할 수 있다. 그렇다면 이러한 영구적인 공간은 왜 등장하게 되었을까? JPA는 객체지향언어인 JAVA와 DB의 다른 체계를..
[JAVA] QueryDSL 이란? QueryDSL 이란? 개요 Spring Boot 프로젝트를 진행하던 도중, 직접 Query를 작성하게 되면서 사용하게 된 QueryDSL의 배경에 대하여 알아본다. 목차 QueryDSL 이란? QueryDSL의 등장배경, 그리고 JPQL의 한계 Q-Type Class 란? 소개 QueryDSL 이란? QueryDSL이란, 정적 타입을 이용한 Query생성에 특화된 언어(Domain Specific Language)의 특징을 갖는 라이브러리이다. Spring 등장 이후, 개발자는 비즈니스 로직에만 집중하게 되면서 JPA를 사용하게 되었고, JPA로 구현할 수 없는 복잡한 Query는 JPQL을 사용하였다. 그럼에도 불구하고, QueryDSL이 나온 배경은 무엇일까? QueryDSL의 등장배경 = JPQL..
[Architecture] MSA vs Monolithic MSA vs Monolithic 개요 MSA로 구성된 Service와 Monolithic으로 구성된 Service의 장단점과 각각의 Trade-Off를 비교하고 생각해본다. 목차 MSA는 어떠한 특징을 갖고 있을까? Monolithic Architecture는 어떠한 특징을 갖고 있을까? 둘 중 뭐가 더 좋은 Architecture일까? 소개 MSA(MicroService Architecture)란 무엇일까? MSA란, 커다란 어플리케이션을 작고 간단한 서비스(Service)로 나누어 유지관리와 테스트를 간편화할 수 있고, 느슨하게 결합하게 하며, 개별적인 서비스 단위로 배포할 수 있고, 비즈니스 기능을 중심으로 체계화하는 "소프트웨어 설계 방법"이라고 할 수 있다. 트렌드에 민감해지고, 하나의 어플에 ..
[Test] RestAssured vs Mock MVC RestAssured vs Mock MVC 개요 RestAssured와 Mock MVC에 대해 알아본다. 목차 RestAssured란? Mock MVC란? Mock MVC vs RestAssured 소개 1. RestAssured란? Restful 애플리케이션의 http Endpoint의 테스트를 편리하게 하기 위한 Java의 Library 테스트 도구 RestAssured의 장점 1. Given, When, Then 구문을 사용하여 코드를 직관적으로 작성가능하다. 2. Json 혹은 XML 형태로 Response Data를 Parsing 하여, Header, Body, Status 등을 검증할 수 있다. 3. Restful Application에 특화되어 있으며, Http Endpoint와의 통신을 간..
[JAVA Junit] Error: No ParameterResolver registered for parameter 에러 원인 [JAVA Junit] Error: No ParameterResolver registered for parameter 에러 원인 개요 Junit Test를 하면서, No ParameterResolver registerd for parameter가 발생한 원인중 하나에 대해 기록한다. 소개 1. 문제 원인 @Test @ParameterizedTest @NullSource @ValueSource(strings = {"-1","-1000000"}) void 테스트(BigDecimal 테스트값) { Assertions.assertThrows(RuntimeException.class, () -> test.validateTest(테스트값) ); } 위의 코드는 ParameterizedTest와 ValueSource..