본문 바로가기
반응형

Spring Data JPA10

Spring Data JPA - 데이터 뻥튀기 (일대다 관계 조인) "N + 1 문제 ②편"에서 N + 1 문제 해결 방법으로 Fetch Join을 사용해야 한다고 정리했었는데요. 정리를 하면서 "컬렉션 페치 조인, 일대다 관계인 @OneToMany로 연관관계를 가지는 Entity를 조회할 때 데이터 뻥튀기가 일어난다."라고 말씀드렸습니다. 그래서 오늘은 fetch join에 대해 자세히 알아보고 데이터 뻥튀기를 해결해보도록 하겠습니다. 먼저 페치 조인의 특징, 일반 조인과의 차이점을 알아보고, [일대다 관계 조인, 컬렉션 페치 조인]에 대해서 알아보도록 하겠습니다. 페치 조인의 특징 SQL 조인 종류 X JPQL에서 성능 최적화를 위해 제공하는 기능 연관된 엔티티나 컬렉션을 SQL 한 번에 함께 조회하는 기능 일반 조인과의 차이점 일반 조인 실행 시 연관된 엔티티를 함.. 2022. 3. 7.
Spring Security - Form 인증 로그인 SSAFY(삼성 청년 SW 아카데미)에서 진행한 프로젝트에서 Spring Security를 사용하여 JWT + OAuth 2.0 방식을 사용하여 SNS 로그인과 토큰 인증을 처리한 경험이 있습니다. 1개의 프로젝트를 약 6~7주 진행했었는데, 시간 내에 Spring Security를 완벽하게 이해하고 넘어가기 힘들었기 때문에 완성된 코드를 약간의 수정을 하는 정도로 사용하였습니다. 그럼에도 SSAFY에서 진행한 프로젝트에서 Spring Security를 사용하여 인증/인가를 처리하였기에 그 경험을 토대로 재직 중인 회사의 서비스의 인증/인가를 Spring Security로 사용하였습니다. 회사에 프론트엔드 개발자가 없었고, 없어도 Vue.js를 사용한 경험이 있기 때문에 풀스택 개발을 진행해도 되지만, .. 2022. 2. 6.
Spring Data JPA - 상속(Inheritance) + 다대다(N:M) 관계 엔티티를 설계하면서 Parent 클래스를 상속 받은 Child 클래스들 간의 다대다(N:M) 관계를 맺어야 하는 요구사항이 있어서 어떻게 해결했는지 정리해보려고 합니다. 어떤 상황인지 이해하실 수 있도록 예시를 들겠습니다. - 개발자 A, B, C, D가 있습니다. - 개발자는 회사에 재직 중이며, [대기업은 삼성전자, SK, etc..], [IT 서비스업은 네이버, 카카오, etc..]가 있습니다. - 서로 다른 업종을 가진 기업은 서로 협약을 맺을 수 있습니다. (ex. 삼성전자 네이버) - 같은 업종끼리의 협약은 고려하지 않도록 하겠습니다. 위와 같은 유사한 예시의 요구사항을 토대로 프로젝트를 진행하고 있었는데 이 문제를 어떻게 해결해야 할 까?를 생각했을 때 다음과 같이 엔티티를 설계 할 필요가 .. 2022. 1. 9.
Docker(CentOS 7) + Nginx + Spring Boot + Vue.js 배포하기 - ② ① 편에서는 Docker를 사용하여 CentOS 7 이미지를 받고, 컨테이너를 실행하고, Nginx를 설치하는 작업을 해봤습니다. ② 편에서는 Vue.js에서 입력한 데이터를 저장하는 API, 데이터를 조회하는 API 이렇게 총 2개의 API를 가지는 간단한 Spring 어플리케이션을 만들어보도록 하겠습니다. History ①: Docker + CentOS 7 + Nginx 패키지 설치 [Nginx] - Docker(CentOS 7) + Nginx + Spring Boot + Vue.js 배포하기 - ① 프로젝트 버전 개발 도구: IntelliJ Ultimate Spring Boot: 2.5.8 Java 11 h2 Database Gradle Packaging: Jar Dependencies: Sprin.. 2021. 12. 23.
Querydsl - 시작하기 Spring Data JPA를 사용하는 기업들이 많아지면서 그와 함께 Querydsl을 사용하는 기업들도 자연스럽게 증가했습니다. 오늘은 Querydsl을 사용하기 위한 프로젝트 환경설정 방법과 잘 적용이 됐는지 동작을 확인해보도록 하겠습니다. 먼저, Querydsl에 대해 소개해드리면, JPA가 사용되기 이전에는 MyBatis를 많이 사용했습니다. 그러나 JPA가 등장하면서 새로운 프로젝트를 시작하는 회사에서는 JPA + Querydsl을 기본으로 가져가는 구조로 자리가 잡혔습니다. 그러나 JPA는 MyBatis 대비 동적 쿼리를 구현하는 데 있어서 한계가 있습니다. 그리하여 Querydsl은 JPA로 구현하기 힘든 동적 쿼리를 보완해주는 기술입니다. 또한 MyBatis의 경우에는 쿼리를 짠 후에는 직.. 2021. 12. 21.
Spring Data JPA - Self-Reference Spring Security를 사용한 프로젝트에서 권한에 계층을 두도록 설계했습니다. 계층을 부여하는 Entity는 Self Reference 하였고, 제가 만든 클래스에 ApplicationRunner 인터페이스를 상속하여 애플리케이션이 구동될 때 DB에서 값[권한 계층 정보]을 읽어 세팅하도록 하였습니다. 근데 애플리케이션이 구동되는 시점에 권한 계층 관련한 쿼리가 여러 번 나가는 것을 확인하여 튜닝했고 거기서 배운 것들을 정리해보도록 하겠습니다. [Spring Security에 대한 내용은 제외하고, JPA에서 Entity가 자신을 참조하는 Self-Reference, @JoinColumn의 속성인 referencedColumName을 제대로 숙지하지 못하여 생긴 삽질] 프로젝트 버전 개발 도구: .. 2021. 12. 20.
반응형