← 목록으로
폴더 구조 규칙 2026.02.24 ✍️ 허영현

디렉토리 구조 및 아키텍처 규칙

우리 팀의 백엔드 서버는 물리적으로는 1개의 서버(Monolith)이지만, 논리적으로는 customer와 admin 2개의 런타임으로 완벽히 분리되어 동작합니다. 각 도메인과 계층 간의 의존성이 꼬이지 않도록 아래의 디렉토리 구조와 계층별 규칙을 엄격히 준수해야 합니다. (위반 시 ArchUnit 테스트에서 빌드가 실패합니다.)

디렉토리 구조 및 아키텍처 규칙

우리 팀의 백엔드 서버는 물리적으로는 1개의 서버(Monolith)이지만, 논리적으로는 customer와 admin 2개의 런타임으로 완벽히 분리되어 동작합니다. 각 도메인과 계층 간의 의존성이 꼬이지 않도록 아래의 디렉토리 구조와 계층별 규칙을 엄격히 준수해야 합니다. (위반 시 ArchUnit 테스트에서 빌드가 실패합니다.)

1. 전체 모듈 및 디렉토리 구조

기본 패키지 경로: src/main/java/site/holliverse

└── src
    └── main
        └── java
            └── site
                └── holliverse
                    ├── HolliverseApplication.java
                    ├── admin
                    │   ├── application
                    │   │   └── usecase
                    │   ├── domain
                    │   │   ├── model
                    │   │   └── policy
                    │   ├── query
                    │   │   ├── dao
                    │   │   └── jooq
                    │   └── web
                    │       ├── dto
                    │       ├── mapper (간단한 매핑 - 형식은 Request -> Entity)
                    │       └── assembler (복잡한 매핑 - ex.pagenaition과 같이 리스트 형태)
                    ├── customer
                    │   ├── application
                    │   │   └── usecase (service -> domain > policy -> transaction (외부 api))
                    │   ├── domain
                    │   │   ├── (model)
                    │   │   └── policy (정책 - repo 호출 필요)
                    │   ├── persistence
                    │   │   ├── entity
                    │   │   └── repository
                    │   ├── query
                    │   │   ├── dao (데이터 받아 오는 객체 - dto같은거)
                    │   │   └── custom (JPA로 처리 힘든 조회 - querydsl 사용)
                    │   └── web
                    │       ├── dto
                    │       ├── controller
                    │       ├── mapper (간단한 매핑 - 형식은 Request -> Entity)
                    │       └── assembler (복잡한 매핑 - ex.pagenaition과 같이 리스트 형태)
                    ├── infra
                    │   └── external
                    │       ├── s3
                    │       └── sms
                    └── shared
                        ├── config
                        │   ├── jpa
                        │   ├── runtime
                        │   └── web
                        ├── error
                        ├── port
                        └── security

2. 계층별 역할 및 규칙 (Layered Architecture)

올바른 단방향 호출 흐름: Controller(web) → UseCase(application) → Domain/Repository(persistence) / Port(infra)

🌐 Web 계층 (web)

⚙️ Application 계층 (application.usecase)

🧠 Domain 계층 (domain)

💾 Persistence / Query 계층

🔌 Infra 계층 (infra)

#디렉토리