| 항목 | 내용 |
|---|---|
| Java 버전 | Java 17 (via Toolchain) |
| 빌드 툴 | Gradle |
| Spring Boot 버전 | 3.5.0 |
| 의존성 관리 | Spring Dependency Management Plugin (1.1.7) |
| 테스트 프레임워크 | JUnit 5 (JUnit Platform 사용) |
| JVM 옵션 | -Xshare:off (테스트 시 적용) |
| 저장소 | Maven Central |
javaorg.springframework.bootio.spring.dependency-management
implementation 'org.springframework.boot:spring-boot-starter'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'Spring Framework 환경에서 클린 아키텍처와 OOP 원칙을 준수하고 있는지를 확인합니다.
-
domain,application,interface,infra로 패키지를 구분했는가? -
domain은@Entity,@Service등 Spring Annotation 없이 설계되었는가?
❌@Component,@Autowired가 도메인 레이어에 있으면 안 됨.
-
의존성 주입은 생성자 기반으로 수행되는가?
✅@RequiredArgsConstructor또는 수동 생성자 주입 사용 -
@Configuration이나@Component는 외부 계층에만 존재하는가?
✅ DI 관리 대상은 Application 또는 Infra 레이어
-
비즈니스 판단 로직은 Domain 계층 안에 위치하는가?
✅ 예:Reservation객체가isOverlappedWith(...)같은 도메인 메서드 보유 -
Service 클래스는 오케스트레이션(흐름 제어)에 집중하는가?
❌ Service가 if-else로 비즈니스 규칙을 직접 판단하지 않아야 함
-
의존성은 Interface를 기준으로 흐르고, 실제 구현체는 바깥에 존재하는가?
✅ 예:NotificationService→EmailNotificationService구현체 -
외부 시스템 접근 (
JPA,RestTemplate,Kafka, 등)은 Adapter로 추상화되었는가?
- Entity는 JPA 전용이며, 비즈니스 로직은 최소화되었는가?
- VO는
@Embeddable등으로 명확히 구분되었는가?
-
Domain, Application 계층은 Spring Context 없이도 테스트 가능한가?
✅ 단위 테스트에서@SpringBootTest를 피함 -
외부 API, DB는 통합 테스트 또는 TestContainer를 이용하여 분리했는가?
-
Controller는 DTO 변환과 UseCase 호출만 수행하는가?
❌ DTO → Entity 변환, 도메인 로직 수행은 Controller에 있으면 안 됨 -
요청/응답 객체는 Presentation 전용으로 설계되었는가?
✅RequestUserDto,ResponseUserDto등
-
비즈니스 예외는 도메인 레이어에 정의된 커스텀 예외인가?
✅ 예:DuplicateEmailException,ReservationConflictException -
Controller에서는 글로벌 예외 핸들링(@ControllerAdvice)을 사용하는가?