내부 ALB + cloudfront 조합

jiyeong·2025년 5월 20일

질문에서 내부 ALB(Application Load Balancer) + CloudFront 조합과 외부 ALB(Internet-facing ALB)의 차이를 묻고, 포트폴리오에서 내부 ALB + CloudFront 구조를 선택한 합리적인 이유를 설명해야 한다고 하셨습니다. ECS 기반의 React 프론트엔드 앱을 배포하는 맥락에서, 두 아키텍처의 차이점을 비교하고, 내부 ALB + CloudFront를 선택한 이유를 포트폴리오에 설득력 있게 제시할 수 있도록 정리하겠습니다.

  1. 내부 ALB + CloudFront vs 외부 ALB: 차이점

특징 내부 ALB + CloudFront 외부 ALB
구성 내부 ALB(VPC 내부) + CloudFront(CDN, 공인 IP로 외부 접근 제공) 외부 ALB(공인 IP로 인터넷에서 직접 접근 가능)
접근 가능성 CloudFront를 통해 인터넷 사용자 접근 가능, ALB는 VPC 내부에서만 접근 인터넷에서 직접 접근 가능
DNS 연결 도메인을 CloudFront DNS 이름(예: d1234567890.cloudfront.net)에 연결 도메인을 ALB DNS 이름(예: loadbalancer-xxx.elb.amazonaws.com)에 연결
보안 내부 ALB는 외부 노출 없음, CloudFront에서 SSL 종료 및 WAF 통합 가능 외부 노출, 보안 그룹/WAF로 보호 필요
성능 CloudFront의 캐싱 및 글로벌 엣지 로케이션으로 빠른 콘텐츠 전송 ALB는 캐싱 없음, 단일 리전에서 트래픽 처리
비용 ALB(내부) + CloudFront 비용 발생, 캐싱으로 트래픽 비용 절감 가능 ALB(외부) 비용, 트래픽 증가 시 데이터 전송 비용 상승
유연성 기존 내부 ALB 유지, CloudFront로 외부 접근 추가 가능 ALB 자체를 외부로 설정, 추가 CDN 필요 시 별도 설정
세부 차이
아키텍처 구성:
내부 ALB + CloudFront: 내부 ALB는 VPC 내에서 ECS 클러스터(React 앱 컨테이너)에 트래픽을 분산하고, CloudFront가 외부 사용자 요청을 받아 내부 ALB로 라우팅. CloudFront는 정적 자원(HTML, CSS, JS)을 캐싱하고 글로벌 엣지 로케이션으로 전송.
외부 ALB: ALB가 공인 IP를 통해 직접 인터넷 요청을 받아 ECS 클러스터로 라우팅. 캐싱은 없으며, ALB가 모든 트래픽을 처리.
보안:
내부 ALB + CloudFront: 내부 ALB는 VPC 내부에 격리되어 외부 공격에 노출되지 않음. CloudFront에서 SSL(TLS) 종료 및 AWS WAF(Web Application Firewall)로 보안 강화 가능.
외부 ALB: 공인 IP로 외부에 노출되므로 보안 그룹 설정, WAF, DDoS 방어(AWS Shield) 필요.
성능 및 확장성:
내부 ALB + CloudFront: CloudFront의 엣지 로케이션으로 콘텐츠를 캐싱해 글로벌 사용자에게 낮은 지연 시간 제공. React 앱의 정적 자원 캐싱으로 ALB 부하 감소.
외부 ALB: 단일 리전에서 트래픽 처리, 캐싱 없으므로 트래픽이 많을 경우 지연 시간 증가 가능. CloudFront 추가 시 성능 향상 가능.
비용:
내부 ALB + CloudFront: 내부 ALB는 외부 트래픽 처리 비용이 낮고, CloudFront는 캐싱으로 데이터 전송 비용 절감. 하지만 CloudFront 자체 비용(요청 수, 데이터 전송량 기반) 발생.
외부 ALB: 외부 트래픽 처리로 데이터 전송 비용이 높아질 수 있음. 트래픽이 많을 경우 비용 증가.
유지보수:
내부 ALB + CloudFront: 기존 내부 ALB를 유지하며 CloudFront 추가로 설정 단순화. CloudFront 캐싱 설정 최적화 필요.
외부 ALB: 새 ALB 생성 및 ECS 서비스 업데이트 필요. 기존 내부 ALB 삭제 시 추가 작업 발생.
2. 내부 ALB + CloudFront를 선택한 합리적인 이유
포트폴리오에서 내부 ALB + CloudFront 구조를 선택한 이유를 설득력 있게 설명하려면, 기술적 장점, 비즈니스 요구사항, 비용 효율성, 보안 등을 강조해야 합니다. 아래는 포트폴리오에 포함할 수 있는 합리적인 이유들입니다.

(1) 보안 강화
이유: 내부 ALB는 VPC 내부에 격리되어 외부 공격(예: DDoS, 무단 접근)으로부터 보호됩니다. React 프론트엔드 앱은 CloudFront를 통해 외부에 노출되며, CloudFront의 AWS WAF와 Shield를 활용해 추가 보안 계층을 제공합니다.
포트폴리오 설명 예시:
"React 앱을 외부 사용자에게 안전하게 제공하기 위해 내부 ALB와 CloudFront를 조합했습니다. 내부 ALB는 ECS 클러스터를 VPC 내에서 격리해 보안을 강화하고, CloudFront는 SSL 종료와 WAF를 통해 외부 요청을 안전하게 처리합니다. 이를 통해 외부 노출을 최소화하면서도 안정적인 서비스 제공이 가능했습니다."

(2) 성능 최적화
이유: CloudFront는 글로벌 엣지 로케이션을 활용해 React 앱의 정적 자원(HTML, CSS, JS)을 캐싱, 사용자에게 낮은 지연 시간으로 콘텐츠를 제공합니다. 내부 ALB는 ECS 클러스터의 부하를 분산하며, CloudFront가 캐싱으로 ALB 트래픽을 줄여 성능을 최적화.
포트폴리오 설명 예시:
"CloudFront의 CDN 기능을 활용해 React 앱의 정적 자원을 전 세계 엣지 로케이션에 캐싱, 글로벌 사용자에게 빠른 로딩 속도를 제공했습니다. 내부 ALB는 ECS 클러스터의 동적 요청을 효율적으로 분산하며, 캐싱으로 ALB 부하를 줄여 성능과 확장성을 동시에 확보했습니다."

(3) 기존 아키텍처 재사용
이유: 기존 ECS 클러스터와 내부 ALB 설정을 그대로 유지하며 CloudFront만 추가해 외부 접근을 지원. 이는 기존 인프라 변경을 최소화하고, 빠르게 외부 서비스를 배포할 수 있게 함.
포트폴리오 설명 예시:
"기존 내부 ALB 기반 ECS 클러스터를 활용해 인프라 변경을 최소화했습니다. CloudFront를 추가해 외부 도메인 연결과 HTTPS를 구현, 빠르고 효율적인 배포를 달성했습니다. 이는 개발 시간 단축과 안정적인 전환을 가능하게 했습니다."

(4) 비용 효율성
이유: 내부 ALB는 외부 트래픽 처리 비용이 낮고, CloudFront의 캐싱은 데이터 전송 비용을 줄입니다. React 앱은 정적 자원이 많으므로 CloudFront 캐싱 효과가 크며, ALB 부하 감소로 EC2 인스턴스 사용량(오토스케일링)도 최적화.
포트폴리오 설명 예시:
"내부 ALB와 CloudFront 조합은 비용 효율성을 높였습니다. 내부 ALB는 외부 트래픽 비용을 줄이고, CloudFront는 정적 자원 캐싱으로 ALB 요청을 최소화해 EC2 인스턴스 사용량을 최적화했습니다. 이는 포트폴리오 프로젝트의 예산 제약 내에서 고성능 서비스를 제공하는 데 기여했습니다."

(5) 유연성과 확장성
이유: 내부 ALB는 ECS 오토스케일링과 통합되어 트래픽 증가 시 인스턴스를 동적으로 추가(최소 1개 → 최대 2개). CloudFront는 글로벌 확장성을 제공하며, 캐싱 설정 조정으로 다양한 트래픽 패턴에 유연하게 대응.
포트폴리오 설명 예시:
"내부 ALB는 ECS와 오토스케일링을 통해 트래픽 변동에 유연히 대응하며, CloudFront는 글로벌 엣지 로케이션으로 확장성을 강화했습니다. 이 조합은 포트폴리오 웹사이트의 다양한 사용자 트래픽을 안정적으로 처리하며, 미래 확장 가능성을 보장했습니다."

(6) 도메인 및 SSL 관리 용이성
이유: CloudFront는 Certbot으로 발급한 Let’s Encrypt 인증서를 ACM에 업로드해 쉽게 적용 가능. DNS 설정도 CloudFront DNS 이름으로 CNAME 연결, 관리 간단.
포트폴리오 설명 예시:
"CloudFront를 사용해 도메인 연결과 SSL 적용을 간소화했습니다. Certbot으로 발급한 Let’s Encrypt 인증서를 ACM에 통합, HTTPS를 빠르게 구현했습니다. 이는 사용자 신뢰를 높이고, 포트폴리오 사이트의 전문성을 강화했습니다."

  1. 포트폴리오에 포함할 합리적 이유 정리
    포트폴리오에서 내부 ALB + CloudFront 구조를 선택한 이유를 다음과 같이 요약할 수 있습니다:

"포트폴리오 웹사이트(React 기반)를 배포하기 위해 내부 ALB와 CloudFront를 조합한 아키텍처를 선택했습니다. 이 선택은 다음과 같은 이유로 합리적이었습니다:

보안: 내부 ALB는 VPC 내에서 ECS 클러스터를 격리해 외부 공격으로부터 보호, CloudFront의 WAF로 추가 보안 강화.
성능: CloudFront의 글로벌 캐싱으로 React 앱의 정적 자원을 빠르게 제공, ALB 부하 감소로 성능 최적화.
비용 효율성: 내부 ALB의 낮은 트래픽 비용과 CloudFront 캐싱으로 데이터 전송 비용 절감.
기존 인프라 활용: 기존 내부 ALB와 ECS 설정을 유지하며 CloudFront 추가로 빠른 전환.
유연성: ECS 오토스케일링과 CloudFront의 글로벌 확장성으로 다양한 트래픽 처리.
간단한 관리: CloudFront를 통한 도메인 연결과 Certbot 기반 SSL 적용으로 관리 용이. 이 아키텍처는 포트폴리오 프로젝트의 안정성, 성능, 비용 효율성을 충족하며, 전문적이고 사용자 친화적인 웹사이트를 제공했습니다."
4. 내부 ALB + CloudFront vs 외부 ALB: 포트폴리오 맥락
포트폴리오에서 React 앱을 배포하는 경우, 내부 ALB + CloudFront를 선택한 이유를 외부 ALB와 비교해 강조할 수 있습니다:

왜 내부 ALB + CloudFront를 선택했나?
보안 우선: 포트폴리오 웹사이트는 외부 노출이 필요하지만, 백엔드 API(예: 포트폴리오 데이터 조회)와의 통신은 VPC 내에서 안전하게 처리하고자 내부 ALB 유지.
성능 최적화: React 앱의 정적 자원은 캐싱이 중요하므로, CloudFront로 글로벌 사용자에게 빠른 응답 제공.
비용 고려: 포트폴리오 프로젝트는 예산이 제한적일 가능성이 높으므로, 내부 ALB + CloudFront로 비용 절감.
설정 단순화: 기존 내부 ALB를 재사용해 빠르게 배포, CloudFront 추가로 외부 접근 구현.
외부 ALB를 선택하지 않은 이유:
외부 ALB는 공인 IP로 노출되어 추가 보안 설정(예: WAF, Shield) 필요.
React 앱은 정적 자원이 많아 캐싱이 중요하나, 외부 ALB는 캐싱 기능 없음(CloudFront 추가 시 비용 중복).
새 ALB 생성 및 ECS 서비스 업데이트로 설정 복잡성 증가.
5. 설정 예시 (포트폴리오 참고용)
포트폴리오에서 기술적 세부사항을 보여주기 위해 내부 ALB + CloudFront 설정의 간단한 예시를 포함할 수 있습니다:

내부 ALB:
DNS: internal-loadbalancer-47680965.ap-northeast-3.elb.amazonaws.com
ECS 타겟 그룹: React 앱 컨테이너(포트 80 또는 3000).
오토스케일링: 최소 1개, 최대 2개 EC2 인스턴스.
CloudFront:
Origin: 내부 ALB DNS 이름.
Alternate Domain Names: example.com, www.example.com.
SSL: Certbot으로 발급한 Let’s Encrypt 인증서를 ACM에 업로드(us-east-1).
Cache Behavior: SPA 설정, 모든 요청을 /index.html로 라우팅.
DNS:
CNAME: www.example.com → d1234567890.cloudfront.net.
Route 53(선택): A 레코드 Alias로 CloudFront 연결.
Certbot:
bash

Copy
sudo certbot certonly --dns-route53 -d example.com -d www.example.com
aws acm import-certificate --certificate fileb:///etc/letsencrypt/live/example.com/cert.pem --private-key fileb:///etc/letsencrypt/live/example.com/privkey.pem --certificate-chain fileb:///etc/letsencrypt/live/example.com/chain.pem --region us-east-1
6. 포트폴리오 팁
기술적 깊이: 아키텍처 다이어그램(AWS 아이콘 사용, 예: Lucidchart, Draw.io)을 포함해 내부 ALB, ECS, CloudFront, DNS 흐름 설명.
결과 강조: 성능(예: 로딩 시간 감소), 비용 절감, 안정성(오토스케일링으로 트래픽 처리) 등 구체적 성과 언급.
문제 해결: 내부 ALB의 외부 접근 제한 문제를 CloudFront로 해결한 과정 설명.
코드/스크립트: Certbot 자동화 스크립트, CloudFormation 템플릿, DNS 설정 예시 포함.
7. 결론
내부 ALB + CloudFront는 보안, 성능, 비용 효율성, 기존 인프라 재사용 측면에서 포트폴리오 React 앱 배포에 적합한 선택입니다. 외부 ALB는 도메인 연결이 간단하지만, 캐싱 없음과 외부 노출로 인한 보안 관리 부담이 있습니다. 포트폴리오에서 위의 이유(보안, 성능, 비용, 유연성)를 강조하면 설득력 있는 설명이 될 것입니다.

추가로 포트폴리오에 포함할 구체적인 문구나 다이어그램, 설정 세부사항이 필요하면 말씀해 주세요!

profile
꿈꾸는 개발자

0개의 댓글