[aws] https 적용기 2탄 : EC2와 로드밸런서를 활용한 HTTPS 적용 및 클라우드프론트 통합
Categories: cloud
📌 개인적인 공간으로 공부를 기록하고 복습하기 위해 사용하는 블로그입니다.
정확하지 않은 정보가 있을 수 있으니 참고바랍니다 :😸
[틀린 내용은 댓글로 남겨주시면 복받으실거에요]
AWS EC2와 로드밸런서를 활용한 HTTPS 적용 및 클라우드프론트 통합
앞서 HTTPS를 S3와 CloudFront를 통해 적용했다면, 이번에는 서버(EC2)와 클라이언트 간 HTTPS 통신을 설정하고, 이를 최적화하기 위한 로드밸런서 및 CloudFront 설정을 진행해야 한다.
또한, CloudFront 배포 전략을 통해 최적화된 웹 애플리케이션 환경을 구축할 예정.
1. EC2 대상 그룹 생성
1.1 대상 그룹 생성
- EC2 > 대상 그룹 > 대상 그룹 생성으로 이동합니다.
-
대상 유형과 대상 그룹 이름을 선택합니다.
1.2 Health Check 설정
-
서버의
/health
경로를 상태 검사의 경로로 지정한다.-
서버 controller에 method가 없으면 추가해주어야 함.
1 2 3 4 5 6 7 8 9 10 11 12 13
package com.springboot.helper; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HealthCheckController { @GetMapping("/health") public ResponseEntity<String> healthCheck() { return ResponseEntity.ok("OK"); } }
-
-
초기에는 Health Check 간격을 짧게 설정(예: 5초)하여 빠르게 상태를 확인한 후, 정상 동작이 확인되면 300초로 변경하여 비용을 절감할 수 있다.
1.3 대상 등록
-
EC2 인스턴스를 대상 그룹에 등록합니다.
2. 로드밸런서 생성 및 설정
-
EC2 > 로드밸런서 > 로드밸런서 생성으로 이동
- 로드밸런서 이름을 설정
-
가용 영역(4개)을 모두 선택
- EC2와 동일한 보안 그룹(launch-wizard-4)을 설정하여 네트워크 연결을 통합 관리한다.
- 리스너 및 라우팅
- HTTP와 HTTPS를 리스너로 설정
- HTTPS 리스너에 서울 리전에서 발급받은 인증서를 등록 (즉, 버지니아북부와 서울(= EC2와 같은 지역) 2개의 인증서를 발급 받아야 함)
3. CloudFront와 로드밸런서 연동
3.1 CloudFront에서 새로운 배포 생성
-
원본 설정: 오리진을 S3가 아닌 로드밸런서로 설정
-
캐시 설정
- 로드밸런서는 서버 요청에 대한 것이기 때문에 허용 HTTP 메서드를 서버에 맞게 지정해준다.
- API 요청(
/api/*
): 캐시 비활성화(CachingDisabled). - 정적 파일 요청(
/*
): 기본 캐싱 설정.
-
방화벽 및 설정 구성
- 보안 보호 비활성화하여 비용을 절감하고
- 대체도메인에 서버에 대한 도메인을 지정해준다.
- 버지니아 북부에 등록된 인증서 선택하기
4. Route53 레코드 생성
- Route53 > 호스팅 영역 > 레코드 생성으로 이동
- 별칭을 활성화하고, CloudFront 배포를 대상으로 설정
5. CloudFront 배포 전략: 단일 vs 이중
5.1 CloudFront 단일 배포
- 정적 파일과 API 요청을 하나의 배포에서 처리
/api/*
요청은 로드밸런서로, 그 외는 S3로 라우팅- 장점
- 관리가 간단하고 비용 절감 가능
- 단일 도메인으로 통합(
example.com
)- 단점
- 경로 설정의 복잡성
- 특정 원본에 트래픽 집중 시 성능 저하 가능
5.2 CloudFront 이중 배포
- 첫 번째 배포: S3를 원본으로 설정(정적 파일)
- 두 번째 배포: 로드밸런서를 원본으로 설정(API 요청)
- 장점
- 역할 분리가 명확하여 디버깅이 쉬움
- 각 배포의 정책 및 확장성 관리 가능
- 단점
- 설정 및 유지보수 복잡
- 비용 증가
https 적용하는데 제대로 된 매뉴얼이 없어서 여기저기 참고하다 보니 뒤죽박죽 섞여서 처음에 고생을 많이 했다. 그래서 다음에는 헷갈리지 않으려고 과정을 저장해두었고, 한번도 배포는 해보지 않았는데 배포부터 적용까지 하니 뭔가 뿌듯!@ 이제 부가적으로 해야할 것 정리해서 개선해봐야지
Leave a comment