[JPA] 쿼리 로그 설정

JPA를 사용하며 쿼리 로그를 출력해야 할 때의 설정은 다음과 같다. application.yml 1 2 3 4 5 6 7 8 9 10 spring: jpa: properties: hibernate: show_sql: true format_sql: true logging: level: org.hibernate.sql: debug org.hibernate.type: trace # parameter 값 보기 show_sql 옵션은 System.out 에 Hibernate 실행 SQL을 남기고, org.hibernate.sql 옵션은 logger를 통해 Hibernate 실행 SQL을 남긴다. 가급적 쿼리 출력은 로거를 통해 남기자! 위 설정으로 parameter 값을 볼 수 있지만 쿼리문 안에 parameter 값이 적용되어있지 않아 보기 불편할 수 있다....

March 8, 2023 · 1 min · bookpark

[JPA] API 성능 최적화 하기 (2) - Fetch Join

API 성능 최적화 하기 1편에서 이어지는 내용입니다. 첫번째로 엔티티를 직접 노출하여 멤버의 팀명을 호출하는 API를 만들어보았다. MemberController.java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 @RestController @RequiredArgsConstructor public class MemberController { private final MemberJpaRepository memberJpaRepository; @GetMapping("/api/v1/members") public List<Member> membersV1() { List<Member> all = memberJpaRepository.findAll(); for (Member member : all) { member.getTeam().getName(); // Lazy 강제 초기화 } return all; } } 아무런 설정을 하지 않고 이대로 API를 호출해보면 다음과 같은 오류 메시지가 나올것이다....

February 5, 2023 · 4 min · bookpark

[JPA] API 성능 최적화 하기 (1) - X to One 연관 관계

X to One 연관 관계의 성능 최적화를 하기위해 먼저 알아야 할 것은 즉시(Eager) 로딩과 지연(Lazy) 로딩의 차이이다. Member.java 1 2 3 4 5 6 7 8 9 10 11 12 13 @Entity @Getter @Setter public class Member { @Id @GeneratedValue private Long id; private String name; @ManyToOne(fetch = FetchType.EAGER) private Team team; } Team.java 1 2 3 4 5 6 7 8 9 10 11 12 13 @Entity @Getter @Setter public class Team { @Id @GeneratedValue private Long id; private String name; @OneToMany(mappedBy = "team") private List<Member> members = new ArrayList<>(); } 간단하게 두 엔티티의 연관 관계를 만들어주고, FetchType....

February 4, 2023 · 2 min · bookpark