개발세발은 안되요

[스프링부트3개발자되기] 03장 : 스프링 부트3 구조 이해하기 본문

책/스프링부트3 개발자 되기: 자바편

[스프링부트3개발자되기] 03장 : 스프링 부트3 구조 이해하기

금호박 2024. 3. 21. 19:30

3.1 스프링 부트 3 구조 살펴보기

스프링 부트는 각 계층이 양 옆의 계층과 통신하는 구조를 따른다. 

  • 계층 : 각자의 역할과 책임이 있는 어떤 소프트웨어의 구성 요소.
  • 각 계층은 서로 소통 가능.
  • 각 계층은 다른 계층에 직접 간섭 또는 영향을 미치지 않음.

3.1.1 카페와 빵집으로 이해하는 계층

- 프레젠테이션 계층 → 컨트롤러에서 구현
   : HTTP 요청을 받고 비즈니스 계층으로 전송함.

- 비즈니스 계층 → 서비스에서 구현
   : 모든 비즈니스 로직 처리. 퍼시스턴스 계층에서 제공하는 서비스를 사용할 수 있고, 권한을 부여하거나 유효성 검사를 하기도 함.

- 퍼시스턴스 계층 → 리포지토리에서 구현
   : 모든 스토리지 관련 로직을 처리함. 이 과정에서 DAO를 사용할 수도 있음.

 

프레젠테이션 계층

HTTP 요청을 받고 이 요청을 비즈니스 계층으로 전달. 컨트롤러가 해당 계층의 역할을 함. 컨트롤러는 스프링 부트 내에 여러개가 있을 수 있음.

 

비즈니스 계층

모든 비즈니스 로직을 처리함. 여기서 비즈니스 로직이란 서비스를 만들기 위한 로직으로 데이터를 처리하기 위한 로직, 예외 처리 로직, 최소 로직 등 웹 사이트에서 벌어지는 모든 작업을 구현하기 위한 로직을 의미함. 서비스가 비즈니스 계층의 역할을 함.

 

퍼시스턴스 계층

모든 데이터베이스 관련 로직을 처리함. 이 과정에서 DB에 접근하는 DAO 객체를 사용할 수 있는데, DAO란 데이터베이스 계층과 상호작용하기 위한 객체임. 리포지토리가 퍼시스턴트 계층의 역할을 함.

 

이러한 계층은 개념의 영역이고 컨트롤러, 서비스, 리포지토리는 실제 구현을 위한 영역이다.

 

3.1.2 스프링 부트 프로젝트 디렉터리 구성하며 살펴보기

  • main : 실제 코드를 작성하는 공간. 소스 코드와 리소스 파일을 포함함.
  • test : 프로젝트의 소스 코드를 테스트할 목적의 코드나 리소스 파일이 들어있음.
  • build.gradle : 빌드를 설정하는 파일. 의존성이나 플러그인 설정 등 빌드에 필요한 설정을 할 때 사용.
  • settings.gradle : 빌드할 프로젝트의 정보를 설정하는 파일.

 

3.2 스프링 부트 3 프로젝트 발전시키기

3.2.4 작동 확인하기

 현재 인메모리 데이터베이스를 사용하고 있기 때문에 애플리케이션을 새로 실행할 때마다 데이터가 사라진다. 이를 해결하기 위해 애플리케이션을 실행할 때 원하는 데이터를 자동으로 넣는 작업을 수행한다.

 

3.3 스프링 부트 요청-응답 과정 한 방에 이해하기

1. 포스트맨에서 톰캣에 /test GET 요청을 함. 이 요청은 스프링부트 내로 이동.

2. 스프링 부트의 디스패처 서블릿이 URL을 분석하여 이 요청을 처리할 수 있는 컨트롤러를 찾음. TestController가 /test 라는 패스에 대     한 GET 요청을 처리할 수 있는 getAllMembers() 메서드를 가지고 있으므로 디스패처 서블릿은 이 컨트롤러에 요청을 전달함.

3. getAllMembers() 메서드와 요쳥이 매치됨. 그리고 메서드에서는 비즈니스 계층과 퍼시스턴스 계층을 통하면서 필요한 데이터를 가져     옴.

4. 뷰 리졸버는 템플릿 엔진을 사용해 HTML 문서를 만들거나 JSON 등의 데이터를 생성함.

5. members를 리턴하고 그 데이터를 포스트맨에서 볼 수 있음.