먹었으면 뇌를 쓰자
스프링은 어떻게 작동하는 걸까? 본문

스프링의 구조를 알아보고, 각 구조별로 예시를 정리해보자.
<스프링의 구조>
컨트롤러
사용자의 요청과 함께 들어온 데이터를 받고, 필요한 메소드를 실행한다.
메소드는 서비스에게 로직 실행을 지시한다 (필요한 경우 서비스에 데이터를 전달한다).
@Controller : 서비스에게 응답을 받아 모델에 담고, 뷰 리졸버에게 HTML 페이지 만들 것을 지시한다.
@RestController : 서비스에게 받은 응답을 문자열로 반환한다.
서비스
컨트롤러에게 로직 실행을 지시받는다.
리파지토리에게 CRUD를 요청한다. 응답 데이터를 넘겨받고 이상 유무를 검사한 뒤 로직을 실행한다.
하나의 트랜잭션이 수행되고, 커밋된다.
리파지토리
서비스에게 CRUD 요청을 받는다. DB에 접근해서 SQL문을 실행한다.
<구조별 동작 예시>
(김성렬 교수님 강의 'SeedStarter' 예제 참조)

<엔티티>
SeedStarter
① 'features', 'details'와 일대다 연관관계 맺기
② (연관 엔티티 조회 n+1 문제 해결) join fetch 편하게 실행하는 엔티티 그래프 각각 작성하기
③ (최종 데이터를 JSON 형식으로 변환할 때, 양방향 연관관계에서 발생하는 재귀 문제 해결)
@JsonManageReference 어노테이션 선언하기
Feature
① 'seedStarter'와 다대일 연관관계 맺기
② @JsonBackReference 어노테이션 선언하기
Detail
① 'seedStarter'와 다대일 연관관계 맺기
② @JsonBackReference 어노테이션 선언하기
Type : Feature 엔티티의 Enum 타입 키 만들기
FeatureType : SeedStarter 엔티티의 Enum 타입 키 만들기
<컨트롤러>
SeedStaterMngController
① 서비스와 연결하기 (private final SeedStarterService)
② 사용자 요청과 연결하기 (@RequestMapping)
③ 'showSeedStaters' 메소드 실행하기
동작 1) seedStarterService.findWithFeature();
동작 2) seedStarterService.findWithDetail();
모델 담기 1) seedStarterWithFeature
모델 담기 2) seedStarterWithDetail
<서비스>
SeedStarterService
① 리파지토리와 연결하기 (private final SeedStarterRepository)
② 로직 실행하기
1) @RequiredArgsConstructor 어노테이션 선언하여 생성자 주입 자동으로 생성하기
2) 'findWithFeature', 'findWithDetail' 로직 실행하기
<리파지토리>
*스프링 데이터 JPA 사용하기 위해 인터페이스로 만든다
SeedStaterRepository
① 스프링 데이터 JPA 상속받아 간편한 CRUD 준비하기 (extends JpaRepository<SeedStater,Long>)
② 연관관계별 SQL문 작성하기
1) 엔티티 그래프 각각 작성하기
2) CRUD 쿼리 작성하기
3) 'findWithFeature', 'findWithDetail' 로직 선언하기
'Framework > Spring boot' 카테고리의 다른 글
Spring 학습 내용을 정리한 로드맵 - 1. 스프링이란 무엇인가 (0) | 2022.12.27 |
---|---|
스프링 프레임워크란 뭘까? (0) | 2022.11.05 |
스프링 MVC, Annotation, API, JSON은 대체 뭘까? (0) | 2022.10.29 |