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 ํ”„๋กœ์ ํŠธ๋ฅผ ์—ฐ๋™ํ•˜๋Š” ๋‹จ๊ณ„๋Š” ์•„์ง ํ•˜์ง€ ์•Š์•˜๋‹ค.


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 ํ™•์ธ


6. HTTPS ์ ์šฉ (Let’s Encrypt)
  6.1 ๋ณด์•ˆ ๊ทธ๋ฃน: HTTPS(443) → 0.0.0.0/0 ์ถ”๊ฐ€
  6.2 Certbot ์„ค์น˜
  6.3 ์ธ์ฆ์„œ ๋ฐœ๊ธ‰ & ์„ค์น˜
  6.4 ์ž๋™ ๊ฐฑ์‹ 
  6.5 ํ™•์ธ


 


 

5. ๋„๋ฉ”์ธ(Route 53) ์—ฐ๊ฒฐ

< ๋„๋ฉ”์ธ์„ AWS Route 53์œผ๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ์ฃผ๋œ ๋ชฉ์ ๊ณผ ๊ทธ ์ด์œ  > 


1. ์‚ฌ์šฉ์ž ๊ฒฝํ—˜(UX) ๊ฐœ์„ : ๊ธฐ์–ตํ•˜๊ธฐ ์‰ฌ์šด ์ฃผ์†Œ ์ œ๊ณต
IP ์ฃผ์†Œ(์˜ˆ: 13.124.193.60)๋Š” ์‚ฌ๋žŒ์—๊ฒŒ ์™ธ์šฐ๊ธฐ ์–ด๋ ต๊ณ ,
๋„๋ฉ”์ธ ์ด๋ฆ„(์˜ˆ: myapp.com)์€ ์ง๊ด€์ ์ด๊ณ  ๋ธŒ๋žœ๋“œํ™”๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
์‚ฌ์šฉ์ž๋Š” ๋ธŒ๋ผ์šฐ์ € ์ฃผ์†Œ์ฐฝ์— ๋„๋ฉ”์ธ์„ ์ž…๋ ฅ๋งŒ ํ•˜๋ฉด ์„œ๋น„์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์–ด ํŽธ๋ฆฌํ•˜๋‹ค.


2. ์œ ์—ฐํ•œ ํŠธ๋ž˜ํ”ฝ ๊ด€๋ฆฌ ๋ฐ ํ™•์žฅ์„ฑ
Route 53์˜ ๋ผ์šดํŒ… ์ •์ฑ…(Routing Policy)์„ ํ†ตํ•ด ๋‹จ์ˆœ ๋ผ์šด๋“œ๋กœ๋นˆ, ์ง€๋ฆฌ์  ์œ„์น˜ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…, ๊ฐ€์ค‘์น˜ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ… ๋“ฑ ๋‹ค์–‘ํ•œ ๋ถ„์‚ฐ ์ „๋žต์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
ํ•„์š”์‹œ ํ—ฌ์Šค ์ฒดํฌ(Health Check)๋ฅผ ์—ฐ๋™ํ•ด, ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ์ธ์Šคํ„ด์Šค๋กœ ํŠธ๋ž˜ํ”ฝ์ด ๊ฐ€์ง€ ์•Š๋„๋ก ์ž๋™์œผ๋กœ ์šฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.



3. ๊ณ ๊ฐ€์šฉ์„ฑ·์ €์ง€์—ฐ DNS ์„œ๋น„์Šค
AWS ์ „์—ญ์— ๋ถ„์‚ฐ๋œ DNS ๋„ค์ž„์„œ๋ฒ„๋ฅผ ํ†ตํ•ด 99.999% ์ˆ˜์ค€์˜ ๊ฐ€์šฉ์„ฑ๊ณผ ๋‚ฎ์€ ์‘๋‹ต ์ง€์—ฐ์„ ๋ณด์žฅํ•œ๋‹ค.
์ „ ์„ธ๊ณ„ ์–ด๋””์„œ ์ ‘์†ํ•˜๋“  ๋น ๋ฅด๊ณ  ์•ˆ์ •์ ์ธ DNS ์กฐํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.


4. AWS ์„œ๋น„์Šค ์—ฐ๋™์˜ ์ผ๊ด€์„ฑ
Route 53์€ AWS ๋‚ด๋ถ€ ๋ฆฌ์†Œ์Šค(ELB, CloudFront, S3 ์ •์  ์›น ํ˜ธ์ŠคํŒ… ๋“ฑ)์™€ ์›ํ™œํ•˜๊ฒŒ ํ†ตํ•ฉ๋˜์–ด,
๋ณ„๋„์˜ ๋ณต์žกํ•œ ์„ค์ • ์—†์ด๋„ ๋Š๊น€ ์—†๋Š” ๋ผ์šฐํŒ…์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, ALB ์ฃผ์†Œ(alb-123456.us-east-1.elb.amazonaws.com)๋ฅผ ๋„๋ฉ”์ธ(api.myapp.com)์— ์‰ฝ๊ฒŒ ๋งคํ•‘ํ•  ์ˆ˜ ์žˆ๋‹ค.


5. SSL/TLS ์ธ์ฆ์„œ ๋ฐœ๊ธ‰·๊ฐฑ์‹  ํŽธ์˜
AWS Certificate Manager(ACM)๊ณผ ์—ฐ๋™ํ•ด ๋„๋ฉ”์ธ ๊ฒ€์ฆ์„ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.
Route 53์œผ๋กœ ๋„๋ฉ”์ธ์„ ๊ด€๋ฆฌํ•˜๋ฉด DNS ๋ฐฉ์‹ ๋„๋ฉ”์ธ ๊ฒ€์ฆ์ด ํด๋ฆญ ๋ช‡ ๋ฒˆ์œผ๋กœ ์™„๋ฃŒ๋ผ, Let’s Encrypt๋‚˜ ACM ์ธ์ฆ์„œ ๋ฐœ๊ธ‰·๊ฐฑ์‹ ์ด ํ›จ์”ฌ ๊ฐ„ํŽธํ•ด์ง„๋‹ค.



6. ๋„๋ฉ”์ธ ๋ ˆ์ฝ”๋“œ์˜ ์ค‘์•™ ์ง‘์ค‘ ๊ด€๋ฆฌ
ํ•˜๋‚˜์˜ ์ฝ˜์†”(Route 53)์—์„œ A, CNAME, MX, TXT, SRV ๋“ฑ ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ๋ฅผ ํ†ตํ•ฉ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด,
DNS ์„ค์ • ๋ณ€๊ฒฝ·์ถ”๊ฐ€·์‚ญ์ œ ์‹œ ํŽธ๋ฆฌํ•˜๊ณ  ์‹ค์ˆ˜ ๊ฐ€๋Šฅ์„ฑ์ด ์ค„์–ด๋“ ๋‹ค.





์š”์•ฝ
๋„๋ฉ”์ธ์„ Route 53์— ์—ฐ๊ฒฐํ•˜๋ฉด
1๏ธโƒฃ ์‰ฝ๊ณ  ๊ธฐ์–ตํ•˜๊ธฐ ์ข‹์€ ์ฃผ์†Œ ์ œ๊ณต
2๏ธโƒฃ ๋‹ค์–‘ํ•œ ๋ผ์šฐํŒ… ์ •์ฑ…·ํ—ฌ์Šค ์ฒดํฌ๋กœ ํŠธ๋ž˜ํ”ฝ ๊ด€๋ฆฌ
3๏ธโƒฃ ๋†’์€ ๊ฐ€์šฉ์„ฑ·์ €์ง€์—ฐ DNS ์„œ๋น„์Šค
4๏ธโƒฃ AWS ๋ฆฌ์†Œ์Šค์™€ ์›ํ™œํ•œ ํ†ตํ•ฉ
5๏ธโƒฃ SSL/TLS ์ธ์ฆ์„œ ์ž๋™ ๊ฒ€์ฆ·๋ฐœ๊ธ‰ ์ง€์›
6๏ธโƒฃ DNS ๋ ˆ์ฝ”๋“œ ์ค‘์•™ ์ง‘์ค‘ ๊ด€๋ฆฌ
๋“ฑ์˜ ์ด์ ์„ ์–ป์–ด, ์„œ๋น„์Šค ์ ‘๊ทผ์„ฑ๊ณผ ์•ˆ์ •์„ฑ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 5.1 ๋„๋ฉ”์ธ DNS( A ๋ ˆ์ฝ”๋“œ) ํ™•์ธ

 

Certbot์ด trill-server.com ์œผ๋กœ ์ธ์ฆ์„œ๋ฅผ ๋ฐœ๊ธ‰ํ•˜๋ ค๋ฉด,

๋จผ์ € DNS์— A ๋ ˆ์ฝ”๋“œ๊ฐ€ ์ œ๋Œ€๋กœ ์„ค์ •๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.

 

  • ๋„๋ฉ”์ธ ๋“ฑ๋ก ๋Œ€ํ–‰์‚ฌ(ํ˜น์€ AWS Route 53) ์ฝ˜์†”์— ๊ฐ€์„œ 
  • Route 53 ์„œ๋น„์Šค๋กœ ์ด๋™
  • ์ƒ๋‹จ ๊ฒ€์ƒ‰์ฐฝ(search AWS services)์— “Route 53” ์ž…๋ ฅ Route 53 ํด๋ฆญ

 

์ƒˆ ๋„๋ฉ”์ธ์„ ๋“ฑ๋ก(purchase) ํ•˜๋Š” ์ฐฝ์ด๋‹ค ์ฆ‰, “trill-server.com” ์ด๋ผ๋Š” ๋„๋ฉ”์ธ์„ ์•„์ง ๊ตฌ๋งคํ•˜์ง€ ์•Š์•˜๋ฉด ์—ฌ๊ธฐ์„œ ์—ฐ 14 USD ๋ฅผ ๊ฒฐ์ œํ•ด์„œ ์†Œ์œ ๊ถŒ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋œป์ด๋‹ค.

 

 

“์—ฌ๊ธฐ์„œ ํ•ด์•ผ ํ•  ์ผ” ์š”์•ฝ


๋„๋ฉ”์ธ์„ ์•„์ง ๊ตฌ๋งคํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด
- ์ด ํ™”๋ฉด์—์„œ “trill-server.com” ์„ ์„ ํƒ → ์šฐ์ธก “์„ ํƒ” ํด๋ฆญ → ๊ฒฐ์ œ ์ง„ํ–‰
- ๊ตฌ๋งค๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด Route 53์ด ์ž๋™์œผ๋กœ ํ•ด๋‹น ๋„๋ฉ”์ธ์˜ Hosted Zone(ํ˜ธ์Šคํ‹ฐ๋“œ ์กด)์„ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด ์ค€๋‹ค.
- ๊ทธ ํ›„์— “Hosted zones” ๋ฉ”๋‰ด์—์„œ ๋ฐฉ๊ธˆ ์ƒ์„ฑ๋œ ํ˜ธ์Šคํ‹ฐ๋“œ ์กด์„ ํด๋ฆญํ•ด A ๋ ˆ์ฝ”๋“œ(EC2 IP) ๋“ฑ์„ ์„ค์ •ํ•˜์‹œ๋ฉด ๋œ๋‹ค.


์ด๋ฏธ ๋‹ค๋ฅธ ๊ณณ์—์„œ ๋„๋ฉ”์ธ์„ ๊ตฌ๋งคํ•˜์˜€๋‹ค๋ฉด
- ์ด “๋„๋ฉ”์ธ ๋“ฑ๋ก” ํ™”๋ฉด์€ ์ง€๋‚˜์น˜๊ณ , ์ขŒ์ธก ๋ฉ”๋‰ด์˜ Hosted zones ๋กœ ๊ฐ„์š”.“Create hosted zone” ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ์ง์ ‘ trill-server.com ํ˜ธ์Šคํ‹ฐ๋“œ ์กด์„ ๋งŒ๋“  ๋’ค,
- NS ๋ ˆ์ฝ”๋“œ๋ฅผ ์™ธ๋ถ€ ๋ ˆ์ง€์ŠคํŠธ๋ผ(GoDaddy, ๊ฐ€๋น„์•„ ๋“ฑ)์— ๋“ฑ๋กํ•˜๊ณ  A ๋ ˆ์ฝ”๋“œ๋ฅผ EC2 ํผ๋ธ”๋ฆญIP๋กœ ์„ค์ •ํ•˜๋ฉด Route 53์œผ๋กœ DNS ๊ด€๋ฆฌ๋ฅผ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

๋„๋ฉ”์ธ์„ ๊ฒฐ์ œํ•˜๋ฉด ์ด๋Ÿฐ ์ƒํƒœ์ฐฝ์ด ๋œฌ๋‹ค.

 

“trill-server.com” ํ˜ธ์Šคํ‹ฐ๋“œ ์กด์— ์•„์ง A ๋ ˆ์ฝ”๋“œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์ฆ‰, ๋„๋ฉ”์ธ์ด EC2 ์ธ์Šคํ„ด์Šค๋กœ ํ–ฅํ•˜๋„๋ก ์„ค์ •์„ ํ•˜๋‚˜ ๋” ์ถ”๊ฐ€ํ•ด์•ผํ•œ๋‹ค.

 

 

 

 

  • trill-server.com  A ๋ ˆ์ฝ”๋“œ
    • ํ˜ธ์ŠคํŠธ ์ด๋ฆ„: @ (๋˜๋Š” ๋น„์›Œ๋‘ )
    • ๊ฐ’(Value): EC2 ํผ๋ธ”๋ฆญ IPv4 ์ฃผ์†Œ (์˜ˆ: 13.124.193.60)
    • TTL: ๊ธฐ๋ณธ๊ฐ’(300์ดˆ)

 

-

  • ์ €์žฅ → ์ „ํŒŒ(๋ณดํ†ต ์ˆ˜ ๋ถ„ ๋‚ด)

 

 

 

 

 

์ž ์‹œ(์ตœ๋Œ€ 5๋ถ„) ๊ธฐ๋‹ค๋ฆฐ ๋’ค, CloudShell์—์„œ ๋‹ค์‹œ DNS ์บ์‹œ๋ฅผ ๋ฌด์‹œํ•˜๊ณ  ์กฐํšŒํ•ด๋ณธ๋‹ค.

# AWS ๋‚ด DNS ๋ฆฌ์กธ๋ฒ„ ํ™•์ธ
dig +short trill-server.com

# ๊ตฌ๊ธ€ ํผ๋ธ”๋ฆญ DNS๋กœ ํ™•์ธ
dig +short @8.8.8.8 trill-server.com

์ด ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ’์ด ๋‚˜์˜ค๋ฉด ์„ฑ๊ณต์ด๋‹ค.

43.200.31.52

 

 

 

์ด์ œ ๋ธŒ๋ผ์šฐ์ €๋‚˜ curl ๋กœ ์ ‘์†ํ•ด ๋ณธ๋‹ค.

curl http://trill-server.com
# → Hello from EC2 Express!

 

 Hello from EC2 Express!์ด ๋‚˜์™€์„œ

 

 

 

 

์„ฑ๊ณต!!!

 



1. EC2 ์ธ์Šคํ„ด์Šค ์ค€๋น„

2025.06.12 - [๐Ÿ‡ฐ๐Ÿ‡ท ํ•œ๊ตญ์–ด (Korean)/AWS] - [9] EC2 ์ธ์Šคํ„ด์Šค ์—ฐ๊ฒฐ

 

[9] EC2 ์ธ์Šคํ„ด์Šค ์—ฐ๊ฒฐ

์ด ํ™”๋ฉด์€ “์ด ์ธ์Šคํ„ด์Šค์— ์–ด๋–ป๊ฒŒ ์—ฐ๊ฒฐ(connect)ํ•  ๊ฒƒ์ธ์ง€”๋ฅผ ์„ ํƒํ•˜๋Š” ์—ฐ๊ฒฐ ํƒญ์ด๋‹ค. 1. EC2 ์ธ์Šคํ„ด์Šค ์—ฐ๊ฒฐ (EC2 Instance Connect)๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ฐ”๋กœ SSH ์—ฐ๊ฒฐํ•ด ์ฃผ๋Š” AWS ๊ณต์‹ ๊ธฐ๋Šฅ์ง€์› OS: Amazon Linux 2, Ubu

yeonbikim.tistory.com

 



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 & ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค์น˜ํ•˜๊ธฐ

 

[11] AWS EC2์— Node.js & ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค์น˜ํ•˜๊ธฐ

๋ชฉํ‘œ : AWS EC2 ์ธ์Šคํ„ด์Šค์— Express.js ๊ธฐ๋ฐ˜ Node.js ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๊ณ , ์™ธ๋ถ€์—์„œ 80/3000 ํฌํŠธ๋กœ ์ ‘์†์ฃผ์š” ๊ธฐ์ˆ : EC2, AMI, ๋ณด์•ˆ ๊ทธ๋ฃน, SSH ํ‚ค ํŽ˜์–ด, Node.js(22.x), npm, Express, PM2, Nginxํ™˜๊ฒฝ: Amazon Linux 2023 (ap

yeonbikim.tistory.com

 



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

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

 

[12] ๋ฐฐํฌ ์•ˆ์ •ํ™” & ์šด์˜ ์ค€๋น„- PM2๋กœ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๊ด€๋ฆฌ

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

yeonbikim.tistory.com

 


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 ํ™•์ธ


6. HTTPS ์ ์šฉ (Let’s Encrypt)
  6.1 ๋ณด์•ˆ ๊ทธ๋ฃน: HTTPS(443) → 0.0.0.0/0 ์ถ”๊ฐ€
  6.2 Certbot ์„ค์น˜
  6.3 ์ธ์ฆ์„œ ๋ฐœ๊ธ‰ & ์„ค์น˜
  6.4 ์ž๋™ ๊ฐฑ์‹ 
  6.5 ํ™•์ธ

 

 


4. Nginx๋กœ ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ

 

< Nginx๋ฅผ ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ๋กœ ๋‘๋Š” ๋ชฉ์ ๊ณผ ์ด์œ > 
“์‚ฌ์šฉ์ž ์š”์ฒญ์„ ๋ฐ›์•„ ๋ฐฑ์—”๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ์•ˆ์ „·ํšจ์œจ์ ์œผ๋กœ ์ „๋‹ฌ”ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.

๊ตฌ์ฒด์ ์œผ๋กœ ์‚ดํŽด๋ณด๋ฉด:

1. ํ‘œ์ค€ ํฌํŠธ(80/443) ํ†ต์ผ
 - ๋ธŒ๋ผ์šฐ์ €๋Š” ํฌํŠธ ๋ฒˆํ˜ธ ์—†์ด ์ ‘์†ํ•  ๋•Œ ๊ธฐ๋ณธ์ ์œผ๋กœ 80(HTTP) ๋˜๋Š” 443(HTTPS) ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
 - Node.js๋‚˜ Spring Boot ๊ฐ™์€ ๋ฐฑ์—”๋“œ๋Š” ๋ณดํ†ต 3000, 8080 ๊ฐ™์€ ๋น„ํ‘œ์ค€ ํฌํŠธ์—์„œ ๋™์ž‘ํ•˜๋ฏ€๋กœ,
 - Nginx๊ฐ€ 80/443์„ ๋ฐ›์•„ ๋‚ด๋ถ€์˜ 3000/8080์œผ๋กœ ํฌ์›Œ๋”ฉํ•ด ์ฃผ๋ฉด ์‚ฌ์šฉ์ž๋Š” https://your-domain.com ๋งŒ ์ž…๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

2. SSL/TLS ์ข…๋ฃŒ(TLS Termination)
 - HTTPS ์ธ์ฆ์„œ์™€ ํ‚ค ๊ด€๋ฆฌ๋ฅผ Nginx ๋‹จ ํ•œ ๊ณณ์—์„œ๋งŒ ์ฒ˜๋ฆฌํ•œ๋‹ค.
 - ๋ฐฑ์—”๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๋Š” ํ‰๋ฌธ HTTP๋กœ ๋™์ž‘ํ•ด๋„, ์™ธ๋ถ€ ํ†ต์‹ ์€ Nginx๊ฐ€ ์•”ํ˜ธํ™”·๋ณตํ˜ธํ™”ํ•ด ์ฃผ๋‹ˆ ๊ฐœ๋ฐœ ํŽธ์˜์„ฑ๊ณผ ๋ณด์•ˆ์„ ๋™์‹œ์— ์ฑ™๊ธธ ์ˆ˜ ์žˆ๋‹ค.

3. ์ •์  ์ž์› ์„œ๋น™ & ์บ์‹ฑ
  - ์ด๋ฏธ์ง€·CSS·JS ๊ฐ™์€ ์ •์  ํŒŒ์ผ์„ Nginx๊ฐ€ ์ง์ ‘ ์„œ๋น™ํ•˜๋ฉด,
  - ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์˜ ๋ถ€ํ•˜๋ฅผ ์ค„์ด๊ณ  ์‘๋‹ต ์†๋„๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.
  - expires ํ—ค๋”๋‚˜ ์บ์‹œ ์„ค์ •๋„ Nginx์—์„œ ๊ฐ„๋‹จํžˆ ์ œ์–ด ๊ฐ€๋Šฅ๋‹ค.

4. ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ & ๊ฐ€์šฉ์„ฑ
  - ํ•˜๋‚˜ ์ด์ƒ์˜ ๋ฐฑ์—”๋“œ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฌถ์–ด(upstream),
  - ๋ผ์šด๋“œ๋กœ๋นˆ·IP ํ•ด์‹œ ๋“ฑ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์š”์ฒญ์„ ๋ถ„์‚ฐํ•ด ๊ฐ€์šฉ์„ฑ์„ ๋†’์ธ๋‹ค.
  - ์žฅ์• ๊ฐ€ ๋‚œ ์„œ๋ฒ„๋ฅผ ์ž๋™์œผ๋กœ ์ œ์™ธ(remove)ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

5. ๋ณด์•ˆ ๊ฐ•ํ™” & ํ—ค๋” ์‚ฝ์ž…
  - X-Frame-Options, Strict-Transport-Security ๊ฐ™์€ ๋ณด์•ˆ ํ—ค๋”๋ฅผ ์ผ๊ด„ ์ ์šฉ
  - ์š”์ฒญ ํ•„ํ„ฐ๋ง(IP ์ฐจ๋‹จ, WAF ํ†ตํ•ฉ)์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ง์ ‘ ๋…ธ์ถœ์‹œํ‚ค์ง€ ์•Š๊ณ  ๋ฐฉํ™”๋ฒฝ ์—ญํ•  ์ˆ˜ํ–‰
  - ํด๋ผ์ด์–ธํŠธ ์‹ค์ œ IP(X-Real-IP)๋ฅผ ๋ฐฑ์—”๋“œ์— ์ „๋‹ฌํ•ด ๋กœ๊ทธ·์ถ”์ ์ด ์ •ํ™•ํ•ด์ง„๋‹ค.

6. ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ(Blue/Green, Canary)
  - ๋‘ ๊ฐœ ์ด์ƒ์˜ ๋ฒ„์ „(blue/green)์„ ์ค€๋น„ํ•ด ๋‘๊ณ ,
  - Nginx ์„ค์ •๋งŒ ๋ฐ”๊ฟ” ๋ฆฌ๋กœ๋“œํ•ด ๊ฐ€๋ฉด์„œ ํŠธ๋ž˜ํ”ฝ์„ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์–ด,
  - ๋ฐฐํฌ ์‹œ ์„œ๋น„์Šค ์ค‘๋‹จ ์—†์ด ์ƒˆ๋กœ์šด ๋ฒ„์ „์„ ์•ˆ์ •์ ์œผ๋กœ ๋กค์•„์›ƒํ•  ์ˆ˜ ์žˆ๋‹ค.





์š”์•ฝ

Nginx ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ๋Š” “ํ”„๋ก ํŠธ ๊ด€๋ฌธ” ์—ญํ• ์„ ํ•˜๋ฉฐ,
โœ”๏ธ ํฌํŠธ·๋„๋ฉ”์ธ ํ†ต์ผ
โœ”๏ธ SSL/TLS ์ง‘์ค‘ ๊ด€๋ฆฌ
โœ”๏ธ ์ •์  ํŒŒ์ผ ๊ณ ์† ์„œ๋น™
โœ”๏ธ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ
โœ”๏ธ ๋ณด์•ˆ ํ—ค๋”·ํ•„ํ„ฐ๋ง
โœ”๏ธ ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ ์ง€์›
๊ฐ™์€ ํ”„๋กœ๋•์…˜๊ธ‰ ์šด์˜ ๊ธฐ๋Šฅ์„ ๋ฐฑ์—”๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ถ”๊ฐ€ ๋น„์šฉ ์—†์ด ์ œ๊ณตํ•ด ์ค€๋‹ค.

 


 

1. Nginx ์„ค์น˜

sudo dnf install -y nginx

์ด์ œ Nginx ์„ค์น˜๊นŒ์ง€ ๋๋‚ฌ์œผ๋‹ˆ,

“๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ” ์„ค์ •์„ ๋งŒ๋“ค์–ด์„œ ์™ธ๋ถ€(80๋ฒˆ ํฌํŠธ)๋กœ ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์„ PM2๊ฐ€ ๋„์šด Node.js ์•ฑ(3000๋ฒˆ)์œผ๋กœ ์ „๋‹ฌํ•ด ๋ณด๊ฒ ๋‹ค.

 

 

2.๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ์„ค์ •

   

 

2.1 ๋ณด์•ˆ ๊ทธ๋ฃน์— HTTP(80) ์—ด๊ธฐ


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

   2. ์•ฑ์— ์—ฐ๊ฒฐ๋œ SG ์„ ํƒ → ์ธ๋ฐ”์šด๋“œ ๊ทœ์น™ ํŽธ์ง‘

    3.์œ ํ˜•: HTTP, ํฌํŠธ ๋ฒ”์œ„: 80, ์†Œ์Šค: 0.0.0.0/0 → ์ €์žฅ

 

๋‚˜๋Š” ์ด๋ฏธ ์•„๋ž˜ ํ™”๋ฉด๊ณผ ๊ฐ™์ด ๋ณด์•ˆ ๊ทธ๋ฃน ์ธ๋ฐ”์šด๋“œ์— SSH(22) ์™€ HTTP(80) ๊ฐ€ ์ด๋ฏธ ์—ด๋ ค ์žˆ์–ด์„œ

HTTP(80) ๋Š” ์ถ”๊ฐ€๋กœ ํ•  ์ผ์ด ์—†๋‹ค.

 

 

 

 

 

2.2 Nginx ์„ค์ • ํŒŒ์ผ ์ƒ์„ฑ

sudo vi /etc/nginx/conf.d/my-node-app.conf

 

 

์ด ์ฐฝ์ด ๋œจ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์ž…๋ ฅํ•ด์ค€๋‹ค.

server {
    listen 80;
    server_name trill-server;

    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;
    }
}
~

 

 

Esc  :wq  Enter ๋กœ ์ €์žฅ·์ข…๋ฃŒํ•œ๋‹ค. 

 

 

2.3 Nginx ๋ฌธ๋ฒ• ๊ฒ€์‚ฌ & ์„œ๋น„์Šค ๊ธฐ๋™

sudo nginx -t
# [ OK ] syntax is ok

sudo systemctl enable --now nginx
# nginx.service ํ™œ์„ฑํ™” ๋ฐ ๋ฐ”๋กœ ์‹œ์ž‘

 

 

2.4 ๋™์ž‘ ํ™•์ธ

curl http://your-domain-or-ip/

 

Hello from EC2 Express!

๊ฐ€ ๋‚˜์˜ค๋‹ˆ ์„ฑ๊ณต!!

 

 

 

 

 

2.5 (์„ ํƒ) HTTPS ์ ์šฉ

๋„๋ฉ”์ธ์ด ์žˆ์œผ์‹œ๋ฉด Let’s Encrypt Certbot์œผ๋กœ SSL๊นŒ์ง€ ๋ถ™์—ฌ๋„ ์ข‹๋‹ค.

sudo dnf install -y certbot python3-certbot-nginx
sudo certbot --nginx -d trill-server.com

 

์•„๋ž˜์™€ ๊ฐ™์€ ์ฐฝ์ด ๋–ด๋‹ค.

์—ฌ๊ธฐ์„œ ํ•ด์•ผ ํ•  ์ผ์€ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€์ด๋‹ค.

ello from EC2 Express![ec2-usesudo dnf install -y certbot python3-certbot-nginxt python3-certbot-nginx
sudo certbot --nginx -d trill-server.com
Last metadata expiration check: 0:47:19 ago on Tue Jun 17 05:54:08 2025.
Dependencies resolved.
==============================================================================================================================================================================================
 Package                                             Architecture                        Version                                               Repository                                Size
==============================================================================================================================================================================================
Installing:
 certbot                                             noarch                              2.6.0-4.amzn2023.0.1                                  amazonlinux                               49 k
 python3-certbot-nginx                               noarch                              2.6.0-4.amzn2023.0.1                                  amazonlinux                              158 k
Installing dependencies:
 fontawesome-fonts                                   noarch                              1:4.7.0-11.amzn2023.0.2                               amazonlinux                              205 k
 fonts-filesystem                                    noarch                              1:2.0.5-12.amzn2023.0.2                               amazonlinux                              9.5 k
 python3-acme                                        noarch                              2.6.0-4.amzn2023.0.1                                  amazonlinux                              161 k
 python3-certbot                                     noarch                              2.6.0-4.amzn2023.0.1                                  amazonlinux                              677 k
 python3-configargparse                              noarch                              1.7-1.amzn2023                                        amazonlinux                               45 k
 python3-josepy                                      noarch                              1.13.0-6.amzn2023                                     amazonlinux                               61 k
 python3-parsedatetime                               noarch                              2.6-10.amzn2023                                       amazonlinux                               80 k
 python3-pyOpenSSL                                   noarch                              21.0.0-1.amzn2023.0.2                                 amazonlinux                               92 k
 python3-pyparsing                                   noarch                              2.4.7-6.amzn2023.0.2                                  amazonlinux                              152 k
 python3-pyrfc3339                                   noarch                              1.1-16.amzn2023                                       amazonlinux                               19 k
Installing weak dependencies:
 python-josepy-doc                                   noarch                              1.13.0-6.amzn2023                                     amazonlinux                               20 k

Transaction Summary
==============================================================================================================================================================================================
Install  13 Packages

Total download size: 1.7 M
Installed size: 7.8 M
Downloading Packages:
(1/13): certbot-2.6.0-4.amzn2023.0.1.noarch.rpm                                                                                                               1.2 MB/s |  49 kB     00:00    
(2/13): fonts-filesystem-2.0.5-12.amzn2023.0.2.noarch.rpm                                                                                                     176 kB/s | 9.5 kB     00:00    
(3/13): python-josepy-doc-1.13.0-6.amzn2023.noarch.rpm                                                                                                        199 kB/s |  20 kB     00:00    
(4/13): python3-acme-2.6.0-4.amzn2023.0.1.noarch.rpm                                                                                                          1.7 MB/s | 161 kB     00:00    
(5/13): fontawesome-fonts-4.7.0-11.amzn2023.0.2.noarch.rpm                                                                                                    1.3 MB/s | 205 kB     00:00    
(6/13): python3-configargparse-1.7-1.amzn2023.noarch.rpm                                                                                                      974 kB/s |  45 kB     00:00    
(7/13): python3-certbot-nginx-2.6.0-4.amzn2023.0.1.noarch.rpm                                                                                                 1.4 MB/s | 158 kB     00:00    
(8/13): python3-certbot-2.6.0-4.amzn2023.0.1.noarch.rpm                                                                                                       4.7 MB/s | 677 kB     00:00    
(9/13): python3-josepy-1.13.0-6.amzn2023.noarch.rpm                                                                                                           725 kB/s |  61 kB     00:00    
(10/13): python3-pyparsing-2.4.7-6.amzn2023.0.2.noarch.rpm                                                                                                    2.1 MB/s | 152 kB     00:00    
(11/13): python3-parsedatetime-2.6-10.amzn2023.noarch.rpm                                                                                                     718 kB/s |  80 kB     00:00    
(12/13): python3-pyOpenSSL-21.0.0-1.amzn2023.0.2.noarch.rpm                                                                                                   859 kB/s |  92 kB     00:00    
(13/13): python3-pyrfc3339-1.1-16.amzn2023.noarch.rpm                                                                                                         384 kB/s |  19 kB     00:00    
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                                                         3.8 MB/s | 1.7 MB     00:00     
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                                                                                      1/1 
  Installing       : python3-pyOpenSSL-21.0.0-1.amzn2023.0.2.noarch                                                                                                                      1/13 
  Installing       : python3-pyrfc3339-1.1-16.amzn2023.noarch                                                                                                                            2/13 
  Installing       : python3-pyparsing-2.4.7-6.amzn2023.0.2.noarch                                                                                                                       3/13 
  Installing       : python3-parsedatetime-2.6-10.amzn2023.noarch                                                                                                                        4/13 
  Installing       : python3-configargparse-1.7-1.amzn2023.noarch                                                                                                                        5/13 
  Installing       : python-josepy-doc-1.13.0-6.amzn2023.noarch                                                                                                                          6/13 
  Installing       : python3-josepy-1.13.0-6.amzn2023.noarch                                                                                                                             7/13 
  Installing       : python3-acme-2.6.0-4.amzn2023.0.1.noarch                                                                                                                            8/13 
  Installing       : python3-certbot-2.6.0-4.amzn2023.0.1.noarch                                                                                                                         9/13 
  Installing       : fonts-filesystem-1:2.0.5-12.amzn2023.0.2.noarch                                                                                                                    10/13 
  Installing       : fontawesome-fonts-1:4.7.0-11.amzn2023.0.2.noarch                                                                                                                   11/13 
  Installing       : certbot-2.6.0-4.amzn2023.0.1.noarch                                                                                                                                12/13 
  Running scriptlet: certbot-2.6.0-4.amzn2023.0.1.noarch                                                                                                                                12/13 

Certbot auto renewal timer is not started by default.
Run 'systemctl start certbot-renew.timer' to enable automatic renewals.

  Installing       : python3-certbot-nginx-2.6.0-4.amzn2023.0.1.noarch                                                                                                                  13/13 
  Running scriptlet: python3-certbot-nginx-2.6.0-4.amzn2023.0.1.noarch                                                                                                                  13/13 
  Verifying        : certbot-2.6.0-4.amzn2023.0.1.noarch                                                                                                                                 1/13 
  Verifying        : fontawesome-fonts-1:4.7.0-11.amzn2023.0.2.noarch                                                                                                                    2/13 
  Verifying        : fonts-filesystem-1:2.0.5-12.amzn2023.0.2.noarch                                                                                                                     3/13 
  Verifying        : python-josepy-doc-1.13.0-6.amzn2023.noarch                                                                                                                          4/13 
  Verifying        : python3-acme-2.6.0-4.amzn2023.0.1.noarch                                                                                                                            5/13 
  Verifying        : python3-certbot-2.6.0-4.amzn2023.0.1.noarch                                                                                                                         6/13 
  Verifying        : python3-certbot-nginx-2.6.0-4.amzn2023.0.1.noarch                                                                                                                   7/13 
  Verifying        : python3-configargparse-1.7-1.amzn2023.noarch                                                                                                                        8/13 
  Verifying        : python3-josepy-1.13.0-6.amzn2023.noarch                                                                                                                             9/13 
  Verifying        : python3-parsedatetime-2.6-10.amzn2023.noarch                                                                                                                       10/13 
  Verifying        : python3-pyOpenSSL-21.0.0-1.amzn2023.0.2.noarch                                                                                                                     11/13 
  Verifying        : python3-pyparsing-2.4.7-6.amzn2023.0.2.noarch                                                                                                                      12/13 
  Verifying        : python3-pyrfc3339-1.1-16.amzn2023.noarch                                                                                                                           13/13 
==============================================================================================================================================================================================
WARNING:
  A newer release of "Amazon Linux" is available.

  Available Versions:

  Version 2023.7.20250609:
    Run the following command to upgrade to 2023.7.20250609:

      dnf upgrade --releasever=2023.7.20250609

    Release notes:
     https://docs.aws.amazon.com/linux/al2023/release-notes/relnotes-2023.7.20250609.html

==============================================================================================================================================================================================

Installed:
  certbot-2.6.0-4.amzn2023.0.1.noarch      fontawesome-fonts-1:4.7.0-11.amzn2023.0.2.noarch fonts-filesystem-1:2.0.5-12.amzn2023.0.2.noarch   python-josepy-doc-1.13.0-6.amzn2023.noarch   
  python3-acme-2.6.0-4.amzn2023.0.1.noarch python3-certbot-2.6.0-4.amzn2023.0.1.noarch      python3-certbot-nginx-2.6.0-4.amzn2023.0.1.noarch python3-configargparse-1.7-1.amzn2023.noarch 
  python3-josepy-1.13.0-6.amzn2023.noarch  python3-parsedatetime-2.6-10.amzn2023.noarch     python3-pyOpenSSL-21.0.0-1.amzn2023.0.2.noarch    python3-pyparsing-2.4.7-6.amzn2023.0.2.noarch
  python3-pyrfc3339-1.1-16.amzn2023.noarch

Complete!
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices)
 (Enter 'c' to cancel):

 


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๋กœ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰ 

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 ํ™•์ธ


6. HTTPS ์ ์šฉ (Let’s Encrypt)
  6.1 ๋ณด์•ˆ ๊ทธ๋ฃน: HTTPS(443) → 0.0.0.0/0 ์ถ”๊ฐ€
  6.2 Certbot ์„ค์น˜
  6.3 ์ธ์ฆ์„œ ๋ฐœ๊ธ‰ & ์„ค์น˜
  6.4 ์ž๋™ ๊ฐฑ์‹ 
  6.5 ํ™•์ธ


 


๋ชฉ์ฐจ์—์„œ 

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

 

 

3.  PM2๋กœ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๊ด€๋ฆฌ

< PM2๋กœ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰์„ ํ•˜๋Š” ๋ชฉ์  >
PM2(Process Manager 2)๋ฅผ ์“ฐ๋Š” ์ด์œ ๋Š”, 
๋‹จ์ˆœํžˆ node index.js & ์ฒ˜๋Ÿผ ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ๋„์šฐ๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋Š” ๋ถ€์กฑํ•œ ์—ฌ๋Ÿฌ ์šด์˜์ƒ์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด ์ฃผ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.



1. ํ”„๋กœ์„ธ์Šค ์ฃฝ์Œ ๋ฐฉ์ง€ & ์ž๋™ ์žฌ์‹œ์ž‘
์„œ๋ฒ„์—์„œ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋‚˜ ์˜ˆ๊ธฐ์น˜ ์•Š์€ ์—๋Ÿฌ๋กœ ์•ฑ์ด ์ข…๋ฃŒ๋  ์ˆ˜ ์žˆ๋Š”๋ฐ,
PM2๊ฐ€ “์ฃฝ์œผ๋ฉด ๋ฐ”๋กœ ๋‹ค์‹œ ๋„์›Œ” ์ฃผ๋‹ˆ๊นŒ ๋‹ค์šดํƒ€์ž„์„ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.



2. ์„œ๋ฒ„ ์žฌ๋ถ€ํŒ… ์‹œ ์ž๋™ ๊ธฐ๋™
๋‹จ์ˆœ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰(&)์€ ์‹œ์Šคํ…œ ์žฌ๋ถ€ํŒ… ์‹œ ์‚ฌ๋ผ์ง€์ง€๋งŒ,
pm2 startup + pm2 save ๋ช…๋ น์„ ํ•œ ๋ฒˆ๋งŒ ํ•ด ๋‘๋ฉด OS๊ฐ€ ์ผœ์งˆ ๋•Œ PM2 ๋ฐ๋ชฌ์ด ์ž๋™์œผ๋กœ ๋œจ๊ณ , 
์ €์žฅ๋œ ํ”„๋กœ์„ธ์Šค๋“ค์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•ด ์ค€๋‹ค.



3. ๋กœ๊ทธ ๊ด€๋ฆฌ & ๋ชจ๋‹ˆํ„ฐ๋ง
PM2๋Š” stdout/stderr ๋กœ๊ทธ๋ฅผ ๊ฐ๊ฐ ํŒŒ์ผ๋กœ ์ˆ˜์ง‘ํ•ด ์ฃผ๊ณ ,
pm2 logs ๋กœ ์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆผ ์กฐํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฉฐ,
pm2 monit ๋กœ CPU·๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ๊ฐ™์€ ๋ฉ”ํŠธ๋ฆญ๋„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.



4. ํด๋Ÿฌ์Šคํ„ฐ ๋ชจ๋“œ & ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ
๋ฉ€ํ‹ฐ ์ฝ”์–ด ๋จธ์‹ ์—์„œ -i max ์˜ต์…˜์œผ๋กœ ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋„์›Œ
PM2 ๋‚ด์žฅ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๋กœ ์š”์ฒญ์„ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.



5. ์šด์˜ ์ž๋™ํ™” ํŽธ์˜
- pm2 reload all ๋กœ ๋ฌด์ค‘๋‹จ ์žฌ์‹œ์ž‘
- pm2 scale my-app 4 ๋กœ ์ธ์Šคํ„ด์Šค ์ˆ˜ ์กฐ์ •(ํด๋Ÿฌ์Šคํ„ฐ ๋ชจ๋“œ)
- ๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ๋‚˜ CI/CD์—์„œ ์“ฐ๊ธฐ ํŽธ๋ฆฌ




์š”์•ฝ:
PM2๋Š” “๋‹จ์ˆœ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰”์ด ๊ฐ€์ง„ ํ•œ๊ณ„๋ฅผ ๋„˜์–ด,
- ํ”„๋กœ์„ธ์Šค ๊ฐ€์šฉ์„ฑ ๋ณด์žฅ
-  ์žฌ๋ถ€ํŒ…·์˜ค๋ฅ˜ ์‹œ ์ž๋™ ๋ณต๊ตฌ
- ๋กœ๊ทธ·๋ชจ๋‹ˆํ„ฐ๋ง ์ง€์›
-  ํด๋Ÿฌ์Šคํ„ฐ๋ง·๋ฌด์ค‘๋‹จ ์žฌ์‹œ์ž‘
๊ฐ™์€ 
“์ง„์งœ ํ”„๋กœ๋•์…˜ ์šด์˜”
์— ๊ผญ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋“ค์„ ์ œ๊ณตํ•œ๋‹ค.

 

 

์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•œ๋‹ค.

sudo npm install -g pm2
pm2 start index.js --name my-node-app
pm2 startup systemd
# ๋ณต๋ถ™ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ → pm2 save

 

์˜ค๋ฅ˜ ๋ฐœ์ƒ!

์˜ค๋ฅ˜๋ถ€ํ„ฐ ํ•ด๊ฒฐํ•˜๊ณ  ๊ฐ€์ž!

 


2.1 ๋ฌธ์ œ ๋ฐœ์ƒ- ํ•ด๊ฒฐ๊ณผ์ •.

 

 

 

[ec2-user@ip-172-31-44-167 ~]$ sudo npm install -g pm2
pm2 start index.js --name my-node-app
pm2 startup systemd

added 135 packages in 8s

13 packages are looking for funding
  run `npm fund` for details
npm notice
npm notice New major version of npm available! 10.9.2 -> 11.4.2
npm notice Changelog: https://github.com/npm/cli/releases/tag/v11.4.2
npm notice To update run: npm install -g npm@11.4.2
npm notice

                        -------------

__/\\\\\\\\\\\\\____/\\\\____________/\\\\____/\\\\\\\\\_____
 _\/\\\/////////\\\_\/\\\\\\________/\\\\\\__/\\\///////\\\___
  _\/\\\_______\/\\\_\/\\\//\\\____/\\\//\\\_\///______\//\\\__
   _\/\\\\\\\\\\\\\/__\/\\\\///\\\/\\\/_\/\\\___________/\\\/___
    _\/\\\/////////____\/\\\__\///\\\/___\/\\\________/\\\//_____
     _\/\\\_____________\/\\\____\///_____\/\\\_____/\\\//________
      _\/\\\_____________\/\\\_____________\/\\\___/\\\/___________
       _\/\\\_____________\/\\\_____________\/\\\__/\\\\\\\\\\\\\\\_
        _\///______________\///______________\///__\///////////////__


                          Runtime Edition

        PM2 is a Production Process Manager for Node.js applications
                     with a built-in Load Balancer.

                Start and Daemonize any application:
                $ pm2 start app.js

                Load Balance 4 instances of api.js:
                $ pm2 start api.js -i 4

                Monitor in production:
                $ pm2 monitor

                Make pm2 auto-boot at server restart:
                $ pm2 startup

                To go further checkout:
                http://pm2.io/


                        -------------

[PM2] Spawning PM2 daemon with pm2_home=/home/ec2-user/.pm2
[PM2] PM2 Successfully daemonized
[PM2][ERROR] Script not found: /home/ec2-user/index.js
[PM2] Init System found: systemd
[PM2] To setup the Startup Script, copy/paste the following command:
sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u ec2-user --hp /home/ec2-user
[ec2-user@ip-172-31-44-167 ~]$

 

์—๋Ÿฌ ๋ฐœ์ƒ ์ด์œ  :

pm2 start index.js๋ฅผ ํ•˜๋ ค๋ฉด ๋ฐ˜๋“œ์‹œ “index.js” ํŒŒ์ผ์ด ์žˆ๋Š” ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ์‹คํ–‰ํ•ด์•ผ ํ•œ๋‹ค. 

์ง€๊ธˆ์€ ํ™ˆ ๋””๋ ‰ํ„ฐ๋ฆฌ(~)์— ์žˆ๊ธฐ ๋•Œ๋ฌธ์— /home/ec2-user/index.js๋ฅผ ์ฐพ์œผ๋ ค๋‹ค๊ฐ€ ์—†๋‹ค๊ณ  ์—๋Ÿฌ๊ฐ€ ๋‚œ๊ฒƒ์ด๋‹ค.

 

ํ•ด๊ฒฐ ๊ณผ์ • :

์ œ๋Œ€๋กœ PM2๋กœ ์•ฑ ๋„์šฐ๊ธฐ

  1. ํ”„๋กœ์ ํŠธ ํด๋”๋กœ ์ด๋™
cd ~/my-node-app

 

 2. PM2๋กœ ์„œ๋ฒ„ ์‹œ์ž‘

pm2 start index.js --name my-node-app

 

 

3. ์‹คํ–‰์ค‘์ธ ํ”„๋กœ์„ธ์Šค ํ™•์ธ

pm2 ls

 

PM2๋กœ ์•ฑ์ด ์ž˜ ์˜ฌ๋ผ๊ฐ„ ๊ฑธ ํ™•์ธํ•˜์˜€๋‹ค.

์˜ค๋ฅ˜ ํ•ด๊ฒฐ!


 

 ์„œ๋ฒ„ ์žฌ๋ถ€ํŒ… ์‹œ์—๋„ ์ž๋™ ๊ธฐ๋™ ์„ค์ •

  1. PM2 startup ์Šคํฌ๋ฆฝํŠธ ์ƒ์„ฑ
pm2 startup systemd

 

 

 2. ์ถœ๋ ฅ๋œ ๋ช…๋ น์–ด ๋ณต์‚ฌ→์‹คํ–‰

sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u ec2-user --hp /home/ec2-user

ํ™”๋ฉด์— ๋ณด์ด๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ PM2๋ฅผ systemd์— ๋“ฑ๋กํ–ˆ์œผ๋‹ˆ, ๋‚จ์€ ๊ฑด “ํ”„๋กœ์„ธ์Šค ๋ชฉ๋ก์„ ์ €์žฅ”(pm2 save) ํ•˜๊ณ , ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ(Nginx) ์„ค์ •์œผ๋กœ ์™ธ๋ถ€ ํฌํŠธ(80/443)์™€ ์—ฐ๊ฒฐํ•˜๋Š” ์ž‘์—…์ด๋‹ค

 

   3. ํ˜„์žฌ ํ”„๋กœ์„ธ์Šค ๋ชฉ๋ก ์ €์žฅ

pm2 save

 

 

์ด์ œ “์™ธ๋ถ€(80/443 ํฌํŠธ) →  Node.js ์•ฑ(3000 ํฌํŠธ)” ๊ฒฝ๋กœ๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ๊ธฐ๋งŒ ํ•˜๋ฉด ์ง„์งœ ์„œ๋น„์Šค์ฒ˜๋Ÿผ ๋™์ž‘ํ•œ๋‹ค.

 

๋‹ค์Œ ๋‹จ๊ณ„๋Š” Nginx๋ฅผ ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ๋กœ ์„ธํŒ…ํ•˜๋Š” ์ž‘์—…์ด๋‹ค.

  • ๋ชฉํ‘œ : AWS EC2 ์ธ์Šคํ„ด์Šค์— Express.js ๊ธฐ๋ฐ˜ Node.js ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๊ณ , ์™ธ๋ถ€์—์„œ 80/3000 ํฌํŠธ๋กœ ์ ‘์†
  • ์ฃผ์š” ๊ธฐ์ˆ : EC2, AMI, ๋ณด์•ˆ ๊ทธ๋ฃน, SSH ํ‚ค ํŽ˜์–ด, Node.js(22.x), npm, Express, PM2, Nginx

ํ™˜๊ฒฝ:
 Amazon Linux 2023 (ap-northeast-2)

์•ฑ:
 Express.js ๊ธฐ๋ฐ˜ ๊ฐ„๋‹จํ•œ “Hello from EC2 Express!” ์„œ๋ฒ„

์šด์˜ ๋„๊ตฌ:
 PM2(ํ”„๋กœ์„ธ์Šค ๋งค๋‹ˆ์ €), Nginx(๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ), Let’s Encrypt SSL

 

 

 

 


 

AWS EC2์— Node.js(Express) ์•ฑ ๋ฐฐํฌํ•˜๊ธฐ: A to Z

์ด ๊ฒŒ์‹œ๋ฌผ์˜ ๋ชฉ์ฐจ๋ฅผ ๋จผ์ € ์ •๋ฆฌํ•ด๋‘”๋‹ค.


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 ํ™•์ธ


6. HTTPS ์ ์šฉ (Let’s Encrypt)
  6.1 ๋ณด์•ˆ ๊ทธ๋ฃน: HTTPS(443) → 0.0.0.0/0 ์ถ”๊ฐ€
  6.2 Certbot ์„ค์น˜
  6.3 ์ธ์ฆ์„œ ๋ฐœ๊ธ‰ & ์„ค์น˜
  6.4 ์ž๋™ ๊ฐฑ์‹ 
  6.5 ํ™•์ธ


 

[9] EC2 ์ธ์Šคํ„ด์Šค ์—ฐ๊ฒฐ

์ด ํ™”๋ฉด์€ “์ด ์ธ์Šคํ„ด์Šค์— ์–ด๋–ป๊ฒŒ ์—ฐ๊ฒฐ(connect)ํ•  ๊ฒƒ์ธ์ง€”๋ฅผ ์„ ํƒํ•˜๋Š” ์—ฐ๊ฒฐ ํƒญ์ด๋‹ค. 1. EC2 ์ธ์Šคํ„ด์Šค ์—ฐ๊ฒฐ (EC2 Instance Connect)๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ฐ”๋กœ SSH ์—ฐ๊ฒฐํ•ด ์ฃผ๋Š” AWS ๊ณต์‹ ๊ธฐ๋Šฅ์ง€์› OS: Amazon Linux 2, Ubu

yeonbikim.tistory.com

 


์ด ๊ฒŒ์‹œ๋ฌผ์€ 
๋ชฉ์ฐจ์—์„œ ๋ณด์ด๋Š” 

2. Node.js & ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค์น˜
  2.1 Node.js ์„ค์น˜ (NodeSource)
  2.2 ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐํ™” ๋ฐ Express ์„ค์น˜
  2.3 package.json ์„ค์ •
  2.4 index.js ์ž‘์„ฑ
  2.5 ํ…Œ์ŠคํŠธ ์‹คํ–‰

๋ฅผ ์ฐจ๊ทผ์ฐจ๊ทผ ํ•˜๋ฉด์„œ ๊ฒช์€ ์‹œํ–‰์ฐฉ์˜ค๋“ค๊นŒ์ง€ ๋ชจ๋‘ ๊ธฐ๋กํ•œ ๊ฒƒ์ด๋‹ค.


< ๋ฐฐํฌ ๋‹จ๊ณ„์—์„œ Node.js ์„ค์น˜์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(Express ์ฝ”๋“œ) ๋ฐฐ์น˜๊ฐ€ ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œ ์ด์œ  >


1. ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ(provisioning) ํ™•๋ณด
Node.js๋Š” JavaScript ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ด ์ฃผ๋Š” ์„œ๋ฒ„ ์ธก ๋Ÿฐํƒ€์ž„์ด๋‹ค.
EC2๋Š” ๋‹จ์ง€ “๋นˆ ์ปดํ“จํ„ฐ”์ด๊ธฐ ๋•Œ๋ฌธ์—, ๋‚ด๊ฐ€ ์“ด ์„œ๋ฒ„ ์ฝ”๋“œ(Express, TypeScript ๋“ฑ)๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด
๊ทธ์— ๋งž๋Š” ๋Ÿฐํƒ€์ž„(Node.js)๊ณผ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž(npm)๊ฐ€ ๋ฐ˜๋“œ์‹œ ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.


2. ์˜์กด์„ฑ(dependencies) ์„ค์น˜
 package.json์— ๋ช…์‹œ๋œ Express, CORS, dotenv ๊ฐ™์€ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์„
npm install ๋ช…๋ น์œผ๋กœ ์‹ค์ œ ์„œ๋ฒ„์— ๋‚ด๋ ค๋ฐ›๊ณ  ์„ค์น˜ํ•ด์•ผ๋งŒ,
์„œ๋ฒ„ ์ฝ”๋“œ์—์„œ import express from 'express' ๊ฐ™์€ ๊ตฌ๋ฌธ์ด ์—๋Ÿฌ ์—†์ด ๋™์ž‘ํ•œ๋‹ค.


3. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ ๋ฐฐ์น˜ & ์‹คํ–‰
  3.1 ์ฝ”๋“œ ๋ณต์‚ฌ - ๋กœ์ปฌ ์ฝ”๋“œ(๋˜๋Š” ๋นŒ๋“œ ์‚ฐ์ถœ๋ฌผ)๋ฅผ EC2๋กœ ์ „์†ก 
  3.2 ํ™˜๊ฒฝ ๊ตฌ์„ฑ - .env ํŒŒ์ผ, ๋กœ๊ทธ ๋””๋ ‰ํ„ฐ๋ฆฌ, ์‹คํ–‰ ์Šคํฌ๋ฆฝํŠธ ๋“ฑ ์•ฑ ์‹คํ–‰์— ํ•„์š”ํ•œ ์„ค์ • ์ถ”๊ฐ€
  3.3 ์„œ๋ฒ„ ์‹คํ–‰ - node index.js ๋˜๋Š” PM2/systemd๋กœ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰


์ด ๊ณผ์ •์„ “์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ ˆ์ด์–ด(Application Layer)” ๋ฅผ EC2 ์ธ์Šคํ„ด์Šค ์œ„์— ์˜ฌ๋ ค ์ฃผ๋Š” ๋‹จ๊ณ„๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.




์ •๋ฆฌ
1. Node.js ์„ค์น˜ → JavaScript ์„œ๋ฒ„ ์ฝ”๋“œ ์‹คํ–‰ ๊ธฐ๋ฐ˜ ๋งˆ๋ จ
2. npm install → ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(Express ๋“ฑ) ์„ค์น˜
3. ์ฝ”๋“œ ๋ฐฐ์น˜ & ์‹คํ–‰ → ์‹ค์ œ HTTP ์„œ๋ฒ„ / API ์„œ๋ฒ„ ๊ฐ€๋™
   ์ด ์„ธ ๊ฐ€์ง€๊ฐ€ ์—†์œผ๋ฉด, EC2์— ์•„๋ฌด๋ฆฌ ์ธ์Šคํ„ด์Šค๋ฅผ ๋„์›Œ๋„ ๋‚˜์˜ ์„œ๋ฒ„ ์ฝ”๋“œ๋Š” “ํ•ด์„ํ•  ํ™˜๊ฒฝ” ์ž์ฒด๊ฐ€ ์—†์–ด์„œ ๋‹จ ํ•œ ์ค„๋„ ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐฐํฌ ๋‹จ๊ณ„์˜ ํ•ต์‹ฌ ํ•„์ˆ˜ ์ž‘์—…์œผ๋กœ ๋ฐ˜๋“œ์‹œ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค.



๊ทธ๋Ÿผ ๋‚˜๋Š” ์™œ Spring Boot ์•ฑ์„ ๋ฐฐํฌํ•  ๋ชฉ์ ์ธ๋ฐ Node.js/Express ์•ฑ ๋ฐฐํฌ ๊ณผ์ •์„ ์„ ํ–‰ํ• ๊นŒ?

AWS ์ธํ”„๋ผ ๊ตฌ์„ฑ, ๋ณด์•ˆ ๊ทธ๋ฃน, Nginx ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ, ๋„๋ฉ”์ธ·SSL ์—ฐ๊ฒฐ ๊ฐ™์ด “์–ด๋–ป๊ฒŒ ํด๋ผ์šฐ๋“œ ์œ„์—์„œ ์›น ์„œ๋น„์Šค๋ฅผ ๋„์šฐ๊ณ  ์šด์˜ํ•˜๋Š”์ง€”์˜ ๊ธฐ๋ณธ๊ธฐ๋ฅผ ๋‹ค์ง€๋Š”๊ฒŒ ๋ชฉํ‘œ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

 

 

์ž, ๊ทธ๋Ÿผ ์‹œ์ž‘ํ•ด๋ณด์ž


1. Node.js ์„ค์น˜ํ•˜๋Š” ๋ฒ•.

 

Amazon Linux 2023์—์„œ Node.js๋ฅผ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

์•„๋ž˜ ์˜ˆ์‹œ๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ํŽธํ•œ ์ชฝ์„ ๊ณจ๋ผ ์ง„ํ–‰ํ•˜๋ฉด ๋œ๋‹ค.

ํ•˜์ง€๋งŒ ๋‚˜๋Š” ์ฒซ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์—์„œ ์‹คํŒจ๋ฅผ ๊ฒช์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‘๋ฒˆ์งธ๋ฅผ ๋”ฐ๋ผํ•˜๋Š”๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค.


๋ฐฉ๋ฒ• 1. DNF ๋ชจ๋“ˆ์„ ์ด์šฉํ•œ ์„ค์น˜ (Amazon Linux 2023 ๊ธฐ๋ณธ ๋ฐฉ์‹) - ์ด๊ฑด ์‹คํŒจ ๋ฐฉ๋ฒ•์ด๋‹ˆ ๋ฐ”๋กœ ๋ฐฉ๋ฒ•2๋ฅผ ๋”ฐ๋ผํ•˜์„ธ์š”!

 

  1. ์‹œ์Šคํ…œ ํŒจํ‚ค์ง€ ์ตœ์‹ ํ™”
sudo dnf update -y

 

 

 

 

 

 

2. ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ Node.js ๋ชจ๋“ˆ ์ŠคํŠธ๋ฆผ ํ™•์ธ

sudo dnf module list nodejs

๋กœ ์น˜๋‹ˆ

 

[ec2-user@ip-172-31-44-167 ~]$ sudo dnf module list nodejs
Last metadata expiration check: 0:41:47 ago on Thu Jun 12 09:03:32 2025.
Error: No matching Modules to list๋ผ๊ณ  ๋‚˜์™”๋‹ค.

Amazon Linux 2023์—์„œ๋Š” RHEL ๊ณ„์—ด์ฒ˜๋Ÿผ dnf module์„ ํ†ตํ•œ Module Stream ๋ฐฉ์‹์ด ์•„๋‹ˆ๋ผ, 
๊ธฐ๋ณธ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— Node.js ํŒจํ‚ค์ง€๊ฐ€ ๋ฐ”๋กœ ๋“ค์–ด์žˆ๊ฑฐ๋‚˜, ์™ธ๋ถ€ RPM ์ €์žฅ์†Œ๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ์„ค์น˜ํ•˜๋Š” ํ˜•ํƒœ๋กœ ๋ฐฐํฌ๋œ๋‹ค.


 

 

๊ทธ๋ž˜์„œ ๋ฐฉ๋ฒ• 2๋ฅผ ์„ ํƒํ•˜์—ฌ์•ผ ํ•œ๋‹ค. 


๋ฐฉ๋ฒ• 2. NodeSource RPM ์ €์žฅ์†Œ ์ด์šฉ (Red Hat ๊ณ„์—ด ๊ณตํ†ต)

 

  1. ์‹œ์Šคํ…œ ํŒจํ‚ค์ง€ ์ตœ์‹ ํ™”
sudo dnf update -y

 

 

์—…๋ฐ์ดํŠธ ๋ฉ”์‹œ์ง€์— “A newer release of Amazon Linux is available” ๊ฒฝ๊ณ ๊ฐ€ ๋œจ์ง€๋งŒ, ํ˜„์žฌ ์‹œ์Šคํ…œ์— ์„ค์น˜๋œ ํŒจํ‚ค์ง€์—๋Š” ํ•  ์ผ์ด ์—†๋‹ค๋Š” ๋œป์ด๋‹ˆ ๊ทธ๋ƒฅ ๋„˜์–ด๊ฐ€๋„ ๋œ๋‹ค.

 

 

 

 

2. NodeSource ์„ค์น˜ ์Šคํฌ๋ฆฝํŠธ ๋‹ค์šด๋กœ๋“œ & ์‹คํ–‰

curl -fsSL https://rpm.nodesource.com/setup_lts.x | sudo bash -

 

NodeSource ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋งŒ ์ถ”๊ฐ€๋œ ์ƒํƒœ์ด๋‹ค.์ด์ œ ์‹ค์ œ๋กœ Node.js ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๋ฉด ๋œ๋‹ค!

 

 

 

 

 

 

 

๋‹ค์Œ ๋‹จ๊ณ„๋กœ!

 

 


< ์ด์ œ ์—ฌ๊ธฐ์„œ ํ•˜๊ฒŒ ๋   ํ•˜๋Š” ๊ณผ์ •์˜ ์ด์œ ์™€ ๋ชฉ์  ์„ค๋ช… >

1. ๋Ÿฐํƒ€์ž„ ์„ค์น˜ ํ™•์ธ → “Node.js๊ฐ€ EC2์—์„œ ๋ฌธ์ œ์—†์ด ๋™์ž‘ํ•œ๋‹ค”
2. ์•ฑ ํ™˜๊ฒฝ ๊ตฌ์„ฑ → “์˜์กด์„ฑ ๊ด€๋ฆฌ(package.json), ES ๋ชจ๋“ˆ ์„ค์ •(type:module)”
3. ์ตœ์†Œ ์›น ์„œ๋ฒ„ ๋„์šฐ๊ธฐ → “๋„คํŠธ์›Œํฌ ๋ ˆ์ด์–ด(Nginx→3000ํฌํŠธ)๊นŒ์ง€ ์—ฐ๋™ํ•˜๊ธฐ์— ์•ž์„œ ์ˆœ์ˆ˜ Node.js ์„œ๋น„์Šค๊ฐ€ ์ •์ƒ ์ž‘๋™”


์ด๋ ‡๊ฒŒ “๋Ÿฐํƒ€์ž„ → ์˜์กด์„ฑ → ์ฝ”๋“œ → ์‹คํ–‰”์˜ ํ๋ฆ„ ์ „์ฒด๋ฅผ ํ•œ ๋ฒˆ ์ ๊ฒ€ํ•ด ๋‘๋ฉด,
๋‹ค์Œ ๋‹จ๊ณ„์ธ PM2/NGINX/SSL ์„ค์ •์ด๋‚˜ CI/CD ์ž๋™ํ™”๋กœ ๋„˜์–ด๊ฐ”์„ ๋•Œ
“์–ด๋””์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒจ๋„ ์›์ธ์ด ๋Ÿฐํƒ€์ž„์ธ์ง€, ์ฝ”๋“œ์ธ์ง€, ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ์ธ์ง€”๋ฅผ
๋น ๋ฅด๊ฒŒ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฆ‰, ์ด ๊ณผ์ •์€ “๋ฐฐํฌ ์ „ ๊ฒ€์ฆ” ๊ฒธ “์•ฑ ๋ถ€ํŠธ์ŠคํŠธ๋žฉ” ๋‹จ๊ณ„์ด๋‹ค.

 

 

2. Node.js & ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค์น˜

 

2.1 Node.js ์„ค์น˜

sudo dnf install -y nodejs

node -v
npm -v

์„ค์น˜ ํ™•์ธ๋œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ด๋ณด์ž. 

 

 

 

์ œ๋Œ€๋กœ ์„ค์น˜๊ฐ€ ๋˜์—ˆ๋‹ค.

 


์ด์ œ ๊ฐ„๋‹จํžˆ “[Hello, EC2!]” ์ฐ์–ด๋ณด๋ฉด์„œ ํ…Œ์ŠคํŠธ ํ•ด ๋ณด์ž!

 

 

1) ํ„ฐ๋ฏธ๋„์—์„œ ๋ฐ”๋กœ ํ™•์ธํ•˜๊ธฐ

node -e 'console.log("โœ… Node.js is working!");'

 

์œ„ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ํ„ฐ๋ฏธ๋„์— โœ… Node.js is working! ์ด ์ถœ๋ ฅ๋œ๋‹ค.

 

 

 


 

2) ๊ฐ„๋‹จํ•œ Express ์„œ๋ฒ„ ๋„์›Œ ๋ณด๊ธฐ

1. ์ƒˆ ๋””๋ ‰ํ„ฐ๋ฆฌ ์ƒ์„ฑ & ์ง„์ž…

mkdir ~/my-node-app && cd ~/my-node-app

 

 

 

 

2. ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐํ™” & Express ์„ค์น˜

npm init -y
npm install express

 


๋ฌธ์ œ ๋ฐœ์ƒ!! ๋ฌธ์ œ ํ•ด๊ฒฐํ•˜๊ณ  ๊ฐ€๊ธฐ!

 

์ง€๊ธˆ ํ„ฐ๋ฏธ๋„ ๋กœ๊ทธ๋ฅผ ๋ณด๋‹ˆ, ๋‘ ๊ฐ€์ง€๊ฐ€ ์„ž์—ฌ ์žˆ๋‹ค.

 

  1. ์—๋Ÿฌ ์—†์ด npm init·npm install express ๊นŒ์ง„ ์ž˜ ์‹คํ–‰  package.json ํŒŒ์ผ์ด ์ƒ์„ฑ๋๊ณ , express ๋ชจ๋“ˆ๋„ ์„ค์น˜๋จ
  2. ๊ทธ ๋‹ค์Œ์— “node index.js”๋ฅผ ์‹คํ–‰ํ–ˆ์ง€๋งŒ, index.js ํŒŒ์ผ์ด ์—†์–ด์„œ ์•„๋ž˜์™€ ๊ฐ™์€ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ๋œฌ๋‹ค. 
Error: Cannot find module '/home/ec2-user/my-node-app/index.js'

 

์ฆ‰,

๋ฌธ์ œ ์š”์•ฝ

๋ฌธ์ œ: index.js ํŒŒ์ผ์ด ์—†์–ด์„œ Node๊ฐ€ ์‹คํ–‰ํ•  ์ง„์ž…์ (์—”ํŠธ๋ฆฌ) ๋ชจ๋“ˆ์„ ์ฐพ์„ ์ˆ˜ ์—†์Œ.
๋ฐœ์ƒ ๋‹จ๊ณ„: “์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ ์ž‘์„ฑ ๋‹จ๊ณ„” — ๋Ÿฐํƒ€์ž„(ํ™˜๊ฒฝ) ์ค€๋น„๊ฐ€ ๋๋‚˜๊ณ  ์‹ค์ œ ์„œ๋ฒ„ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์–ด์„œ ์‹คํ–‰ํ•ด ๋ณด๋Š” ๋‹จ๊ณ„์ด๋‹ค.

 

ํ•ด๊ฒฐ์ฑ…

  1. ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์ด๋™
cd ~/my-node-app

 

 

 

  2. index.js ํŒŒ์ผ ์ƒ์„ฑ & ์ฝ”๋“œ ์ž‘์„ฑ - ํŽธ์ง‘๊ธฐ(์˜ˆ: vi, nano)๋กœ ์—ด๊ณ  ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ๋ถ™์—ฌ ๋„ฃ์–ด์•ผ ํ•œ๋‹ค.

vi index.js

๋ฅผ ์ž…๋ ฅํ•˜๋ฉด

์ด๋Ÿฌํ•œ ์ฐฝ์ด ๋œจ๊ณ  ์•„๋ž˜์˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ด์ฃผ๋ฉด ๋œ๋‹ค. 

import express from 'express';

const app = express();
const PORT = 3000;

app.get('/', (req, res) => {
  res.send('Hello from EC2 Express!');
});

app.listen(PORT, () => {
  console.log(`๐Ÿš€ Server listening on http://localhost:${PORT}`);
});
Vi ์‚ฌ์šฉ๋ฒ• :
1) i ๋ˆŒ๋Ÿฌ INSERT ๋ชจ๋“œ ์ง„์ž…์ฝ”๋“œ๋ฅผ ๋ถ™์—ฌ๋„ฃ๊ธฐ
2)  Esc → :wq → Enter ๋กœ ์ €์žฅ ํ›„ ์ข…๋ฃŒ


Nano ์‚ฌ์šฉ๋ฒ•:
1) ์ฝ”๋“œ ๋ถ™์—ฌ๋„ฃ๊ธฐ
2) Ctrl+O → Enter (์ €์žฅ)
3) Ctrl+X (์ข…๋ฃŒ)

 

 

 

 

3. package.json์— ES ๋ชจ๋“ˆ ํƒ€์ž… ์ง€์ •

package.json์— ๋‹ค์Œ ํ•œ ์ค„์„ ์ถ”๊ฐ€ํ•ด์•ผ import ๋ฌธ๋ฒ•์ด ๋จนํžŒ๋‹ค.

 

๋˜ ์•„๋ž˜์˜ ๋ช…๋ น์–ด๋ฅผ ์ณ์„œ  package.json ํŒŒ์ผ ๋‚ด์šฉ์„ ์ˆ˜์ •ํ•ด์•ผ ํ•œ๋‹ค. 

vi package.json

 

 

{
  "name": "my-node-app",
  "version": "1.0.0",
  "type": "module",           // ES ๋ชจ๋“ˆ ์‚ฌ์šฉ ์„ ์–ธ
  "main": "index.js",         // ์ง„์ž… ํŒŒ์ผ
  "scripts": {
    "start": "node index.js"  // ๋‚˜์ค‘์— npm start ๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅ
  },
  "dependencies": {
    "express": "^4.18.2"      // ์ด๋ฏธ ์„ค์น˜๋œ express ๋ฒ„์ „
  }
}

 

 

 

์ •์ƒ ์‹คํ–‰ ๋˜์–ด์„œ ํ„ฐ๋ฏธ๋„์— ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฉ”์‹œ์ง€๊ฐ€ ๋‚˜ํƒ€๋‚ฌ๋‹ค. 

๐Ÿš€ Server listening on http://localhost:3000

 

 


ํ•œ๋ˆˆ์— ๋‹จ๊ณ„ ์ •๋ฆฌ


1. vi index.js (๋˜๋Š” nano index.js)
2. JS ์ฝ”๋“œ ๋ถ™์—ฌ๋„ฃ๊ธฐ → ์ €์žฅ
3. package.json์— "type":"module" ์ถ”๊ฐ€
4. node index.js๋กœ ์‹คํ–‰


์ด๋ ‡๊ฒŒ ํ•˜์‹œ๋ฉด Bash๊ฐ€ ์•„๋‹ˆ๋ผ Node๊ฐ€ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ฒŒ ๋˜์–ด ์—๋Ÿฌ ์—†์ด ์„œ๋ฒ„๊ฐ€ ๋œฌ๋‹ค.

 

 

 

 

 

 

 

+ Recent posts