Big Bang - 100-hours-a-week/3-team-ssammu-wiki GitHub Wiki

๐Ÿ’ก ๋„์ž… ๋ฐฐ๊ฒฝ

1. GCP ๊ธฐ๋ฐ˜ ์ธํ”„๋ผ ์„ ํƒ ์ด์œ 

  • ํ˜‘์—…์— ์œ ๋ฆฌํ•œ ํ™˜๊ฒฝ: ๋กœ์ปฌ์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ ๋ถˆ์ผ์น˜, ํฌํŠธ ์ถฉ๋Œ, ๋ณด์•ˆ ์„ค์ • ์ด์Šˆ ๋“ฑ์„ ํšŒํ”ผํ•˜๊ณ , ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์—์„œ ์ผ๊ด€๋œ ๊ฐœ๋ฐœ ๋ฐ ๋ฐฐํฌ ํ™˜๊ฒฝ ์ œ๊ณต
  • ๋น„์šฉ ์ ˆ๊ฐ: GCP๋Š” ์‹ ๊ทœ ์‚ฌ์šฉ์ž์—๊ฒŒ $300 ํฌ๋ ˆ๋”ง์„ ์ œ๊ณตํ•˜์—ฌ, ์˜ˆ์‚ฐ์ด ์ œํ•œ๋œ ์ดˆ๊ธฐ ํŒ€์— ์ ํ•ฉ
  • IaaS ํ•™์Šต ๊ธฐํšŒ ์ œ๊ณต: VM, ๋ฐฉํ™”๋ฒฝ, IP ๊ตฌ์„ฑ, ์„œ๋ธŒ๋„ท ๋“ฑ ํด๋ผ์šฐ๋“œ ์ธํ”„๋ผ ๊ตฌ์„ฑ์— ๋Œ€ํ•œ ์‹ค์Šต ๊ธฐ๋ฐ˜ ๋งˆ๋ จ
  • AWS ์ „ํ™˜ ๊ณ ๋ ค: AWS์™€ ์œ ์‚ฌํ•œ ๊ตฌ์กฐ ๋•๋ถ„์—, ํ–ฅํ›„ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์‹œ ์ „ํ™˜ ๋ถ€๋‹ด์ด ์ ์Œ

2. Big Bang ๋ฐฉ์‹ ์ˆ˜๋™ ๋ฐฐํฌ ์ฑ„ํƒ ๋ฐฐ๊ฒฝ

  • ๋น ๋ฅธ MVP ์ถœ์‹œ: ์ดˆ๊ธฐ์—๋Š” ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ๊ณผ ํ”ผ๋“œ๋ฐฑ ํ™•๋ณด๊ฐ€ ํ•ต์‹ฌ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ž๋™ํ™”๋ณด๋‹ค๋Š” ์ˆ˜์ž‘์—… ๋ฐฐํฌ๋ฅผ ํ†ตํ•ด ๊ฐ ์„œ๋น„์Šค ํ๋ฆ„์„ ๋ช…ํ™•ํžˆ ์ดํ•ด
  • ํŒ€ ๋‚ด ์ธํ”„๋ผ ์ดํ•ด๋„ ์ฆ์ง„: ๋ฐฐํฌ ๊ณผ์ • ์ „์ฒด๋ฅผ ์ง์ ‘ ๊ฒฝํ—˜ํ•จ์œผ๋กœ์จ ๊ตฌ์„ฑ์›๋“ค์ด ์„œ๋น„์Šค ์ธํ”„๋ผ ์ „๋ฐ˜์— ๋Œ€ํ•œ ๊ฐ๊ฐ๊ณผ ์ฑ…์ž„ ์˜์‹์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ

๐Ÿ’ก Big Bang ๋ฐฐํฌ๋ž€? ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ•œ ๋ฒˆ์— ์ˆ˜๋™์œผ๋กœ ์„ค์น˜ ๋ฐ ๋ฐฐํฌํ•˜๋Š” ์ „๋žต์œผ๋กœ, ์ดˆ๊ธฐ ์„œ๋น„์Šค ๊ฐœ๋ฐœ ๋ฐ ํŒ€ ์ˆ™๋ จ๋„ ํ–ฅ์ƒ์— ์ ํ•ฉํ•œ ๋ฐฉ์‹์ด๋‹ค.

๐Ÿ–ฅ๏ธ GCP Compute Engine ๋‹จ์ผ ์ธ์Šคํ„ด์Šค ๋ฐฐํฌ ๊ตฌ์กฐ

  • ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค์— ํ”„๋ก ํŠธ์—”๋“œ(Next.js), ๋ฐฑ์—”๋“œ(Spring Boot), AI ์„œ๋ฒ„(FastAPI), DB(MySQL) ์„ ๋ชจ๋‘ ๊ตฌ์„ฑํ•˜์—ฌ ๋ฐฐํฌ
  • ๋„๋ฉ”์ธ ์—ฐ๊ฒฐ ๋ฐ ์ •์  ๋ฆฌ์†Œ์Šค ์„œ๋น™์„ ์œ„ํ•ด Nginx ์›น์„œ๋ฒ„๋ฅผ ๋„์ž…

๐ŸŒ ๋„๋ฉ”์ธ ๋ฐ DNS ์„ค์ •

  • ๋„๋ฉ”์ธ์€ ๊ฐ€๋น„์•„์—์„œ ๊ตฌ๋งค, GCP Cloud DNS๋ฅผ ํ†ตํ•ด ๋„ค์ž„์„œ๋ฒ„ ์„ค์ • ๋ฐ A๋ ˆ์ฝ”๋“œ๋กœ ๊ณ ์ • IP์™€ ์—ฐ๋™
  • Cloud DNS๋Š” GCP์™€ ๋„ค์ดํ‹ฐ๋ธŒํ•˜๊ฒŒ ํ†ตํ•ฉ๋˜์–ด, ๋ณต์žกํ•œ ์™ธ๋ถ€ DNS ์„ค์ • ์—†์ด ๋„๋ฉ”์ธ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ
  • ์„œ๋ธŒ๋„๋ฉ”์ธ(fe.domain.com, api.domain.com ๋“ฑ) ์„ ์„ค์ •ํ•˜์—ฌ ๊ตฌ์กฐ์  URL ๊ตฌ์„ฑ ๊ฐ€๋Šฅ
  • ํŠนํžˆ OAuth2 ๊ธฐ๋ฐ˜ ๋กœ๊ทธ์ธ์„ ๋„์ž…ํ•œ ์„œ๋น„์Šค ํŠน์„ฑ ์ƒ, Redirect URI์— ์‚ฌ์šฉํ•  ๊ณ ์ • ๋„๋ฉ”์ธ ํ™•๋ณด๊ฐ€ ํ•„์ˆ˜์ ์ž„

๐Ÿ“‘ ์„œ๋ธŒ๋„๋ฉ”์ธ ๋งคํ•‘ ์ •์ฑ…

์„œ๋น„์Šค ์˜์—ญ ์„œ๋ธŒ๋„๋ฉ”์ธ ํฌํŠธ/๋ผ์šฐํŒ… ๋ฐฉ์‹ ์„ค๋ช…
ํ”„๋ก ํŠธ์—”๋“œ (Next.js) www.careerbee.co.kr 80, 443 (Nginx ์ •์  ์„œ๋น™) Nginx๋ฅผ ํ†ตํ•ด /var/www/html ๊ฒฝ๋กœ์— ์žˆ๋Š” ๋นŒ๋“œ ํŒŒ์ผ ์ œ๊ณต
๋ฐฑ์—”๋“œ (Spring Boot) api.careerbee.co.kr 8080 (์ง์ ‘ ์ ‘๊ทผ ๋˜๋Š” Nginx๋ฅผ ํ†ตํ•œ ๋ผ์šฐํŒ…) REST API ์š”์ฒญ ์ฒ˜๋ฆฌ
AI ์„œ๋ฒ„ (FastAPI) ai.careerbee.co.kr 8000 (์ง์ ‘ ์ ‘๊ทผ ๋˜๋Š” Nginx๋ฅผ ํ†ตํ•œ ๋ผ์šฐํŒ…) AI ๋ชจ๋ธ ์‘๋‹ต ์ฒ˜๋ฆฌ์šฉ API
DB (MySQL) - (๋‚ด๋ถ€์šฉ) 3306 (๋‚ด๋ถ€ ์ ‘์†) ์™ธ๋ถ€ ๋น„๊ณต๊ฐœ, ์„œ๋ฒ„ ๋‚ด ์„œ๋น„์Šค ๊ฐ„ ์ ‘๊ทผ๋งŒ ํ—ˆ์šฉ

๐ŸŒ Nginx ๋„์ž… ๋ฐฐ๊ฒฝ ๋ฐ ๊ตฌ์„ฑ ๋ฐฉ์‹

  • ํ”„๋ก ํŠธ์—”๋“œ ์ •์  ๋ฆฌ์†Œ์Šค(HTML/CSS/JS) ์„œ๋น™์„ ์œ„ํ•ด ๊ฒฝ๋Ÿ‰ ์›น ์„œ๋ฒ„ ํ•„์š”
  • Nginx๋Š” ๋†’์€ ์„ฑ๋Šฅ๊ณผ ์•ˆ์ •์„ฑ, ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ๊ธฐ๋Šฅ๊นŒ์ง€ ์ง€์›ํ•ด ์ดˆ๊ธฐ ๊ตฌ์„ฑ์— ์ ํ•ฉ
  • /var/www/html ๊ฒฝ๋กœ์— ๋นŒ๋“œ๋œ ์ •์  ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฐฐ์น˜ํ•˜๊ณ , index.html์„ ๊ธฐ๋ณธ ์—”ํŠธ๋ฆฌ๋กœ ์„ค์ •
  • ๋ฐฑ์—”๋“œ ๋ฐ AI API ์š”์ฒญ์€ ์ดํ›„ Nginx ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ๋˜๋Š” ๋ณ„๋„ ํฌํŠธ๋กœ ๋ถ„๋ฆฌ ์šด์˜ ๊ฐ€๋Šฅ

๐Ÿ“ฆ ์ •์  ํŒŒ์ผ ์ €์žฅ ์ „๋žต

  • ํ”„๋กœํ•„ ์ด๋ฏธ์ง€, ๊ธฐ์—… ์ด๋ฏธ์ง€ ๋“ฑ ๊ฐœ๋ฐœ ์ดˆ๊ธฐ๋ถ€ํ„ฐ ์ •์  ๋ฆฌ์†Œ์Šค๋ฅผ ํ™œ์šฉํ•˜๋Š” ์šฐ๋ฆฌ ์„œ๋น„์Šค์˜ ํŠน์„ฑ์„ ๋ฐ˜์˜ํ•˜์—ฌ GCP Cloud Storage๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ €์žฅ
  • DB ๋˜๋Š” ๋กœ์ปฌ์— ์ด์ง„์ˆ˜(๋ฐ”์ดํŠธ ๋ฐฐ์—ด) ํ˜•ํƒœ๋กœ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์€ ๊ด€๋ฆฌ์™€ ํ™•์žฅ์— ๋ถˆ๋ฆฌํ•จ
  • URL๋งŒ DB์— ์ €์žฅํ•จ์œผ๋กœ์จ, ์Šคํ† ๋ฆฌ์ง€์™€ ์—ฐ๋™๋œ ํšจ์œจ์ ์ธ ๋ฏธ๋””์–ด ๊ด€๋ฆฌ ๊ฐ€๋Šฅ

๐Ÿ“œ ๋ฐฐํฌ ์ ˆ์ฐจ ์„ค๋ช…์„œ

1. ๋ฐฐํฌ ๊ฐœ์š”

  • ๋ฐฐํฌ ๋ฐฉ์‹: ์ผ๊ด„ ์ˆ˜์ž‘์—… ๋ฐฐํฌ (Big Bang)
  • ๋ฐฐํฌ ํ™˜๊ฒฝ: GCP Compute Engine ์ธ์Šคํ„ด์Šค (์ด 1๊ฐœ)
  • ๋ฐฐํฌ ๋Œ€์ƒ: ํ”„๋ก ํŠธ์—”๋“œ, ๋ฐฑ์—”๋“œ, AI ์„œ๋ฒ„, DB ์ „๋ถ€ ๋‹จ์ผ ์ธ์Šคํ„ด์Šค์—์„œ ์šด์˜
  • ์ ‘์† ๋ฐฉ์‹: SSH๋ฅผ ํ†ตํ•œ ์ง์ ‘ ์ ‘์†
  • ๋„๊ตฌ: SSH, Git, Nginx, Python (venv), Java (Gradle), MySQL

2. ๋‹ด๋‹น์ž ์—ญํ• 

์—ญํ•  ๋‹ด๋‹น์ž ์„ค๋ช…
๋ฐฐํฌ ์ด๊ด„ ํŒ€ ๋ฆฌ๋”(๋ฌด๋ฌด) ์ „์ฒด ๋ฐฐํฌ ํ๋ฆ„ ๊ด€๋ฆฌ, ํƒ€์ž„๋ผ์ธ ์กฐ์œจ ๋ฐ ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ ๋กค๋ฐฑ ์—ฌ๋ถ€ ๊ฒฐ์ •
์†Œ์Šค ์ฝ”๋“œ ์ค€๋น„ ๋ฐ ์ „์†ก ๊ฐ ํŒŒํŠธ๋ณ„ ๋‹ด๋‹น์ž(์—๋ฐ€๋ฆฌ, ๋ฌด๋ฌด, ์—˜๋ฆฌ๋‚˜ยท๋‹ค์ธ) FE/BE/AI ๊ฐ ํŒŒํŠธ์˜ ์ตœ์‹  ์ฝ”๋“œ๋ฅผ ํด๋ผ์šฐ๋“œ ๋‹ด๋‹น์ž PC์—์„œ ์ค€๋น„ ํ›„ ์ธ์Šคํ„ด์Šค๋กœ ์ „์†ก (scp)
ํ”„๋ก ํŠธ ๋นŒ๋“œ ๋ฐ ๋ฐฐํฌ ํด๋ผ์šฐ๋“œ ๋‹ด๋‹น์ž(๋ชจ๊ฑด, ์ค€) GCE์—์„œ ํ”„๋ก ํŠธ์—”๋“œ ์ฝ”๋“œ ๋นŒ๋“œ โ†’ ์ •์  ๋ฆฌ์†Œ์Šค ๋ณต์‚ฌ ๋ฐ Nginx ์„ค์ • ํ™•์ธ ๋ฐ ์žฌ์‹œ์ž‘
๋ฐฑ์—”๋“œ ๋นŒ๋“œ ๋ฐ ๋ฐฐํฌ ํด๋ผ์šฐ๋“œ ๋‹ด๋‹น์ž(๋ชจ๊ฑด, ์ค€) GCE์—์„œ Gradle ๋นŒ๋“œ โ†’ ๊ธฐ์กด JAR ์ข…๋ฃŒ ํ›„ ์ƒˆ๋กœ์šด JAR ์‹คํ–‰ (nohup)
AI ์„œ๋ฒ„ ๋นŒ๋“œ ๋ฐ ๋ฐฐํฌ ํด๋ผ์šฐ๋“œ ๋‹ด๋‹น์ž(๋ชจ๊ฑด, ์ค€) GCE์—์„œ Python ๊ฐ€์ƒํ™˜๊ฒฝ ํ™œ์„ฑํ™” โ†’ ์˜์กด์„ฑ ์„ค์น˜ ๋ฐ Uvicorn ํ”„๋กœ์„ธ์Šค ๊ต์ฒด
๋„๋ฉ”์ธ ๋ฐ ์ธํ”„๋ผ ์ ๊ฒ€ ํด๋ผ์šฐ๋“œ ๋‹ด๋‹น์ž(๋ชจ๊ฑด, ์ค€) ๋„๋ฉ”์ธ ์—ฐ๊ฒฐ ์ƒํƒœ, ์ธ์Šคํ„ด์Šค ๋ฆฌ์†Œ์Šค(CPU, ๋””์Šคํฌ ๋“ฑ), ๋ณด์•ˆ ๊ทธ๋ฃน/๋ฐฉํ™”๋ฒฝ ์ƒํƒœ ํ™•์ธ
๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ ๋ฐ ์™„๋ฃŒ ๋ณด๊ณ  ๊ฐ ํŒŒํŠธ๋ณ„ ๋‹ด๋‹น์ž(์—๋ฐ€๋ฆฌ, ๋ฌด๋ฌด, ์—˜๋ฆฌ๋‚˜ยท๋‹ค์ธ) FE/BE/AI ๊ฐ ํŒŒํŠธ์˜ ์ฃผ์š” ๊ธฐ๋Šฅ ์ž‘๋™ ์—ฌ๋ถ€ ํ™•์ธ ํ›„ ์™„๋ฃŒ ๋ณด๊ณ 

3. ๋ฐฐํฌ ์ ˆ์ฐจ

๋‹จ๊ณ„ ์ ˆ์ฐจ ์ƒ์„ธ ์„ค๋ช…
1 ์‚ฌ์ „ ์ ๊ฒ€ GCE ์ธ์Šคํ„ด์Šค ์ƒํƒœ(CPU/๋ฉ”๋ชจ๋ฆฌ/๋””์Šคํฌ), ๋„๋ฉ”์ธ ์—ฐ๊ฒฐ ์ƒํƒœ, ๋ฐฉํ™”๋ฒฝ ์„ค์ • ํ™•์ธ
2 ์†Œ์Šค ์ฝ”๋“œ ์ „์†ก ํด๋ผ์šฐ๋“œ ๋‹ด๋‹น์ž PC์—์„œ FE/BE/AI ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๊ฐ๊ฐ GCE ์ธ์Šคํ„ด์Šค๋กœ scp ๋ณต์‚ฌ
3 GCE ์ ‘์† ์ธ์Šคํ„ด์Šค(GCE)์— SSH ์ ‘์†
4 ํ”„๋ก ํŠธ์—”๋“œ ๋นŒ๋“œ ๋ฐ ๋ฐฐํฌ Node.js ๋ฐ Nginx ์„ค์น˜ ํ›„, ํ”„๋ก ํŠธ์—”ํŠธ ๋นŒ๋“œ ์ˆ˜ํ–‰(pnpm install && pnpm build) โ†’ ๋นŒ๋“œ ๋œ ์ •์  ๋ฆฌ์†Œ์Šค๋ฅผ Nginx ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ(/var/www/html ๋“ฑ)๋กœ ๋ณต์‚ฌ
5 ๋ฐฑ์—”๋“œ ๋นŒ๋“œ ๋ฐ ๋ฐฐํฌ JDK ํ™˜๊ฒฝ์—์„œ Gradle ๋นŒ๋“œ ์ˆ˜ํ–‰ (./gradlew build) โ†’ ์‹คํ–‰ ์ค‘์ธ ๋ฐฑ์—”๋“œ ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ ( pkill) ํ›„ ์ตœ์‹  JAR ํŒŒ์ผ ์‹คํ–‰
6 AI ์„œ๋ฒ„ ๋ฐฐํฌ Python ๊ฐ€์ƒํ™˜๊ฒฝ ์ง„์ž… โ†’ ํ•„์š” ์‹œ ์˜์กด์„ฑ ์„ค์น˜ (pip install -r requirements.txt) โ†’ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค ๊ต์ฒด
7 ๋กœ๊ทธ ํ™•์ธ ๊ฐ ์„œ๋ฒ„ ๋กœ๊ทธ(nohup, uvicorn, nginx ๋“ฑ) ํ™•์ธํ•˜์—ฌ ์ •์ƒ ์ž‘๋™ ์—ฌ๋ถ€ ์ ๊ฒ€
8 ๋„๋ฉ”์ธ ์ ‘๊ทผ ํ™•์ธ FE/BE/AI ๊ฒฝ๋กœ๊ฐ€ ์—ฐ๊ฒฐ๋œ ๋„๋ฉ”์ธ ์ฃผ์†Œ๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ํ™•์ธ ๋ฐ ์ฃผ์š” ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ ์ˆ˜ํ–‰  
9 ์™„๋ฃŒ ๋ณด๊ณ  ๋‹ด๋‹น์ž๋ณ„ ์™„๋ฃŒ ๋ณด๊ณ , ๋ฐฐํฌ ์ด๊ด„์ž๊ฐ€ ์ตœ์ข… ๋ฐฐํฌ ์™„๋ฃŒ ์—ฌ๋ถ€ ํ™•์ธ ํ›„ ๊ณต์œ 

4. ์˜ˆ์ƒ ์†Œ์š” ์‹œ๊ฐ„ ๋ฐ ๋‹ค์šดํƒ€์ž„

  • ์ด ๋ฐฐํฌ ์‹œ๊ฐ„: ์•ฝ 20~30๋ถ„ (๋ณ‘๋ ฌ ์ง„ํ–‰ ์‹œ 15๋ถ„ ๋‚ด์™ธ)

  • ์„œ๋น„์Šค ์ค‘๋‹จ ๊ฐ€๋Šฅ์„ฑ: ๊ฐ ์„œ๋ฒ„/ํŒŒ์ผ ๊ต์ฒด ๊ตฌ๊ฐ„์— 2~3๋ถ„ ์ด๋‚ด์˜ ๋‹ค์šดํƒ€์ž„ ๋ฐœ์ƒ ๊ฐ€๋Šฅ

  • ๋ฐฐํฌ ์‹œ๊ฐ„๋Œ€ ๊ถŒ์žฅ:

    โฐ ์ƒˆ๋ฒฝ 2์‹œ~5์‹œ (ํŠธ๋ž˜ํ”ฝ ์ตœ์†Œ ์‹œ๊ฐ„๋Œ€)

    โ†’ ์šฐ๋ฆฌ ์„œ๋น„์Šค์˜ ์ฃผ์š” ํƒ€๊ฒŸ์ด ์ง์žฅ์ธ/๊ตฌ์ง์ž์ด๋ฏ€๋กœ ์ถœํ‡ด๊ทผยท์ ์‹ฌ์‹œ๊ฐ„ ์™ธ ์‹œ๊ฐ„๋Œ€์— ์ง„ํ–‰

5. ๋ฐฐํฌ ์ฒดํฌ๋ฆฌ์ŠคํŠธ (๋ฐฐํฌ ์ „/ํ›„)

๊ตฌ๋ถ„ ํ•ญ๋ชฉ ํ™•์ธ
๋ฐฐํฌ ์ „ GCE ์ธ์Šคํ„ด์Šค ์ƒํƒœ ํ™•์ธ (CPU/๋ฉ”๋ชจ๋ฆฌ/๋””์Šคํฌ)  
  ๋„๋ฉ”์ธ ์—ฐ๊ฒฐ ๋ฐ DNS ์ „ํŒŒ ์™„๋ฃŒ ์—ฌ๋ถ€ ํ™•์ธ  
  ๋ฐฉํ™”๋ฒฝ ์„ค์ • (80/443/8000/3306 ํฌํŠธ ๋“ฑ) ์ •์ƒ ์ ์šฉ ์—ฌ๋ถ€  
  FE/BE/AI ์ตœ์‹  ์ฝ”๋“œ ํด๋ผ์šฐ๋“œ ๋‹ด๋‹น์ž PC์— ์ค€๋น„  
๋ฐฐํฌ ์ค‘ scp๋ฅผ ํ†ตํ•ด FE/BE/AI ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ธ์Šคํ„ด์Šค์— ๋ณต์‚ฌ  
  SSH ์ ‘์† ํ›„ ๋นŒ๋“œ ์ˆ˜ํ–‰ (npm run build, ./gradlew build, pip install ...)  
  FE โ†’ ์ •์  ํŒŒ์ผ ๋ณต์‚ฌ + Nginx ์žฌ์‹œ์ž‘  
  BE โ†’ ๊ธฐ์กด ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ ํ›„ JAR ์žฌ์‹คํ–‰  
  AI โ†’ ๊ฐ€์ƒํ™˜๊ฒฝ ํ™œ์„ฑํ™” ๋ฐ Uvicorn ์žฌ์‹คํ–‰  
  MySQL ์‹คํ–‰ ์ƒํƒœ ๋ฐ ์—ฐ๊ฒฐ ํ…Œ์ŠคํŠธ  
๋ฐฐํฌ ํ›„ ๋„๋ฉ”์ธ ์ ‘๊ทผ ์‹œ FE ์ •์ƒ ๋ Œ๋”๋ง ์—ฌ๋ถ€  
  ์ฃผ์š” API ๋™์ž‘ ํ™•์ธ (ํšŒ์›๊ฐ€์ž…, ๋กœ๊ทธ์ธ, DB ๋ฐ˜์˜ ๋“ฑ)  
  AI ์„œ๋ฒ„ ์—ฐ๋™ ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ  
  MySQL DB ์ƒํƒœ ๋ฐ ๋ฐ์ดํ„ฐ ํ™•์ธ (SELECT * FROM ...)  
  ๋‹ด๋‹น์ž ์™„๋ฃŒ ๋ณด๊ณ  ๋ฐ ์ตœ์ข… ์Šน์ธ  

6. ์‚ฌ์šฉ ๋ช…๋ น์–ด ์š”์•ฝ

๐Ÿ“ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ (๋ฐฐํฌ ๋‹ด๋‹น์ž ๋กœ์ปฌ)

๋ฐฐํฌ ๋‹ด๋‹น์ž ๋กœ์ปฌ
โ””โ”€โ”€ deploy/
    โ”œโ”€โ”€ scripts/
    โ”‚   โ”œโ”€โ”€ deploy.sh
    โ”‚   โ””โ”€โ”€ rollback.sh
    โ”œโ”€โ”€ frontend/
    โ”‚   โ””โ”€โ”€ dist/
    โ”œโ”€โ”€ backend/
    โ”‚   โ””โ”€โ”€ build/libs/app.jar
    โ””โ”€โ”€ ai-server/
        โ””โ”€โ”€ ...

๐Ÿ” ํŒŒ์ผ ์ „์†ก ๋ฐฉ์‹: SCP

ํ•ญ๋ชฉ FTP SCP
๋ณด์•ˆ ์•”ํ˜ธํ™” ์—†์Œ SSH ๊ธฐ๋ฐ˜ ์•”ํ˜ธํ™” ์ „์†ก
์ž๋™ํ™” ์—ฐ๊ณ„ GUI ์นœํ™”, ์ž๋™ํ™” ์–ด๋ ค์›€ CLI ๊ธฐ๋ฐ˜ ์ž๋™ํ™”์— ์ตœ์ ํ™”
๋ฐฉํ™”๋ฒฝ ์„ค์ • Passive ๋ชจ๋“œ ํฌํŠธ ๋‹ค์ˆ˜ ๊ฐœ๋ฐฉ ํ•„์š” ๊ธฐ๋ณธ 22๋ฒˆ ํฌํŠธ๋งŒ ํ—ˆ์šฉ

โœ… MVP/ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ๋Š” ๋ณด์•ˆ์„ฑ๊ณผ ํŽธ์˜์„ฑ์„ ๊ณ ๋ คํ•˜์—ฌ SCP ์‚ฌ์šฉ์„ ์„ ํƒ


๐Ÿ“ฆ deploy.sh โ€“ ๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ

โ€ป ๋ชจ๋“  ๋ช…๋ น์–ด๋Š” deploy/scripts ๋””๋ ‰ํ† ๋ฆฌ ๊ธฐ์ค€

#!/bin/bash

SERVER_USER=ssmu-morgan
SERVER_IP=34.64.180.54
SSH_KEY=~/.ssh/gcp-ssmu-dev-key
JAR_NAME=careerbee-0.0.1-SNAPSHOT.jar
PROFILE=dev

# ๋ฐฑ์—”๋“œ JAR ๋นŒ๋“œ ์•„ํ‹ฐํŒฉํŠธ ๊ฒฝ๋กœ
LOCAL_JAR_PATH=../backend/3-team-CareerBee-be/build/libs/$JAR_NAME
REMOTE_RELEASE_DIR=~/release
REMOTE_APP_LINK=~/app.jar

TIMESTAMP=$(date +%Y%m%d%H%M%S)
REMOTE_JAR_PATH=$REMOTE_RELEASE_DIR/app-$TIMESTAMP.jar

echo "[1] ๋ฐฑ์—”๋“œ JAR ์ „์†ก ์ค‘..."
scp -i $SSH_KEY $LOCAL_JAR_PATH $SERVER_USER@$SERVER_IP:$REMOTE_JAR_PATH


echo "[2] ํ”„๋ก ํŠธ์—”๋“œ ์ •์  ํŒŒ์ผ ์ „์†ก ์ค‘..."
scp -i $SSH_KEY -r ../frontend/dist/* $SERVER_USER@$SERVER_IP:/var/www/html/


echo "[3] AI ์„œ๋ฒ„ ์†Œ์Šค์ฝ”๋“œ ์ „์†ก ์ค‘..."
scp -i $SSH_KEY -r ../ai-server $SERVER_USER@$SERVER_IP:~/ai-server/


echo "[4] ๋ฐฑ์—”๋“œ ์‹คํ–‰ ์ค‘๋‹จ ๋ฐ ์žฌ์‹œ์ž‘..."
ssh -i $SSH_KEY $SERVER_USER@$SERVER_IP <<EOF
  pkill -f '$JAR_NAME' || echo "๊ธฐ์กด ๋ฐฑ์—”๋“œ ์—†์Œ"
  mkdir -p $REMOTE_RELEASE_DIR ~/logs
  ln -sf $REMOTE_JAR_PATH $REMOTE_APP_LINK
  nohup java -jar -Dspring.profiles.active=$PROFILE $REMOTE_APP_LINK > ~/logs/backend.log 2>&1 &
EOF


echo "[5] AI ์„œ๋ฒ„ ์žฌ์‹œ์ž‘..."
ssh -i $SSH_KEY $SERVER_USER@$SERVER_IP <<EOF
  cd ~/ai-server
  python3 -m venv venv && source venv/bin/activate || source venv/bin/activate
  pip install -r requirements.txt
  pkill -f 'uvicorn' || echo "๊ธฐ์กด AI ์—†์Œ"
  nohup uvicorn main:app --host 0.0.0.0 --port 8000 > ~/logs/ai.log 2>&1 &
EOF


echo "โœ… ๋ฐฐํฌ ์™„๋ฃŒ"


๐Ÿ” rollback.sh โ€“ ๋กค๋ฐฑ ์Šคํฌ๋ฆฝํŠธ

#!/bin/bash

SERVER_USER=ubuntu
SERVER_IP=<GCP-VM-IP>
SSH_KEY=~/.ssh/gcp-ssmu-dev-key

echo "[1] ์ตœ์‹  ์ด์ „ ๋ฒ„์ „์œผ๋กœ ๋กค๋ฐฑ ์ค‘..."

ssh -i $SSH_KEY $SERVER_USER@$SERVER_IP <<EOF
  PREV_JAR=\$(ls -t ~/release/app-*.jar | sed -n 2p)
  if [ -z "\$PREV_JAR" ]; then
    echo "โŒ ๋กค๋ฐฑ ๊ฐ€๋Šฅํ•œ ์ด์ „ ๋ฒ„์ „์ด ์—†์Šต๋‹ˆ๋‹ค."
    exit 1
  fi
  echo "๐Ÿ” ๋กค๋ฐฑ ๋Œ€์ƒ: \$PREV_JAR"
  pkill -f 'app.jar'
  ln -sf \$PREV_JAR ~/app.jar
  nohup java -jar ~/app.jar > ~/logs/backend_rollback.log 2>&1 &
EOF

echo "โœ… ๋กค๋ฐฑ ์™„๋ฃŒ"

๐Ÿ“Œ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ๋ฐฉ๋ฒ•

# ๋ฐฐํฌ ์‹คํ–‰
cd deploy/scripts
bash deploy.sh

# ๋กค๋ฐฑ ์‹คํ–‰
bash rollback.sh

โœ… ์ถ”๊ฐ€ ๊ณ ๋ ค์‚ฌํ•ญ

  • ์™œ rollback.sh์— ๋ฐฑ์—”๋“œ๋งŒ ์žˆ๋Š”๊ฐ€?
    • ๊ฐœ๋ฐœ ํŒŒํŠธ์˜ ํŠน์„ฑ์„ ๊ณ ๋ คํ•˜์˜€๋‹ค.
ํ•ญ๋ชฉ ์„ค๋ช…
๋ฐฑ์—”๋“œ .jar ํŒŒ์ผ ๋‹จ์œ„๋กœ ๋ฒ„์ „ ์Šค๋ƒ…์ƒท์„ ๋ณด๊ด€ํ•˜๊ธฐ ์‰ฌ์›€ โ†’ ~/release/ ๋””๋ ‰ํ† ๋ฆฌ์— ํƒ€์ž„์Šคํƒฌํ”„ ๋ฒ„์ „ ์œ ์ง€ ๊ฐ€๋Šฅ
ํ”„๋ก ํŠธ์—”๋“œ dist/ ์ •์  ํŒŒ์ผ์€ ๋ฒ„์ „ ๊ด€๋ฆฌ๊ฐ€ ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ๋กค๋ฐฑ ์‹œ ๋ณ„๋„ ๋ฐฑ์—… ์ •์ฑ…์ด ํ•„์š”ํ•จ
AI ์„œ๋ฒ„ Python ํ™˜๊ฒฝ์€ main.py ์ˆ˜์ • ๋‚ด์šฉ์ด git ๊ด€๋ฆฌ๋˜์ง€ ์•Š๊ฑฐ๋‚˜, ์˜์กด์„ฑ์— ๋”ฐ๋ผ ์˜ˆ๊ธฐ์น˜ ์•Š์€ ๋™์ž‘ ๋ฐœ์ƒ ๊ฐ€๋Šฅ โ†’ ๋‹จ์ˆœ ๋กค๋ฐฑ๋ณด๋‹ค ์žฌ๋ฐฐํฌ๊ฐ€ ์ผ๋ฐ˜์ 

๋”ฐ๋ผ์„œ ๋ฐฑ์—”๋“œ์ฒ˜๋Ÿผ ๋กค๋ฐฑ์ด ๋ช…ํ™•ํ•˜๊ฒŒ ํ•„์š”ํ•œ ๊ฒฝ์šฐ๋งŒ ๋กค๋ฐฑ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋”ฐ๋กœ ๊ด€๋ฆฌํ•˜๊ณ , ๋‚˜๋จธ์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋‹ค์‹œ ๋นŒ๋“œ๋œ ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์žฌ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ์‹์ด ํ˜„ ์ƒํ™ฉ์—์„œ ๋” ์•ˆ์ •์ ์ด๋ผ๊ณ  ํŒ๋‹จ

7. ์žฅ์•  ๋Œ€์‘ ์‹œ๋‚˜๋ฆฌ์˜ค

๐Ÿ› ๏ธ ์žฅ์•  ๋ฐœ์ƒ ์‹œ ๋Œ€์‘ ์‹œ๋‚˜๋ฆฌ์˜ค ์š”์•ฝํ‘œ

์„œ๋น„์Šค ์˜์—ญ ์ฃผ์š” ์ฆ์ƒ ์ฆ‰์‹œ ์กฐ์น˜ ๋‹ด๋‹น์ž ๋ณต๊ตฌ ๋ฐฉ๋ฒ•
ํ”„๋ก ํŠธ์—”๋“œ (React.js) ํ™”๋ฉด ๋น„์ •์ƒ ๋ Œ๋”๋ง, 404 ์˜ค๋ฅ˜, JS ์‹คํ–‰ ์˜ค๋ฅ˜ ๋“ฑ ๋ธŒ๋ผ์šฐ์ € ์ฝ˜์†” ํ™•์ธ, ๋ฐฐํฌ๋œ index.html ๋ฐ ์ •์  ํŒŒ์ผ ํ™•์ธ FE (์—๋ฐ€๋ฆฌ) dist/ ์žฌ๋นŒ๋“œ ํ›„ Nginx ์žฌ์‹œ์ž‘ ๋ฐ ์ •์  ํŒŒ์ผ ์žฌ๋ฐฐํฌ
๋ฐฑ์—”๋“œ (Spring Boot) API 500 ์˜ค๋ฅ˜, ์‘๋‹ต ์—†์Œ backend.log ํ™•์ธ, ๋ฐฑ์—”๋“œ ํ”„๋กœ์„ธ์Šค ์ƒํƒœ ์ ๊ฒ€ BE (๋ฌด๋ฌด) rollback.sh ์‹คํ–‰ โ†’ ์ด์ „ .jar๋กœ ๋ณต๊ตฌ
AI ์„œ๋ฒ„ (FastAPI) ๊ธฐ๋Šฅ ์‘๋‹ต ์ง€์—ฐ ๋˜๋Š” 502/504 ์˜ค๋ฅ˜ ai.log ํ™•์ธ, uvicorn ์ƒํƒœ ์ ๊ฒ€ AI (์—˜๋ฆฌ๋‚˜, ๋‹ค์ธ) ๊ฐ€์ƒํ™˜๊ฒฝ(venv) ์žฌ์‹คํ–‰, ํ•„์š” ์‹œ main.py ์ˆ˜์ • ํ›„ ์žฌ์‹œ์ž‘
DB (MySQL) ๋กœ๊ทธ์ธ, ์ €์žฅ, ์กฐํšŒ ๊ธฐ๋Šฅ ์‹คํŒจ / DB ์—ฐ๊ฒฐ ์˜ค๋ฅ˜ mysql ์ƒํƒœ ํ™•์ธ, 3306 ํฌํŠธ ์ ‘๊ทผ ์ ๊ฒ€ BE (๋ฌด๋ฌด), ํด๋ผ์šฐ๋“œ (์ค€) systemctl restart mysql, ํ•„์š” ์‹œ mysqldump ๊ธฐ๋ฐ˜ ๋ณต๊ตฌ
์ „์ฒด ์ธ์Šคํ„ด์Šค (GCE) ๋ชจ๋“  ์„œ๋น„์Šค ์‘๋‹ต ๋ถˆ๊ฐ€, SSH ์ ‘์† ๋ถˆ๊ฐ€ GCP Console๋กœ ์ธ์Šคํ„ด์Šค ์ ‘๊ทผ ์‹œ๋„ ํด๋ผ์šฐ๋“œ (๋ชจ๊ฑด) VM ์žฌ์‹œ์ž‘ ๋˜๋Š” ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค์—์„œ ์žฌ๋ฐฐํฌ ์ง„ํ–‰

๐Ÿ–ผ๏ธ ์ˆ˜์ž‘์—… ๋ฐฐํฌ ์•„ํ‚คํ…์ฒ˜ ๋‹ค์ด์–ด๊ทธ๋žจ

SSMU-MVP


๐Ÿงฑ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ

  • VPC (SSMU-DEV)
    • CIDR: 192.168.0.0/16
  • Public Subnet (SUBNET-SSMU-DEV-PUBLIC-Azone)
    • CIDR: 192.168.10.0/24
    • GCP ๋ฆฌ์ „: asia-northeast3a
  • Compute Engine (FE + BE + AI + DB)
    • ๋จธ์‹  ์œ ํ˜•: g2-standard-4
      • vCPU: 4๊ฐœ, ๋ฉ”๋ชจ๋ฆฌ(RAM): 16GB
    • ํ”„๋ก ํŠธ/๋ฐฑ์—”๋“œ, AI ์ฒ˜๋ฆฌ ๋กœ์ง, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๋ชจ๋‘ ํฌํ•จ๋œ ๋‹จ์ผ VM
    • ํผ๋ธ”๋ฆญ IP๊ฐ€ ํ• ๋‹น๋˜์–ด ์žˆ๊ณ , Cloud DNS๋ฅผ ํ†ตํ•ด ๋„๋ฉ”์ธ์œผ๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅ
    • ์‚ฌ์šฉ์ž ์š”์ฒญ๊ณผ ๊ฐœ๋ฐœ์ž ๋ฐฐํฌ ๋ชจ๋‘ ์ด ์ธ์Šคํ„ด์Šค๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์ด๋ฃจ์–ด์ง
  • Cloud DNS
    • ์‚ฌ์šฉ์ž ์š”์ฒญ์„ ํผ๋ธ”๋ฆญ IP๋กœ ์ „๋‹ฌ
    • ๋„๋ฉ”์ธ ๊ธฐ๋ฐ˜ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ์„ค์ •
  • Cloud Storage
    • ์ •์  ๋ฆฌ์†Œ์Šค(์ด๋ฏธ์ง€, ํŒŒ์ผ ๋“ฑ) ์ €์žฅ ์šฉ๋„๋กœ ์—ฐ๋™
  • Dev
    • ๊ฐœ๋ฐœ์ž๋Š” ์™ธ๋ถ€์—์„œ scp, ssh์„ ํ†ตํ•ด ์ง์ ‘ ์„œ๋ฒ„์— ๋ฐฐํฌ

โš ๏ธํ•œ๊ณ„์  ๋ฐ ๋ฌธ์ œ์  + ํ•ด๊ฒฐ ๋ฐฉ์•ˆ

๐Ÿง ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ์˜ ๋ฌธ์ œ์ 

๋ฌธ์ œ ์„ค๋ช… โœ… ํ•ด๊ฒฐ ๋ฐฉ์•ˆ
๋А๋ฆฐ ์‘๋‹ต ์†๋„ ๋‹จ์ผ VM์—์„œ ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ ์ฒ˜๋ฆฌ๋กœ ์ธํ•ด ๋ณ‘๋ชฉ ๋ฐœ์ƒ(๋™์‹œ ์ ‘์† ์‹œ ์„ฑ๋Šฅ ์ €ํ•˜) ์„œ๋น„์Šค๋“ค์„ Nginx ๊ธฐ๋ฐ˜ ํฌํŠธ ๋ถ„๋ฆฌ๋กœ ์šฐ์„  ๋Œ€์‘ํ•˜๊ณ , ์žฅ๊ธฐ์ ์œผ๋กœ๋Š” GKE, Cloud Run ๋“ฑ ๋ถ„์‚ฐ ์ธํ”„๋ผ๋กœ ์ „ํ™˜
์žฆ์€ ์ค‘๋‹จ ์„ค์ • ์ถฉ๋Œ, ์ˆ˜๋™ ๋ฐฐํฌ ์ค‘๋‹จ ๋“ฑ์œผ๋กœ ์ธํ•œ ์˜ˆ๊ธฐ์น˜ ์•Š์€ ์˜ค๋ฅ˜(์„œ๋ฒ„ ๋‹ค์šด) ๋ฐฐํฌ ์ „ ํ”„๋กœ์„ธ์Šค ์ ๊ฒ€ ๋ฐ ๋กœ๊ทธ ํ™•์ธ์„ ์ฒ ์ €ํžˆ ํ•˜๋ฉฐ, ํ—ฌ์Šค์ฒดํฌ ๊ธฐ๋ฐ˜ ์ž๋™ ๋ณต๊ตฌ ๊ตฌ์กฐ ๋„์ž…
๋ณด์•ˆ ๋ฏธํก HTTPS ๋ฏธ์ ์šฉ, ํฌํŠธ ๊ณผ๋‹ค ๋…ธ์ถœ๋กœ ์ธํ•ด ์ •๋ณด ์œ ์ถœ ์œ„ํ—˜ Let's Encrypt๋ฅผ ํ†ตํ•œ SSL ์ ์šฉ, ์™ธ๋ถ€ ํฌํŠธ๋Š” Nginx๋กœ ํ†ตํ•ฉํ•˜๊ณ  ๋ฐฉํ™”๋ฒฝ ์ •์ฑ…์„ ์—„๊ฒฉํžˆ ์„ค์ •
๋‹ค์šดํƒ€์ž„ ๋ฐœ์ƒ ๋ฐฐํฌ ์ค‘ ์„œ๋น„์Šค ์ ‘์† ๋ถˆ๊ฐ€ ์ƒˆ๋ฒฝ ์‹œ๊ฐ„ ๋ฐฐํฌ ๋ฐ Nginx์˜ ๋ฌด์ค‘๋‹จ ์„ค์ • ์ ์šฉ, ์ดํ›„ Blue/Green ๋ฐฉ์‹ ๋„์ž…์œผ๋กœ ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ ์‹คํ˜„
์‚ฌ์šฉ์ž ์‹ ๋ขฐ ์ €ํ•˜ ์žฅ์•  ์‹œ ๋А๋ฆฐ ๋Œ€์‘, ๋ฐ˜๋ณต๋œ ๋ฌธ์ œ๋กœ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜(์‹ ๋ขฐ) ์ €ํ•˜ ๋น ๋ฅธ ๋ณต๊ตฌ ์ ˆ์ฐจ ๋งค๋‰ด์–ผํ™” ๋ฐ ์žฅ์•  ๊ฐ์ง€ ์•Œ๋ฆผ ์‹œ์Šคํ…œ ๋„์ž…์œผ๋กœ ๋Œ€์‘ ์‹œ๊ฐ„ ์ตœ์†Œํ™”

๐Ÿ‘จโ€๐Ÿ’ป ๊ฐœ๋ฐœ์ž ์ž…์žฅ์—์„œ์˜ ๋ฌธ์ œ์ 

๋ฌธ์ œ ์„ค๋ช… โœ… ํ•ด๊ฒฐ ๋ฐฉ์•ˆ
์ˆ˜๋™ ๋ฐฐํฌ ๋ถ€๋‹ด ๋ฐ˜๋ณต์ ์ธ scp, ssh ์ˆ˜๋™ ๋ฐฐํฌ๋กœ ์ธํ•œ ์‹ค์ˆ˜ ๊ฐ€๋Šฅ์„ฑ ๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ •๋น„ํ•˜๊ณ , GitHub Actions ๋“ฑ CI/CD ์ž๋™ํ™”๋กœ ์ „ํ™˜
ํ™˜๊ฒฝ ๋ถˆ์ผ์น˜ ๋กœ์ปฌ/์šด์˜ ํ™˜๊ฒฝ ์ฐจ์ด๋กœ ์‹คํ–‰ ์˜ค๋ฅ˜ ๋ฐœ์ƒ .env ํ™˜๊ฒฝ ํ†ต์ผ ๋ฐ Docker ๊ธฐ๋ฐ˜ ์‹คํ–‰ ํ™˜๊ฒฝ์œผ๋กœ ์ผ๊ด€์„ฑ ํ™•๋ณด
๋””๋ฒ„๊น… ์–ด๋ ค์›€ ๋กœ๊ทธ ๋ถ„์‚ฐ ๋ฐ ๋ถ€์กฑ์œผ๋กœ ์žฅ์•  ์›์ธ ์ถ”์  ์–ด๋ ค์›€ ๋กœ๊ทธ ๊ฒฝ๋กœ๋ฅผ ํ†ต์ผํ•˜๊ณ , Cloud Logging, Sentry ๋“ฑ ๋„๊ตฌ๋กœ ๋ชจ๋‹ˆํ„ฐ๋ง ๊ฐ•ํ™”
ํ…Œ์ŠคํŠธ ์ž๋™ํ™” ๋ฏธ๋น„ ๋ฆด๋ฆฌ์ฆˆ ์ „ ์ˆ˜๋™ ํ…Œ์ŠคํŠธ๋งŒ ์กด์žฌ ๊ฐ„๋‹จํ•œ ์…ธ ํ…Œ์ŠคํŠธ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด CI ํŒŒ์ดํ”„๋ผ์ธ ๋‚ด ํ…Œ์ŠคํŠธ ์ž๋™ํ™” ๊ตฌํ˜„
ํ™•์žฅ์„ฑ ๋ถ€์กฑ ๋ชจ๋“  ๊ธฐ๋Šฅ์ด ํ•˜๋‚˜์˜ ์„œ๋ฒ„์— ์ง‘์ค‘๋˜์–ด ์žˆ์–ด, ๊ธฐ๋Šฅ/ํŠธ๋ž˜ํ”ฝ ์ฆ๊ฐ€์— ๋”ฐ๋ฅธ ์‹œ์Šคํ…œ ๋Œ€์‘ ํ•œ๊ณ„ Nginx์—์„œ ๊ธฐ๋Šฅ์„ ๋ถ„๋ฆฌํ•˜๊ณ , ์ ์ง„์ ์œผ๋กœ GKE ๋˜๋Š” Cloud Run ๊ธฐ๋ฐ˜์˜ ์œ ์—ฐํ•œ ๊ตฌ์กฐ๋กœ ์ด์ „
๋กค๋ฐฑ ์ฒด๊ณ„ ๋ฏธํก FE/AI๋Š” ๋˜๋Œ๋ฆด ๊ตฌ์กฐ ์—†์ด ์žฌ๋ฐฐํฌ๋งŒ ๊ฐ€๋Šฅ ํ”„๋ก ํŠธ๋Š” dist/ ๋ฐฑ์—… ๋ฐ symlink ํ™œ์šฉ, AI๋Š” Docker ์ด๋ฏธ์ง€ ๋ฐ git ๋ฒ„์ „ ๊ด€๋ฆฌ๋กœ ์ผ๊ด€๋œ ๋กค๋ฐฑ ๊ตฌ์กฐ ํ™•๋ฆฝ
๋ฐฑ์—… ์ „๋žต ์—†์Œ DB/์ •์  ๋ฆฌ์†Œ์Šค ์†์‹ค ์‹œ ๋ณต๊ตฌ ๋ถˆ๊ฐ€ mysqldump + ์ด๋ฏธ์ง€ ZIP ๋ฐฑ์—…์„ ์‹œ์ž‘์œผ๋กœ, Cloud SQL ๋ฐ Cloud Storage์˜ ์ •๊ธฐ ๋ฐฑ์—… ๊ตฌ์กฐ ๋„์ž…
๋ณด์•ˆ ์ทจ์•ฝ SSH ํ‚ค ๊ณต์œ , ํฌํŠธ ๋…ธ์ถœ ๋“ฑ์œผ๋กœ ๋ณด์•ˆ ์œ„ํ—˜ ์ฆ๊ฐ€ GCP OS Login์œผ๋กœ ์‚ฌ์šฉ์ž๋ณ„ SSH ๋ถ„๋ฆฌ, IAM ๊ถŒํ•œ ์ œ์–ด, VPC ๋‚ด๋ถ€๋ง ํ™œ์šฉ
๋ชจ๋‹ˆํ„ฐ๋ง ๋ถ€์žฌ ์žฅ์•  ๋ฐœ์ƒ ์ธ์ง€ ์ง€์—ฐ, ์„œ๋ฒ„ ์ƒํƒœ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ค์›€ top, tail ๋“ฑ ๊ธฐ๋ณธ ๋ช…๋ น์–ด ์ž๋™ํ™” ํ›„, Cloud Monitoring, Slack Alert ์—ฐ๋™์œผ๋กœ ์‹ค์‹œ๊ฐ„ ๋Œ€์‘ ์ฒด๊ณ„ ๊ตฌ์ถ•

๐Ÿ“Œ ๋ณธ ํŽ˜์ด์ง€๋Š” 2025๋…„ 5์›” 7์ผ์— ๋งˆ์ง€๋ง‰์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

โš ๏ธ **GitHub.com Fallback** โš ๏ธ