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 ํ
์คํธ ์คํ
[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๋ก ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํ
[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):
'๐ฐ๐ท ํ๊ตญ์ด (Korean) > AWS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [14] ๋๋ฉ์ธ(Route 53) ์ฐ๊ฒฐ (1) | 2025.06.17 |
|---|---|
| [12] ๋ฐฐํฌ ์์ ํ & ์ด์ ์ค๋น- PM2๋ก ๋ฐฑ๊ทธ๋ผ์ด๋ ๊ด๋ฆฌ (3) | 2025.06.17 |
| [11] AWS EC2์ Node.js & ์ ํ๋ฆฌ์ผ์ด์ ์ค์นํ๊ธฐ (0) | 2025.06.17 |
| [10] ํ๋ ฅ์ IP ์ฐ๊ฒฐํ๊ธฐ (0) | 2025.06.12 |
| [9] EC2 ์ธ์คํด์ค ์ฐ๊ฒฐ (3) | 2025.06.12 |