[Spring Boot] API 세분화에 대하여
·
Backend/Spring Boot & JPA
📕 목차 1. As-is 2. To-be 1. As-is 📌 기존 방식의 문제점 React를 사용하던 프론트와 협업할 때는 어차피 컴포넌트 별로 api를 호출할 테니, api도 프론트 측에서 요청하는 대로 세분화하여 설계했었다. 그런데, 앱 개발자와 협업하는데 리액트처럼 컴포넌트 개념을 적용할 수 없었다. 즉 하나의 View에 대한 모든 데이터를 넘겨줘야 하는데 문제점이 너무 많았다. 예를 들어, 하나의 View를 구성하기 위해 총 4개의 도메인 A, B, C, D에 대한 정보가 필요하다고 가정해보자. 📌 Client 시점 한 번의 요청으로 모든 데이터를 받을 수 있으니 좋다. 응답 데이터가 너무 커질 수 있어서 네트워크 관점에서 느릴 수도 있다. 응답을 받을 때까지 Client는 다음 동작을 수행할 수..
[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 표준 명세..