목록Tech/Spring (18)
우당탕탕

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..

스프링 외부 API 호출 방법 비교: RestTemplate, WebClient, FeignClient, RestClient 이번 포스팅에서는 스프링에서 외부 API ( OpenApi )를 호출하는 대표적인 방법인 RestTemplate, WebClient, FeignClient, RestClient를 비교해 보려고 합니다. 각각의 특징과 장단점을 먼저 살펴보고 어떤 상황에서 어떤 방식이 제일 효율적인지 알아보겠습니다.1. RestTemplateRestTemplate은 스프링 3.0부터 제공된 HTTP 클라이언트로, 간단한 API 호출을 위해 많이 사용되었습니다. 사용법 또한 간단하여 많이 사용해 왔지만 스프링 5.0 이후로는 더 이상 새로운 기능이 추가되지 않고 유지보수만 진행 중인 상태입니다.특징으..

JPA vs MyBatis: 어떤 ORM을 선택해야 할까? 스프링 백엔드 개발자라면 한 번쯤 고민해 봤을 질문, JPA와 MyBatis 중 무엇을 선택해야 할까?두 기술은 자바 애플리케이션에서 데이터베이스와 상호작용하는 데 사용되지만, 접근 방식과 특징이 크게 다릅니다. 이번 글에서는 JPA와 MyBatis의 차이점, 장단점, 그리고 상황에 따른 선택 기준을 명확히 정리해 보겠습니다. 1. JPA와 MyBatis의 기본 개념 JPA란?JPA(Java Persistence API)는 자바 표준 ORM(Object-Relational Mapping) 기술입니다. 객체 지향 프로그래밍 방식으로 데이터베이스와 상호작용할 수 있도록 설계되었습니다. JPA를 사용하면 SQL 대신 객체(Entity)를 통해 데이터..

@Transactional ( 트랜잭션 )에 대한 이해트랜잭션의 개념트랜잭션은 데이터베이스에서 수행되는 작업의 묶음으로, 일련의 작업이 모두 성공적으로 완료되거나 모두 실패해야 하는 특성을 가집니다. 이를 ACID 속성이라고 하며, 아래와 같은 특징을 가집니다원자성(Atomicity): 트랜잭션 내의 모든 작업이 성공해야만 데이터베이스에 반영됩니다. 하나라도 실패하면 전체가 롤백되어야 합니다. ( ALL OR NOTHING )일관성(Consistency): 트랜잭션이 완료되면 데이터베이스는 일관된 상태를 유지해야 합니다.격리성(Isolation): 동시에 실행되는 트랜잭션 간에 서로 영향을 미치지 않아야 합니다.지속성(Durability): 트랜잭션이 성공적으로 완료된 후에는 그 결과가 영구적으로 저장되..