이번에는 Deploy-gate 프로젝트를 분석하면서 전체적인 구조와 프로젝트가 해결하려는 문제부터 파악해보았다.
Deploy-gate는 CI/CD 환경에서 배포를 수행하기 전에 해당 사용자가 특정 Stack을 배포할 권한이 있는지 확인하고, 필요한 경우 다른 사용자의 승인을 받도록 하는 서비스다.
단순히 배포 요청을 받으면 바로 배포하는 것이 아니라 다음과 같은 과정을 거친다.
배포 요청
↓
Deploy-gate에 권한 확인
↓
사용자 + Stack 정책 확인
↓
권한 판단
├─ ALLOWED
├─ DENIED
└─ PENDING
코드를 살펴보면서 주요 패키지의 역할을 먼저 구분해보았다.
deploygate
├── controller
├── service
├── dao
├── entity
├── dto
├── policy
├── validation
└── config
각각의 역할은 대략 다음과 같이 이해했다.
controller: HTTP 요청을 받는 API 진입점service: 실제 비즈니스 로직dao: 데이터베이스 접근entity: DB와 매핑되는 객체dto: API 요청/응답 객체policy: 승인 정책의 실제 판단validation: 예외 처리config: 애플리케이션 초기 설정특히 이번 프로젝트에서는 policy가 별도의 패키지로 분리되어 있다는 점이 눈에 띄었다.
기존 프로젝트를 분석할 때 처음부터 모든 코드를 읽기보다는
프로젝트 목적
→ 패키지 구조
→ 주요 API
→ 호출 흐름
→ 세부 코드
순서로 접근하는 것이 전체 구조를 이해하는 데 훨씬 효율적이라는 것을 알게 되었다.
앞으로는 Deploy-gate의 실제 요청이 Controller부터 Service, Repository, DB까지 어떻게 이동하는지 단계별로 분석해볼 예정이다.