Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
[FEATURE] AWS CloudFront (CDN) 연동 기능 구현
📋 개요
AWS CloudFront CDN 서비스를 AgenticCP 플랫폼에 연동하여 사용자가 CDN Distribution의 전체 생명주기를 관리하고, 캐시 무효화 기능을 사용할 수 있도록 구현했습니다.
CloudFront는 전 세계 사용자에게 빠르고 안정적인 콘텐츠 전송을 제공하는 CDN 서비스로, 본 기능을 통해 Distribution 생성, 조회, 수정, 삭제 및 캐시 무효화를 통합 관리할 수 있습니다.
🎯 목표
CloudFront Distribution 생명주기 관리
캐시 무효화 기능
멀티 클라우드 아키텍처 준수
플랫폼 통합
🏗️ 구현 내용
1. 아키텍처
Hexagonal Architecture 패턴을 따라 Port & Adapter 구조로 구현했습니다.
Outbound Ports (인터페이스)
CDNManagementPort: Distribution 생명주기 관리 (생성, 수정, 삭제)CDNDiscoveryPort: Distribution 조회 (목록, 단건, 존재 여부)CDNInvalidationPort: 캐시 무효화 관리 (생성, 조회)Adapters (구현체)
AwsCloudFrontManagementAdapter: AWS CloudFront Distribution 관리AwsCloudFrontDiscoveryAdapter: AWS CloudFront Distribution 조회AwsCloudFrontInvalidationAdapter: AWS CloudFront 캐시 무효화AwsCloudFrontMapper: AWS SDK 모델 ↔ CloudResource 변환AwsCloudFrontErrorTranslator: AWS 예외 → 도메인 예외 변환Services
CDNPortRouter: ProviderType 기반 포트 라우팅CDNUseCaseService: 비즈니스 로직 오케스트레이션Configuration
AwsCloudFrontConfig: CloudFrontClient 빈 생성 및 ThreadLocal 자격증명 관리2. 주요 기능 구현
2.1 Distribution 관리
2.2 캐시 무효화
2.3 DB 동기화
CloudResource엔티티에 Distribution 정보 저장metadata필드(JSONB)에 Distribution 상세 정보 저장2.4 보안 및 감사
@AuditRequired어노테이션을 통한 감사 로깅CDN_DISTRIBUTION3. 데이터 모델
Port Models (내부 도메인 모델)
CreateDistributionCommand: Distribution 생성 명령UpdateDistributionCommand: Distribution 수정 명령DeleteDistributionCommand: Distribution 삭제 명령CreateInvalidationCommand: 캐시 무효화 생성 명령InvalidationResult: 캐시 무효화 결과 (내부 포트 모델)OriginConfig: Origin 설정 VOCacheBehaviorConfig: Cache Behavior 설정 VODTOs (외부 API 모델)
CDNDistributionCreateRequest: Distribution 생성 요청CDNDistributionUpdateRequest: Distribution 수정 요청CDNDistributionQueryRequest: Distribution 조회 요청CDNInvalidationRequest: 캐시 무효화 생성 요청CDNInvalidationResponse: 캐시 무효화 응답CloudResource: Distribution 조회/생성/수정 응답 (다른 리소스와 일관성 유지)4. 에러 처리
AwsCloudFrontErrorTranslator: AWS SDK 예외를 도메인 예외로 변환BusinessException: 비즈니스 로직 예외ResourceNotFoundException: 리소스 미발견 예외🧪 테스트
단위 테스트
Adapter 테스트
AwsCloudFrontManagementAdapterTest: Distribution 생성, 수정, 삭제 테스트AwsCloudFrontDiscoveryAdapterTest: Distribution 조회 테스트AwsCloudFrontInvalidationAdapterTest: 캐시 무효화 테스트Service 테스트
CDNUseCaseServiceTest: 비즈니스 로직 테스트CDNUseCaseServiceDbSyncTest: DB 동기화 테스트🚀 API 엔드포인트
Distribution 관리
POST /api/v1/clouds/{cloudAccountId}/cloudfront/distributions- Distribution 생성GET /api/v1/clouds/{cloudAccountId}/cloudfront/distributions- Distribution 목록 조회GET /api/v1/clouds/{cloudAccountId}/cloudfront/distributions/{distributionId}- Distribution 상세 조회PUT /api/v1/clouds/{cloudAccountId}/cloudfront/distributions/{distributionId}- Distribution 수정DELETE /api/v1/clouds/{cloudAccountId}/cloudfront/distributions/{distributionId}- Distribution 삭제캐시 무효화
POST /api/v1/clouds/{cloudAccountId}/cloudfront/distributions/{distributionId}/invalidations- 캐시 무효화 생성GET /api/v1/clouds/{cloudAccountId}/cloudfront/distributions/{distributionId}/invalidations/{invalidationId}- 캐시 무효화 상태 조회📝 사용 예시
Distribution 생성
캐시 무효화 생성
IAM 권한: CloudFront 작업을 수행하려면 적절한 IAM 권한이 필요합니다.
Distribution 삭제: 활성화된 Distribution을 삭제하려면 먼저 비활성화되어야 하며, 배포가 완료될 때까지 대기해야 합니다. 본 구현에서는 자동으로 처리됩니다.
배포 대기 시간: Distribution 비활성화 후 배포 완료까지 최대 10분까지 대기할 수 있습니다.
ETag 동시성 제어: Distribution 수정 및 삭제 시 ETag를 사용하여 동시성 제어를 수행합니다.
🔄 향후 개선 사항
✅ 체크리스트