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 ํ…Œ์ŠคํŠธ ์‹คํ–‰

2025.06.17 - [๐Ÿ‡ฐ๐Ÿ‡ท ํ•œ๊ตญ์–ด (Korean)/AWS] - [11] AWS EC2์— Node.js & ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค์น˜ํ•˜๊ธฐ


3. PM2๋กœ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰

2025.06.17 - [๐Ÿ‡ฐ๐Ÿ‡ท ํ•œ๊ตญ์–ด (Korean)/AWS] - [12] ๋ฐฐํฌ ์•ˆ์ •ํ™” & ์šด์˜ ์ค€๋น„- PM2๋กœ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๊ด€๋ฆฌ


4. Nginx ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ์„ค์ •
   4.1 ์„ค์น˜
   4.2 ์„ค์ • ํŒŒ์ผ /etc/nginx/conf.d/my-node-app.conf ์ƒ์„ฑ
   4.3 ๊ฒ€์ฆ & ์žฌ์‹œ์ž‘
   4.4 ํ™•์ธ

2025.06.17 - [๐Ÿ‡ฐ๐Ÿ‡ท ํ•œ๊ตญ์–ด (Korean)/AWS] - [13] Nginx ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ์„ค์ • - ์‚ฌ์šฉ์ž ์š”์ฒญ์„ ๋ฐ›์•„ ๋ฐฑ์—”๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ์•ˆ์ „·ํšจ์œจ์ ์œผ๋กœ ์ „๋‹ฌ




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) ํ—ˆ์šฉ

 

  1. AWS ์ฝ˜์†” → EC2 → ์™ผ์ชฝ ๋ฉ”๋‰ด “๋ณด์•ˆ ๊ทธ๋ฃน”

 

  1. ์—ฌ๋Ÿฌ๋ถ„ ์•ฑ์— ์—ฐ๊ฒฐ๋œ SG ์„ ํƒ → “์ธ๋ฐ”์šด๋“œ ๊ทœ์น™ ํŽธ์ง‘”
  2. ์œ ํ˜•: 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 ํ”„๋กœ์ ํŠธ๋ฅผ ์—ฐ๋™ํ•˜๋Š” ๋‹จ๊ณ„๋Š” ์•„์ง ํ•˜์ง€ ์•Š์•˜๋‹ค.

+ Recent posts