이끌든지 따르든지 비키든지

Framework/Spring

[Spring Boot] 기능 기반 패키지 구조(package-by-feature)

SeongHo5 2023. 10. 22. 22:21

선행 지식 : MVC 패턴

(링크)

Spring 프레임워크 기반의 앱을 만들 때, 주로 사용하는 패키지 구조가 몇 개 있는데,

계층 기반 패키지 구조(Package-by-Layer), 기능 기반 패키지 구조(Package-by-Feature) 두 가지이다.

 

기능 기반 패키지 구조란 기능 또는 모듈별로 관련된 클래스 및 패키지를 그룹화하여 구성하는 방식을 말하는데,

아래 예시처럼 account와 admin 기능에 따라 패키지(클래스)를 구성하는 방식이다.

 

 

기능 기반 패키지 구조 예시

 

 

앱의 요구사항이나 특성을 고려해 두 구조 중 하나를 선택하지만, 보통 Spring Boot에서는 테스트 & 리팩토링 용이성, MSA(마이크로 서비스 아키텍처)로 분리되게 쉬움 등의 이유로 기능 기반 패키지 구조를 권장한다고 한다.

 


Controller

  • Controller는 주로 사용자, 클라이언트의 요청과 응답을 처리하는 역할을 한다.
  • Controller는 요청을 분석해 적절한 Service에 처리를 위임하고, 처리 결과를 View를 통해 반환한다.
  • MVC 패턴에서 Model과 View 사이의 중간 다리 역할을 하므로, Model과 View는 서로의 존재를 몰라야하지만, Controller는 Model과 View의 변경에 대해 알고 있도록 해야한다.

Service

Service는 비즈니스 로직을 처리하는 역할을 한다.
Controller로부터 요청을 받아 비즈니스 로직을 실행하고, 필요한 데이터베이스 조작이나 다른 서비스와의 상호작용을 수행합니다.
재사용 가능한 비즈니스 로직을 구현하고, 이를 서비스로 노출합니다.

 

💡비즈니스 로직이란?
어떤 앱이나 프로그램에서 요청을 처리하는, 문제를 해결하는 코드를 말한다.
기능 구현을 위한 가장 핵심적인 로직 중 하나라 할 수 있다.

Domain

Domain은 도메인 모델을 나타내는 부분입니다.
도메인 모델은 애플리케이션의 핵심 개념과 엔터티(Entity)를 정의하며, 비즈니스 도메인을 나타냅니다.
도메인 모델은 데이터 구조와 비즈니스 룰을 포함하며, 이를 기반으로 비즈니스 로직을 처리합니다.

 

 

Entity

Entity 클래스는 도메인 모델의 핵심 데이터를 표현하는 역할
DB 테이블과 1:1로 매핑되는 구조를 가지며, 데이터베이스와의 상호작용을 처리한다.
주로 데이터베이스 레코드를 나타내며, 비즈니스 로직보다 데이터의 상태를 관리하는 역할을 합니다.

 

 

Repository

Repository는 데이터베이스와 상호작용하기 위한 클래스입니다.
주로 데이터베이스에서 데이터를 읽거나 쓰는 작업을 처리하며, Entity를 데이터베이스와 연결시켜줍니다.
Spring Data JPA와 같은 라이브러리를 사용하여 데이터베이스 작업을 간편하게 처리할 수 있습니다.

 

 

DTO

DTO는 데이터 전송 객체(Data Transfer Object)를 나타내며, 주로 데이터 전송 및 계층(Layer)간 데이터 교환을 위해 사용한다.
클라이언트와 서버 간의 데이터 전송을 단순화하고, 필요한 데이터만 포함하는 객체를 생성합니다.
DTO는 데이터베이스 엔터티와는 다르며, 클라이언트 요청 및 응답을 처리하는 데 사용됩니다.


 

(참고)

https://velog.io/@sunil1369/Spring-boot-%ED%8C%A8%ED%82%A4%EC%A7%80-%EA%B5%AC%EC%A1%B0#controller

https://youwjune.tistory.com/40