[Spring Boot] Service Layer 분리에 대하여
·
Backend/Spring Boot & JPA
1. As-is. Service 계층의 순환 참조 Spring을 가장 처음 배우면, Web Application 5계층에 대해서 배우게 된다. 그리고 User라는 Domain에 대해 코드를 작성하면 아래 클래스들을 작성하고 시작한다. UserController UserService UserRepository UserDto 간단한 CRUD 기능만을 구현할 거라면 전혀 문제가 되지 않지만, 복잡한 Use case에 대한 비지니스 로직을 처리해야 하는 경우 Service가 Service를 호출하여 순조롭게 순환참조로 Application이 오작동 하는 상황을 마주할 수 있게 된다. 예를 들어, 내가 (처음) 구현했던 JWT을 이용해 로그아웃 과정을 수행하려면 다음 일련의 작업을 수행해야 했다. Client로부..
[JPA] Value Type
·
Backend/Spring Boot & JPA
이 포스트는 김영한님의 "자바 ORM 표준 JPA 프로그래밍"을 참조하였음을 알립니다. 📕 목차 1. 기본 값 타입 (Basic value type) 2. 임베디드 타입 (Embedded type, 복합 값 타입) 3. 값 타입과 불변 객체 4. 값 타입 비교 5. 값 타입 컬렉션 (Collection value type) ✒️ 값 타입의 종류 Entity 타입은 식별자를 통해 지속해서 추적할 수 있지만, 값 타입은 추적할 수 없는 단순 수치 정보다. 모든 값 타입은 Entity의 Life cycle에 의존하므로 컴포지션(composition) 관계가 된다. • 기본값 타입 ∘ 자바 기본 타입 ∘ 래퍼 클래스 ∘ String • 임베디드 타입 • 컬렉션 값 타입 1. 기본 값 타입 (Basic value..
[JPA] Proxy
·
Backend/Spring Boot & JPA
이 포스트는 김영한님의 "자바 ORM 표준 JPA 프로그래밍"을 참조하였음을 알립니다. 📕 목차 1. 프록시 2. 즉시 로딩과 지연 로딩 3. 지연 로딩 활용 4. 영속성 전이: CASCADE 5. 고아 객체(Orphan Object) 6. 영속성 전이 + 고아 객체, 생명주기 👀 Summary • 객체 그래프 탐색을 위해 Proxy를 사용한다. • 객체 조회 시에는 즉시 로딩과 지연 로딩이 있다. • 객체 저장&삭제 시, 연관 객체를 함께 저장&삭제하려면 영속성 전이를 사용한다. • 부모 객체와 연관관계가 끊어진 자식을 자동으로 삭제하려면 고아 객체 제거 기능을 사용한다. 1. 프록시 연관된 객체를 처음부터 전부 다 가져오지 않고, 실제 사용 시점에 데이터베이스에서 조회하는 방법이다. JPA 표준 명세..
[JPA] Advanced Mapping
·
Backend/Spring Boot & JPA
이 포스트는 김영한님의 "자바 ORM 표준 JPA 프로그래밍"을 참조하였음을 알립니다. 📕 목차 1. 상속 관계 매핑 2. @MappedSuperclass 3. 복합 키와 식별 관계 매핑 : 조인 전략 4. 조인 테이블 : 단일 테이블 전략 5. 엔티티 하나에 여러 테이블 매핑 : 구현 클래스마다 테이블 전략 6. 정리 1. 상속 관계 매핑 • As-is • 조인 전략(Joined Strategy) • 단일 테이블 전략(Single-Table Strategy) • 구현 클래스마다 테이블 전략(Table-per-Concrete-Class Strategy) 🤔 As-is 관계형 데이터베이스에는 상속이라는 개념이 없다. 대신 비슷한 개념으로 Super-Type Sub-Type Relationship 모델링 기..