본문 바로가기

Spring공부

스프링 부트 구조 살펴보기

프레젠테이션 계층 

HTTP 요청을 받고 이 요청을 비즈니스 계층으로 전송하는 역할을 한다. 컨트롤러가 바로 프젠테이션 계층의 역할을 한다. 컨트롤러는 스프링 부트 내에 여러 개가 있을 수 있다.

 

비즈니스 계층

모든 비즈니스 로직을 처리한다. 비즈니스 로직이란 서비스를 만들기 위한 로직을 말한다. 쉽게 말해 웹 사이트에서 벌어지는 모든 작업, 이를테면 주문 서비스라고 한다면 주문개수, 가격 등의 데이터를 처리하기 위한 로직, 주문 처리를 하다가 발생하는 예외 처리 로직, 주문을 받거나 취소하는 것 같이 프로세스를 구현하기 위한 로직 등을 생각하면 된다. 서비스가 비즈니스 계층의 역할을 한다.

 

퍼시스턴트 계층 

모든 데이터 관련 로직을 처리한다. 이과정에서 데이터베이스에 접근하는 DAO 객체를 사용할수도 있습니다. DAO는 데이터베이스 계층과 상호작용하기 위한 객체라고 이해하면 된다. 리포지토리가 퍼시스턴스 계층의 역할을 한다.

 

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

 

 

프로젝트 디렉터리 구성

 

main

실제 코드를 작성하는 공간이다. 프로젝트 실행에 필요한 소스 코드나 리소스 파일은 모두 이 폴더 안에 있다.

 

test

프로젝트의 소스 코드를 테스트할 목적의 코드나 리소스 파일이 들어 있다.

 

build.gradle

빌드를 성정하는 파일이다. 의존성이나 플러그인 설정 등과 같이 빌드에 필요한 설정을 할 때 사용한다.

 

settings.gradle

빌드할 프로젝트의 정보를 설정하는 파일이다.

 

github예제:

https://github.com/guncow0603/springboot-study/tree/main/src/main/java/me/kimgunwoo/springbootstudy/chaptor03

 

springboot-study/src/main/java/me/kimgunwoo/springbootstudy/chaptor03 at main · guncow0603/springboot-study

Contribute to guncow0603/springboot-study development by creating an account on GitHub.

github.com

 

1. 포스트맨에서 HTTP 요청을 톰캣에게 보낸다.
2. 디스패치 서블릿에서 해당요청을 받아 적절한 컨트롤러를 선택합니다.
3. 프레젠테이션 계층에서 서비스 계층과 퍼시스턴스 계층을 통하면서 필요한 데이터를 가져온다.
4. 뷰 리졸버를 사용해 템플릿 엔진을 사용해 HTML 문서로 만들거나 JSON, XML 등의 데이터로 생성한다.
5. 디스패처 서블릿에 의해 응답으로 클라이언트에게 반환된다

 

포스트맨에서 톰캣에 /test GET 요청을 합니다. 그러면 이 요청은 스프링 부트 내로 이동하는데요. 이때 스프링 부트의 디스패처 서블릿이라는 녀석이 URL을 분석하고, 이 요청을 처리할 수 있는 컨트롤러를 찾습니다. TestController가 /test라는 패스에 대한 GET 요청을 처리할 수 있는 getAIMembers 메서드를 가지고 있으므로 디스패처 서블릿은 TestController에게 /test GET 요청을 전달합니다. 마침내 /test GET 요청을 처리할 수 있 는 8etAlIMembers() 메서드와 이 요청이 매치됩니다. 그리고 getAllMembers() 메서드에서는 비즈니스 계층과 퍼시스턴스 계층을 통하면서 필요한 데이터를 가져옵니다. 그러면 뷰 리졸버는 템플릿 엔진을 사용해 HTML 문서를 만들거나 JSON, XML 등의 데이터를 생성합니다. 그 결과members를 return하고 그 데이터를 포스트맨에서 볼 수 있게 됩니다. 

 

 

 

'Spring공부' 카테고리의 다른 글

데이터베이스  (0) 2024.05.17
테스트 코드  (0) 2024.05.16
스프링 부트  (0) 2024.05.14
자바 백엔드 개발자가 알아주면 좋은 지식.  (0) 2024.05.14
@Transactional  (0) 2024.02.01