-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
Description
상위 UserStory
UserStory: #124
Feature 제목
AWS CloudFront 연동
Feature 설명
AWS CloudFront를 AgenticCP 플랫폼에 연동하여 사용자가 CDN 배포를 생성, 조회, 수정, 삭제할 수 있도록 합니다. CloudFront는 콘텐츠 배포 네트워크(CDN)로서 전 세계 사용자에게 빠르고 안정적인 콘텐츠 전송을 제공합니다. 본 Feature는 CloudFront Distribution의 전체 생명주기를 관리하고, 캐시 무효화 등의 핵심 기능을 제공합니다. 퍼블릭 S3 버킷과 커스텀 Origin(ELB, EC2 등)을 지원합니다.
주요 기능
- CloudFront Distribution 생성 (퍼블릭 S3, Custom Origin 지원)
- CloudFront Distribution 조회 (단건/목록)
- CloudFront Distribution 수정
- CloudFront Distribution 삭제
- 캐시 무효화(Invalidation) 생성 및 조회
API 엔드포인트
- 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 - 캐시 무효화 목록 조회
데이터 모델
- Entity: CloudResource (공통 엔티티 사용)
- DTO: CDNDistributionCreateRequest, CDNDistributionUpdateRequest, CDNDistributionResponse, CDNInvalidationRequest, CDNInvalidationResponse
- Repository
기술 스택
- Spring Boot
- Spring Data JPA
- Spring Security
- AWS SDK
기타 기술
No response
예상 작업 시간
- 1-2시간
- 3-4시간
- 5-8시간
- 1-2일
- 3-5일
우선순위
- 높음 (P0)
- 중간 (P1)
- 낮음 (P2)
예상 완료 일정
2025-12-18
아키텍처 고려사항
1. Hexagonal Architecture 적용
domain/cloud/
├── adapter/outbound/aws/cloudfront/
│ ├── AwsCloudFrontManagementAdapter.java # Distribution 생명주기 관리
│ ├── AwsCloudFrontDiscoveryAdapter.java # Distribution 조회
│ ├── AwsCloudFrontInvalidationAdapter.java # 캐시 무효화 관리
│ ├── AwsCloudFrontMapper.java # 도메인-AWS API 매핑
│ └── AwsCloudFrontErrorTranslator.java # AWS 에러 변환
├── port/outbound/cdn/
│ ├── CDNManagementPort.java # Distribution 생명주기 포트
│ ├── CDNDiscoveryPort.java # Distribution 조회 포트
│ └── CDNInvalidationPort.java # 캐시 무효화 포트
├── service/cdn/
│ ├── CDNPortRouter.java # 포트 라우팅
│ └── CDNUseCaseService.java # 유스케이스 서비스
└── controller/
└── CDNController.java # REST API 컨트롤러
2. CspCapability 등록
@PostConstruct
public void initializeCloudFrontCapabilities() {
CspCapability capability = CspCapability.builder()
.supportsStart(false) // CloudFront는 start/stop 개념 없음
.supportsStop(false)
.supportsTerminate(true) // Distribution 삭제 가능
.supportsTagging(true) // 태그 지원
.supportsListByTag(true) // 태그 기반 조회 지원
.build();
capabilityRegistry.register(
ProviderType.AWS,
"CloudFront",
"Distribution",
capability
);
}테스트 계획
1. 단위 테스트
-
Adapter 레이어 테스트
AwsCloudFrontManagementAdapter: Distribution CRUD 작업 테스트AwsCloudFrontMapper: 도메인 ↔ AWS SDK 모델 변환 테스트AwsCloudFrontErrorTranslator: AWS 예외 → 도메인 예외 변환 테스트
-
Service 레이어 테스트
CDNPortRouter: 포트 라우팅 로직 테스트CDNUseCaseService: 비즈니스 로직 테스트CloudResource저장/조회 로직 테스트
-
Controller 레이어 테스트
- REST API 엔드포인트 요청/응답 검증
- 유효성 검사 테스트
2. 통합 테스트
- AWS CloudFront 실제 API 호출 테스트 (테스트 계정 사용)
- Distribution 생명주기 전체 플로우 테스트
- 생성 → 조회 → 수정 → 삭제
- 퍼블릭 S3 Origin Distribution 테스트
- Custom Origin Distribution 테스트 (ELB, EC2 등)
- 캐시 무효화 생성 및 조회 테스트
- 에러 시나리오 테스트 (권한 오류, 리소스 없음 등)
관련 이슈
No response
제약사항
우선 퍼블릭 S3만 지원하도록 구현하고, 추후에 OAI 기능을 추가하면서 프라이빗 S3 지원 추가 필요
리스크
No response
성능 요구사항
No response
보안 고려사항
No response
비고
No response