[나인도트] 서버 아키텍처 (1).png

  1. 배포 시 dev, prod 환경 분리 이유
    1. 운영 환경에 최종 코드를 올리기 전, dev 환경에 올려서 미리 테스트해 보는 것이 필요했습니다.
    2. 이를 위해 운영 환경과 dev 환경의 설정 값이 달라야 합니다.
  2. Docker 컨테이너 사용 이유
    1. Docker 이미지를 미리 빌드하여 서버에 배포하면 서버 내 CPU 사용량을 10% 미만으로 유지할 수 있습니다.
    2. 도커 컨테이너를 사용하지 않고 배포하는 경우, 스프링 부트 빌드 시 서버에 부담이 커 해당 방식을 채택하였습니다.

📌 프로젝트 구조

└── src
    ├── main
    │   ├── java
    │   │   └── com.example.project
    │   │       ├── global
    │   │       │   ├── config            ← 보안 설정, CORS, Swagger, Bean 설정 등  
    │   │       │   ├── util              ← StringUtils, DateUtils 같은 공통 유틸  
    │   │       │   ├── exception         ← 예외 핸들러, 커스텀 예외 정의  
    │   │       │   └── dto               ← ApiResponse 등 공통 dto
    │   │       ├── domain
    │   │       │   ├── user
    │   │       │   │   ├── controller    ← UserController.java  
    │   │       │   │   ├── service       ← UserService.java  
    │   │       │   │   ├── repository    ← UserRepository.java  
    │   │       │   │   ├── dto           ← UserRequestDto.java, UserResponseDto.java  
    │   │       │   │   └── domain        ← User.java (엔티티)  
    │   │       │   └── mandalart         ← mandalart 및 기타 도메인도 비슷하게 구성
    │   │       └── ProjectApplication.java  ← @SpringBootApplication  
    └── resources
        └── application.yml
└── test
    └── java
        └── com.example.project
            ├── global             ← config/util/exception/common 테스트  
            └── domain
                ├── user           ← 도메인별 유닛 테스트  
                └── order