![[나인도트] 서버 아키텍처 (1).png](attachment:32478cba-a561-46e7-b34d-4da0647854f4:%E1%84%82%E1%85%A1%E1%84%8B%E1%85%B5%E1%86%AB%E1%84%83%E1%85%A9%E1%84%90%E1%85%B3_%E1%84%89%E1%85%A5%E1%84%87%E1%85%A5_%E1%84%8B%E1%85%A1%E1%84%8F%E1%85%B5%E1%84%90%E1%85%A6%E1%86%A8%E1%84%8E%E1%85%A5_(1).png)
- 배포 시 dev, prod 환경 분리 이유
- 운영 환경에 최종 코드를 올리기 전, dev 환경에 올려서 미리 테스트해 보는 것이 필요했습니다.
- 이를 위해 운영 환경과 dev 환경의 설정 값이 달라야 합니다.
- Docker 컨테이너 사용 이유
- Docker 이미지를 미리 빌드하여 서버에 배포하면 서버 내 CPU 사용량을 10% 미만으로 유지할 수 있습니다.
- 도커 컨테이너를 사용하지 않고 배포하는 경우, 스프링 부트 빌드 시 서버에 부담이 커 해당 방식을 채택하였습니다.
📌 프로젝트 구조
└── 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