
๐ฏ ์น ๊ธฐ๋ฐ ๋ฌธ์ ํธ์ง๊ธฐ ์ ์ ํ๋ก์ ํธ์ ๊ฐ๋ฐ ํ๊ฒฝ ๊ตฌ์ฑ์ ์ ๋ฆฌํฉ๋๋ค.
Frontend
์ฌ์ฉ์ ์ธํฐํ์ด์ค(UI)๋ฅผ ์ ๊ณตํ๋ React ์ฑ์ ๋๋ค.
์ฌ์ฉ์์ ์์ฒญ์ ๋ธ๋ผ์ฐ์ ์์ ์คํ๋๋ JavaScript๋ฅผ ํตํด ๋ฐฑ์๋ API๋ก ์ ๋ฌ๋ฉ๋๋ค.
https://notes.prgms-fullcycle.com/api
Backend
Express ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ Node.js ๊ธฐ๋ฐ ์๋ฒ์ ๋๋ค.
JWT (JSON Web Token)๋ฅผ ์ด์ฉํ ์ฌ์ฉ์ ์ธ์ฆ์ ํตํด ๋ฐ์ดํฐ ์ ๊ทผ์ ๋ณดํธํฉ๋๋ค.
CORS (Cross-Origin Resource Sharing) ์ ์ฑ ์ ํตํด ์ ์์ ์ธ ์ ๊ทผ์ ๋ฐฉ์งํฉ๋๋ค.
notes.prgms-fullcycle.com:3306
Database
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๋ฆ : prgms_notes
๋ ๊ฐ์ ํ ์ด๋ธ์ด ์กด์ฌํฉ๋๋ค. (์์ธ ์คํค๋ง๋ ํ์ ์ ๋ฆฌ ์์ )

AWS EC2 ์ธ์คํด์ค ์์ Minikube๋ก ๊ตฌ์ฑ๋ Kubernetes ํด๋ฌ์คํฐ๋ฅผ ์ฌ๋ฆฌ๊ณ , ๊ฑฐ๊ธฐ์ FE(Frontend), BE(Backend), DB๋ฅผ ๊ฐ๊ฐ Pod๋ก ๋ฐฐํฌํ ๊ตฌ์กฐ์
๋๋ค.
์ธ๋ถ ์ฌ์ฉ์(Web Browser)๋ Nginx Reverse Proxy๋ฅผ ํตํด FE์ BE์ ์ ๊ทผํ๊ฒ ๋ฉ๋๋ค.
์ฌ์ฉ์๋ ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด ์๋น์ค์ ์ ์ํฉ๋๋ค.
https://notes.prgms-fullcycle.com
ํฌํธ๋ HTTPS(443) ๋๋ HTTP(80)๋ฅผ ์ฌ์ฉํฉ๋๋ค.
EC2 ์ธ์คํด์ค ๋ด๋ถ์ ์์นํ ๋ฆฌ๋ฒ์ค ํ๋ก์(Reverse Proxy) ์๋ฒ์ ๋๋ค.
์ธ๋ถ์์ ๋ค์ด์ค๋ ์์ฒญ์ ๊ฒฝ๋ก(/, /api)์ ๋ฐ๋ผ ๋ถ๊ธฐํด์ ๋ด๋ถ ์๋น์ค(FE/BE)๋ก ์ ๋ฌํฉ๋๋ค.
๐ค Reverse Proxy๋ ๋ญ๊น?
ํด๋ผ์ด์ธํธ(์ฌ์ฉ์)์ ์๋ฒ(์ค์ ์๋น์ค) ์ฌ์ด์์ ์ค๊ฐ์์ ์์ฒญ์ ๋ฐ์์ ์ ์ ํ ์๋ฒ๋ก ์ ๋ฌํด์ฃผ๋ ์ค๊ฐ ๊ด๋ฆฌ์ ๊ฐ์ ์ญํ ์ ํฉ๋๋ค.
notes.prgms-fullcycle.com์ ์ ์ํ์ง๋ง, ์ฌ์ดํธ๋ ์ค์ ๋ก ์ฌ๋ฌ ์๋น์ค(FE, BE)๋ก ๋๋์ด์๊ณ ํฌํธ๋ ๋ค ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์์ฒญ ๊ฒฝ๋ก๋ฅผ ๋ถ์ํ๊ณ ์๋ง์ ์๋น์ค๋ก ์๋์ผ๋ก ์ฐ๊ฒฐํด์ฃผ๋ Reverse Proxy๊ฐ ํ์ํ ๊ฒ์ ๋๋ค.
/๊ฒฝ๋ก ์์ฒญ โlocalhost:30030โ FE ์๋น์ค๋ก ์ ๋ฌ/api์์ฒญ โlocalhost:30031โ BE ์๋น์ค๋ก ์ ๋ฌ
๐ ์ Reverse(์ญ๋ฐฉํฅ) Proxy์ผ๊น?
์ ํต์ ์ธ Proxy๋ ์ฌ์ฉ์๋ฅผ ๋ณดํธํ๋ ์ญํ ์ด ์ค์ฌ์ด์๋ค๋ฉด, Reverse Proxy๋ ์๋ฒ๋ฅผ ๋ณดํธํ๊ณ ๋์ ์๋ตํ๋ ๊ตฌ์กฐ๋ก ์์ฒญ ์ฃผ์ ๊ฐ ๋ฐ๋ ๋ฐฉํฅ์์ ์์ํ๊ธฐ ๋๋ฌธ์ ์ญ๋ฐฉํฅ ํ๋ก์๊ฐ ๋์์ต๋๋ค.
- Proxy (์ ๋ฐฉํฅ ํ๋ก์)
- Reverse Proxy (์ญ๋ฐฉํฅ ํ๋ก์)
์ถ์ฒ: cloudflare
EC2 ์ธ์คํด์ค ์์ Minikube ํด๋ฌ์คํฐ๋ฅผ ๋์ฐ๊ณ , ๊ทธ ์์ FE, BE, DB ๊ฐ๊ฐ์ ์ปดํฌ๋ํธ๊ฐ ์๋น์ค๋ฉ๋๋ค.
Frontend
๋ด๋ถ ํฌํธ : 3000
์ธ๋ถ๋ก ๋
ธ์ถ๋ NodePort : 30030
Nginx โ 30030์ผ๋ก ์์ฒญ์ ํฌ์๋ฉ
Backend
๋ด๋ถ ํฌํธ: 3031
์ธ๋ถ๋ก ๋
ธ์ถ๋ NodePort : 30031
Nginx โ 30031์ผ๋ก ์์ฒญ์ ํฌ์๋ฉ
Database (MariaDB)
ํฌํธ : 3306 (MariaDB ๊ธฐ๋ณธ ํฌํธ)
FE/BE๊ฐ ์ง์ DB์ ์ ์ํ ์ ์๋๋ก ๋ด๋ถ์์ ์ฐ๊ฒฐ
| ๋จ๊ณ (ํ๊ฒฝ) | ๋ด์ฉ |
|---|---|
| Dev (-) | ์ฝ๋ ๊ฐ๋ฐ ๋จ์ ํ ์คํธ FE/BE ๊ฐ๋ฐ ํ ์คํธ ์๋ ์ฌ์ฉ์ ํ ์คํธ |
| Dev docker (Docker) | BE๋ถํฐ dockerize docker compose ๋น๋๋ ์ฝ๋ ์ด์ฉ ์ปจํ ์ด๋ ํ ์คํธ |
| Test (Local k8s) | kubectl + yaml ํด๋ฌ์คํฐ ์ด์ฉ ํ ์คํธ |
| Stage (AWS) | Acceptance Test ํ ์คํธ ์ข ๋ฃ ํ ํ๊ดด |
| Prod (AWS) | Smoke Test ์๋น์ค ์ ๊ณต |
๋น ๋ฅด๊ฒ ํผ๋๋ฐฑ์ ๋ฐ์ ์ ์์ด์ผ ํฉ๋๋ค.
์ฝ๋ ์์ ์ด ์ฆ์ ์ด๊ธฐ ๋จ๊ณ์์๋ ๋์ผ๋ก ๋ฐ๋ก ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ ์ ์๋ ํ๊ฒฝ์ด ์ค์ํฉ๋๋ค.
ํน์ ๊ธฐ๋ฅ ๊ตฌํ ์ ์, ๊ด๋ จ ์ฝ๋๊ฐ ์์๋๋ก ๋์ํ๋์ง ๊ฐ๋ณ๊ฒ ์ฒดํฌํ ์ ์๋ ๊ตฌ์กฐ๊ฐ ์ ๋ฆฌํฉ๋๋ค.
TDD๋ฅผ ์ ์ฉํ๋ค๋ฉด?
ํจ์จ์ ๋์ง๋ง, ๊ตฌ์กฐ ๋ณ๊ฒฝ์ด ๋ง์ ๊ฒฝ์ฐ ํ ์คํธ ์ฝ๋ ์ ์ง๋ณด์๊ฐ ์ด๋ ต์ต๋๋ค.
ํนํ ์ฌ์ฉ์ ์ธํฐํ์ด์ค(UI)์ ๋ํ ํ ์คํธ๋ ์๋ํ์ ํ๊ณ๊ฐ ์์ต๋๋ค. โ UI๋ ๋ณ๊ฒฝ์ด ๋ง์ ๊ธฐ๋ฅ์ ๊ฐ๋ฐ ์๋ฒ์์ ์๋ ํ ์คํธ๋ก ๋น ๋ฅด๊ฒ ํ์ธํ ์ ์์ด์ผ ํฉ๋๋ค.
DBMS : MariaDB v11.2.2
๋ฐฐํฌ ์์น : ๋ก์ปฌ Kubernetes ํด๋ฌ์คํฐ
์ด๊ธฐ ์ํ : ์คํค๋ง์ ํ ์คํธ์ฉ ์ํ ๋ฐ์ดํฐ ์ธํ ์์
์คํ ๋ฆฌ์ง ๋ฐฉ์ : HostPath ๋ณผ๋ฅจ์ผ๋ก ๋ฐ์ดํฐ ๋ณด์กด
๊ฐ๋ฐ ๋จ๊ณ์์ ๋๋ฌด ๋นจ๋ฆฌ ๋ฐฐํฌ ํ๊ฒฝ์ ์ผ๋์ ๋๊ธฐ๋ณด๋ค, ๋น ๋ฅด๊ณ ์ฝ๊ฒ ์คํํ ์ ์๋ ๊ตฌ์กฐ๋ฅผ ๋ง๋๋ ๊ฒ์ด ์คํ๋ ค ์์ฐ์ฑ์ ๋์ด๋ ๊ธธ์ด๋ผ๋ ๊ฒ์ ๋๊ผ๋ค.