TIL - 20251009

juni·2025년 10월 8일

TIL

목록 보기
148/316

1009 AWS 배포 아키텍처 총정리 : 서비스 제공과 최적화


✅ 1. 고가용성 및 탄력성 확보: ELB와 Auto Scaling

  • 구축된 인프라 위에서 애플리케이션이 장애와 트래픽 변동에 자동으로 대응하도록 만드는 핵심 서비스 조합입니다.
  1. ELB (Elastic Load Balancing):

    • 역할: 들어오는 트래픽을 여러 EC2 인스턴스에 자동으로 분산하고, 헬스 체크를 통해 장애가 발생한 인스턴스를 격리하여 고가용성을 확보합니다.
    • 배치: 외부 사용자와 직접 통신해야 하므로 퍼블릭 서브넷에 배치됩니다.
  2. EC2 Auto Scaling:

    • 역할: CPU 사용률과 같은 지표를 모니터링하여, 정의된 조정 정책에 따라 EC2 인스턴스의 수를 자동으로 늘리거나 줄여 탄력성을 제공합니다.
    • 구성: 시작 템플릿으로 인스턴스의 설계도를 정의하고, Auto Scaling 그룹으로 인스턴스 그룹의 최소/최대/원하는 용량을 관리합니다.
  • 시너지: ELB와 Auto Scaling을 함께 사용하면, 트래픽이 몰릴 때 Auto Scaling이 인스턴스를 늘리고 ELB가 이를 자동으로 트래픽 분산 대상에 추가하여, 사람의 개입 없이도 안정적인 서비스를 제공하는 자가 치유(Self-healing) 아키텍처가 완성됩니다.

✅ 2. 프론트엔드 콘텐츠 전송 최적화: S3와 CloudFront

  • React와 같은 정적 파일 기반의 SPA를 전 세계 사용자에게 빠르고 안전하게 전달하기 위한 표준 아키텍처입니다.
  1. S3 (Simple Storage Service):

    • 역할: npm run build로 생성된 React의 정적 파일(HTML, CSS, JS)을 저장하는 원본(Origin) 저장소 역할을 합니다.
    • 보안: 정적 웹사이트 호스팅 옵션을 활성화하되, 버킷 자체는 비공개로 두고 CloudFront를 통해서만 접근하도록 버킷 정책을 설정하는 것이 가장 안전합니다.
  2. CloudFront (CDN 서비스):

    • 역할: 전 세계에 분산된 캐시 서버(Edge Location)에 S3의 콘텐츠를 미리 복사해두고, 사용자가 접속했을 때 가장 가까운 캐시 서버에서 콘텐츠를 전달하여 전송 속도를 획기적으로 개선합니다.
    • SPA 라우팅 처리: React Router를 사용하는 SPA에서 발생하는 404 에러를 방지하기 위해, 모든 에러 요청을 index.html로 리다이렉트하는 커스텀 에러 설정을 추가해야 합니다.

✅ 3. 최종 연결 및 보안: Route 53과 ACM

  • 모든 인프라를 사용자가 실제로 사용하는 도메인에 연결하고, 통신을 암호화하는 마지막 단계입니다.
  1. ACM (AWS Certificate Manager):

    • HTTPS 통신에 필수적인 무료 SSL/TLS 인증서를 발급받습니다.
    • 중요: ALB나 CloudFront에 적용할 인증서는 반드시 버지니아 북부(us-east-1) 리전에서 발급받아야 합니다.
  2. Route 53 (DNS 서비스):

    • 역할: mydomain.com과 같은 도메인 요청을 적절한 AWS 리소스(ALB, CloudFront)로 연결해주는 교통경찰입니다.
    • 백엔드 연결: api.mydomain.comA 레코드 (별칭)ALB DNS 이름
    • 프론트엔드 연결: mydomain.comA 레코드 (별칭)CloudFront 배포 도메인 이름

📌 최종 아키텍처 흐름

  • 백엔드: 사용자Route 53 (api.mydomain.com)ALB (HTTPS 처리)EC2 Auto Scaling GroupEC2 인스턴스RDS

  • 프론트엔드: 사용자Route 53 (mydomain.com)CloudFront (CDN 캐시 & HTTPS)S3 버킷

  • 이러한 아키텍처를 통해, 백엔드와 프론트엔드가 독립적으로 배포되고 확장될 수 있으며, 보안, 고가용성, 성능을 모두 고려한 현대적인 클라우드 네이티브 애플리케이션을 구축할 수 있습니다.

0개의 댓글