Skip to content

[FEATURE] 멀티 클라우드 자원 생명주기 DB 동기화 구현 #169

@moonhyeonmin

Description

@moonhyeonmin

📌 개요

멀티 클라우드(AWS, Azure, GCP 등) 통합 관리 플랫폼에서 UseCase 서비스가
각 CSP의 자원 작업을 수행한 후 CloudResource 엔티티를 DB에 동기화하는 기능을 구현합니다.

🎯 목표

  • CSP 독립적인 자원 생명주기 관리 (Provider-Agnostic)
  • 다양한 클라우드 프로바이더(AWS, Azure, GCP 등)의 자원을 단일 DB에서 통합 추적
  • UseCase 레벨에서 CSP 작업 + DB 저장을 트랜잭션으로 관리

📂 영향 범위

1. Repository 메서드 추가 (CloudResourceRepository.java)

메서드 설명
Optional<CloudResource> findOptionalByResourceId(String resourceId) 리소스 ID로 조회 (Optional 반환)
boolean existsByResourceId(String resourceId) 리소스 존재 여부 확인
List<CloudResource> findByResourceType(ResourceType type) 리소스 타입별 조회
List<CloudResource> findByProviderProviderType(ProviderType type) 프로바이더별 조회
List<CloudResource> findByTenantKeyAndResourceType(String tenantKey, ResourceType type) 테넌트 + 리소스 타입별 조회
List<CloudResource> findByLifecycleStateNotIn(List<LifecycleState> excludeStates) 특정 상태 제외 조회 (동기화용)
@Modifying updateLifecycleState(String resourceId, LifecycleState state, LocalDateTime timestamp) 생명주기 상태 업데이트
@Modifying softDeleteByResourceId(String resourceId) 소프트 삭제 처리

2. UseCase 서비스 수정

VmUseCaseService.java

  • createInstance(): CSP 인스턴스 생성 후 CloudResource 저장
  • startInstance(): CSP 시작 후 lifecycleState → RUNNING
  • stopInstance(): CSP 중지 후 lifecycleState → STOPPED
  • rebootInstance(): CSP 재부팅 후 상태 업데이트
  • terminateInstance(): CSP 종료 후 lifecycleState → TERMINATED
  • deleteInstance(): CSP 삭제 후 소프트 삭제

ObjectStorageUseCaseService.java

  • createContainer(): 버킷/컨테이너/블롭 생성 후 CloudResource 저장
  • deleteContainer(): 삭제 후 소프트 삭제

VpcUseCaseService.java

  • VPC/VNet/Network 생성/삭제 시 CloudResource 저장/삭제

✅ 체크리스트

Repository

  • CloudResourceRepository에 멀티 CSP 조회 메서드 추가
  • 프로바이더 타입별 필터링 쿼리 구현
  • @Modifying, @Transactional 적절히 적용

UseCase 서비스

  • VmUseCaseService CSP 작업 후 DB 저장 (Provider-Agnostic)
  • ObjectStorageUseCaseService DB 저장 로직 추가
  • VpcUseCaseService DB 저장 로직 추가
  • CSP 작업 실패 시 DB 롤백 처리

테스트

  • Repository 단위 테스트 (다양한 ProviderType으로)
  • UseCase 서비스 통합 테스트
  • CSP 작업 실패 시 롤백 테스트

📝 참고사항

  • 멀티 클라우드 통합 관리 플랫폼 (AWS, Azure, GCP 등)
  • 단일 데이터베이스에서 모든 CSP 자원 통합 관리
  • CloudProvider.ProviderType으로 CSP 구분
  • CSP별 Adapter는 Port 인터페이스를 구현하여 교체 가능

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions