2025/12/28 2

JPA N+1 문제: 개발자를 가장 괴롭히는 성능 이슈와 해결책

JPA를 처음 배우고 신나게 프로젝트를 진행하다 보면, 어느 순간 이상한 현상을 마주하게 됩니다. 분명히 데이터를 한 번만 조회했는데, 콘솔에 SQL 쿼리가 수십 개씩 찍혀있는 거죠. "어? 나는 쿼리 하나만 날렸는데...?" 하고 당황하신 경험, 한 번쯤 있으실 겁니다.이것이 바로 그 유명한 N+1 문제입니다. JPA를 사용하는 개발자라면 반드시 이해하고 넘어가야 할 핵심 주제이기도 하죠. 오늘은 이 N+1 문제가 정확히 무엇인지, 왜 발생하는지, 그리고 어떻게 해결할 수 있는지 차근차근 알아보겠습니다.N+1 문제란?이름의 의미부터 이해하기N+1이라는 이름은 발생하는 쿼리의 개수에서 유래했습니다.1: 처음에 데이터 목록을 가져오는 쿼리 1개N: 목록의 각 항목(N개)마다 연관된 데이터를 가져오는 쿼리 ..

JPA 영속성 컨텍스트(Persistence Context): 1차 캐시와 쓰기 지연이 주는 이점

JPA를 처음 배울 때 가장 헷갈리는 개념 중 하나가 바로 영속성 컨텍스트(Persistence Context)입니다. "영속성"이라는 단어부터가 일상에서 잘 쓰지 않는 표현이다 보니, 저도 처음엔 이게 대체 뭔가 싶었습니다. 그런데 알고 보면 영속성 컨텍스트는 꽤 단순한 아이디어입니다. 그리고 이걸 이해하면 JPA가 왜 그렇게 동작하는지, em.persist()를 호출해도 왜 바로 INSERT 쿼리가 나가지 않는지 자연스럽게 이해할 수 있습니다. 이번 글에서는 영속성 컨텍스트가 무엇인지, 그리고 1차 캐시와 쓰기 지연이 어떤 이점을 주는지 초보자 눈높이에서 설명해보겠습니다.영속성 컨텍스트란?쉽게 말하면 "임시 저장소" 영속성 컨텍스트를 한마디로 표현하면 "엔티티를 담아두는 임시 저장소"입니다.마트에서 ..