스프링부트 구조 살펴보기

지난 시간에는 MVC에 대해 알아보았다. 이제 본격적으로 스프링부트의 파일 구조를 뜯어본 후 살펴보겠다.

스프링부트의 파일 구조

  • 스프링은 Domain → Repository → DTO → Service → Controller구조로 되어 있으며 코드를 작성하는 순서도 이와 같다.

  • Domain에서 DB와 관련된 클래스를 작성하고 Repository로 Doamin에 작성된 필드 접근을 위한 CRUD를 생성하고 DTO로 어떤 테이블에 어떤 필드로 접근할지 정의한다.

  • Service에서 외부에서 해당 기능을 사용할 수 있도록 메소드를 정의하고 외부에서 요청이 오면 Controller를 통해서 Service로 DB에 접근하여 요청을 처리하게 된다.

스프링부트 구조를 찾아보니 계층형과 도메인형으로 나누고 있는데, 우리가 진행할 프로젝트는 경험자분이 도메인 형으로 나누셔서 도메인 형으로 진행해볼 예정이다.
계층형 구조는 각 계층을 대표하는 디렉터리를 기준으로 코드를 구성하는 형태이다. 각 구조안에 알맞는 것을 넣어주기만 하면 된다.
도메인형 구조는 도메인 디렉터리를 기준으로 코드를 구성하는 것이다. 각 디렉토리 별로 Domain, Dto등 다 들어있는 형태이다.

스프링 부트는 목적에 따라 여러 패키지를 생성하여 소스코드를 관리한다.

- Domain(Entity)

- Repository

- Dto

- Service

- Controller

위의 프로젝트 구성 요소를 하나씩 살펴보자.

1. Domain(Entity)

DB의 테이블과 직접적으로 맵핑되는 클래스. DB의 테이블과 컬럼 그리고 타입 및 크기등을 설정할 수 있다.


2. Repository

DB에 접근하는 소스코드를 모아둔 Interface 이다.

여기서 여러 테이블과 조인 연산이 필요한 경우에는 @Query 어노테이션으로 직접 쿼리를 작성하여 사용하거나

querydsl과 같은 동적쿼리를 생성해주는 라이브러리를 같이 사용하게 된다.

  • 동적 쿼리란 ? 미리 작성해둔 SQL이 아니라 코드 실행 시점에 동적으로 구성되고 실행되는 쿼리이다.


3. DTO

DTO는 Data Transfer Object로 직역하면 데이터 전송 객체이다.

Service나 Controller에서 DB에 접근할때 사용하는 클래스 이다.

  • Domain과의 차이점
    • Domain은 DB 테이블에 대한 정보를 가지고 있는 클래스이고 DTO는 해당 테이블에서 실제로 CRUD를 할 필드를 정의해둔 것.
    • 소스코드 작성중에 디비에 접근할 필드의 변경이 생겼을 경우 Domain을 변경하여 DB에 접근하게 되면 테이블을 건드리게 되므로 위험
    • Domain과 DTO를 나누어서 사용한다.
    • 요약 : 테이블에 대한 정보를 작성하는 Domain 클래스와 DB에 접근하는 필드에 대한 DTO 클래스


4. Service

Repository와 DTO를 통해 DB에 접근하여 직접적인 데이터 연산을 수행하는 역할을 한다.

@Service 어노테이션을 붙여주게 되면 스프링 빈에 등록되고 스프링에서 관리하는 객체가 된다.

DB와 실제적인 접근을 명령하는 소스코드를 작성하는 클래스이고, DTO에 작성된 메소드를 기반으로 소스코드를 작성하게 된다.


5. Controller

제일 앞단에서 HTTP 요청과 응답을 위한 클래스 이다.

@Controller 어노테이션을 붙여주면 스프링 빈에 등록되고 스프링에서 관리하는 객체가 된다.

@GetMapping(“주소”) 와같이 http 메소드 명과 함께 주소를 작성해주게 되면 해당 주소로 요청을 받을수 있게 된다. (API요청)


정리해보자면

내가 이해한 느낌으로 한 줄 요약을 해보자면,
Entity는 데이터베이스에 넣을 테이블을 설계해주는 것이고
Repositroy는 DB에 직접적으로 접근할 수 있는 코드를 설계, 새로운 쿼리를 작성할 수 있다.
DTO는 CRUD을 통해 나온 데이터를 정형화시켜주는 것. 데이터베이스에서 받아온 데이터를 우리 입맛대로 바꿔서 응답해줄 수 있다. (Mapper, Request, Response 등)
Service는 실제로 API 명세라고 할 수 있는 부분이고, 전체적으로 API를 짜는 부분이라고 할 수 있다.
Controller는 API URL을 연결해줄 수 있는 부분으로 해당 주소로 요청을 받을 수 있게 해준다.

Categories:

Updated:

Comments