HTTPS๋ฅผ ์ค์ ํ๊ฒ ๋ ์ด์
์ธ์ ๋ก๊ทธ์ธ์ ๊ตฌํํ๊ธฐ์ํด ์ธ์ ์ฟ ํค๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด SameSite = None๊ณผ Secure = true ์ค์ ์ด ํ์ํจ
ํ์ง๋ง ๊ณ์ ๋ก๊ทธ์ธ์ด ์๋๊ธธ๋ ํ์ธํด๋ณด๋... ์์ ๊ฐ์ ์ค์ ์ ํ๋ ค๋ฉด HTTPS๋ฅผ ์ ์ฉํด์ผ ํ๋ค๋ ๊ฒ์ ์๊ฒ๋์๊ณ
์ถํ ํ๋ก ํธ์์ ๋ น์ํ ์์ฑ์ ๋๊ฒจ์ฃผ๋ ๋ก์ง์ ๊ตฌํํ ๋๋ HTTPS๊ฐ ํ์ํ๋ค๋ ๊ฒ์ ์๊ฒ๋์ด HTTPS๋ฅผ ์ ์ฉํ๊ธฐ๋ก ํ์์
๊ธฐ์์ด๋ฉด ๊ณผ๊ธ ๋๋ฌธ์ ๋ฌด๋ฃ๋ก...
์ฌ์ฉํ ๊ฒ๋ค
NginX
NginX๋ ์คํ ์์ค ์น ์๋ฒ ์ํํธ์จ์ด๋ก
์ ์ ์ฝํ
์ธ ์ ๊ณต, ๋ฆฌ๋ฒ์ค ํ๋ก์, ๋ก๋ ๋ฐธ๋ฐ์, HTTP ์บ์ ์๋ฒ ๋ฑ ๋ค์ํ ๊ธฐ๋ฅ์ ์ํํ ์ ์์
=> ์ด๋ฒคํธ ๊ธฐ๋ฐ ๋น๋๊ธฐ ์ํคํ ์ฒ๋ฅผ ์ฌ์ฉํ์ฌ ์ต์ํ์ ๋ฆฌ์์ค๋ก ์์ฒ ๊ฐ์ ๋์ ์ฐ๊ฒฐ์ ์ฒ๋ฆฌํ ์ ์์
์ฌ๊ธฐ์๋ HTTPS ์ค์ ์ ์ํด ๋ฆฌ๋ฒ์ค ํ๋ก์์ ์ญํ ๋ก ์ฌ์ฉํจ
๋ฆฌ๋ฒ์ค ํ๋ก์
๋ฆฌ๋ฒ์ค ํ๋ก์๋ ํด๋ผ์ด์ธํธ์ ์น ์๋ฒ ์ฌ์ด์ ์์นํ์ฌ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๊ฐ๋ก์ฑ๊ณ ๋ฐฑ์๋ ์๋ฒ๋ก ์ ๋ฌํ๋ ์๋ฒ์
(์ผ๋ฐ ํ๋ก์์๋ ๋ค๋ฅด๊ฒ ์๋ฒ ์ธก์์ ์๋ํ๋ ์ค๊ฐ์์)
ํ๋ฆ์ ๊ฐ๋จํ๊ฒ ์ดํด๋ณด๋ฉด
1. ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญ์ ๋ณด๋
2. ๋ฆฌ๋ฒ์ค ํ๋ก์์ธ NginX๊ฐ ์ด๋ฅผ ๊ฐ๋ก์ฑ
=> NginX๊ฐ 443 ํฌํธ(HTTPS)๋ก ๋ค์ด์ค๋ ์์ฒญ์ ์์ ํ SSL/TLS ์ธ์ฆ์๋ฅผ ์ฌ์ฉํ์ฌ ์ํธํ๋ ์ฐ๊ฒฐ ์ฒ๋ฆฌ
3. NginX๊ฐ ์์ฒญ์ ๋ฐฑ์๋ ์๋ฒ๋ก ์ ๋ฌ
=> NginX๋ ์์ฒญ์ ๋ด๋ถ ๋ฐฑ์๋ ์๋ฒ๋ก ์ ๋ฌํ๊ณ ์ด ๊ณผ์ ์์ ํ์ํ ํค๋ ์ ๋ณด๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์์ ํ ์ ๋ ์์
4. ๋ฐฑ์๋ ์๋ฒ๊ฐ ์์ฒญ์ ์ฒ๋ฆฌ
=> Spring Boot ์๋ฒ๊ฐ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ๋ฅผ NginX์ ๋ฐํ
5. NginX๊ฐ ์๋ต์ ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌ
=> ๋ฐฑ์๋ ์๋ฒ๋ก๋ถํฐ ๋ฐ์ ์๋ต์ ์ํธํํ์ฌ ๋ค์ ํด๋ผ์ด์ธํธ์ ์ ์ก
Certbot
Certbot์ Let's Encrypt ์ธ์ฆ ๊ธฐ๊ด์์ ๋ฌด๋ฃ SSL/TLS ์ธ์ฆ์๋ฅผ ์๋์ผ๋ก ๋ฐ๊ธ๋ฐ๊ณ ๊ด๋ฆฌํ๋ ๋๊ตฌ์
์ธ์ฆ์ ๋ฐ๊ธ, ๊ฐฑ์ , ์ค์น ๋ฐ ๊ตฌ์ฑ์ ์๋ํํ์ฌ ์๋ ๊ฐ์ ์์ด ๋ฌด๋ฃ SSL/TLS ์ธ์ฆ์๋ฅผ ์ฝ๊ฒ ์ป์ ์ ์๊ณ
์ธ์ฆ์๊ฐ ๋ง๋ฃ๋๊ธฐ ์ ์ ์๋์ผ๋ก ๊ฐฑ์ ํ ์ ์์ด ๋ณด์ ์ฐ๊ฒฐ์ด ์ค๋จ๋์ง ์๊ฒ ์๋๋กํจ
1. EC2์ NginX ์ค์น

์ผ๋จ EC2 ์ธ์คํด์ค๋ก ๋ค์ด๊ฐ ํ NginX๋ฅผ ์ค์นํด์ผํจ
(ubuntu EC2 ์ฌ์ฉ์ค)
sudo apt update
sudo apt install nginx

sudo service nginx status
์ ๋ช ๋ น์ด๋ฅผ ํตํด NginX ๊ฐ ์ ์ ์๋์์ ํ์ธํ๊ณ

EC2์ ํผ๋ธ๋ฆญ IP๋ก ์ ์ํด๋ณด๋ฉด ์์ ๊ฐ์ด NginX ์๋ฒ๊ฐ ์คํ๋๊ณ ์๋ ๊ฒ์ ์ ์ ์์
2. ๋๋ฉ์ธ ๋ง๋ค๊ธฐ
Certbot๋ก SSL ์ธ์ฆ์๋ฅผ ๋ฐ๊ธ๋ฐ์ผ๋ ค๋ฉด ๋๋ฉ์ธ ์ฃผ์๊ฐ ํ์ํ๊ธฐ์ ๋๋ฉ์ธ์ ๋ง๋ค์ด์ผํจ
์์ ์ AWS Route53์ ์ด์ฉํ๋ค๊ฐ ๊ณผ๊ธ ์ด์๊ฐ ์์์ด์ ๋ ๋์๊ฒ ๋์์ ์ค์๋ ๋ด๋๋ฉ์ธ.ํ๊ตญ ์์ ๋ฌด๋ฃ๋ก ๋๋ฉ์ธ์ ๋ง๋ค์์
https://xn--220b31d95hq8o.xn--3e0b707e/
๋ด๋๋ฉ์ธ.ํ๊ตญ - ํ๊ธ ๋ฌด๋ฃ ๋๋ฉ์ธ ๋ฑ๋ก์ผํฐ
ํ๊ธ ๋ฌด๋ฃ ๋๋ฉ์ธ ๋ด๋๋ฉ์ธ.ํ๊ตญ, ์นํฌ์๋ฉ, DNS ๋ฑ ๋ฌด๋ฃ ๋๋ฉ์ธ ๊ธฐ๋ฅ ์ ๊ณต
xn--220b31d95hq8o.xn--3e0b707e

๋ฐ๊ธ ๋ฐ์ ํ ๋๋ฉ์ธ ๊ด๋ฆฌ์์ ์ ์ฌ์ง๊ณผ ๊ฐ์ด ์ค์ ์ ํด์ฃผ๋ฉด ๋จ
=> NginX ์๋ฒ์ IP (EC2 ํผ๋ธ๋ฆญ IP) ์
๋ ฅ
3. Certbot๋ก NginX์ HTTPS ์ค์
์ฐ์ ์๋ฒ์ ๋๋ฉ์ธ ์ฃผ์๋ฅผ ๋ฐ๊ธ ๋ฐ์์ผ๋ Cerbot์์ SSL ์ธ์ฆ์๋ฅผ ๋ฐ๊ธ ๋ฐ์๋ณด์
์๊น ์ ์ํ EC2 ์ฝ์(ํฐ๋ฏธ๋) ์์
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
์ผ๋ก Certbot์ ์ค์นํด์ผํจ
- --classic์ certbot์ด ์์คํ
์ ์ ์ฒด ํ์ผ ๊ฒฝ๋ก์ ์ ๊ทผํ ์ ์๋๋ก classic confinement(์ ํต์ ์ธ ๋ฐฉ์์ ์ ๊ทผ ๊ถํ)์ ํ์ฉ
- /snap/bin/certbot๋ ์ค์ certbot ์คํ ํ์ผ์ด ์๋ ๊ฒฝ๋ก์ด๊ณ /user/bin/certbot๋ ์ฌ์ฉ์๊ฐ ํฐ๋ฏธ๋์์ certbot์ ์ฝ๊ฒ ์คํํ ์ ์๋๋ก ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ์์ฑํ ๊ฒฝ๋ก์
sudo certbot --nginx -d <์๋ฒ์ ๋๋ฉ์ธ ์ฃผ์>
์ค์น๊ฐ ์๋ฃ๋์๋ค๋ฉด ์ ๋ช ๋ น์ด๋ฅผ ์คํ ํ ํ

์ด๋ฉ์ผ์ ์ ๋ ฅํ ํ Y๋ฅผ ๋ ๋ฒ ์ ๋ ฅํ๋ฉด ์ธ์ฆ์๊ฐ ์ ์์ ์ผ๋ก ๋ฐ๊ธ
์ด ๋์ด์ผ ํ์ง๋ง
Letโs Encrypt๋ ๊ณผ๋ํ ์ธ์ฆ์ ๋ฐ๊ธ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ผ์ ๊ธฐ๊ฐ ๋ด ๋ฐ๊ธ ํ์๋ฅผ ์ ํํ๋๋ฐ
ํ์ฌ ๋ก๊ทธ์ ๋์จ ๋ฉ์์ง๋ฅผ ๋ณด๋ฉด
"too many certificates (50) already issued for 'kro.kr' in the last 168h0m0s"
์ฆ, ์ง๋ 7์ผ(168์๊ฐ) ๋์ kro.kr ๋๋ฉ์ธ์์ 50๊ฐ์ ์ธ์ฆ์๊ฐ ๋ฐ๊ธ๋์์ผ๋ฏ๋ก ๋ ์ด์ ๋ฐ๊ธํ ์ ์๋ ์ํ์ฌ์
์ ํ๋๋ก 2025-03-18 12:18:30 UTC (ํ๊ตญ ์๊ฐ ๊ธฐ์ค: 2025-03-18 21:18:30) ๊น์ง ๋๊ธฐํ์๋ค๊ฐ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ์ฌ ์งํํ๋ฉด ์ฑ๊ณต์ ์ผ๋ก ์ธ์ฆ์๊ฐ ๋ฐ๊ธ๋จ
kro.kr๊ฐ์ด ๋ฌด๋ฃ๋ก ์ ๊ณต๋๋ ๋๋ฉ์ธ์ ๊ฐ์ ๋๋ฉ์ธ์ ์ฌ์ฉํ๋ ์ฌ๋๋ค์ด ๋ง์ ๋ค๋ฅธ ์ฌ๋์ด ์ด๋ฏธ ์ธ์ฆ์๋ฅผ ๋ง์ด ๋ฐ๊ธํ์ ๊ฐ๋ฅ์ฑ์ด ์๊ธฐ์ ์ ์๋ฌ๊ฐ ๋ฐ์ํ ์ ์์
์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋์๋ค๋ฉด ๋๋ฉ์ธ ์ฃผ์ ์ ๋ ฅ์ http ๊ฒฝ๊ณ ๋ฉ์ธ์ง๊ฐ ๋ฐ์ํ์ง ์๋ ๊ฒ์ ํ์ธํด๋ณผ ์ ์์
4. NginX ํ๋ก์ ์ค์
์ ๊ณผ์ ์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ ๋์๋ค๋ฉด HTTPS๊ฐ ์ ์ฉ๋ NginX๋ฅผ Spring Boot์ ๋ํ ํ๋ก์ ์๋ฒ๋ก ํ์ฉํ๊ธฐ ์ํด ์ค์ ์ ์งํํด์ผํจ
ํ์ฌ Spring Boot๋ฅผ ์ปจํ ์ด๋๋ก ๋์์ํค๊ณ ์์ผ๋ฏ๋ก ์ปจํ ์ด๋์ IP์ฃผ์ ๋ถํฐ ์์๋ด์ผํจ
docker inspect <์ปจํ
์ด๋ ์ด๋ฆ ๋๋ ID> | grep "IPAddress"
sudo docker ps๋ก ํ์ฌ ๋์์ค์ธ ์ปจํ
์ด๋์ ID๋ฅผ ์์๋ด๊ณ ์ ๋ช
๋ น์ด๋ฅผ ๋์์ํค๋ฉด ๋ด๋ถ IP์ฃผ์๋ฅผ ๋ฐํ๋ฐ์
(๋ณต์ฌ ํด๋๊ธฐ)
sudo vi /etc/nginx/sites-available/default
์ ๋ช ๋ น์ด๋ฅผ ํตํด /etc/nginx/sites-availabe/default ํ์ผ์ ์ด๊ณ

๋ด๋ ค๊ฐ๋ค๋ณด๋ฉด ์์ ๊ฐ์ด server_name์ด ์ค์ ํ ๋๋ฉ์ธ๊ณผ ์ผ์นํ๋ ๋ถ๋ถ์ด ๋ณด์ผํ ๋ฐ
try_files $uri $uri/ =404; ๋ถ๋ถ์ ์ฃผ์์ฒ๋ฆฌํ ํ
๊ทธ ๋ฐ์ proxy_pass {์ปจํ ์ด๋ IP}:{Spring Boot ํฌํธ ๋ฒํธ}$request_uri; ๋ฅผ ์ถ๊ฐํด์ค
=> EC2 ํผ๋ธ๋ฆญ IP(NginX ์๋ฒ)๋ก ๋ค์ด์ค๋ ๋ชจ๋ ์์ฒญ์ ๊ธฐ์กด์ Spring Boot ์ปจํ ์ด๋๋ก ๋ณด๋ด๊ฒ ๋ค๋ ์๋ฏธ์

์ค์ ์ ์๋ฃํ์์ผ๋ฉด sudo nginx -t ๋ช ๋ น์ด๋ก ์ค์ ํ ์คํธ๋ฅผ ํ๊ณ
sudo systemctl restart nginx ๋ช ๋ น์ด๋ก NginX๋ฅผ ์ฌ์์ํด์ค
5. ์ธ์ ๋ก๊ทธ์ธ ํ ์คํธ (HTTPS)

https๋ก ์์ฒญ์ ๋ณด๋์ ๋ ์ธ์
๋ก๊ทธ์ธ์ด ์ ๋์ํ๋ ๊ฒ์ ํ์ธํ์์
(์์์ ๋งํ๋ฏ์ด ๊ธฐ์กด http ํ๊ฒฝ์์๋ ์ธ์
๋ก๊ทธ์ธ์ด ๋์ํ์ง ์์)
6. ์ถํ ์์ ์ฌํญ
์ฐ์ NginX ์ค์ ์ฝ๋๋ฅผ ๋ณด๋ฉด ์ ์ ์๋ฏ์ด ์คํ์ค์ธ ์ปจํ
์ด๋์ IP๋ก ์ค์ ์ํ๊ธฐ์ ์ถ๊ฐ์ ์ธ ์ปจํ
์ด๋๊ฐ ์๊ธฐ๊ฑฐ๋ CI/CD๋ก ์ธํด ์ปจํ
์ด๋ IP๊ฐ ๋ณ๊ฒฝ๋ ์ ๋ ์๊ธฐ์ ์ด ๋ถ๋ถ์ ๋ํด ์ด๋ป๊ฒ ํ ์ง ๊ณ ๋ฏผ์ค์ด์์
=> ์ผ๋จ Docker๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ด๋ถ ๋คํธ์ํฌ์์ ์ปจํ
์ด๋์ ์์ฐจ์ ์ผ๋ก IP๋ฅผ ํ ๋นํ๋ค๊ณ ํด์ ํ๋์ ์ปจํ
์ด๋๋ฅผ ์ง์ฐ๊ณ ๋ง๋ค๊ณ ๋ฅผ ๋ฐ๋ณตํ๋ ์ด๊ธฐ ์ํฉ์์๋ ๋ฌธ์ ๊ฐ ์ผ์ด๋์ง ์์์ง๋ง ๋ณด์ฅ๋ ๋์์ด ์๋๋ฏ๋ก Docker์ ๋คํธ์ํฌ ๊ธฐ๋ฅ์ ํ์ฉํ๋ ๋ฐฉ์๋ ์๊ฐํ์์
ํ์ง๋ง ํ์ฌ MVP ๊ฐ๋ฐ ๋จ๊ณ์ด๊ณ ์ถํ ECS๋ก ์ธํ๋ผ๋ฅผ ๊ตฌ์ถ ๋ฐ ๋ณ๊ฒฝํ๋ฉฐ ALB๋ฅผ ๋์ ํ์ฌ HTTPS ์ฒ๋ฆฌ๋ฅผ ํ ๊ฒ์ด๊ธฐ์ ์ผ๋จ์ NginX ์ค์ ์ ์ ์งํ๊ณ ์ปจํ ์ด๋ ํ ๊ฐ๋ก ๋น ๋ฅด๊ฒ MVP ๊ฐ๋ฐ์ด ๋ง๋ฌด๋ฆฌ๋ ๋๊น์ง ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ์์
'๐ซ Backend > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring Boot] AWS Lambda์ ํต์ ํ๊ธฐ (0) | 2025.03.30 |
---|---|
Spring Boot์์ Supabase ์ฌ์ฉํ๊ธฐ (Kotlin) (0) | 2025.02.25 |
Spring boot ์์ H2 ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉํ๊ธฐ (Kotlin) (0) | 2025.02.20 |
JPA ํบ์๋ณด๊ธฐ (0) | 2025.02.16 |
[Spring Boot] Docker๋ฅผ ์ด์ฉํด EC2์ ๋ฐฐํฌํด๋ณด๊ธฐ (4) | 2024.08.27 |
HTTPS๋ฅผ ์ค์ ํ๊ฒ ๋ ์ด์
์ธ์ ๋ก๊ทธ์ธ์ ๊ตฌํํ๊ธฐ์ํด ์ธ์ ์ฟ ํค๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด SameSite = None๊ณผ Secure = true ์ค์ ์ด ํ์ํจ
ํ์ง๋ง ๊ณ์ ๋ก๊ทธ์ธ์ด ์๋๊ธธ๋ ํ์ธํด๋ณด๋... ์์ ๊ฐ์ ์ค์ ์ ํ๋ ค๋ฉด HTTPS๋ฅผ ์ ์ฉํด์ผ ํ๋ค๋ ๊ฒ์ ์๊ฒ๋์๊ณ
์ถํ ํ๋ก ํธ์์ ๋ น์ํ ์์ฑ์ ๋๊ฒจ์ฃผ๋ ๋ก์ง์ ๊ตฌํํ ๋๋ HTTPS๊ฐ ํ์ํ๋ค๋ ๊ฒ์ ์๊ฒ๋์ด HTTPS๋ฅผ ์ ์ฉํ๊ธฐ๋ก ํ์์
๊ธฐ์์ด๋ฉด ๊ณผ๊ธ ๋๋ฌธ์ ๋ฌด๋ฃ๋ก...
์ฌ์ฉํ ๊ฒ๋ค
NginX
NginX๋ ์คํ ์์ค ์น ์๋ฒ ์ํํธ์จ์ด๋ก
์ ์ ์ฝํ
์ธ ์ ๊ณต, ๋ฆฌ๋ฒ์ค ํ๋ก์, ๋ก๋ ๋ฐธ๋ฐ์, HTTP ์บ์ ์๋ฒ ๋ฑ ๋ค์ํ ๊ธฐ๋ฅ์ ์ํํ ์ ์์
=> ์ด๋ฒคํธ ๊ธฐ๋ฐ ๋น๋๊ธฐ ์ํคํ ์ฒ๋ฅผ ์ฌ์ฉํ์ฌ ์ต์ํ์ ๋ฆฌ์์ค๋ก ์์ฒ ๊ฐ์ ๋์ ์ฐ๊ฒฐ์ ์ฒ๋ฆฌํ ์ ์์
์ฌ๊ธฐ์๋ HTTPS ์ค์ ์ ์ํด ๋ฆฌ๋ฒ์ค ํ๋ก์์ ์ญํ ๋ก ์ฌ์ฉํจ
๋ฆฌ๋ฒ์ค ํ๋ก์
๋ฆฌ๋ฒ์ค ํ๋ก์๋ ํด๋ผ์ด์ธํธ์ ์น ์๋ฒ ์ฌ์ด์ ์์นํ์ฌ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๊ฐ๋ก์ฑ๊ณ ๋ฐฑ์๋ ์๋ฒ๋ก ์ ๋ฌํ๋ ์๋ฒ์
(์ผ๋ฐ ํ๋ก์์๋ ๋ค๋ฅด๊ฒ ์๋ฒ ์ธก์์ ์๋ํ๋ ์ค๊ฐ์์)
ํ๋ฆ์ ๊ฐ๋จํ๊ฒ ์ดํด๋ณด๋ฉด
1. ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญ์ ๋ณด๋
2. ๋ฆฌ๋ฒ์ค ํ๋ก์์ธ NginX๊ฐ ์ด๋ฅผ ๊ฐ๋ก์ฑ
=> NginX๊ฐ 443 ํฌํธ(HTTPS)๋ก ๋ค์ด์ค๋ ์์ฒญ์ ์์ ํ SSL/TLS ์ธ์ฆ์๋ฅผ ์ฌ์ฉํ์ฌ ์ํธํ๋ ์ฐ๊ฒฐ ์ฒ๋ฆฌ
3. NginX๊ฐ ์์ฒญ์ ๋ฐฑ์๋ ์๋ฒ๋ก ์ ๋ฌ
=> NginX๋ ์์ฒญ์ ๋ด๋ถ ๋ฐฑ์๋ ์๋ฒ๋ก ์ ๋ฌํ๊ณ ์ด ๊ณผ์ ์์ ํ์ํ ํค๋ ์ ๋ณด๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์์ ํ ์ ๋ ์์
4. ๋ฐฑ์๋ ์๋ฒ๊ฐ ์์ฒญ์ ์ฒ๋ฆฌ
=> Spring Boot ์๋ฒ๊ฐ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ๋ฅผ NginX์ ๋ฐํ
5. NginX๊ฐ ์๋ต์ ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌ
=> ๋ฐฑ์๋ ์๋ฒ๋ก๋ถํฐ ๋ฐ์ ์๋ต์ ์ํธํํ์ฌ ๋ค์ ํด๋ผ์ด์ธํธ์ ์ ์ก
Certbot
Certbot์ Let's Encrypt ์ธ์ฆ ๊ธฐ๊ด์์ ๋ฌด๋ฃ SSL/TLS ์ธ์ฆ์๋ฅผ ์๋์ผ๋ก ๋ฐ๊ธ๋ฐ๊ณ ๊ด๋ฆฌํ๋ ๋๊ตฌ์
์ธ์ฆ์ ๋ฐ๊ธ, ๊ฐฑ์ , ์ค์น ๋ฐ ๊ตฌ์ฑ์ ์๋ํํ์ฌ ์๋ ๊ฐ์ ์์ด ๋ฌด๋ฃ SSL/TLS ์ธ์ฆ์๋ฅผ ์ฝ๊ฒ ์ป์ ์ ์๊ณ
์ธ์ฆ์๊ฐ ๋ง๋ฃ๋๊ธฐ ์ ์ ์๋์ผ๋ก ๊ฐฑ์ ํ ์ ์์ด ๋ณด์ ์ฐ๊ฒฐ์ด ์ค๋จ๋์ง ์๊ฒ ์๋๋กํจ
1. EC2์ NginX ์ค์น

์ผ๋จ EC2 ์ธ์คํด์ค๋ก ๋ค์ด๊ฐ ํ NginX๋ฅผ ์ค์นํด์ผํจ
(ubuntu EC2 ์ฌ์ฉ์ค)
sudo apt update
sudo apt install nginx

sudo service nginx status
์ ๋ช ๋ น์ด๋ฅผ ํตํด NginX ๊ฐ ์ ์ ์๋์์ ํ์ธํ๊ณ

EC2์ ํผ๋ธ๋ฆญ IP๋ก ์ ์ํด๋ณด๋ฉด ์์ ๊ฐ์ด NginX ์๋ฒ๊ฐ ์คํ๋๊ณ ์๋ ๊ฒ์ ์ ์ ์์
2. ๋๋ฉ์ธ ๋ง๋ค๊ธฐ
Certbot๋ก SSL ์ธ์ฆ์๋ฅผ ๋ฐ๊ธ๋ฐ์ผ๋ ค๋ฉด ๋๋ฉ์ธ ์ฃผ์๊ฐ ํ์ํ๊ธฐ์ ๋๋ฉ์ธ์ ๋ง๋ค์ด์ผํจ
์์ ์ AWS Route53์ ์ด์ฉํ๋ค๊ฐ ๊ณผ๊ธ ์ด์๊ฐ ์์์ด์ ๋ ๋์๊ฒ ๋์์ ์ค์๋ ๋ด๋๋ฉ์ธ.ํ๊ตญ ์์ ๋ฌด๋ฃ๋ก ๋๋ฉ์ธ์ ๋ง๋ค์์
https://xn--220b31d95hq8o.xn--3e0b707e/
๋ด๋๋ฉ์ธ.ํ๊ตญ - ํ๊ธ ๋ฌด๋ฃ ๋๋ฉ์ธ ๋ฑ๋ก์ผํฐ
ํ๊ธ ๋ฌด๋ฃ ๋๋ฉ์ธ ๋ด๋๋ฉ์ธ.ํ๊ตญ, ์นํฌ์๋ฉ, DNS ๋ฑ ๋ฌด๋ฃ ๋๋ฉ์ธ ๊ธฐ๋ฅ ์ ๊ณต
xn--220b31d95hq8o.xn--3e0b707e

๋ฐ๊ธ ๋ฐ์ ํ ๋๋ฉ์ธ ๊ด๋ฆฌ์์ ์ ์ฌ์ง๊ณผ ๊ฐ์ด ์ค์ ์ ํด์ฃผ๋ฉด ๋จ
=> NginX ์๋ฒ์ IP (EC2 ํผ๋ธ๋ฆญ IP) ์
๋ ฅ
3. Certbot๋ก NginX์ HTTPS ์ค์
์ฐ์ ์๋ฒ์ ๋๋ฉ์ธ ์ฃผ์๋ฅผ ๋ฐ๊ธ ๋ฐ์์ผ๋ Cerbot์์ SSL ์ธ์ฆ์๋ฅผ ๋ฐ๊ธ ๋ฐ์๋ณด์
์๊น ์ ์ํ EC2 ์ฝ์(ํฐ๋ฏธ๋) ์์
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
์ผ๋ก Certbot์ ์ค์นํด์ผํจ
- --classic์ certbot์ด ์์คํ
์ ์ ์ฒด ํ์ผ ๊ฒฝ๋ก์ ์ ๊ทผํ ์ ์๋๋ก classic confinement(์ ํต์ ์ธ ๋ฐฉ์์ ์ ๊ทผ ๊ถํ)์ ํ์ฉ
- /snap/bin/certbot๋ ์ค์ certbot ์คํ ํ์ผ์ด ์๋ ๊ฒฝ๋ก์ด๊ณ /user/bin/certbot๋ ์ฌ์ฉ์๊ฐ ํฐ๋ฏธ๋์์ certbot์ ์ฝ๊ฒ ์คํํ ์ ์๋๋ก ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ์์ฑํ ๊ฒฝ๋ก์
sudo certbot --nginx -d <์๋ฒ์ ๋๋ฉ์ธ ์ฃผ์>
์ค์น๊ฐ ์๋ฃ๋์๋ค๋ฉด ์ ๋ช ๋ น์ด๋ฅผ ์คํ ํ ํ

์ด๋ฉ์ผ์ ์ ๋ ฅํ ํ Y๋ฅผ ๋ ๋ฒ ์ ๋ ฅํ๋ฉด ์ธ์ฆ์๊ฐ ์ ์์ ์ผ๋ก ๋ฐ๊ธ
์ด ๋์ด์ผ ํ์ง๋ง
Letโs Encrypt๋ ๊ณผ๋ํ ์ธ์ฆ์ ๋ฐ๊ธ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ผ์ ๊ธฐ๊ฐ ๋ด ๋ฐ๊ธ ํ์๋ฅผ ์ ํํ๋๋ฐ
ํ์ฌ ๋ก๊ทธ์ ๋์จ ๋ฉ์์ง๋ฅผ ๋ณด๋ฉด
"too many certificates (50) already issued for 'kro.kr' in the last 168h0m0s"
์ฆ, ์ง๋ 7์ผ(168์๊ฐ) ๋์ kro.kr ๋๋ฉ์ธ์์ 50๊ฐ์ ์ธ์ฆ์๊ฐ ๋ฐ๊ธ๋์์ผ๋ฏ๋ก ๋ ์ด์ ๋ฐ๊ธํ ์ ์๋ ์ํ์ฌ์
์ ํ๋๋ก 2025-03-18 12:18:30 UTC (ํ๊ตญ ์๊ฐ ๊ธฐ์ค: 2025-03-18 21:18:30) ๊น์ง ๋๊ธฐํ์๋ค๊ฐ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ์ฌ ์งํํ๋ฉด ์ฑ๊ณต์ ์ผ๋ก ์ธ์ฆ์๊ฐ ๋ฐ๊ธ๋จ
kro.kr๊ฐ์ด ๋ฌด๋ฃ๋ก ์ ๊ณต๋๋ ๋๋ฉ์ธ์ ๊ฐ์ ๋๋ฉ์ธ์ ์ฌ์ฉํ๋ ์ฌ๋๋ค์ด ๋ง์ ๋ค๋ฅธ ์ฌ๋์ด ์ด๋ฏธ ์ธ์ฆ์๋ฅผ ๋ง์ด ๋ฐ๊ธํ์ ๊ฐ๋ฅ์ฑ์ด ์๊ธฐ์ ์ ์๋ฌ๊ฐ ๋ฐ์ํ ์ ์์
์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋์๋ค๋ฉด ๋๋ฉ์ธ ์ฃผ์ ์ ๋ ฅ์ http ๊ฒฝ๊ณ ๋ฉ์ธ์ง๊ฐ ๋ฐ์ํ์ง ์๋ ๊ฒ์ ํ์ธํด๋ณผ ์ ์์
4. NginX ํ๋ก์ ์ค์
์ ๊ณผ์ ์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ ๋์๋ค๋ฉด HTTPS๊ฐ ์ ์ฉ๋ NginX๋ฅผ Spring Boot์ ๋ํ ํ๋ก์ ์๋ฒ๋ก ํ์ฉํ๊ธฐ ์ํด ์ค์ ์ ์งํํด์ผํจ
ํ์ฌ Spring Boot๋ฅผ ์ปจํ ์ด๋๋ก ๋์์ํค๊ณ ์์ผ๋ฏ๋ก ์ปจํ ์ด๋์ IP์ฃผ์ ๋ถํฐ ์์๋ด์ผํจ
docker inspect <์ปจํ
์ด๋ ์ด๋ฆ ๋๋ ID> | grep "IPAddress"
sudo docker ps๋ก ํ์ฌ ๋์์ค์ธ ์ปจํ
์ด๋์ ID๋ฅผ ์์๋ด๊ณ ์ ๋ช
๋ น์ด๋ฅผ ๋์์ํค๋ฉด ๋ด๋ถ IP์ฃผ์๋ฅผ ๋ฐํ๋ฐ์
(๋ณต์ฌ ํด๋๊ธฐ)
sudo vi /etc/nginx/sites-available/default
์ ๋ช ๋ น์ด๋ฅผ ํตํด /etc/nginx/sites-availabe/default ํ์ผ์ ์ด๊ณ

๋ด๋ ค๊ฐ๋ค๋ณด๋ฉด ์์ ๊ฐ์ด server_name์ด ์ค์ ํ ๋๋ฉ์ธ๊ณผ ์ผ์นํ๋ ๋ถ๋ถ์ด ๋ณด์ผํ ๋ฐ
try_files $uri $uri/ =404; ๋ถ๋ถ์ ์ฃผ์์ฒ๋ฆฌํ ํ
๊ทธ ๋ฐ์ proxy_pass {์ปจํ ์ด๋ IP}:{Spring Boot ํฌํธ ๋ฒํธ}$request_uri; ๋ฅผ ์ถ๊ฐํด์ค
=> EC2 ํผ๋ธ๋ฆญ IP(NginX ์๋ฒ)๋ก ๋ค์ด์ค๋ ๋ชจ๋ ์์ฒญ์ ๊ธฐ์กด์ Spring Boot ์ปจํ ์ด๋๋ก ๋ณด๋ด๊ฒ ๋ค๋ ์๋ฏธ์

์ค์ ์ ์๋ฃํ์์ผ๋ฉด sudo nginx -t ๋ช ๋ น์ด๋ก ์ค์ ํ ์คํธ๋ฅผ ํ๊ณ
sudo systemctl restart nginx ๋ช ๋ น์ด๋ก NginX๋ฅผ ์ฌ์์ํด์ค
5. ์ธ์ ๋ก๊ทธ์ธ ํ ์คํธ (HTTPS)

https๋ก ์์ฒญ์ ๋ณด๋์ ๋ ์ธ์
๋ก๊ทธ์ธ์ด ์ ๋์ํ๋ ๊ฒ์ ํ์ธํ์์
(์์์ ๋งํ๋ฏ์ด ๊ธฐ์กด http ํ๊ฒฝ์์๋ ์ธ์
๋ก๊ทธ์ธ์ด ๋์ํ์ง ์์)
6. ์ถํ ์์ ์ฌํญ
์ฐ์ NginX ์ค์ ์ฝ๋๋ฅผ ๋ณด๋ฉด ์ ์ ์๋ฏ์ด ์คํ์ค์ธ ์ปจํ
์ด๋์ IP๋ก ์ค์ ์ํ๊ธฐ์ ์ถ๊ฐ์ ์ธ ์ปจํ
์ด๋๊ฐ ์๊ธฐ๊ฑฐ๋ CI/CD๋ก ์ธํด ์ปจํ
์ด๋ IP๊ฐ ๋ณ๊ฒฝ๋ ์ ๋ ์๊ธฐ์ ์ด ๋ถ๋ถ์ ๋ํด ์ด๋ป๊ฒ ํ ์ง ๊ณ ๋ฏผ์ค์ด์์
=> ์ผ๋จ Docker๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ด๋ถ ๋คํธ์ํฌ์์ ์ปจํ
์ด๋์ ์์ฐจ์ ์ผ๋ก IP๋ฅผ ํ ๋นํ๋ค๊ณ ํด์ ํ๋์ ์ปจํ
์ด๋๋ฅผ ์ง์ฐ๊ณ ๋ง๋ค๊ณ ๋ฅผ ๋ฐ๋ณตํ๋ ์ด๊ธฐ ์ํฉ์์๋ ๋ฌธ์ ๊ฐ ์ผ์ด๋์ง ์์์ง๋ง ๋ณด์ฅ๋ ๋์์ด ์๋๋ฏ๋ก Docker์ ๋คํธ์ํฌ ๊ธฐ๋ฅ์ ํ์ฉํ๋ ๋ฐฉ์๋ ์๊ฐํ์์
ํ์ง๋ง ํ์ฌ MVP ๊ฐ๋ฐ ๋จ๊ณ์ด๊ณ ์ถํ ECS๋ก ์ธํ๋ผ๋ฅผ ๊ตฌ์ถ ๋ฐ ๋ณ๊ฒฝํ๋ฉฐ ALB๋ฅผ ๋์ ํ์ฌ HTTPS ์ฒ๋ฆฌ๋ฅผ ํ ๊ฒ์ด๊ธฐ์ ์ผ๋จ์ NginX ์ค์ ์ ์ ์งํ๊ณ ์ปจํ ์ด๋ ํ ๊ฐ๋ก ๋น ๋ฅด๊ฒ MVP ๊ฐ๋ฐ์ด ๋ง๋ฌด๋ฆฌ๋ ๋๊น์ง ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ์์
'๐ซ Backend > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring Boot] AWS Lambda์ ํต์ ํ๊ธฐ (0) | 2025.03.30 |
---|---|
Spring Boot์์ Supabase ์ฌ์ฉํ๊ธฐ (Kotlin) (0) | 2025.02.25 |
Spring boot ์์ H2 ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉํ๊ธฐ (Kotlin) (0) | 2025.02.20 |
JPA ํบ์๋ณด๊ธฐ (0) | 2025.02.16 |
[Spring Boot] Docker๋ฅผ ์ด์ฉํด EC2์ ๋ฐฐํฌํด๋ณด๊ธฐ (4) | 2024.08.27 |