먹었으면 뇌를 쓰자

스프링은 어떻게 작동하는 걸까? 본문

Framework/Spring boot

스프링은 어떻게 작동하는 걸까?

뇌이비 2022. 12. 14. 19:48

 

스프링의 구조를 알아보고, 각 구조별로 예시를 정리해보자.

 

 

 

 

 

<스프링의 구조>

 

 

컨트롤러

사용자의 요청과 함께 들어온 데이터를 받고, 필요한 메소드를 실행한다.

메소드는 서비스에게 로직 실행을 지시한다 (필요한 경우 서비스에 데이터를 전달한다).

@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' 로직 선언하기

 

 

 

Comments