[DEV] J-Jay

스프링 부트 구조 본문

Back-end/Spring

스프링 부트 구조

J-Jay 2023. 9. 2. 15:48
728x90

스프링부트 구조

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

각 계층은 서로 소통할 수는 있지만 다른 계층에 직접 간섭하거나 영향을 미치지 않는다.

 

예시를 들어보자.

어떤 거리에 카페와 빵집이 있다고 생각하면, 카페는 커피를, 빵집은 빵을 팔텐데 필요한 경우 서로 협업 관계를 맺어

어떤 손님이 커피를 사면 빵을 할인할 수도 있다. 이것이 계층간의 소통이다. 하지만 빵집 알바생이 빵을 팔다 말고 카페에 가서 커피를 팔 수는 없다.(계층은 서로 영향을 끼치지 못함) 각 계층은 자신의 책임에 맞는 역할(커피 판매, 빵 판매)을 수행하며, 필요에 따라 소통(커피 사면 빵 할인, 빵 사면 커피 할인 등)한다. 

스프링 부트에는 프레젠테이션, 비즈니스, 퍼시스턴스 계층이 있다 이 계층들이 서로 통신하며 프로그램을 구성한다.

프레젠테이션 계층 (Controller)

HTTP 요청을 받고 이 요청을 비즈니스 계층으로 전송하는 역할을 한다. 

컨트롤러는 이전 글의 TestController 클래스와 같은 것을 말하는데, 컨트롤러는 스프링 부트 내에 여러개가 있을 수 있다.

https://dev-junick.tistory.com/43

 

스프링 부트 코드 이해 (2)

TestController @RestController public class TestController { @GetMapping("/test") // /test GET 요청이 오면 test() 메서드 실행 public String test() { return "Hello, world"; } } @RestController는 라우터 역할을 하는 어노테이션이다. (

dev-junick.tistory.com

비즈니스 계층 (Service)

모든 비즈니스 로직을 처리한다. 비즈니스 로직이란 서비스를 만들기 위한 로직을 말한다.

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

 

퍼시스턴스 계층 (Repository)

모든 데이터베이스 관련 로직을 처리한다. 이 과정에서 데이터베이스에 접근하는 DAO(Data Access Object) 객체를 사용할 수 있다. DAO는 데이터베이스 계층과 상호작용하기 위한 객체라고 이해하면 된다.


스프링 부트 프로젝트 Directory 구성

스프링 부트는 정해진 프로젝트 구조는 없지만 추천 프로젝트 구조가 있다. 

 

main

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

main 디렉터리 안에는 java와 resources로 구성되어 있다. 필요한 내용들을 아래 순서대로 생성한다.

  1. HTML과 같은 뷰 관련 파일을 넣을 templates 디렉터리 생성
  2. JS(Javascript), CSS, 이미지와 같은 적정 파일을 넣을 static 디렉터리 생성
  3. 스프링 부트 설정을 할 수 있는 application.yml 파일 생성 
    이 아필은 스프링 부트 서버가 실행되면 자동으로 로딩되는 파일이다. 데이터베이스의 설정 정보, 로깅 설정 정보 등이 들어갈수도 있고, 직접 설정을 정의할 떄사용하기도 한다. 자주사용할 파일이니 꼭 추가가 필요하다.

test

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

 

build.gradle

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

 

setting.gradle

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

 

 

'Back-end > Spring' 카테고리의 다른 글

스프링 부트 테스트 코드 (1) - JUnit  (0) 2023.09.02
스프링 부트 계층 파악하기  (0) 2023.09.02
스프링 부트 코드 이해 (2)  (0) 2023.08.31
스프링 부트 코드 이해 (1)  (0) 2023.08.31
스프링 부트 스타터  (0) 2023.08.31