※ 기존에 기록해둔 노션 글을 옮겨적은 것으로, 노션 템플릿에 맞게 적게된 글이라 해당 링크를 통해 더 가독성있게 보실 수 있습니다.
https://www.notion.so/ECS-EC2-Fargate-EC2-2690661ce6288002b649e41cce173d12
ECS(EC2, Fargate)로 백엔드 애플리케이션 배포하기 + 기본 EC2배포까지 | Notion
1. 각각에 넣을 보안그룹 생성하기( ALB, Gateway Server, ECS )
pleasant-sand-55a.notion.site
ECS - ECR 세팅과정을 담았습니다. CICD 적용 전이라 나중에 조금씩 세팅이 바뀔 수 있습니다.
1. 각각에 넣을 보안그룹 생성하기( ALB, Gateway Server, ECS )
ELB에는 NLB와 ALB 등이 있는데 ALB를 선택한 이유는 한 번 따로 찾아봐주시길 바랍니다! 외부 클라이언트 → ALB 요청을 조건에 따라 허용하는 보안그룹을 설정하겠습니다.
전체적인 흐름은 다음과 같습니다.
[클라이언트]
↓ 443
[ALB] ───── SG A ───────▶ 포트 8090
↓
[게이트웨이 EC2] ───── SG B ─────▶ 포트 8080–8093
↓
[ECS 서비스들] ───── SG C
1-1) ALB 보안그룹 생성


1-2) Gateway server 보안그룹 생성
Gateway server용 보안그룹은 ALB → Gateway server의 통신을 허용하는 역할이라서 ALB 보안 그룹에서 오는 트래픽만 허용하겠습니다.

+)

💡 왜 80이 아니라 80XX(ex : 8090)를 쓰는 이유
: 운영 환경에서의 역할 구분과 포트 충돌 방지를 위해서 씁니다.
포트 번호 용도 설명
| 80번 | 공식 HTTP 표준 포트 | 브라우저가 기본으로 연결함 (http://example.com) |
| 443번 | 공식 HTTPS 표준 포트 | TLS 기반 HTTPS |
| 80XX번 | 개발용/비표준 HTTP 포트 | 앱 내부 통신, 리버스 프록시 뒤의 서버 등 |
⇒ 80포트는 ALB에서 이미 점유하고 있어서 게이트웨이나 내부 서버에서는 내부 포트를 따로 둬야 함
⇒ 서비스 간 내부 라우팅은 명시적으로 포트 분리를 선호합니다.
예) 게이트웨이 → user-service: 8081, 게이트웨이 → recipe-service: 8082..
→ 이렇게 포트를 나눠야 서비스별 라우팅이 명확합니다.
[ 우리 서버 포트 참고 자료 ] 레시핑 서비스별 포트번호 정리
1-3) ECS 보안그룹 생성
ECS용 보안그룹은 Gateway Server → ECS Task의 통신을 허용하는 역할이라서 Gateway Server 보안 그룹에서 오는 트래픽만 허용하겠습니다.


1-4) alb, gateway 보안 그룹 다시 수정하기





결과 :
| 보안그룹 | 인바운드 | 아웃바운드 |
| ALB (A) | 80/443 from 0.0.0.0/0(cloudfront 적용하면 수정할 것임) | To Security Group B |
| Gateway (B) | 8080 from SG A / SSH from SG bastion | To SG C |
| ECS (C) | 8080 from SG B | 외부 통신용 (S3 등) or 제한 가능 |
2. ALB에 붙일 대상그룹 생성하기



- [ 프로토콜 : 포트 ] : (1) HTTPS는 ALB가 처리하고 여기선 내부 통신이므로 HTTP 선택 (내부통신은 HTTPS 불필요, ALB가 SSL 처리함) (2) 게이트웨이 서버 내부 포트인 8090 추가
- [ 프로토콜 버전 ] :
| 버전 | 설명 | 사용 추천 상황 |
| HTTP1 | 대부분의 Spring, Express, Nginx 서버는 기본적으로 HTTP/1.1 | 현재 환경에 가장 안정적 |
| HTTP2 | 요청 다중화 지원. 하지만 서버가 지원 안 하면 연결 실패 | Spring Boot, Nginx 기본은 HTTP1을 씁니다. |
| gRPC | gRPC 프로토콜 전용 | 일반 HTTP 서비스에서는 사용하지 않음 |




3. HTTPS 연결을 위한 ACM 인증서 발급하기
CloudFront, ALB, API Gateway 등을 사용하는 AWS 네이티브 아키텍처일 때 ACM(=SSL인증서)을 씁니다. HTTPS는 암호화된 통신이라 브라우저가 https://api.reciping.kr로 접속하면, "SSL Handshake"라는 걸 하면서 ACM을 통해 “정말 reciping.kr 도메인을 너가 소유한 거 맞는지” AWS가 검증해야 하기 때문에 씁니다. 이것은 자동으로 인증서를 갱신하고 콘솔이나 테라폼으로 관리도 가능하며, AWS 서비스들과 연동이 편하고, 인증서 프라이빗 키가 AWS 내부에서만 저장되어서 보안성이 높습니다. 그리고 퍼블릭 인증서는 공짜입니다.
3-1) 인증서 발급하기



3-2) Route 53에 DNS 레코드 추가하기
Route 53을 통해 도메인 소유자임을 DNS로 인증하는 과정





'Project > reciping' 카테고리의 다른 글
| [reciping] 프론트단의 Route53 + S3 + CloudFront 설정하기 (0) | 2025.11.05 |
|---|---|
| [reciping] ECS(EC2, Fargate)로 백엔드 애플리케이션 배포하기 + 기본 EC2배포까지 (2) (0) | 2025.11.05 |
| [reciping] 베스천 서버 세팅하기 (0) | 2025.11.05 |
| [reciping] 기본 EC2 배포하기(Gateway Server) (0) | 2025.11.05 |
| [reciping] VPC 생성하기 (0) | 2025.11.05 |