AWS

[AWS 실습 프로젝트] 9. NginX, Certbot를 통해 스프링부트 백엔드 서버에 HTTPS 적용시키기

jaehee1113 2024. 9. 17. 23:25

✅ 개요


앞서 S3에 프론트 코드를 배포하는데까진 성공을 했다. 하지만 프론트는 S3, 백엔드는 EC2에서 작동하므로 서로의 도메인이 다르다. 이 경우, 세션 쿠키를 사용하려면 SameSite=None설정과 Secure=true설정을 백엔드 쪽에 걸어줘야 하는데 이는 HTTPS가 설정돼 있어야 한다.

해당 포스트에서는 서로 다른 도메인에서 세션 쿠키가 정상적으로 작동할 수 있도록 백엔드 쪽에 HTTPS를 적용시키도록 하겠다.

적용시키는 도구로는 NginX와 Certbot을 사용하겠다.

 

✅ NginX와 Certbot 사용 목적


NginX는 웹 서버 소프트웨어로 가벼움과 높은 성능이 특징인데 그 중에서도 리버시 프록시 기능을 가지고 있다.

Certbot은 무료로 HTTPS 인증서를 발급해주는 도구이다.

프론트에서 요청이 들어오면 NginX 서버는 해당 요청을 스프링부트로 전달해 준다.

이 때, NginX는 Certbot에 의해 HTTPS가 적용되어 있기 때문에 프론트의 요청은 HTTPS로 보호된다.

이렇게 되면 정상적으로 서로 다른 도메인에서도 세션 쿠키가 사용이 가능하다.

 

✅ EC2에 NginX 설치하기


$ sudo apt update
$ sudo apt install nginx

 

잘 설치됐는지 확인하기

$ sudo service nginx status

 

EC2의 IP를 브라우저에 입력해보면 NginX 서버가 실행되고 있는 것을 알 수 있다.

 

✅ Certbot 설치해서 NginX에 HTTPS 적용하기


1️⃣ Certbot 설치

$ sudo snap install --classic certbot
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

 

2️⃣ SSL 인증서 발급받기

Certbot에서 SSL 인증서를 발급받으려면 서버에 대한 도메인 주소가 필요하다.

단순히 서버 IP가 아니라 반드시 도메인 주소가 필요하다.

AWS의 Route53을 이용할 수 있겠지만 비용이 발생하기 때문에 나는 무료로 도메인을 발급해주는 서비스인 ‘내 도메인 한국’을 이용했다.

 

내도메인.한국 - 한글 무료 도메인 등록센터

한글 무료 도메인 내도메인.한국, 웹포워딩, DNS 등 무료 도메인 기능 제공

xn--220b31d95hq8o.xn--3e0b707e

 

발급을 해준뒤 해당 부분에 NginX 서버의 IP(EC2의 IP)를 입력해주면 된다.

 

그리고 다음의 명령어에 발급받은 도메인주소를 입력해주자

$ sudo certbot --nginx -d <도메인 주소>

 

그러면 다음과 같은 창이 나올 것이다.

사용하는 이메일을 입력하고 Y를 두번 입력하면 인증서가 정상적으로 발급된다.

 

이렇게되면 NginX 서버 자체는 HTTPS가 적용이 되게 된다.

실제로 브라우저에 입력해보면 HTTPS가 적용이 된 것을 알 수 있다.

 

✅ NginX 프록시 설정하기


이제 HTTPS가 적용된 NginX를 Spring boot에 대한 프록시 서버로 활용하기 위한 설정을 진행해보자.

 

우선 해당 파일로 이동한다.

$ sudo vi /etc/nginx/sites-available/default

 

쭉 내리다보면 아래와 같이 내가 발급받은 도메인이 나올 것이다.

try_files $uri $uri/ =404; 부분을 주석처리하고

proxy_pass <서버IP>:<스프링부트 포트번호>$request_uri;

를 추가한다.

 

이렇게 설정하게 되면 해당 도메인(NginX 서버)로 들어오는 모든 요청을 스프링부트 서버로 보내겠다는 뜻이다.

뒤에 $request_uri 이 부분을 설정해야지 모든 api에 대해 매핑을 해준다.

예를 들어 nginx/api로 요청이 들어오게되면 springboot/api로 요청이 전환된다.

 

✅ 프론트엔드 정상동작 확인


이전과는 다르게 세션이 저장되고 유지되는 모습을 볼 수 있다.

 

✅ 마치며


Aws실습이 마무리 되었다. 실습을 하면서 정말 많은 것을 배운 것 같다. AWS를 통한 배포 프로세스는 물론 그밖에 겪었던 프론트엔드, 백엔드 이슈 등 얻어간 것이 정말 많았던 활동이었던 것 같다.

물론 아직 더 공부해야할 부분이 많다고 생각한다. 그냥 얼렁뚱땅 넘어간 설정들이 많은데 추후에 배포할 때는 그런 부분까지 조금 더 신경써서 설정을 해야겠다.