목록스프링 (3)
사부작사부작
틀린 부분이 존재할 수 있습니다. 감사합니다. 객체는 그래프로 연관된 객체들을 탐색한다. 그런데 객체가 데이터베이스에 저장되어 있으므로 연관된 객체를 마음껏 탐색하기는 어렵다 - 김영한 JPA는 연관된 객체들을 탐색하는 것을 도와준다. JPA는 직접 쿼리를 날려서 연관된 객체의 데이터를 가져온다. 예를 들어 고객과 주문으로 이루어진 1:N 구조에서 1번 고객이 3건의 주문을 한 데이터가 있다고 하자. 이 상태에서 1번 고객에 연관된 주문 객체들을 가져올 때, 주문 3건에 대해 각각 쿼리를 날려서 가져온다. 그렇기에 흔히 말하는 N+1 쿼리가 발생한다. 그렇다면 JPA는 왜 쿼리를 N번이나 날려서 연관된 객체들을 조회해올까? 왜 JPA는 조인을 통해 고객을 조회할 때 연관된 주문 데이터들을 가져오지 않을까..
Intro @Builder 어노테이션이 편리하여 자주 사용했습니다. 어느날, 생성한 객체가 초기값이 아니라 Null 값이 나오면서 왜 Null 이 나온건지, 어떻게 해결할 수 있을지 고민했습니다. 비슷한 경험이 있으신 분들에게 아래 글이 도움이 되길 바랍니다. 틀린 내용이 있을 수 있습니다. 피드백 해주신다면 감사하겠습니다. 롬복의 @Builder 를 사용하면, 빌더패턴을 구현할 수 있고 간단하게 객체를 생성할 수 있다. 하지만 편리한 @Builder 어노테이션을 클래스 위에 사용할땐 주의할 점이 있다. 먼저 예시 코드는 블로그 클래스와 유저 클래스로, 유저가 여러개의 블로그를 쓸 수 있는 1:N 구조다. @NoArgsConstructor(access = AccessLevel.PROTECTED) @All..
Intro 영속성 컨텍스트가 무엇인지, 왜 사용하는지, 어떤 방식으로 작동하는지에 중점을 두고 쓴 글 입니다. 이 글에 나오는 엔티티 생명 주기, 식별자 생성 전략 등 다른 개념들은 깊게 다루지 않습니다. 틀린 내용이 있을 수 있습니다. 피드백 해주신다면 너무 감사하겠습니다. # 프로그래밍에서 Context 먼저 컨텍스트를 살펴보자. 서블릿 컨텍스트, 영속성 컨텍스트 등 컨텍스트는 여러 곳에서 쓰인다. '문맥', '맥락' 이라는 사전적 뜻에 의해 위 단어들이 느낌은 오지만 쉽게 이해되지는 않았다. 찾아보다가 CTO 님께 질문을 드렸고, 답을 얻었다. Task는 운영체제 상에서 실행되는 작업의 단위라고 한다면, Context는 해당 Task의 정보를 메모리 등에 저장하여 관리하기 위한 단위 정도라면 도움이..