Spring 개발 시 클래스명 및 디렉토리 구조 설계 개념

민준·2025년 3월 15일
post-thumbnail

Spring을 개발할 때, 클래스명디렉토리 구조를 어떻게 설계할지 고민할 필요가 있다.

  1. 클래스명 작명 규칙 (Domain 기반 + 3-Layered Architecture 기반)
  2. 디렉토리 배치 전략 (3-Layered Architecture 우선 vs Domain 우선)

1. 클래스명 작명 규칙: Domain + 3-Layered Architecture

클래스명은 두 가지 요소로 조합된다

클래스 이름은 보통 "도메인(Domain)명" + "레이어(Layer)명" 으로 구성

  • 도메인(Domain): 애플리케이션의 주요 개념 (User, Payment, Jobpost 등)
  • 레이어(Layer): 코드의 역할을 나누는 개념 (Controller, Service, Repository 등)

예제

클래스명도메인레이어
PaymentServicePaymentService
UserRepositoryUserRepository
JobpostControllerJobpostController

이 규칙을 따르면 코드를 보자마자 이 클래스가 어떤 도메인을 다루고 있고, 어떤 역할을 하는지 쉽게 알 수 있음.


2. 디렉토리 배치 전략

Spring 프로젝트에서 클래스를 어떤 기준으로 디렉토리에 배치할 것인가에 대한 두가지 방식

  • (1) 3-Layered Architecture 우선 배치
  • (2) Domain 우선 배치

2-1. 3-Layered Architecture 우선 배치

  • 레이어(Layer)를 중심으로 디렉토리를 정리하는 방식
  • 같은 역할(Controller, Service, Repository)을 하는 클래스들이 같은 폴더에 모여 있음

예제 디렉토리 구조

/exception/
/advisor/
/controller/
    ├── user/
    ├── payment/
    ├── cart/
    ├── jobpost/
    ├── delivery/
/service/
/repository/
/configuration/

3-Layered Architecture 우선 배치의 장단점

장점

  • 레이어별 역할이 명확해서 service를 찾거나, repository를 찾을 때 빠르게 접근 가능.
  • 현업에서 많이 사용하는 방식. 특히 여러 도메인을 섞어서 개발하는 경우 유리함.

이 방식의 단점

  • 특정 도메인의 관련 코드(controller, service, repository)가 여러 폴더에 흩어져 있어서 관리가 어려울 수도 있음.

2-2. Domain 우선 배치

  • 도메인(Domain)을 중심으로 디렉토리를 정리하는 방식
  • 하나의 도메인에 관련된 모든 코드(controller, service, repository)가 한 폴더에 들어 있음

예제 디렉토리 구조

/user/
    ├── controller/
    ├── service/
    ├── repository/
/payment/
    ├── controller/
    ├── service/
    ├── repository/
/cart/
/jobpost/
/delivery/

Domain 우선 배치의 장단점

장점

  • 특정 도메인 관련 클래스(controller, service, repository)가 한 폴더 안에 모여 있어서 관리가 편리함.
  • 작은 프로젝트에서는 가독성이 좋음.

단점

  • 레이어별 역할을 구분하기 어려워질 수 있음.
    • 예를 들어, service 폴더를 찾으려면 각 도메인의 폴더를 뒤져야 함.

어떤 방식을 선택해야 할까?

결론

  • 팀원들과 협업할 때는 어떤 방식이든 논리적인 설명과 설득이 가능해야 함.
  • 작은 프로젝트 → Domain 우선 배치
  • 규모가 커지고 여러 도메인이 섞이면 → 3-Layered Architecture 우선 배치

0개의 댓글