
🥳 현재 자동으로 EC2로 배포가 되도록 간단히..? CI/CD를 설정해 두었습니다.
이번 포스트에서는 도메인을 구입하고 ip가 아니라 도메인 주소로 배포된 서버로 접속할 수 있도록 연결해 보도록 하겠습니다.
현재의 public IP로 접속을 해봅시다.

- 다음과 같이 사이트에 연결할 수 없다고 출력이 나올 것입니다.
💡 왜일까요?
Public IP를 그냥 그대로 검색을 하게 되면 Http 요청으로 EC2의 80 포트로 들어오게 됩니다. 하지만, 저희의 Spring Application은 8080 포트에서 돌아가고 있습니다.
따라서, 80 포트로 요청이 들어오게 돼도 8080 포트로 요청을 넘겨줄 수 있는 웹 서버가 없기 때문입니다.
그렇다면 8080으로 직접 접속하면 접속이 되겠군요? -> 맞습니다.

- 실습을 그대로 따라오셨다면 8080 포트는 EC2 보안 그룹에서 열어주지 않았기 때문에 열어주시고요...

- 포트 번호를 붙여서 IP주소를 입력하게 되면? 익숙한 페이지가 보이게 됩니다.
✅ 개요
위에 설명한 것에 이어서 이제 어떻게 진행이 될 것인지 개요를 말씀드리겠습니다.
예를 들어서,
도메인을 구입해서 도메인과 연결을 했다고 가정하겠습니다.
http://www.potato-farm.com으로 검색을 하게 되면 -> Public Ip의 80포트로 요청이 들어오게 됩니다.
그런데? 그곳에서는 저희의 Application이 돌아가고 있지 않습니다.
따라서 80포트로 요청이 들어오게 되어도 8080포트로 넘겨주는 Reverse Proxy(클라이언트의 요청을 WAS로 넘겨주는) 역할을 해줄 중개자가 필요합니다. (어떤 웹사이트에 접속할 경우 http://www.potato-farm.com:8080 이렇게 포트를 붙여서 접속하지 않죠 보통..)
오늘 진행할 부분은 AWS의 로드 밸런서로 Https를 적용하는 부분과 EC2 내부의 80 포트로 요청이 들어왔을 경우 Nginx를 이용해서 8080 포트로 Reverse Proxy 해주는 부분으로 나눠집니다 (참고로 Nginx도 Https 적용이 가능하긴 합니다).
1️⃣ 먼저 어떻게 Https가 구현되는지 간단히 설명하겠습니다(로드 밸런서에서 해줄 역할).
(중요) 이는 요청이 EC2 내부로 들어오기 전의 요청을 처리해줍니다.
http://www.potato-farm.com으로 접속으로 하면 80포트로 요청이 오게 되겠죠?
설정 1: 80포트로 들어온 요청은 443 포트로 리다이렉션 해준다.
https://www.potato-farm.com으로 접속하면 443 포트로 요청이 오게 되겠죠 ?
따라서, 현재 EC2의 443 포트에는 80 포트로 와서 리디렉션 된 요청들과 처음부터 https로 들어온 요청들이 들어오게 됩니다.
설정 2: 443 포트로 들어온 요청은 보안작업이 이루어진 후 HTTP 요청으로 EC2의 80 포트로 보내집니다.
이렇게 두 개의 설정을 하게 되면 Http로만 접속할 수 있도록 설정이 완료되는 겁니다..!
(Http 접속도 허용하고 싶다면 80포트에서 바로 EC2의 80포트로 보내주면 되겠죠?)
2️⃣ 이제 EC2 내부로 HTTP 80 요청이 들어왔습니다.
이제 Nginx가 80 포트로 들어온 요청을 8080 포트로 Reverse Proxy 해줍니다.
😥 자, 이제 시작해 보겠습니다.
✅ 도메인 구매 및 EC2 연결
우선 Route 53에서 직접 구매하셔도 되고 다른 도메인 사이트를 사용하셔도 되지만, 저는 가비아에서 구매하겠습니다.

- 아무거나 골라주세요 .com 이나 co.kr은 비싸니까 저는 .shop으로 하겠습니다..

- 1년만 결제해야 할인된 가격이니 꼭 1년으로 해주시고요 ( 다음 연도 추가 결제는 가비아에서 물어본다고 합니다 걱정 no)
- 그대로 쭉쭉 결제까지 해주세요!

- 서비스 관리에 들어오면 구매한 도메인이 보입니다 (바로 들어오진 않고 조금 기다려야 합니다).

- 이제 AWS에서 Route 53으로 가주세요.

- 접속 후 호스팅 영역을 생성해 주세요.

- 호스팅 영역을 생성해 주세요.

- 성공적으로 생성이 되었습니다.

- A 레코드를 하나 만들어줍시다 레코드 생성을 눌러주세요.

- 값에 EC2의 public IP를 써줍니다.

- CNAME 레코드도 하나 만들어 주시고 레코드 이름에는 www, 레코드 값에는 www를 제외한 주소를 써주세요.
- 이렇게 하면 그냥 도메인명으로 접속하는 것도 가능하고 www. 도메인명도 접속이 가능하게 됩니다.

- 저기 주소 4개를 가비아 DNS에 등록해주어야 합니다.

- 가비아로 돌아와서 아까 구매한 도메인의 관리탭으로 들어와 줍니다.
- 네임 서버 설정을 눌러주세요 (어떤 보안?이 걸려 있다면 절차에 따라서 풀어주세요)
- 각 주소마다 끝 부분의. (마침표)를 제거하고 4개를 모두 입력해서 등록해 주세요.

- 적용을 완료하고 바로 도메인이 사용 가능한 것이 아니라 일정 시간이 걸린다고 합니다. 짧게는 몇 분 길게는 2일까지도 걸릴 수 있습니다. 저는 한 10분 걸렸던 것 같습니다.
//아래 주소에서 내 도메인의 전파 현황을 확인하세요.
https://www.whatsmydns.net/#NS/(도메인 이름)

- 등록이 완료되면 다음과 같이 8080 포트로 접속 시 was 서버에 접속이 됩니다.
✅ SSL 인증서 발급받기
일단 로드 밸런서 대상 그룹에 public subnet 두 개가 필요하기 때문에...? VPC에서 Public Subnet을 하나 더 만들어 주도록 하겠습니다. RDS에서도 Subnet 두개가 필요했는데 처음부터 Public 2개 Private 2개를 만들걸 그랬네요....

- 이 상태에서 2d를 하나 만들어 주면 되겠네요..

- 이전에도 만들었듯이 그냥 만들면 되고요...
- 만들자 마자는 라우팅 테이블이 private으로 연결되길래 public으로 되도록 수정해 주었습니다.

- 완료되었습니다.

- ACM에서 SSL인증서를 발급받아야 합니다.

- 인증서 요청을 눌러주시고요.

- 퍼블릭 인증서를 선택해 주세요.

- www와 www 없는 버전 두 개를 도메인 이름에 입력해 주세요.

- 인증서는 조금만 기다리시면 발급됩니다. 인증서 ID를 눌러서 들어가 주세요.

- 이곳에서 Route 53에서 레코드 생성을 눌러주세요.

- 두 개 모두 레코드를 발급해 주시고 SSL 인증서가 발급된 것을 확인한 이후 넘어가 주세요.
✅ 로드 밸런서 적용하기

- EC2 메뉴에서 로드 밸런서를 눌러주세요.

- 가장 좌측의 Application Load Balancer를 눌러주세요.

- 이름만 자유롭게 만들어 주시면 됩니다.

- 현재 EC2를 띄워둔 VPC와 Public Subnet 두 개를 선택해 주겠습니다.

- 대상 그룹 생성을 눌러주시고요.

- 인스턴스를 선택하고 그룹 이름은 자유롭게 지어주세요 + 인스턴스(Ec2)의 80포트로 HTTP 요청을 넣어줄 것입니다.

- 넘어가서 인스턴스 대상은 Practice-App을 선택하고 보류 중인 것으로 포함시켜 주시면 됩니다!

- 이제 돌아와서 로드 밸런서를 마저 만들어 봅시다. 다음과 같이 HTTP:80 요청과 HTTPS:443 요청을 받아서 대상 그룹(EC2)으로 넘겨주도록 설정을 해주겠습니다.

- 보안 리스너 설정은 다음과 같이 해주세요!! 인증서 소스 : ACM을 고리고 전에 발급받았던 인증서를 등록해 줍니다.

- 자... 로드 밸런서가 잘 적용이 되었습니다 !!

- 이제 Route 53에 돌아와서 설정을 하나 바꿔 주어야 합니다. 전에는 도메인 주소를 검색하면 바로 EC2의 IP주소로 요청을 보내주었는데 다음과 같이 요청이 로드 밸런서로 들어가도록 수정해 주겠습니다.
🔥 여기까지 진행을 하셨다면..?
잘 작동하는지 확인을 한 번 해볼까요??

- https로 접속이 잘 되는 모습입니다!!
하지만, 하나 빠진 부분이 있습니다. 바로 http 접속을 막아두지 않은 부분입니다....
현재는 http://potato-farm.shop으로도 접속이 되고 있는 상태입니다. 따라서, 이를 https로 리다이랙션 해주어야 합니다.

- HTTP:80 리스너로 가주세요!!

- 규칙 추가를 눌러주세요.

- 이름은 자유롭게 지어주세요.

- 다음과 같이 조건을 추가해 주겠습니다.

- 다음으로 규칙에 대한 작업으로 URL 리디랙션을 선택하고 HTTPS:443 요청으로 리디랙션 해줍니다.

- 우선순위를 1로 설정해 주시고 넘어가 주세요.

- 생성을 눌러 줍시다.
이 규칙을 추가하게 되면, HTTP:80으로 돌아온 요청도 HTTPS:443으로 리다이랙션 되어서 Https 요청 만으로 도메인에 접속하도록 설정할 수 있습니다!!
✅ Nginx 설정하기
🤔 자 .. 이제 Nginx 설정을 해주어야 합니다.
도메인명으로 들어오는 모든 요청은 로드 밸런서에서 Https로 처리가 됩니다.
그 이후에 로드 밸런서는 요청을 EC2의 80포트로 넣어주게 됩니다.
따라서, 이제 EC2 내부에서 80포트로 들어온 요청을 8080포트에서 돌아가는 WAS로 연결해 주면 됩니다.
❓몇몇 분들은 여기서 의문이 생길 수도 있습니다.
"처음부터 EC2의 8080포트로 요청을 받게 된다면... Nginx가 reverse proxy를 해줄 필요가 없지 않나요??"
-> 정확합니다. 제가 Nginx를 사용하는 이유는 다음 과정에서 Docker를 이용해서 blue-green 무중단 배포를 하기 위함입니다.
만약, 내부에서 8080포트로만 연결해 줘도 상관없다면 Nginx를 사용할 필요가 없습니다. 참고하시면 좋을 것 같아요.
❗ AWS에 들어가서 EC2 콘솔에 들어가 주세요.

- cd.. 를 두 번 입력해서 메인 디렉토리로 나가주세요.
그 후에 etc/nginx 디렉토리로 들어가 줍니다.
해당 디렉토리에 있는 nginx.conf를 수정해 줄 예정입니다.
sudo vum nginx.conf를 입력해서 수정해 주겠습니다.

server {
listen 80;
server_name potato-farm.shop;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
- i를 누르면 수정 모드로 들어갈 수 있습니다.
server 블록을 추가해 주시고.. :wq 를 입력해서 저장하고 나와주세요.
sudo rm /etc/nginx/sites-enabled/default
- sites-enabled에 있는 default 설정은 삭제해 주겠습니다.
sudo systemctl restart nginx
- nginx를 재시작해주세요.
👍🏻 이제 nginx 설정이 완료되었습니다!!
80포트로 EC2 내부로 들어온 요청은 이제 Nginx가 reverse proxy해서 8080포트에서 돌아가는 Spring Application으로 전달됩니다. 한번 도메인을 검색해 보세요..!

- 이제 Whitelabel 페이지로 바로 가지는 것을 확인할 수 있습니다.
😊 이제 다음 포스팅이 마지막 포스트가 되겠습니다.
마지막 포스트에서는 yml에서 프로필을 분리하고, Docker를 이용해서 Blue-Green 배포를 해보겠습니다.
'프로젝트' 카테고리의 다른 글
배포의 모든 것 - 3. Github Action을 통한 CI/CD (0) | 2025.03.18 |
---|---|
배포의 모든 것 - 2. RDS와 Session Manager (0) | 2025.02.25 |
배포의 모든 것 - 1. AWS 시작하기 및 EC2 띄우기 (5) | 2025.01.25 |
Restful API Endpoint를 어떻게 설계해야 할까? (1) | 2025.01.14 |
DDD(Domain Driven Design) 구조 알아보기 (5) | 2025.01.14 |