목록분류 전체보기 (58)
우당탕탕

QueryDSL vs MyBatis vs JPA 실무에서 언제 쓰는 게 좋을까? 스프링 백엔드 개발을 하다 보면, JPA, MyBatis, QueryDSL 중 어떤 기술을 선택할지 고민하게 됩니다. 각각의 특징과 장단점을 한번 살펴보면서 어떤 상황일 때 어떤 기술이 적합한지 한번 찾아보도록 하겠습니다.1. JPA 특징- 객체와 테이블을 매핑하여 SQL 없이 CRUD 작업 가능- 영속성 컨텍스트로 변경 감지 (Dirty Checking), 지연 로딩 (Lazy Loading) 지원 - Spring Data JPA로 기본 CRUD 메서드 자동 생성 ( findAll(), save() 등 )영속성 컨텍스트란? -> https://mozzi-devlog.tistory.com/66장점- 생산성 극대화 : 반복적인..

JPA 영속성 컨텍스트 쉽게 알아보기 이번 포스팅에서는 JPA를 처음 접하는 분들도 쉽게 이해할 수 있도록, 영속성 컨텍스트(Persistence Context)가 뭔지 알아보도록 하겠습니다.영속성 컨텍스트란?영속성 컨텍스트는 말 그대로 "엔티티(객체)를 영구적으로 저장하고 관리하는 공간"입니다.조금 더 쉽게 말하면,JPA가 엔티티를 직접 데이터베이스(DB)에 바로 저장하지 않고, 중간에 잠깐 보관하고 관리하는 "임시 창고"라고 생각하시면 됩니다.왜 이런 창고가 필요할까?JPA는 단순히 DB에 바로 데이터를 넣고 빼는 게 아니라, "엔티티 매니저 (EntityManager)"라는 친구를 통해 이 창고(영속성 컨텍스트)에 먼저 엔티티를 넣고 관리합니다.이렇게 하는 이유는 1. 성능을 높이고 ( 캐시 효과 ..

JPA Auditing을 활용한 생성일, 수정일 자동 관리하기 이번 글에서는 JPA에서 엔티티의 생성일(createdDate)와 수정일(modifiedDate)을 자동으로 관리하는 방법인 JPA Auditing에 대해 작성해보려 합니다.실무에서 게시글, 회원, 주문 등 거의 모든 엔티티에는 "언제 만들어졌는지", "언제 마지막으로 수정된 것인지"와 같은 정보가 거의 필수적으로 들어가게 됩니다. 매번 직접 값을 넣어주는 건 번거롭고, 실수도 생길 수 있기 때문에 보통 자동으로 생성해 주는 JPA Auditing과 같은 기능을 많이 사용하게 됩니다.JPA Auditing이란?JPA Auditing은 엔티티가 저장되거나 수정될 때 특정필드(ex: 생성일, 수정일, 생성자, 수정자 등)의 값을 자동으로 채워주는..

대용량 트래픽을 위한 스프링 튜닝 팁 급하게 개발해야할 때 보통은 "일단 돌아가게 만든 후 최적화 한다" 라는 생각으로 개발을 진행하게 됩니다. 보통 이러한 접근은 대용량 트래픽이 발생할 때 치명적으로 돌아올 수 있습니다. 이번 글에서는 실제 서비스 장애를 얻으며 경험한 바탕으로, 트래픽 폭증 시 시스템을 안정적으로 유지하는 핵심 전략을 예시 코드와 함께 작성 해 보겠습니다.1. 캐싱 전략: Redis 및 Caffeine Cache 사용을 통한 DB 부하 분산"DB 호출 1회 감소" = 초당 수천 건의 트래픽 여유를 확보합니다.캐시는 자주 조회되는 데이터를 미리 저장해두는 공간입니다. 예를 들어, 인기 상품 정보를 매번 DB에서 꺼내오면 느려지니까, 한 번만 DB에서 꺼내서 캐시에 저장해두고, 다음부터는..

JPA N+1 문제 해결법 이번 포스팅에서는 JPA에서 자주 발생하는 성능 이슈인 N+1 문제와 이를 해결하는 방법들을 정리해 보려고 합니다. N+1 문제란?N+1 문제란, JPA로 엔티티를 조회할 때 연관된 엔티티를 추가로 조회하면서 불필요하게 많은 쿼리가 실행되는 현상을 말합니다. 예를 들어, 게시글 10개를 조회할 때 각 게시글의 작성자 정보를 연관엔티티로 가져온다면, 게시글 목록(10개의 게시글)을 가져오는 쿼리 1번 + 작성자 정보(게시글당 1번씩) 쿼리 10번, 총 11번의 쿼리가 실행되는 것이 대표적인 N+1 문제입니다.N+1 문제가 왜 생길까?JPA에서 연관된 엔티티는 기본적으로 지연로딩(LAZY) 방식입니다. 즉, 실제로 해당 데이터를 사용할 때마다 추가 쿼리가 실행되는 방식입니다.N+1..

Caffeine Cache (로컬 캐시, 카페인 캐시)란? 카페인 캐시 (Caffeine Cache)란?카페인 캐시는 Java8 이상에서 동작하는 고성능 인메모리(Local) 캐싱 라이브러리입니다. 스프링의 공식 지원 덕분에 손쉽게 연동이 가능하며, 서버 메모리(RAM)에서 데이터를 즉시 읽고 쓰기 때문에 네트워크 IO가 없이 빠른 응답속도를 자랑합니다.특징카페인 캐시의 특징으로는 네트워크 트래픽 없이 서버 메모리에서 데이터를 접근해서 성능이 빠르고, Window TinyLFU 알고리즘을 사용하여 자주 사용하거나 최근 사용한 데이터 위주로 관리가 됩니다.(최적화된 캐시 정책) 또한 용량, 시간, 참조 기반의 다양한 캐시 만료옵션을 제공하며, application.yml 또는 Config를 통해 간편하게 ..