✅ 개요
앞서 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을 이용할 수 있겠지만 비용이 발생하기 때문에 나는 무료로 도메인을 발급해주는 서비스인 ‘내 도메인 한국’을 이용했다.
발급을 해준뒤 해당 부분에 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를 통한 배포 프로세스는 물론 그밖에 겪었던 프론트엔드, 백엔드 이슈 등 얻어간 것이 정말 많았던 활동이었던 것 같다.
물론 아직 더 공부해야할 부분이 많다고 생각한다. 그냥 얼렁뚱땅 넘어간 설정들이 많은데 추후에 배포할 때는 그런 부분까지 조금 더 신경써서 설정을 해야겠다.
'AWS' 카테고리의 다른 글
[AWS 실습 프로젝트] 8. S3에 프론트엔드 배포하기 (0) | 2024.09.17 |
---|---|
[AWS 실습 프로젝트] 7. RDS를 통해 MySQL 서버 배포하기 - (2) RDS MySQL 데이터베이스 만들기 (2) | 2024.09.17 |
[AWS 실습 프로젝트] 6. RDS를 통해 MySQL 서버 배포하기 - (1) 안전하고 저렴하게 배포하기 위한 VPC도입 (0) | 2024.09.17 |
[AWS 실습 프로젝트] 5. EC2에 스프링부트 백엔드 서버 배포하기 (0) | 2024.09.17 |
[AWS 실습 프로젝트] 4. Spring boot로 S3에 이미지 업로드 및 수정 비즈니스 로직 구현하기 (0) | 2024.09.17 |