-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
Description
상위 UserStory
Feature 제목
AWS ElastiCache 연동
Feature 설명
AWS ElastiCache를 AgenticCP 플랫폼에 연동하여 사용자가 인메모리 캐시 클러스터를 생성, 조회, 수정, 삭제할 수 있도록 합니다. ElastiCache는 Redis와 Memcached를 지원하는 인메모리 캐싱 서비스로, 데이터베이스 쿼리 결과 캐싱, 세션 스토어, 실시간 데이터 처리 성능 향상 등에 활용됩니다. 본 Feature는 ElastiCache 클러스터의 전체 생명주기를 관리하는 핵심 기능을 제공합니다.
주요 기능
- ElastiCache 클러스터 생성
- Redis/Memcached 엔진 선택 지원
- 노드 타입 및 개수 설정
- 파라미터 그룹 설정 (기본/커스텀)
- 태그 설정 포함
- VPC 서브넷 그룹 연동
- ElastiCache 클러스터 조회 (단건/목록)
- 클러스터 상태 정보 포함 (creating, available, modifying, deleting)
- 엔드포인트 정보 포함 (접속 주소)
- ElastiCache 클러스터 수정
- 노드 개수 조정 (스케일링)
- 파라미터 그룹 변경
- 태그 수정 포함
- ElastiCache 클러스터 삭제
- 최종 스냅샷 생성 옵션 (Redis만 지원)
API 엔드포인트
- POST /api/v1/clouds/{cloudAccountId}/inmemory-caches
- 클러스터 생성 (엔진, 노드, 파라미터, 태그 포함)
- GET /api/v1/clouds/{cloudAccountId}/inmemory-caches
- 클러스터 목록 조회 (상태 정보 포함)
- GET /api/v1/clouds/{cloudAccountId}/inmemory-caches/{cacheClusterId}
- 클러스터 상세 조회 (상태, 엔드포인트, 노드 정보 포함)
- PUT /api/v1/clouds/{cloudAccountId}/inmemory-caches/{cacheClusterId}
- 클러스터 수정 (노드 개수, 파라미터, 태그 수정 포함)
- DELETE /api/v1/clouds/{cloudAccountId}/inmemory-caches/{cacheClusterId}
- 클러스터 삭제 (최종 스냅샷 옵션 포함)
데이터 모델
- Entity: CloudResource (공통 엔티티 사용)
- DTO: InMemoryCacheClusterCreateRequest (engine, nodeType, numNodes, tags 포함), InMemoryCacheClusterUpdateRequest (numNodes, parameterGroup, tags 포함), InMemoryCacheClusterResponse (status, endpoint, properties 포함)
- 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-19
아키텍처 고려사항
1. Hexagonal Architecture 적용
domain/cloud/
├── adapter/outbound/aws/elasticache/
│ ├── AwsElastiCacheManagementAdapter.java # 클러스터 생명주기 관리
│ ├── AwsElastiCacheDiscoveryAdapter.java # 클러스터 조회
│ ├── AwsElastiCacheMapper.java # 도메인-AWS API 매핑
│ └── AwsElastiCacheErrorTranslator.java # AWS 에러 변환
├── port/outbound/inmemorycache/
│ ├── InMemoryCacheManagementPort.java # 클러스터 생명주기 포트
│ └── InMemoryCacheDiscoveryPort.java # 클러스터 조회 포트
├── service/inmemorycache/
│ ├── InMemoryCachePortRouter.java # 포트 라우팅
│ └── InMemoryCacheUseCaseService.java # 유스케이스 서비스
└── controller/
└── InMemoryCacheController.java # REST API 컨트롤러
2. CspCapability 등록
@PostConstruct
public void initializeElastiCacheCapabilities() {
CspCapability capability = CspCapability.builder()
.supportsStart(false) // ElastiCache는 start/stop 개념 없음 (reboot만 가능)
.supportsStop(false)
.supportsTerminate(true) // 클러스터 삭제 가능
.supportsTagging(true) // 태그 지원
.supportsListByTag(true) // 태그 기반 조회 지원
.build();
capabilityRegistry.register(
ProviderType.AWS,
"ElastiCache",
"CacheCluster",
capability
);
}테스트 계획
단위 테스트
-
Adapter 레이어 테스트
- AwsElastiCacheManagementAdapter: 클러스터 CRUD 작업 테스트
- AwsElastiCacheMapper: 도메인 ↔ AWS SDK 모델 변환 테스트
- AwsElastiCacheErrorTranslator: AWS 예외 → 도메인 예외 변환 테스트
-
Service 레이어 테스트
- InMemoryCachePortRouter: 포트 라우팅 로직 테스트
- InMemoryCacheUseCaseService: 비즈니스 로직 테스트
- CloudResource 저장/조회 로직 테스트
관련 이슈
No response
제약사항
1. AWS ElastiCache 제약사항
- 클러스터 삭제 전 연결된 리소스 확인 필요
- 클러스터 수정 시 재부팅 필요한 파라미터 있음 (다운타임 발생)
- Memcached는 스냅샷 미지원 (Redis만 스냅샷 가능)
- VPC 내부에만 생성 가능 (Subnet Group 필수)
- 일부 노드 타입은 특정 리전에서만 사용 가능
2. 기술적 제약사항
- 클러스터 상태 변경 완료까지 수분~수십분 소요 (비동기 처리)
- 노드 개수 조정 시 서비스 중단 가능성 (Redis Cluster Mode는 중단 없음)
- JSONB 필드 제약: properties와 status는 항상 유효한 JSON 문자열이어야 함
- 직렬화/역직렬화 오버헤드: 대량 조회 시 성능 고려 필요
3. 비즈니스 제약사항
- 사용자의 AWS 계정에 ElastiCache 권한 필요
- ElastiCache 서비스 한도 고려 필요 (클러스터 수, 노드 수 제한 등)
- VPC와 Subnet Group이 미리 생성되어 있어야 함
리스크
No response
성능 요구사항
No response
보안 고려사항
No response
비고
No response