IT

[AWS] 내맘대로 AWS Cloud 구축/설계하기(1)

뽀리님 2024. 11. 22. 23:16

요즘 갑자기 DevOps에 관심이 많아지며, 내가 여태까지 경험 했던 프로젝트들을 정리하며 리펙토링도 해보고자 끄적끄적하는글

 

나는 커머스부터 금융, 광고플랫폼등 다양한 프로젝트 경험이 있다. 그러다보니 초반엔 개발에만 집중했지만 후반에는 aws 클라우드 설계까지 참여하여 아키텍처 가이드라인 까지 잡게 되었는데

 

걔중에 하나를 예를 들어 정리해보려 한다.

 

✅  AD 통합마케팅 솔루션

→ 광고주들에게 여러 프로그램 관련하여 마케팅 정보를 제공하는 솔루션

 

✔️ 아키텍처 설계

 

  1. 프론트엔드 (Web & Admin):
    • Vue (Nuxt) 애플리케이션을 정적 사이트로 빌드하여 S3에 배포.
    • CloudFront를 사용하여 콘텐츠를 빠르고 안정적으로 제공 및 캐싱으로 비용절감
  2. 백엔드 (Spring Boot REST API):
    • Spring Boot 애플리케이션을 EC2 에서 운영.
    • RDS를 사용해 데이터 저장.(Read Replica)
  3. 보안:
    • VPC (Virtual Private Cloud) 내에 모든 리소스를 배치.
    • IAM을 통해 액세스 제어.
    • WAF(Web Application Firewall)로 API 보안 강화.
  4. CI/CD:
    • AWS CodeBuild를 사용하여 프론트엔드와 백엔드 배포 자동화.
  5. 모니터링 및 로깅:
    • CloudWatch 및 X-Ray를 통해 서비스 상태 모니터링.
    • S3와 CloudTrail로 로그 저장 및 분석.

 

대략 이런구성으로 설계했다.

 

사용자 
→ CloudFront (정적 리소스) 
→ S3 (Vue 정적 파일) 
→ Application Load Balancer (트래픽 분산) 
→ Auto Scaling 그룹 (EC2 - Spring Boot)
→ RDS (MySQL)

 

그렇게 큰 프로젝트는 아녔기에 간단하게 구성하였다.

 

 

 

✔️ 상세 설계

 

1) 프론트엔드 (Web & Admin)

  1. Nuxt.js 애플리케이션을 정적으로 빌드하여 S3 버킷에 업로드
  2. S3 버킷과 CloudFront를 연결하여 CDN으로 글로벌하게 서비스 제공 및 캐싱으로 비용절감
  3. SSL 인증서를 AWS Certificate Manager(ACM)를 통해 생성하고, CloudFront에 연결하여 HTTPS를 지원(ex. login,사용자인증)

2) 백엔드 (API 서버)

 

  • 로드 밸런싱:
    • **Application Load Balancer(ALB)**를 추가하여 트래픽을 EC2 인스턴스에 분산.
    • SSL 인증서를 연결하여 API 보안을 강화

 

  1. Spring Boot 애플리케이션 배포
    • EC2에서 Spring Boot를 실행(수동 관리).
      • Amazon Machine Image(AMI)로 EC2 생성.
      • Docker로 Spring Boot 컨테이너 배포.(를 하고싶었음)
      • Auto Scaling 그룹으로 확장성 확보.(추후 행사때 사용자가 많이 몰릴껄 염려)

3) 데이터베이스

  • RDS (MySQL):
    • Spring Boot 애플리케이션과 연동하여 데이터를 저장.
    • 읽기 전용 복제본(Read Replica) 설정으로 읽기 작업 분산.
    • 자동 백업(Automatic Backup) 및 스냅샷 활성화
  •  

4) 이미지 및 파일 관리

  • S3:
    • 광고 관련 이미지 및 홍보 pdf 파일을 저장.
    • CloudFront와 연동하여 빠르게 제공.

5) CI/CD

  • CodePipeline:
    • CodeCommit을 소스 저장소로 설정.
    • CodeBuild에서 프론트엔드(Nuxt) 및 백엔드(Spring Boot)를 빌드.
    • 빌드 후 S3 및 EC2로 배포
Source CodeCommit에서 Nuxt.js 소스 가져오기 CodeCommit에서 Spring Boot 소스 가져오기
Build Nuxt.js를 정적으로 빌드 후 dist 생성 Spring Boot 빌드 및 Docker 이미지 생성 후 ECR에 푸시
Deploy S3에 정적 파일 업로드 후 CloudFront 캐시 무효화 EC2에서 기존 Docker 컨테이너를 중지하고 새로운 컨테이너로 교체

 

6) 모니터링 및 로깅

  • CloudWatch:
    • EC2, RDS의 성능 및 로그 모니터링. -> 실제 우리는 와X 이라는 서비스를 계약하여 사용하였다.

 

성능 개선과 비용절감을 위해 서버리스 옵션(AWS Lambda) 같은 특정 이벤트는 요런걸 써서 절감할수 있을 거 같다.

실제로 완전히 이렇게똑같이 구성하진 않았지만, 대략적으로 이렇게 가이드 라인을 제공하였다.

 

  1.