[SpringBoot] SQL 쿼리 파라미터 로그 남기는 방법
·
Back end/Spring Project
JPA를 사용하다 보면 실제로 실행된 SQL과 바인딩된 파라미터 값을 확인해야 할 때가 많습니다.하지만 기본 설정만으로는 ? 만 출력되어, 실제 값은 확인하기 어렵습니다. 이번 글에서는 쿼리 파라미터를 로그로 남기는 두 가지 방법을 알아보겠습니다. 1️⃣ Hibernate 로그 레벨 설정으로 파라미터 확인application.yml 설정 Spring Boot 버전에 따라 아래와 같이 로그 옵션을 추가합니다. logging.level: org.hibernate.SQL: debug# org.hibernate.type: trace #스프링 부트 2.x, hibernate5 org.hibernate.orm.jdbc.bind: trace #스프링 부트 3.x, hibernate6적용 결과 다음과 같이 쿼리의..
[Spring] JPA - @MappedSuperclass
·
Back end/Spring Project
JPA를 사용하다 보면 여러 엔티티에서 공통으로 쓰이는 컬럼이 반복적으로 등장합니다.예를 들어, id, 생성일, 수정일, 작성자 같은 필드는 대부분의 엔티티에서 공통적으로 관리됩니다.이럴 때 JPA에서 제공하는 @MappedSuperclass를 사용하면 중복을 줄이고 깔끔하게 관리할 수 있습니다. 📖 @MappedSuperclass란?공통 매핑 정보를 모아두는 클래스엔티티가 아니며, 테이블과 직접 매핑되지 않음단순히 자식 엔티티에게 매핑 정보만 제공하는 역할따라서 em.find(BaseEntity) 같은 직접 조회는 불가능@MappedSuperclasspublic abstract class BaseEntity { @Id @GeneratedValue private Long id; p..
[Spring] JPA flush
·
Back end/Spring Project
1. flush의 개념flush는 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영하는 과정입니다.여기서 중요한 점은 영속성 컨텍스트를 비우지 않는다는 것입니다.즉, 1차 캐시(영속성 컨텍스트)는 그대로 유지되며, 단순히 SQL 저장소에 쌓여있던 쿼리들이 데이터베이스로 전송됩니다.2. flush의 특징1차 캐시(영속성 컨텍스트)는 유지됨→ clear()처럼 캐시를 비우지 않습니다.쓰기 지연 SQL 저장소의 쿼리를 DB에 반영→ em.persist()나 entity.setName() 등으로 변경된 내용을 DB에 즉시 보냅니다.트랜잭션을 끝내는 것이 아님→ flush() 호출 후에도 트랜잭션은 여전히 활성 상태입니다.동기화 목적→ JPQL 실행 전, 트랜잭션 커밋 직전에 DB와 영속성 컨텍스트를 맞추기 위해..
[Spring] JPA 기본 CRUD 동작 예제
·
Back end/Spring Project
JPA에서 제공하는 조회(Select), 등록(Insert), 수정(Update), 삭제(Delete) 기능은모두 영속성 컨텍스트와 밀접하게 연관되어 있습니다. 예제를 통해 각 기능의 실행 흐름과 콘솔 로그 결과를 확인해보겠습니다.1. 조회 – 1차 캐시 동작 확인EntityManager는 조회 시 먼저 1차 캐시를 확인하고,이미 같은 트랜잭션 내에서 조회한 엔티티라면 DB 쿼리를 실행하지 않습니다.try { // 1차 캐시 테스트 Member findMember1 = em.find(Member.class, 101L); // 첫 조회 → DB SQL 실행 Member findMember2 = em.find(Member.class, 101L); // 두 번째 조회 → 1차 캐시에서 반환 ..
[Spring Project] 겨울을 지나 봄으로: 스프링의 등장 배경과 개념
·
Back end/Spring Project
📌 EJB에서 JPA까지: 스프링이 등장하게 된 배경과거 자바 진영에서는 엔터프라이즈 애플리케이션을 개발하기 위해 EJB(Entity JavaBean)를 사용했지만, 이는 지나치게 복잡하고 무거운 구조로 인해 많은 개발자들의 불만을 샀습니다.이러한 문제를 해결하기 위해 하이버네이트(Hibernate) 같은 ORM 프레임워크가 등장했고, 이후 자바 표준 ORM인 JPA(Java Persistence API) 가 나오면서 보다 간결하고 효율적인 개발 환경이 마련되었습니다.📖 스프링의 역사2002년, 호주 개발자 Rod Johnson(로드 존슨) 은 『Expert One-on-One J2EE Design and Development』라는 책을 통해 EJB 없이도 자바 애플리케이션을 개발할 수 있는 방법을 ..
[Spring Project] 스프링 데이터 JPA 완전 정복: CRUD부터 메서드 자동 생성까지
·
Back end/Spring Project
💡 스프링 데이터 JPA란? 스프링 부트와 JPA만으로도 개발 생산성을 크게 높일 수 있지만, 여기에 스프링 데이터 JPA를 활용하면 리포지토리 구현체 없이 인터페이스만으로도 데이터 접근 기능을 손쉽게 구현할 수 있어, 개발해야 할 코드가 눈에 띄게 줄어듭니다. 반복적으로 작성해오던 CRUD 기능도 스프링 데이터 JPA가 기본적으로 제공하므로, 개발자는 핵심 비즈니스 로직에만 집중할 수 있습니다.관계형 데이터베이스를 사용하는 실무 환경이라면, 스프링 데이터 JPA는 이제 선택이 아닌 사실상 필수적인 기술입니다.📌 스프링 데이터 JPA 주요 기능기본적인 CRUD 기능 자동 제공 (save, findById, delete, findAll 등)메서드 이름만으로 조회 기능 구현 (findByName, fin..
[Spring Project] JPA 핵심: EntityManager와 주요 메서드 정리 (persist, find, createQuery)
·
Back end/Spring Project
이번 포스팅에서는 JpaMemberRepository 코드를 예로 들어 JPA의 핵심 객체인 EntityManager와, 이를 이용한 대표적인 메서드인 persist, find, createQuery 사용법을 정리해보겠습니다.💡 EntityManager란? EntityManager는 JPA에서 엔티티(객체)를 데이터베이스에 저장, 조회, 수정, 삭제하는 등 모든 데이터베이스 작업을 담당하는 핵심 객체입니다. private final EntityManager em;public JpaMemberRepository(EntityManager em) { this.em = em;} 위처럼 생성자 주입을 통해 EntityManager를 전달받으면, 해당 Repository 클래스 내부에서 자유롭게 데이터베이..
[Spring Project] JPA(Java Persistence API) - 사용 이유부터 설정 방법까지
·
Back end/Spring Project
🤷‍♀️ JPA는 왜 사용할까?Google 트렌드에 따르면 JPA(Java Persistence API)는 2015년부터 관심도가 꾸준히 증가하고 있으며, 전 세계적으로 많이 사용되는 기술입니다.🔗 Google 트렌드 바로가기 아래 이미지를 보면 JPA는 시간의 흐름에 따라 검색량이 꾸준히 증가하고 있습니다. 이는 객체 중심의 데이터 접근 방식이 점점 더 많은 개발자들에게 채택되고 있다는 것을 보여줍니다.💡 JPA 란?자바 ORM(Object Relational Mapping) 기술 표준입니다. 기존의 반복 코드 작성을 최소화하고, 기본적인 SQL을 직접 생성 및 실행해 줍니다. 즉, SQL 중심의 설계에서 객체 중심의 설계로 패러다임 전환을 가능하게 해주며, 개발 생산성을 크게 향상시킬 수 있습니..