1. EC2 ์ธ์คํด์ค ์ค๋น
2025.06.12 - [๐ฐ๐ท ํ๊ตญ์ด (Korean)/AWS] - [9] EC2 ์ธ์คํด์ค ์ฐ๊ฒฐ
2. Node.js & ์ ํ๋ฆฌ์ผ์ด์ ์ค์น
2.1 Node.js ์ค์น (NodeSource)
2.2 ํ๋ก์ ํธ ์ด๊ธฐํ ๋ฐ Express ์ค์น
2.3 package.json ์ค์
2.4 index.js ์์ฑ
2.5 ํ ์คํธ ์คํ
3. PM2๋ก ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํ
4. Nginx ๋ฆฌ๋ฒ์ค ํ๋ก์ ์ค์
4.1 ์ค์น
4.2 ์ค์ ํ์ผ /etc/nginx/conf.d/my-node-app.conf ์์ฑ
4.3 ๊ฒ์ฆ & ์ฌ์์
4.4 ํ์ธ
5. ๋๋ฉ์ธ(Route 53) ์ฐ๊ฒฐ
5.1 Route 53 → ํธ์คํ ์์ญ(Hosted zones) → trill-server.com ์ ํ
5.2 ๋ ์ฝ๋ ์์ฑ(Create record)
5.3 ์ ์ฅ ํ dig +short trill-server.com → IP ํ์ธ
2025.06.17 - [๐ฐ๐ท ํ๊ตญ์ด (Korean)/AWS] - [14] ๋๋ฉ์ธ(Route 53) ์ฐ๊ฒฐ
6. HTTPS ์ ์ฉ (Let’s Encrypt)
6.1 ๋ณด์ ๊ทธ๋ฃน: HTTPS(443) → 0.0.0.0/0 ์ถ๊ฐ
6.2 Certbot ์ค์น
6.3 ์ธ์ฆ์ ๋ฐ๊ธ & ์ค์น
6.4 ์๋ ๊ฐฑ์
6.5 ํ์ธ
6. HTTPS ์ ์ฉ (Let’s Encrypt)
HTTPS(SSL/TLS) ์ ์ฉ์ ๋ชฉ์ ๊ณผ ์ด์ ๋ ํฌ๊ฒ ์๋ ์ฌ์ฏ ๊ฐ์ง๋ก ์์ฝํ ์ ์๋ค:
1. ๋ฐ์ดํฐ ์ํธํ(Confidentiality)
- ํ๋ฌธ(HTTP): ๋คํธ์ํฌ๋ฅผ ํ๊ณ ์ค๊ฐ๋ ๋ชจ๋ ์์ฒญ·์๋ต์ด ํ ์คํธ ๊ทธ๋๋ก ๋ ธ์ถ
- ์ํธํ(HTTPS): SSL/TLS ๊ณ์ธต์์ ๋ฐ์ดํธ ๋จ์๋ก ์ํธํ๋์ด ์ ์ก
→ ์ค๊ฐ์ ๊ณต๊ฒฉ(MITM), ์ค๋ํ(sniffing)์ผ๋ก๋ถํฐ ์ฌ์ฉ์์ ๋ก๊ทธ์ธ ์ ๋ณด·๊ฐ์ธ ๋ฐ์ดํฐ๋ฅผ ๋ณดํธ
2. ์๋ฒ ์ธ์ฆ(Authentication)
๋ธ๋ผ์ฐ์ ๊ฐ “์ด ์ฌ์ดํธ๊ฐ ์ฃผ์ฅํ๋ ์๋ฒ(๋๋ฉ์ธ)๊ฐ ๋ง๋ค”๋ ๊ฑธ์ธ์ฆ์ ์ฒด์ธ(CA → ์ธ์ฆ์) ๊ณผ ๋๋ฉ์ธ ๊ฒ์ฆ์ ํตํด ํ์ธํผ์ฑ·์คํธํ ์ฌ์ดํธ๋ก๋ถํฐ ์ฌ์ฉ์๋ฅผ ๋ณดํธ
3. ๋ฌด๊ฒฐ์ฑ(Integrity)
์ํธํ๋ ์ฑ๋์์๋ ์ ์ก ์ค ๋ฐ์ดํฐ ๋ณ์กฐ(๊ฐ๋ก์ฑ๊ธฐ ํ ๋ณ๊ฒฝ)๊ฐ ๋ถ๊ฐ๋ฅ์์ฒญ·์๋ต์ด ์ค๊ฐ์ ํผ์๋์ง ์์์์ ๋ณด์ฅ
4. ์ ๋ขฐ(Trust) ํ๋ณด & SEO ์ด์
- ์ฃผ์์ฐฝ์ ์๋ฌผ์ (๐) ์์ด์ฝ์ด ์ฌ์ฉ์์๊ฒ “์์ ํ ์ฌ์ดํธ”๋ผ๋ ์๊ฐ์ ์ ํธ ์ ๊ณต
- ๊ตฌ๊ธ·๋ค์ด๋ฒ ๋ฑ ๊ฒ์์์ง์ด HTTPS ์ฌ์ดํธ๋ฅผ ์ฐ์ ๋ ธ์ถํ๋ ๊ฒฝํฅ→ SEO(๊ฒ์ ์์)์๋ ๊ธ์ ์ ์ํฅ
5. ์๋·๋ฌด๋ฃ ์ธ์ฆ์ ๋ฐ๊ธ(=Let’s Encrypt)
- Let’s Encrypt: ํผ๋ธ๋ฆญ CA๊ฐ ๋ฌด๋ฃ๋ก SSL ์ธ์ฆ์๋ฅผ ๋ฐ๊ธ
- Certbot ๊ฐ์ ํด๋ผ์ด์ธํธ ๋๊ตฌ๋ก
- DNS/HTTP ๊ฒ์ฆ → ์ธ์ฆ์ ๋ฐ๊ธ
- Nginx/Apache ์ค์ ์๋ ๋ณ๊ฒฝ
- ์๋ ๊ฐฑ์ (renewal) ํ์ด๋จธ ์ค์ ๊น์ง
- ๋น์ฉ ๋ถ๋ด ์์ด, ๋ง๋ฃ ๊ฑฑ์ ์์ด ์ ์ง ๊ฐ๋ฅ
6. ์ต์ ์น ํ์ค & ์ฑ๋ฅ ์ต์ ํ
- HTTP/2, HTTP/3(QUIC) ๊ฐ์ ์ฐจ์ธ๋ ํ๋กํ ์ฝ์ ๋๋ถ๋ถ HTTPS์์๋ง ํ์ฑํ
- TLS ์ธ์ ์ฌ๊ฐ, ์ธ์ ํฐ์ผ, OCSP ์คํ ์ดํ๋ง ๋ฑ ์ฑ๋ฅ·๋ณด์ ๊ธฐ๋ฅ ์ง์
- ์ปค๋ฅ์ ์ฌ์ฌ์ฉ, ๋ฉํฐํ๋ ์ฑ์ผ๋ก ์ ์ก ํจ์จ์ฑ ํฅ์
์์ฝ
HTTPS ์ ์ฉ์ ์ฌ์ฉ์·์๋น์ค ๊ฐ ๋ชจ๋ ํต์ ์ ์์ ํ๊ฒ ์ํธํํ๊ณ ,
“์ด ์ฌ์ดํธ๊ฐ ์ง์ง ์ด ๋๋ฉ์ธ์ ์ด์ํ๋ค”๋ ์ ๋ขฐ๋ฅผ ๋ณด์ฅํ๋ฉฐ,
๋ฌด๋ฃ·์๋ ๊ฐฑ์ ๊ฐ๋ฅํ Let’s Encrypt๋ฅผ ์ด์ฉํด ์ ์ง·๊ด๋ฆฌ ๋ถ๋ด์ ํฌ๊ฒ ์ค์ฌ ์ค๋ค.
๊ฒ๋ค๊ฐ HTTP/2, HSTS ๊ฐ์ ์ต์ ์น ํ์ค์ ํ์ฉํด ์ฑ๋ฅ๊น์ง ๋์ฌ ์ฃผ๊ธฐ ๋๋ฌธ์,
ํ๋ก๋์ ํ๊ฒฝ์ด๋ผ๋ฉด ๋ฐ๋์ ๋์ ํด์ผ ํ ํ์ ์์์ด๋ค.
์ด์ ๋ณธ๊ฒฉ์ ์ผ๋ก HTTPS(SSL/TLS) ์ค์ ์ ํด ๋ณผ ์ฐจ๋ก์ด๋ค.
๋ค์ ๋จ๊ณ๋ ํฌ๊ฒ ๋ ๊ฐ์ง์ด๋ค
1. ๋ณด์ ๊ทธ๋ฃน์ HTTPS(443) ํ์ฉ
- AWS ์ฝ์ → EC2 → ์ผ์ชฝ ๋ฉ๋ด “๋ณด์ ๊ทธ๋ฃน”

- ์ฌ๋ฌ๋ถ ์ฑ์ ์ฐ๊ฒฐ๋ SG ์ ํ → “์ธ๋ฐ์ด๋ ๊ท์น ํธ์ง”
- ์ ํ: HTTPS, ํฌํธ ๋ฒ์: 443, ์์ค: 0.0.0.0/0 → ์ ์ฅ

์ด์ 443 ํฌํธ๋ก๋ ์ธ๋ถ์์ ์ ๊ทผํ ์ ์๊ฒ ๋๋ค.
2. Certbot์ผ๋ก ๋ฌด๋ฃ SSL ์ธ์ฆ์ ๋ฐ๊ธ·์ค์
ํฐ๋ฏธ๋์์ ์๋ ๋ช ๋ น์ด๋ฅผ ์์๋๋ก ์ ๋ ฅํ๊ณ , ํ๋กฌํํธ์ ๋ต์ ํด์ผ ํ๋ค.
# 1) Certbot ์ค์น (์ด๋ฏธ ํ์
จ๋ค๋ฉด ๊ฑด๋๋ฐ๊ธฐ)
sudo dnf install -y certbot python3-certbot-nginx
# 2) Nginx ํ๋ฌ๊ทธ์ธ์ผ๋ก ์ธ์ฆ์ ๋ฐ๊ธ
sudo certbot --nginx -d trill-server.com
- ์ด๋ฉ์ผ ์ ๋ ฅ
- ๊ธด๊ธ ์๋ฆผ·๋ง๋ฃ ์๋ด๋ฅผ ๋ฐ์ ์ด๋ฉ์ผ
- ์ด์ฉ ์ฝ๊ด ๋์
- EFF ์ด๋ฉ์ผ ๊ณต์ ์ฌ๋ถ (์ ํ)
- HTTP → HTTPS ๋ฆฌ๋ค์ด๋ ํธ ์ต์ ์ ํ (“2”๋ฒ)


๋ฌธ์ ๋ฐ์!!
ํด๊ฒฐ์ฑ ์ “Certbot์ด ๋์ ๋๋ฉ์ธ(trill-server.com)์ ๋์ํ๋ Nginx ์๋ฒ ๋ธ๋ก์ ์ฐพ์ง ๋ชปํด์”
์๋ ์ค์น(ssl ์ค์ )๋ฅผ ๊ฑด๋๋ด ๊ฒ์ด๊ธฐ ๋๋ฌธ์,
Nginx ์ค์ ์ ๋จผ์ ๋๋ฉ์ธ์ ๋ง๊ฒ ๊ณ ์ณ์ค์ผ ํ๋ค
1. Nginx ์๋ฒ ๋ธ๋ก์ server_name ์ถ๊ฐ
sudo vi /etc/nginx/conf.d/my-node-app.conf
ํ์ฌ ์ด ํ์ผ์ด ๋๋ต ์ด๋ ๊ฒ ๋์ด ์์ ํ ๋ฐ:
server {
listen 80;
# server_name YOUR_PUBLIC_IP_OR_DOMAIN; <-- ์ด ์ค์ด ๋น ์ก๊ฑฐ๋ ์๋ชป๋์ ์ ์์ต๋๋ค.
location / {
proxy_pass http://127.0.0.1:3000;
# …(์๋ต)…
}
}
์ฌ๊ธฐ์ ๋ฐ๋์ server_name trill-server.com; ์ ๋ฃ์ด์ผํ๋ค
server {
listen 80;
server_name trill-server.com; # ← ์ด๊ฑธ ์ถ๊ฐ
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
๋ง์ฝ www.trill-server.com ๊น์ง ์ฐ๊ณ ์ถ์ผ๋ฉด ์ผํ๋ก ๊ตฌ๋ถํ๊ฑฐ๋, ๋ ๋ค๋ฅธ server ๋ธ๋ก์ ๋ง๋ค์ด์ผ ํ๋ค.
์ ์ฅ ํ, ๋ฌธ๋ฒ ๊ฒ์ฌ & ๋ฆฌ๋ก๋:
sudo nginx -t
sudo systemctl reload nginx
์๋์ ๊ฐ์ ๋ฉ์์ง๋ Nginx ์ค์ ๋ฌธ๋ฒ์ด ๋ชจ๋ ์ ํจํ๋ค๋ ์๋ฏธ์ด๋ค.
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
์ด์ SSL ์ธ์ฆ์๋ฅผ Nginx์ “์ค์น” ํด ์ฃผ๋ ๋จ๊ณ๋ง ๋จ์๋ค.
2. Certbot์ “์ค์น๋ง” ๋ค์ ์๋
์ค์ ์ ๊ณ ์น ๋ค์, Certbot์๊ฒ “์ด๋ฏธ ๋ฐ๊ธ๋ ์ธ์ฆ์”๋ฅผ ๋ค์ Nginx์ ์ค์นํ๋ผ๊ณ ๋ช ๋ นํ๋ค.
sudo certbot install --cert-name trill-server.com
์ ์์ด๋ผ๋ฉด ์๋์ ๋ฉ์์ง๊ฐ ๋ฌ๋ค.
Deploying certificate
Successfully installed certificate.
3. (์ ํ) HTTPS ์๋ฒ ๋ธ๋ก ๊ฒํ
Certbot์ด ์๋์ผ๋ก listen 443 ssl; ๋ธ๋ก์ ์ถ๊ฐํด ์คฌ์ ํ ๋ฐ, ํ์ธํด ๋ณด์.
sudo vi /etc/nginx/conf.d/my-node-app.conf
ํ์ผ ๋์ ์๋์ ๊ฐ์ HTTPS ์น์ ์ด ์ถ๊ฐ๋์ด ์์ด์ผ ํ๋ค
server {
listen 443 ssl;
server_name trill-server.com;
ssl_certificate /etc/letsencrypt/live/trill-server.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/trill-server.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
location / {
proxy_pass http://127.0.0.1:3000;
# …(๋๋จธ์ง ํ๋ก์ ์ค์ )…
}
}
์๋ค๋ฉด ์ด HTTPS ๋ธ๋ก๋ ์ง์ ๋ถ์ฌ ๋ฃ๊ณ nginx -t && systemctl reload nginx ํด์ผํ๋ค.
์ด์
- http://trill-server.com ์ ์๋์ผ๋ก HTTPS๋ก ๋ฆฌ๋ค์ด๋ ํธ ๋๊ณ
- https://trill-server.com ์ Let’s Encrypt ์ธ์ฆ์๊ฐ ๋ถ์ ์์ ํ ์ฐ๊ฒฐ๋ก ๋ด๋ ค์ฌ ๊ฒ์ด๋ค.
3. ๋์ ํ์ธ
- ๋ธ๋ผ์ฐ์ ์์ https://trill-server.com ์ ์ ์
- ์ฃผ์์ฐฝ์ ์๋ฌผ์ (๐) ํ์์ ํจ๊ป “Hello from EC2 Express!” ๊ฐ ๋ณด์ด๋ฉด ์ฑ๊ณต์ด๋ค.

์ฑ๊ณต!!!!
๋ฐ๊ธ์ด ์ฑ๊ณตํ๋ฉด Certbot์ด Nginx ์ค์ ์ ์๋์ผ๋ก ์ ๋ฐ์ดํธํ๊ณ ,
sudo systemctl reload nginx
๊น์ง ์คํํด ์ค๋ค.

7. ์์ผ๋ก ํ ์ผ
- CI/CD: GitHub Actions → ์ปค๋ฐ→์๋ ๋ฐฐํฌ
- ์คํ ์ค์ผ์ผ๋ง: ALB + ASG → ํธ๋ํฝ์ ๋ฐ๋ผ ์ธ์คํด์ค ์ ์กฐ์
- ๋ชจ๋ํฐ๋ง: CloudWatch ์๋, Grafana ๋์๋ณด๋
- ๋ฐฑ์ /DR: EBS ์ค๋ ์ท, RDS ๋ค์ค AZ
- ๋ณด์ ๊ฐํ: WAF, IAM ์ ์ฑ , VPC ์๋ธ๋ท ๋ถ๋ฆฌ
์ง๊ธ๊น์ง๋ Node.js/Express ์ฑ์ EC2์ ์ฌ๋ฆฌ๊ณ ์ด์ํ๋ ๊ณผ์ ๋ง ์งํํ๊ณ ,
IntelliJ์์ Java + Spring ํ๋ก์ ํธ๋ฅผ ์ฐ๋ํ๋ ๋จ๊ณ๋ ์์ง ํ์ง ์์๋ค.









































