System Architecture - Team-likelion-3rd-Project/likelion-devops-7th-3rd-team01 GitHub Wiki

System Architecture

์ƒํƒœ: 1์ฃผ์ฐจ ํด๋ผ์šฐ๋“œ ์„ค๊ณ„์•ˆ / ํŒ€ ๊ฒ€ํ†  ์ „
์ž‘์„ฑ์ผ: 2026-10-07. ์‹ค์ œ ๊ตฌ์ถ•ยท๊ฒ€์ฆ ๊ฒฐ๊ณผ๊ฐ€ ์•„๋‹Œ ๋ชฉํ‘œ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ ์ฃผ ํŒ€ ๊ฒ€ํ† ๋ฅผ ๊ฑฐ์ณ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ณ„์ •ยท๋ฆฌ์ „ยทAZ ์ด๋ฆ„์€ ๋ฏธ์ •์ž…๋‹ˆ๋‹ค. 2026-10-14 ๊ณต์‹ ๋‹จ๊ฐ€ ๊ธฐ์ค€์˜ ๊ฐ€์ • ๊ธฐ๋ฐ˜ ๋น„์šฉ ์ถ”์ •ํ‘œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ ๊ณ„์ •ยท์‚ฌ์–‘ยท์‚ฌ์šฉ๋Ÿ‰ ํ™•์ธ ํ›„ ์žฌ์‚ฐ์ •ํ•ฉ๋‹ˆ๋‹ค. 2026-10-12 ์—…๋ฐ์ดํŠธ: ํŒ€ ํ™•์ • ์‚ฌํ•ญ์ธ 6๋ถ„์•ผยท30๋ถ„ ๊ฐฑ์‹ ๊ณผ mock/real ์šด์˜ ๋ฐฉ์‹์„ ๋ฐ˜์˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ธํ”„๋ผ ๊ตฌ์„ฑ์€ ๊ณ„์† ์„ค๊ณ„์•ˆ์ด๋ฉฐ ์‹ค์ œ ๊ตฌ์ถ•ยท๊ฒ€์ฆ ์™„๋ฃŒ๋ฅผ ๋œปํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ฐœ์š”

AI ๋‰ด์Šค ๋ธŒ๋ฆฌํ•‘ ์„œ๋น„์Šค์˜ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์€ ์˜จํ”„๋ ˆ๋ฏธ์Šค(develop), ์šด์˜ ํ™˜๊ฒฝ์€ AWS(main)๋กœ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค. AWS๋Š” ํผ๋ธ”๋ฆญ ์ž…๊ตฌ, ํ”„๋ผ์ด๋น— ์•ฑ, ํ”„๋ผ์ด๋น— ๋ฐ์ดํ„ฐ์˜ 3Tier๋กœ ๊ตฌ์„ฑํ•˜๊ณ  ๋‘ AZ์— ๋ถ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

AWS 3Tier A/B์กด ์ด์ค‘ํ™” ์„ค๊ณ„

  • ํ™”๋ฉด: ์‚ฌ์šฉ์ž โ†’ CloudFront โ†’ ๋น„๊ณต๊ฐœ S3. ๋‘ ์„œ๋น„์Šค๋Š” VPC ์„œ๋ธŒ๋„ท ๋ฐ–์— ์žˆ์Šต๋‹ˆ๋‹ค.
  • API: ์‚ฌ์šฉ์ž โ†’ ๋‘ AZ์— ์—ฐ๊ฒฐ๋œ ALB โ†’ ์ •์ƒ ์•ฑ ํŒŒ๋“œ.
  • ์ €์žฅ์†Œ: ์–‘์ชฝ ์•ฑ์ด RDSยทRedis์˜ ํ˜„์žฌ Primary ์—”๋“œํฌ์ธํŠธ์— ์ ‘์†ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ AZ์— ๋…๋ฆฝ๋œ DB๋ฅผ ๋งŒ๋“ค์–ด ๋”ฐ๋กœ ์“ฐ๋Š” ๊ตฌ์กฐ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.
  • ์™ธ๋ถ€ ํ˜ธ์ถœ: ์•ฑ A โ†’ NAT-A โ†’ IGW โ†’ ๋‰ด์ŠคยทAI API, ์•ฑ B โ†’ NAT-B โ†’ IGW โ†’ ๋‰ด์ŠคยทAI API.
  • ALB๋Š” ๋…ผ๋ฆฌ์  1๊ฐœ, NAT๋Š” AZ๋ณ„ 1๊ฐœ๋กœ ์ด 2๊ฐœ์ž…๋‹ˆ๋‹ค.

๋‰ด์Šค ์ˆ˜์ง‘๊ณผ AI ์šด์˜

2026-10-12 ํŒ€ ํ™•์ • ์‚ฌํ•ญ๊ณผ API ๋ช…์„ธ, ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

  • ๋ถ„์•ผ๋ณ„ ์š”์•ฝ: ์ •์น˜ยท๊ฒฝ์ œยท์‚ฌํšŒยท์ƒํ™œ/๋ฌธํ™”ยทIT/๊ณผํ•™ยท์Šคํฌ์ธ ์˜ 6๊ฐœ ๋ถ„์•ผ๋ฅผ 30๋ถ„๋งˆ๋‹ค ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ์ €์žฅ๋œ ์š”์•ฝ์„ ์กฐํšŒํ•˜๋ฏ€๋กœ ์กฐํšŒ ์‚ฌ์šฉ์ž ์ˆ˜๋งŒํผ AI๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๊ธฐ์‚ฌ ์ˆ˜์ง‘: ์ •์น˜ยท๊ฒฝ์ œยท์‚ฌํšŒยท์ƒํ™œ/๋ฌธํ™”ยท์Šคํฌ์ธ ๋Š” ์—ฐํ•ฉ๋‰ด์Šค RSS, IT/๊ณผํ•™์€ ์ „์ž์‹ ๋ฌธ RSS๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ œ๋ชฉยท์š”์•ฝ๋ฌธยท๋งํฌยท์–ธ๋ก ์‚ฌยท๋‚ ์งœ๋ฅผ ์ €์žฅํ•˜๊ณ  7์ผ ๋ณด๊ด€ํ•ฉ๋‹ˆ๋‹ค.
  • ์งˆ๋ฌธ ๋‹ต๋ณ€: ์งˆ๋ฌธ๊ณผ ๊ด€๋ จ๋œ ๊ธฐ์‚ฌ๊ฐ€ DB์— ์—†์œผ๋ฉด ๋„ค์ด๋ฒ„ ๋‰ด์Šค ๊ฒ€์ƒ‰ API๋กœ ๋ณด์™„ํ•ฉ๋‹ˆ๋‹ค. ์งˆ๋ฌธ 1๊ฑด๋‹น AI 1ํšŒ ํ˜ธ์ถœ์„ ๋น„์šฉ ์‚ฐ์ • ๊ธฐ์ค€์œผ๋กœ ๋‘ก๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋‹น ํ•˜๋ฃจ ์ตœ๋Œ€ 10ํšŒ์ด๋ฉฐ ์„ธ๋ถ€ ์ฐจ๊ฐ ๊ทœ์น™์€ API ๋ช…์„ธ๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.
  • AI ์ œ๊ณต ๋ฐฉ์‹: ํŒ€ AWS ๊ณ„์ •์—์„œ Amazon Bedrock์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉด Bedrock์„ ์‚ฌ์šฉํ•˜๊ณ , ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฉด AI ํšŒ์‚ฌ API๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์š”์•ฝยท์งˆ๋ฌธ ๋‹ต๋ณ€์— ๊ฐ™์€ ์ œ๊ณต ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉฐ ๋ชจ๋ธ์€ ์•„์ง ๋ฏธ์ •์ž…๋‹ˆ๋‹ค.
  • ํ‰์†Œ ๊ฐœ๋ฐœยทํ…Œ์ŠคํŠธยทk6 ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ: AI_MODE=mock์œผ๋กœ ์‹ค์ œ AI๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋•Œ AI ํ˜ธ์ถœ๋ฃŒ๋Š” ์—†์ง€๋งŒ AWS ์ธํ”„๋ผ ๋น„์šฉ๊ณผ๋Š” ๋ณ„๊ฐœ์ž…๋‹ˆ๋‹ค.
  • ์ ๊ฒ€ยท๋ฐ๋ชจ: ์‹ค์ œ AI๋Š” ํ’ˆ์งˆ ํ™•์ธ ๋ฐ ๋ฐ๋ชจ์— ํ•„์š”ํ•œ ์‹œ๊ฐ„์—๋งŒ AI_MODE=real๋กœ ์ผญ๋‹ˆ๋‹ค. ์˜ˆ์ • ์‹œ์ ์€ 4์ฃผ์ฐจ ์ ๊ฒ€๊ณผ 6์ฃผ์ฐจ ๋ฐ๋ชจ ๋ฆฌํ—ˆ์„คยท๋ฐœํ‘œ์ด๋ฉฐ ์ •ํ™•ํ•œ ์ผ์ˆ˜ยท์‹œ๊ฐ„์€ ์ถ”ํ›„ ํ™•์ •ํ•ฉ๋‹ˆ๋‹ค.
  • mock ๊ฒฐ๊ณผ๋Š” ํ™”๋ฉด์— ์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ AI ์ง€์—ฐ์„ ์†Œ๋Ÿ‰ ์ธก์ •ํ•ด mock ์ง€์—ฐ์— ๋ฐ˜์˜ํ•˜๋Š” ๊ฒ€์ฆ ๋ฐฉ์‹์€ ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ ๋ฌธ์„œ๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

AI ๋น„์šฉ ์‚ฐ์ •์šฉ ์‚ฌ์šฉ๋Ÿ‰ ๊ฐ€์ •

์•„๋ž˜๋Š” ๋ฐฑ์—”๋“œ ๋‹ด๋‹น์ด ์ œ๊ณตํ•œ ์ถ”์ •์น˜์ด๋ฉฐ ์‹ค์ธก๊ฐ’ยท์ฒญ๊ตฌ ๊ธˆ์•ก์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋ชจ๋ธ๋ณ„ ์ž…๋ ฅยท์ถœ๋ ฅ ๋‹จ๊ฐ€์™€ ์‹ค์ œ ์‚ฌ์šฉ ์‹œ๊ฐ„ ํ™•์ • ํ›„ ๋น„์šฉ์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ์ด์ „์˜ 5๋ถ„ยท3๋ถ„์•ผ ๊ฐ€์ •์€ ์ ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์šฉ๋„ ํ˜ธ์ถœ ์ˆ˜ ๊ธฐ์ค€ 1ํšŒ ์ž…๋ ฅ ํ† ํฐ 1ํšŒ ์ถœ๋ ฅ ํ† ํฐ
๋ถ„์•ผ๋ณ„ ์š”์•ฝ 30๋ถ„๋งˆ๋‹ค 6ํšŒ. 24์‹œ๊ฐ„์ด๋ฉด 288ํšŒ ์•ฝ 8,000 (๊ธฐ์‚ฌ 30๊ฐœ ๊ธฐ์ค€) ์•ฝ 1,500
์งˆ๋ฌธ ๋‹ต๋ณ€ ์งˆ๋ฌธ 1๊ฑด๋‹น 1ํšŒ, ์‚ฌ์šฉ์ž๋‹น ํ•˜๋ฃจ ์ตœ๋Œ€ 10ํšŒ ์•ฝ 3,000 (๊ธฐ์‚ฌ 5~10๊ฐœ ๊ธฐ์ค€) ์•ฝ 500
  • ๋ถ„์•ผ ์š”์•ฝ 24์‹œ๊ฐ„ ๊ธฐ์ค€: ์ž…๋ ฅ 288 ร— 8,000 = 2,304,000ํ† ํฐ, ์ถœ๋ ฅ 288 ร— 1,500 = 432,000ํ† ํฐ.
  • ์‹ค์ œ AI ๊ฐ€๋™ ์‹œ๊ฐ„์ด H์‹œ๊ฐ„์ด๋ฉด ๋ถ„์•ผ ์š”์•ฝ์€ H ร— 2 ร— 6ํšŒ๋กœ ์ถ”์ •ํ•ฉ๋‹ˆ๋‹ค. 4์‹œ๊ฐ„ ์˜ˆ์‹œ๋Š” 48ํšŒ, ์ž…๋ ฅ 384,000ยท์ถœ๋ ฅ 72,000ํ† ํฐ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋™ ์‹œ ์ถ”๊ฐ€ ๊ฐฑ์‹ ยท์žฌ์‹œ๋„๋Š” ๋ณ„๋„ ํ•ฉ์‚ฐํ•ฉ๋‹ˆ๋‹ค.
  • ์งˆ๋ฌธ ์ˆ˜๊ฐ€ Q๊ฑด์ด๋ฉด ์ž…๋ ฅ Q ร— 3,000, ์ถœ๋ ฅ Q ร— 500ํ† ํฐ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 10๋ช…์ด ๊ฐ๊ฐ 5ํšŒ ์งˆ๋ฌธํ•˜๋ฉด 50๊ฑด์ž…๋‹ˆ๋‹ค.
  • ์ด AI ๋น„์šฉ์€ ์‹ค์ œ ํ˜ธ์ถœ์˜ ์ž…๋ ฅ ํ† ํฐ ์‚ฌ์šฉ๋ฃŒ์™€ ์ถœ๋ ฅ ํ† ํฐ ์‚ฌ์šฉ๋ฃŒ๋ฅผ ํ•ฉ์‚ฐํ•ฉ๋‹ˆ๋‹ค. 24์‹œ๊ฐ„ ์ƒ์‹œ ์‚ฌ์šฉ์ด๋‚˜ ๋งค๋‹ฌ ๋งค์ผ ์‚ฌ์šฉ์„ ์ „์ œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์•„์ง ์ •ํ•˜์ง€ ์•Š์€ ํ•ญ๋ชฉ: Bedrock ์ ‘๊ทผ ๊ฐ€๋Šฅ ์—ฌ๋ถ€, ์„œ์šธ ๋ฆฌ์ „ ๋ชจ๋ธ ์ง€์›ยท๋ชจ๋ธ ๋‹จ๊ฐ€, ์ ๊ฒ€ยท๋ฐ๋ชจ ์ผ์ˆ˜์™€ ์‹ค์ œ ๊ฐ€๋™ ์‹œ๊ฐ„ยท์งˆ๋ฌธ ์ˆ˜.

๋น„์šฉ ์ถ”์ • ๊ธˆ์•กํ‘œ

2026-10-14 ๊ฒ€ํ†  ์ดˆ์•ˆ: ์‹ค์ œ ์ฒญ๊ตฌ์•กยทํ™•์ • ์˜ˆ์‚ฐ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ฐ€์ • ๊ธฐ๋ฐ˜ ํ•ฉ๊ณ„ ์•ฝ $316.33, ์˜ˆ๋น„๋น„ 20% ํฌํ•จ ์•ฝ $379.60(์„ธ์ „)์ž…๋‹ˆ๋‹ค.

1. ๊ณ„์‚ฐ ๋ฒ”์œ„์™€ ๊ฐ€์ •

  • ์„œ์šธ(ap-northeast-2)์„ ๊ณ„์‚ฐ์šฉ ๋ฆฌ์ „์œผ๋กœ ๊ฐ€์ •ํ•œ๋‹ค. ํŒ€ ๋ฆฌ์ „ ํ™•์ •์€ ์•„๋‹ˆ๋‹ค. USD, ์˜จ๋””๋งจ๋“œ, ํ• ์ธยทํฌ๋ ˆ๋”งยทํ”„๋ฆฌํ‹ฐ์–ดยท์„ธ๊ธˆ ๋ฏธ๋ฐ˜์˜์ด๋‹ค.
  • ๋ฒ”์œ„๋Š” 26์ฃผ์ฐจ(10/1211/15, ๋งˆ์ง€๋ง‰ ์ฃผ๋ง ํฌํ•จ ์ •๋ฆฌ ๊ธฐ๊ฐ„)๋‹ค. ๊ธฐ๊ฐ„ ์ข…๋ฃŒ ํ›„ ๋ชจ๋“  ๊ณผ๊ธˆ ์ž์›์„ ์ •๋ฆฌํ•œ๋‹ค๋Š” ๊ฐ€์ •์ด๋ฉฐ ์‹ค์ œ ์ˆ˜์—… ๋งˆ์ง€๋ง‰ ๋‚ ์€ 11/13์ด๋‹ค.
  • ์‚ฌ์šฉ์ž ์š”์ฒญ๋Œ€๋กœ NAT 2๊ฐœ, RDS Primary+Standby, Redis Primary+Replica๋ฅผ ์œ ์ง€ํ•œ๋‹ค.
  • 2์ฃผ์ฐจ NAT ์‹ค์Šต 4์‹œ๊ฐ„, 3์ฃผ์ฐจ ๋‚ด๋ถ€ ํ†ต์‹  ์‹ค์Šต 4์‹œ๊ฐ„์„ ๊ฐ€์ •ํ•œ๋‹ค. 3์ฃผ์ฐจ ํ…Œ์ŠคํŠธ EC2๋Š” t3.medium 1๋Œ€ร—4์‹œ๊ฐ„์ด๋‹ค.
  • 4์ฃผ์ฐจ EC2+kubeadm์€ t3.medium ์ œ์–ด ๋…ธ๋“œ 1๋Œ€์™€ t3.large ์ž‘์—… ๋…ธ๋“œ 2๋Œ€, ํ•˜๋ฃจ 4์‹œ๊ฐ„ร—5์ผ=20์‹œ๊ฐ„์œผ๋กœ ๊ณ„์‚ฐํ•œ๋‹ค.
  • 5~6์ฃผ์ฐจ EKS ์ž‘์—… ๋…ธ๋“œ๋Š” t3.large 2๋Œ€, ํ•˜๋ฃจ 4์‹œ๊ฐ„ร—10์ผ=40์‹œ๊ฐ„์ด๋‹ค. EKS ์ œ์–ด ์˜์—ญ์€ ํ‘œ์ค€ ์ง€์› ๋ฒ„์ „ 1๊ฐœ๋ฅผ 14์ผ=336์‹œ๊ฐ„ ์œ ์ง€ํ•œ๋‹ค. Auto Mode๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฐ€์ •์ด๋‹ค.
  • NAT 2๊ฐœ๋Š” ์ด 68์‹œ๊ฐ„(4+4+20+40), ALB 1๊ฐœ๋Š” 60์‹œ๊ฐ„(20+40)๋งŒ ์กด์žฌํ•˜๋„๋ก ์ƒ์„ฑยท์‚ญ์ œํ•œ๋‹ค๋Š” ๊ฐ€์ •์ด๋‹ค. EC2 ์ข…๋ฃŒ๋งŒ์œผ๋กœ NATยทALB ๋น„์šฉ์ด ๋ฉˆ์ถ”๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ์žฌ์ƒ์„ฑยท์‹œ์ž‘ ์ค€๋น„ ์‹œ๊ฐ„์ด ๊ธธ์–ด์ง€๋ฉด ์ถ”๊ฐ€๋œ๋‹ค.
  • ๋ฐ์ดํ„ฐ ๋ณด์กด๊ณผ ์žฌ์ƒ์„ฑ ์ ˆ์ฐจ๊ฐ€ ์•„์ง ํ™•์ •๋˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ RDSยทRedis๋Š” 3~6์ฃผ์ฐจ 28์ผ=672์‹œ๊ฐ„ ์œ ์ง€ํ•˜๋Š” ๋ณด์ˆ˜์  ๊ธฐ์ค€์œผ๋กœ ๊ณ„์‚ฐํ•œ๋‹ค. ์ด๋Š” ํ•ญ์ƒ ์ผœ๋‘๋ผ๋Š” ์ง€์‹œ๊ฐ€ ์•„๋‹ˆ๋‹ค. ์‹ค์ œ ์ข…๋ฃŒยท๋ณต์› ์ ˆ์ฐจ ํ™•์ • ํ›„ ์‹œ๊ฐ„์„ ์ค„์—ฌ ์žฌ์‚ฐ์ •ํ•œ๋‹ค.
  • RDS MySQL db.t3.medium Multi-AZ ๋ฐฐํฌ 1๊ฐœ, gp3 ๋…ผ๋ฆฌ ์šฉ๋Ÿ‰ 20GB; Redis OSS cache.t3.small 2๊ฐœ๋ฅผ ๊ฐ€์ •ํ•œ๋‹ค. ์ง€์› ์ค‘์ธ ์—”์ง„ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๊ณ  ์—ฐ์žฅ ์ง€์›๋ฃŒ๋Š” ์ œ์™ธํ•œ๋‹ค. ์‚ฌ์–‘์€ ๊ฒฌ์ ์šฉ์ด๋ฉฐ ์„ฑ๋Šฅ ๊ฒ€์ฆ ์ „์ด๋‹ค.
  • EBS gp3๋Š” 3์ฃผ์ฐจ ํ…Œ์ŠคํŠธ์šฉ 30GBร—7์ผ, 4์ฃผ์ฐจ 3๋Œ€ร—30GBร—7์ผ, 5~6์ฃผ์ฐจ 2๋Œ€ร—30GBร—14์ผ์„ ์œ ์ง€ํ•œ๋‹ค. ์›” ๋‹จ๊ฐ€๋Š” 730์‹œ๊ฐ„์œผ๋กœ ๋‚˜๋ˆ  ๊ทผ์‚ฌํ•œ๋‹ค. ์‹ค์ œ ์›” ๊ธธ์ดยท์‹œ๊ฐ„๋ณ„ ์‚ฌ์šฉ๋Ÿ‰์— ๋”ฐ๋ผ ์†Œ์•ก ์ฐจ์ด๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ALB ํ‰๊ท  1 LCU, NAT ์ฒ˜๋ฆฌ๋Ÿ‰ ํ•ฉ๊ณ„ 20GB๋ฅผ ๊ฐ€์ •ํ•œ๋‹ค. ๊ณต์ธ IPv4๋Š” NAT์šฉ 2๊ฐœร—68์‹œ๊ฐ„, ALB์šฉ 2๊ฐœร—60์‹œ๊ฐ„์ด๋‹ค. ์ถ”๊ฐ€ IP๊ฐ€ ํ• ๋‹น๋˜๋ฉด ์ฆ์•กํ•œ๋‹ค. ์•ฑยทDB๋Š” ๊ณต์ธ IP ์—†์ด ๊ตฌ์„ฑํ•œ๋‹ค.

2. ์˜ˆ์ƒ ๊ธˆ์•ก

ํ•ญ๋ชฉ ์ ์šฉ ๋‹จ๊ฐ€ยท๊ณ„์‚ฐ ์˜ˆ์ƒ USD
EC2 t3.medium $0.052/์‹œ๊ฐ„ร—24 + t3.large $0.104/์‹œ๊ฐ„ร—2๋Œ€ร—60์‹œ๊ฐ„ 13.73
EKS ์ œ์–ด ์˜์—ญ ํ‘œ์ค€ ์ง€์› $0.10/์‹œ๊ฐ„ร—336์‹œ๊ฐ„ 33.60
EBS gp3 $0.0912/GBยท์›”ร—(30ร—168+90ร—168+60ร—336)/730 5.04
NAT ๊ฒŒ์ดํŠธ์›จ์ด 2๊ฐœ $0.059/๊ฐœยท์‹œ๊ฐ„ร—2ร—68 8.02
NAT ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ $0.059/GBร—20GB 1.18
๊ณต์ธ IPv4 $0.005/IPยท์‹œ๊ฐ„ร—(2ร—68+2ร—60) 1.28
ALB 1๊ฐœ๏ผ‹ํ‰๊ท  1 LCU ($0.0225/์‹œ๊ฐ„๏ผ‹$0.008/LCUยท์‹œ๊ฐ„)ร—60 1.83
RDS MySQL Multi-AZ ์ด์ค‘ํ™” ํฌํ•จ ๋‹จ๊ฐ€ $0.208/์‹œ๊ฐ„ร—672. ์—ฌ๊ธฐ์— ๋‹ค์‹œ 2๋ฅผ ๊ณฑํ•˜์ง€ ์•Š์Œ 139.78
RDS gp3 Multi-AZ ์ €์žฅ์†Œ ์ด์ค‘ํ™” ํฌํ•จ ๋‹จ๊ฐ€ $0.262/GBยท์›”ร—20GBร—672/730 4.82
Redis OSS ๋…ธ๋“œ 2๊ฐœ cache.t3.small $0.049/๋…ธ๋“œยท์‹œ๊ฐ„ร—2ร—672 65.86
Route 53 ํ˜ธ์ŠคํŒ… ์˜์—ญ 1๊ฐœร—$0.50/์›”ร—10์›”ยท11์›” 1.00
ACM ์ธ์ฆ์„œ 2๊ฐœ CloudFrontยทALB์— ์—ฐ๊ฒฐํ•˜๋Š” ๋น„๋‚ด๋ณด๋‚ด๊ธฐ ๊ณต๊ฐœ ์ธ์ฆ์„œ ๊ฐ€์ • 0.00
Bedrock ์‹ค์ œ AI Nova Lite ๊ณ„์‚ฐ์šฉ ๊ฐ€์ •, ์•„๋ž˜ 12์‹œ๊ฐ„ยท์งˆ๋ฌธ 150๊ฑด ์˜ˆ์‹œ 0.20
๋„๋ฉ”์ธ ์‹ ๊ทœ ๊ตฌ์ž… ์˜ˆ์‚ฐ ๊ณต์‹ ๋‹จ๊ฐ€ ์•„๋‹˜: ๋ฏธ์„ ์ • ๋„๋ฉ”์ธ์˜ ์ž„์‹œ ์˜ˆ์‚ฐ. ์ด๋ฏธ ๋ณด์œ ํ•œ ๋„๋ฉ”์ธ ์‚ฌ์šฉ ์‹œ ์ฐจ๊ฐ 20.00
ํ™”๋ฉดยท๋กœ๊ทธยท์ถ”๊ฐ€ ๋ฐฑ์—…ยท์ „์†ก ๋“ฑ ๊ณต์‹ ๋‹จ๊ฐ€ ํ•ฉ์‚ฐ ์•„๋‹˜: S3ยทCloudFrontยท๋กœ๊ทธยท์ด๋ฏธ์ง€ ์ €์žฅยท์ถ”๊ฐ€ ๋ฐฑ์—…ยท๊ธฐํƒ€ ์ „์†กยท์‹œํ—˜์šฉ ์ž์› ๋“ฑ์˜ ์ž„์‹œ ์—ฌ์œ ๋ถ„ 20.00
์˜ˆ์ƒ ํ•ฉ๊ณ„ ๋ฐ˜์˜ฌ๋ฆผ ์ „ ๊ฐ’์œผ๋กœ ํ•ฉ์‚ฐ 316.33
20% ์˜ˆ๋น„๋น„ ํฌํ•จ 316.3313ร—1.2. ์†Œ์ˆ˜์  ํ‘œ๊ธฐ ํ•ฉ๊ณ„์™€ ๋ฏธ์„ธํ•œ ์ฐจ์ด๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Œ 379.60

์˜ˆ์‚ฐ ๊ณ„ํš์šฉ์œผ๋กœ **์•ฝ $380, ์—ฌ์œ  ์žˆ๊ฒŒ $400(์„ธ์ „)**๋ฅผ ์ œ์•ˆํ•œ๋‹ค. ์ƒํ•œ ๋ณด์žฅ์ด๋‚˜ ํŒ€ ์˜ˆ์‚ฐ ํ™•์ •์ด ์•„๋‹ˆ๋‹ค. ์›ํ™”๋Š” ์‹ค์ œ ๊ฒฐ์ œ ํ™˜์œจยท์„ธ๊ธˆ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€๋ฏ€๋กœ ํ™•์ • ํ™˜์‚ฐ์•ก์„ ์ ์ง€ ์•Š๋Š”๋‹ค. ๋„๋ฉ”์ธ๊ณผ ๊ธฐํƒ€ ํ•ญ๋ชฉ์˜ $40๋Š” ์˜ˆ์•ฝ๊ธˆ์ด๋‚˜ ์‹ค์ œ AWS ์ฒญ๊ตฌ ๊ธˆ์•ก์ด ์•„๋‹Œ ํŽธ์˜์ƒ ์žก์€ ์˜ˆ์‚ฐ์ด๋‹ค.

3. ์šฉ๋ฏผ๋‹˜ AI ์šด์˜ ๊ธฐ์ค€ ๋ฐ˜์˜

  • ๋ถ„์•ผ ์š”์•ฝ: 30๋ถ„๋งˆ๋‹ค 6๋ถ„์•ผ, ํ˜ธ์ถœ๋‹น ์ž…๋ ฅ 8,000ยท์ถœ๋ ฅ 1,500ํ† ํฐ. ์ €์žฅ๋œ ์š”์•ฝ ์กฐํšŒ๋Š” ์ถ”๊ฐ€ AI ํ˜ธ์ถœ๋กœ ๊ณ„์‚ฐํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ์งˆ๋ฌธ: ์‚ฌ์šฉ์ž๋‹น ํ•˜๋ฃจ ์ตœ๋Œ€ 10ํšŒ, ์งˆ๋ฌธ๋‹น 1ํšŒ ํ˜ธ์ถœ, ์ž…๋ ฅ 3,000ยท์ถœ๋ ฅ 500ํ† ํฐ.
  • ํ‰์†Œ ๊ฐœ๋ฐœยทํ…Œ์ŠคํŠธยทk6๋Š” mock์ด๋ฉฐ ์‹ค์ œ AI ํ˜ธ์ถœ๋ฃŒ๋Š” 0์ด๋‹ค. ์‹ค์ œ AI๋Š” 4์ฃผ์ฐจ ์ ๊ฒ€๊ณผ 6์ฃผ์ฐจ ๋ฆฌํ—ˆ์„คยท๋ฐœํ‘œ ๋•Œ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ณ„ํš์ด๋‹ค.
  • ๊ณ„์‚ฐ์šฉ ์˜ˆ์‹œ: 4์ฃผ์ฐจ ์ ๊ฒ€ 1ํšŒ๏ผ‹6์ฃผ์ฐจ ๋ฆฌํ—ˆ์„คยท๋ฐœํ‘œ 2ํšŒ, ๊ฐ 4์‹œ๊ฐ„์œผ๋กœ ์ด 12์‹œ๊ฐ„. ๊ฐ ํšŒ์ฐจ 10๋ช…์ด 5๋ฒˆ์”ฉ ์งˆ๋ฌธํ•ด ์ด 150๊ฑด. ํšŸ์ˆ˜ยท์‹œ๊ฐ„ยท์ธ์›์€ ํ•ฉ์˜๋œ ์ผ์ •์ด ์•„๋‹ˆ๋‹ค.
  • ๋ชจ๋ธ์€ Amazon Nova Lite v1์„ ๊ณ„์‚ฐ์šฉ์œผ๋กœ๋งŒ ๊ฐ€์ •ํ•œ๋‹ค. ํŒ€ ๋ชจ๋ธ ๊ฒฐ์ •์ด๋‚˜ ์‹ค์ œ ํ˜ธ์ถœ ๊ฐ€๋Šฅ ํ™•์ธ์„ ๋Œ€์‹ ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ์„œ์šธ ๊ฐ€๊ฒฉ ์นดํƒˆ๋กœ๊ทธ์˜ ์˜จ๋””๋งจ๋“œ ๋‹จ๊ฐ€๋Š” ์ž…๋ ฅ $0.071/100๋งŒ ํ† ํฐ, ์ถœ๋ ฅ $0.284/100๋งŒ ํ† ํฐ์ด๋‹ค. Batch ๋‹จ๊ฐ€๋‚˜ ๋‹ค๋ฅธ ๋ฆฌ์ „์˜ $0.06/$0.24๋ฅผ ์„ž์ง€ ์•Š์•˜๋‹ค.
  • ๊ณต์‹ ๋ชจ๋ธ ๋ฌธ์„œ๋Š” ์„œ์šธ์—์„œ In-Region์€ ๋ฏธ์ง€์›, Geo Cross-Region์€ ์ง€์›์œผ๋กœ ์•ˆ๋‚ดํ•œ๋‹ค. ์„œ์šธ ๋‚ด์—์„œ๋งŒ ์ถ”๋ก ํ•œ๋‹ค๋Š” ๋œป์ด ์•„๋‹ˆ๋‹ค. ๊ณ„์ •์˜ ์ถ”๋ก  ํ”„๋กœํ•„ยท๋Œ€์ƒ ๋ฆฌ์ „ ๊ถŒํ•œ๊ณผ ์ •์ฑ…, ์‹ค์ œ ์ ์šฉ ์š”๊ธˆ์„ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.
๊ตฌ๋ถ„ ํ˜ธ์ถœ ์ˆ˜ ์ž…๋ ฅ ํ† ํฐ ์ถœ๋ ฅ ํ† ํฐ ์˜ˆ์ƒ USD
์š”์•ฝ 12์‹œ๊ฐ„ 12ร—2ร—6=144 1,152,000 216,000 0.143136
์งˆ๋ฌธ 150๊ฑด 150 450,000 75,000 0.053250
ํ•ฉ๊ณ„ 294 1,602,000 291,000 0.196386 โ‰ˆ 0.20

๊ณ„์‚ฐ์‹: ์ž…๋ ฅ 1.602ร—$0.071๏ผ‹์ถœ๋ ฅ 0.291ร—$0.284. ๋ฐฐ์น˜๋ผ๋Š” ์•ฑ ์‹คํ–‰ ๋ฐฉ์‹๋งŒ์œผ๋กœ Bedrock Batch ํ• ์ธ ์š”๊ธˆ์„ ์ ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. ์‹œ์ž‘ ์งํ›„ ๊ฐฑ์‹ ยท์žฌ์‹œ๋„ยท์‹ค์ œ ํ”„๋กฌํ”„ํŠธ ์ถ”๊ฐ€ ํ† ํฐ์€ ๋ณ„๋„์ด๋ฉฐ, ๋ชจ๋ธ์ด ๋ณ€๊ฒฝ๋˜๋ฉด ์ด ๊ธˆ์•ก๋„ ๋ฐ”๋€๋‹ค. AI๊ฐ€ ์ €๋ ดํ•˜๊ฒŒ ๊ณ„์‚ฐ๋˜๋Š” ์ด์œ ๋Š” ์ ์€ ํ˜ธ์ถœ ์‹œ๊ฐ„๊ณผ ๊ฐ€์ •ํ•œ ๋ชจ๋ธ ๋‹จ๊ฐ€ ๋•Œ๋ฌธ์ด๋‹ค.

4. ์˜์ฐฌ๋‹˜ ๊ตฌ์„ฑ ๋ฐ˜์˜

  • app.{๋„๋ฉ”์ธ} โ†’ CloudFront โ†’ ๋น„๊ณต๊ฐœ S3, api.{๋„๋ฉ”์ธ} โ†’ ALB โ†’ ์•ฑ. API๋ฅผ CloudFront ๊ฒฝ์œ ๋กœ ์ค‘๋ณต ๊ณ„์‚ฐํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ๊ฐ™์€ ์ƒ์œ„ ๋„๋ฉ”์ธ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. appยทapi๋ฅผ ๋ณ„๋„ ๋„๋ฉ”์ธ ๋‘ ๊ฐœ ๊ตฌ์ž…์œผ๋กœ ๊ณ„์‚ฐํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • Route 53 ํ˜ธ์ŠคํŒ… ์˜์—ญ์€ ํ•˜๋‚˜๋กœ ๊ฐ€์ •ํ•˜๊ณ , ALBยทCloudFront๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ ๊ฒฉ Alias A/AAAA ์งˆ์˜๋Š” ๋ฌด๋ฃŒ ์กฐ๊ฑด์„ ์ ์šฉํ•œ๋‹ค. ๋‹ค๋ฅธ ์งˆ์˜ยท์ถ”๊ฐ€ ์˜์—ญ์€ ๋ณ„๋„๋‹ค.
  • ์ธ์ฆ์„œ๋Š” CloudFront์šฉ us-east-1, ALB์šฉ ์„œ์šธ์— ๊ฐ๊ฐ ๋ฐœ๊ธ‰ํ•˜๋Š” ๊ณ„ํš์ด๋‹ค. ๋‘ ๊ฐœ ๋ชจ๋‘ AWS ์„œ๋น„์Šค์— ์—ฐ๊ฒฐํ•˜๋Š” ACM ๋น„๋‚ด๋ณด๋‚ด๊ธฐ ๊ณต๊ฐœ ์ธ์ฆ์„œ๋กœ ๊ฐ€์ •ํ•ด $0์œผ๋กœ ๊ณ„์‚ฐํ•œ๋‹ค. ๋‚ด๋ณด๋‚ด๊ธฐ ์ธ์ฆ์„œยทPrivate CA๋Š” ์ด ๊ฒฌ์ ์— ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • CORS credentials, ์ฟ ํ‚ค ํฌํ•จ ์š”์ฒญ, api.js ํ™˜๊ฒฝ๋ณ„ ์ฃผ์†Œ, ํ™”๋ฉด ์ „์šฉ SPA ์ฒ˜๋ฆฌ๋Š” ๊ธฐ์กด ์„ค๊ณ„๋ฅผ ์œ ์ง€ํ•œ๋‹ค. ๋ณ„๋„ ์œ ๋ฃŒ ์„œ๋น„์Šค ํ•ญ๋ชฉ์œผ๋กœ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๋Š”๋‹ค.

5. ์šด์˜ ๋ฐฉ์‹์— ๋”ฐ๋ฅธ ๋ณ€๋™๊ณผ ์žฌํ™•์ธ ํ•ญ๋ชฉ

  • DBยทRedis ์ƒ์‹œ ์œ ์ง€๊ฐ€ ์ด ๊ฒฌ์ ์˜ ๊ฐ€์žฅ ํฐ ๋ถ€๋ถ„์ด๋‹ค. 24์‹œ๊ฐ„ ์œ ์ง€์ผ์„ ํ•˜๋ฃจ ์ค„์ด๋ฉด ๋…ธ๋“œ ์‹คํ–‰๋ฃŒ ๊ธฐ์ค€ RDS $4.992๏ผ‹Redis $2.352=์•ฝ $7.34/์ผ ๊ฐ์†Œํ•  ์ˆ˜ ์žˆ๋‹ค. ์ €์žฅยท๋ฐฑ์—…ยท์žฌ์ƒ์„ฑ ๋น„์šฉ๊นŒ์ง€ ์‚ฌ๋ผ์ง„๋‹ค๋Š” ๋œป์€ ์•„๋‹ˆ๋‹ค.
  • NATยทALB๋ฅผ 4~6์ฃผ์ฐจ ๋‚ด๋‚ด 504์‹œ๊ฐ„ ์œ ์ง€ํ•˜๋ฉด ํ˜„์žฌ ์‹ค์Šต์‹œ๊ฐ„ ๊ฐ€์ •๋ณด๋‹ค ์•ฝ $74.52 ์ถ”๊ฐ€๋  ์ˆ˜ ์žˆ๋‹ค(NATยทALB ์‹œ๊ฐ„๋ฃŒ์™€ IPv4 ๊ธฐ์ค€, ์ถ”๊ฐ€ LCUยท๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์ œ์™ธ). ๋”ฐ๋ผ์„œ ํ‡ด์‹ค ๋’ค ์‹ค์ œ ์‚ญ์ œยทIP ํ•ด์ œ ์—ฌ๋ถ€๊ฐ€ ์ค‘์š”ํ•˜๋‹ค.
  • ์‹ค์Šต ์ข…๋ฃŒ๋งŒ์œผ๋กœ ๊ณผ๊ธˆ์ด ์ค‘์ง€๋˜์ง€ ์•Š๋Š”๋‹ค. EKSยทRedisยทNATยทALB๋Š” EC2์ฒ˜๋Ÿผ ์ผ๊ด„ ์ •์ง€๋œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋ฐ์ดํ„ฐ ๋ณด์กดยท๋ฐฑ์—… ๊ฒ€์ฆ ํ›„ ์ •๋ฆฌ ์ ˆ์ฐจ๋ฅผ ํ™•์ •ํ•œ๋‹ค.
  • ์ถ”๊ฐ€ ์Šค๋ƒ…์ƒทยท๋ณต์› DB, CloudWatch ๋Œ€๋Ÿ‰ ๋กœ๊ทธ, ์ด๋ฏธ์ง€ ์ €์žฅ์†Œ, ์ธํ„ฐ๋„ทยทAZ ๊ฐ„ ์ „์†ก, CPU ํฌ๋ ˆ๋”ง ์ดˆ๊ณผ, ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ๋กœ ์ธํ•œ ALB ์šฉ๋Ÿ‰ ์ฆ๊ฐ€, ์ค€๋น„ยท์žฅ์•  ๋ณต๊ตฌ ์‹œ๊ฐ„์€ ์‹ค์ œ ์‚ฌ์šฉ์— ๋”ฐ๋ผ ์ฆ์•ก๋œ๋‹ค. $20 ๊ธฐํƒ€ ์˜ˆ์‚ฐ์ด ์ด๋ฅผ ๋ชจ๋‘ ๋ณด์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ์ด ๊ฒฌ์ ์€ ๊ณ„์ • ํ™•์ธ ์ „ ์ž‘์„ฑํ•œ ์„ค๊ณ„ ์ถ”์ •์น˜๋‹ค. ๋ฆฌ์ „ยท์‚ฌ์–‘ยท๋ชจ๋ธยท๊ธฐ๊ฐ„ยท๊ธฐ์กด ๋„๋ฉ”์ธยทํ”„๋ฆฌํ‹ฐ์–ดยทํฌ๋ ˆ๋”ง๊ณผ ์˜ˆ์ƒ ์‚ฌ์šฉ๋Ÿ‰์„ ํ™•์ •ํ•˜๋ฉด ๋‹ค์‹œ ๊ณ„์‚ฐํ•œ๋‹ค. ์–ด๋–ค ์ž์›๋„ ์ด๋ฒˆ ์ž‘์—…์œผ๋กœ ์ƒ์„ฑยท๊ตฌ์ž…ํ•˜์ง€ ์•Š๋Š”๋‹ค.

6. ๊ณต์‹ ์ถœ์ฒ˜

์„œ์šธ ๋ฆฌ์ „ ๋‹จ๊ฐ€๋Š” AWS ๊ณต๊ฐœ Price List์˜ OnDemand ํ•ญ๋ชฉ์—์„œ ์กฐํšŒํ–ˆ๋‹ค. current ๋งํฌ๋Š” ๊ฐฑ์‹ ๋˜๋ฏ€๋กœ ์กฐํšŒ ๋‹น์‹œ ์ ์šฉ ๋‹จ๊ฐ€๋Š” ์œ„ ํ‘œ์— ๊ณ ์ • ๊ธฐ๋กํ–ˆ๋‹ค.

์›” 730์‹œ๊ฐ„ ๋น„๊ต ๊ฒฌ์ 

์„œ์šธ ๋ฆฌ์ „์„ ๊ณ„์‚ฐ์—๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Linux ์˜จ๋””๋งจ๋“œยทํ• ์ธ/ํฌ๋ ˆ๋”ง/์„ธ๊ธˆ ์ œ์™ธ. ์‚ฌ์–‘์€ ์ด์ „ ๊ฒฌ์ ๊ณผ ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ€์ •์ด๋ฉฐ ๊ณ„์ •์—์„œ MySQL 8.4 ๋ฐ ์„ ํƒ ์‚ฌ์–‘์˜ ์ƒ์„ฑ ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋Š” ๋ฏธํ™•์ธ์ž…๋‹ˆ๋‹ค.

2026-10-19 AWS ๊ณต์‹ Price List๋ฅผ ๋‹ค์‹œ ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค. EC2ยทRDSยทRedisยทALBยทNAT ๋‹จ๊ฐ€๋Š” ๊ธฐ์กด ๊ฒฌ์ ๊ณผ ๊ฐ™์•˜์Šต๋‹ˆ๋‹ค. Redis๋Š” ํ‘œ์ค€ ์ง€์› ๋…ธ๋“œ ๋‹จ๊ฐ€์ด๋ฉฐ ์—ฐ์žฅ ์ง€์› ํ•ญ๋ชฉ์„ ํ•ฉ์‚ฐํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. NAT๋Š” Regional ์ƒํ’ˆ์ด ์•„๋‹Œ AZ๋ณ„ NAT ์ƒํ’ˆ์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ•ญ๋ชฉ ์ˆ˜๋Ÿ‰ยท๋‹จ๊ฐ€ ์›” USD
EC2 ์ œ์–ด ํ‰๋ฉด t3.medium 1 ร— $0.052 ร— 730 37.96
EC2 ์›Œ์ปค t3.large 2 ร— $0.104 ร— 730 151.84
EBS gp3 30GB ร— 3๋Œ€ ร— $0.0912 8.21
RDS MySQL Multi-AZ db.t3.medium $0.208 ร— 730 (Primary/Standby ํฌํ•จ) 151.84
RDS gp3 Multi-AZ 20GB ร— $0.262 (์ด์ค‘ํ™” ํฌํ•จ ๋‹จ๊ฐ€) 5.24
Redis Primary/Replica cache.t3.small 2 ร— $0.049 ร— 730 71.54
NAT 2๊ฐœ 2 ร— $0.059 ร— 730 86.14
NAT ์ฒ˜๋ฆฌ๋Ÿ‰ ๊ฐ€์ • ํ•ฉ๊ณ„ 20GB ร— $0.059 1.18
ALB + ํ‰๊ท  1 LCU ($0.0225 + $0.008) ร— 730 22.27
๊ณต์ธ IPv4 NAT 2 + ALB ์ตœ์†Œ ๊ฐ€์ • 2, $0.005 ร— 4 ร— 730 14.60
์œ„ ํ•ญ๋ชฉ ์†Œ๊ณ„ ๋ฐ˜์˜ฌ๋ฆผ ์ „ ํ•ฉ์‚ฐ 550.81
์†Œ๊ณ„ + 20% ํ”„๋กœ์ ํŠธ ์ „์ฒด ์˜ˆ์‚ฐ ํ™•์ • ์•„๋‹˜ 660.98

์ด ํ‘œ๋Š” M4 EC2 ๊ตฌ์„ฑ์„ ํ•œ ๋‹ฌ ๊ณ„์† ์œ ์ง€ํ•˜๋Š” ๋น„๊ต์šฉ์ž…๋‹ˆ๋‹ค. EKS ์ œ์–ด ์˜์—ญ, S3ยทCloudFront, Route 53ยท๋„๋ฉ”์ธ, AI, ๋กœ๊ทธยท์ถ”๊ฐ€ ๋ฐฑ์—…, ์ธํ„ฐ๋„ท/AZ ๊ฐ„ ์ „์†ก, CPU ํฌ๋ ˆ๋”ง ์ดˆ๊ณผ, ์ถ”๊ฐ€ IPv4ยทLCU๋Š” ๋ณ„๋„์ž…๋‹ˆ๋‹ค. AWS Pricing Calculator ์ €์žฅ ๊ฒฌ์  ๋งํฌ๋Š” ์•„์ง ๋งŒ๋“ค์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์‹ค์ œ ๊ณ„์ •๊ณผ ์—”์ง„ยท์‚ฌ์–‘ ์„ ํƒ ํ›„ Calculator์—์„œ ๋ณด์™„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์กด $316.33(์—ฌ์œ  ํฌํ•จ $379.60)์€ 2~6์ฃผ์ฐจ ์‹ค์Šต์‹œ๊ฐ„ยท๋ฐ์ดํ„ฐ ์œ ์ง€๊ธฐ๊ฐ„ ๊ฐ€์ •์˜ ํ”„๋กœ์ ํŠธ ๊ฒฌ์ ์ž…๋‹ˆ๋‹ค. ์ด ์›” ์†Œ๊ณ„์™€ ๊ธฐ๊ฐ„ยทํฌํ•จ ํ•ญ๋ชฉ์ด ๋‹ค๋ฅด๋ฏ€๋กœ ์ง์ ‘ ์ ˆ๊ฐ์•ก์„ ๋น„๊ตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์‹ค์Šต ์ข…๋ฃŒ ํ›„ ๋น„์šฉ ๊ด€๋ฆฌ

์ž์› ์ข…๋ฃŒ ๋ฐฉ๋ฒ• ๋‚จ๋Š” ๋น„์šฉยท์ฃผ์˜
EC2 ์ค‘์ง€ ๋˜๋Š” ๋ถˆํ•„์š” ์ธ์Šคํ„ด์Šค ์ข…๋ฃŒ EBSยท์Šค๋ƒ…์ƒทยท๋ณด์œ  ๊ณต์ธ IP ๋“ฑ ๋ณ„๋„
RDS ์ง€์› ๊ตฌ์„ฑ์€ ์ž„์‹œ ์ค‘์ง€ ๊ฐ€๋Šฅ ์Šคํ† ๋ฆฌ์ง€ยท๋ฐฑ์—… ์š”๊ธˆ ์œ ์ง€. ์—ฐ์† 7์ผ ํ›„ ์ž๋™ ์žฌ์‹œ์ž‘
Redis ์บ์‹œ ๋ณด์กด ์ •์ฑ…ยท์ตœ์ข… ๋ฐฑ์—… ํ™•์ธ ํ›„ ์‚ญ์ œ EC2์ฒ˜๋Ÿผ ์ค‘์ง€ํ•˜๋Š” ์„œ๋น„์Šค๊ฐ€ ์•„๋‹˜. ๋ณด์กด ์Šค๋ƒ…์ƒท ๋ณ„๋„
NAT ์‚ญ์ œ ํ›„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” EIP ํ•ด์ œ EC2 ์ค‘์ง€๋กœ NATยท๊ณต์ธ IP ์š”๊ธˆ์ด ๋ฉˆ์ถ”์ง€ ์•Š์Œ
ALB ์žฌ์ƒ์„ฑ ์ ˆ์ฐจ ํ™•๋ณด ํ›„ ์‚ญ์ œ EC2 ์ค‘์ง€๋กœ ALB ์š”๊ธˆ์ด ๋ฉˆ์ถ”์ง€ ์•Š์Œ
EKS (M5) ์žฌ์ƒ์„ฑ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ํด๋Ÿฌ์Šคํ„ฐ ์‚ญ์ œ ๊ฒ€ํ†  ๋…ธ๋“œ๋งŒ ์ค‘์ง€ํ•ด๋„ ์ œ์–ด ์˜์—ญ ๋น„์šฉ ๋ฐœ์ƒ

๋ฐ์ดํ„ฐยท์ƒํƒœ ํŒŒ์ผยท๋ฐฑ์—…์€ ์ž๋™ ์‚ญ์ œ ๋ชฉ๋ก์— ๋„ฃ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์„œ๋Š” ์‚ญ์ œ ์‹คํ–‰ ์ง€์‹œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ํŒ€ ๊ณต์šฉ ์ž์›๊ณผ ๋ณด์กด ๋Œ€์ƒ์„ ํ™•์ธํ•œ ๋’ค ์ข…๋ฃŒํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.

๋‹จ๊ณ„๋ณ„ ํ™˜๊ฒฝ

๋‹จ๊ณ„ ํ™˜๊ฒฝ ๋ฐฐํฌ ๋Œ€์ƒ ๋ฐฐํฌ ๋ฐฉ์‹(๊ณ„ํš)
1 ์˜จํ”„๋ ˆ๋ฏธ์Šค VM, kubeadm ๋ฉ€ํ‹ฐ๋…ธ๋“œ develop GitHub Actions โ†’ ํ…Œ์ŠคํŠธ โ†’ ์ด๋ฏธ์ง€ ๋นŒ๋“œ โ†’ GHCR push(์ปค๋ฐ‹ SHA ํƒœ๊ทธ) โ†’ ํด๋Ÿฌ์Šคํ„ฐ ์•ˆ self-hosted runner๊ฐ€ ๊ฐœ๋ฐœ ํด๋Ÿฌ์Šคํ„ฐ์— ์ ์šฉ
2 AWS 3Tier, EC2 + kubeadm main GitHub Actions โ†’ ์ด๋ฏธ์ง€ ๋นŒ๋“œ โ†’ EC2 ํด๋Ÿฌ์Šคํ„ฐ
3 AWS EKS, Terraform main Terraform์œผ๋กœ ํ™˜๊ฒฝ ๊ตฌ์„ฑ + GitHub Actions๋กœ ์•ฑ ๋ฐฐํฌ

ํ˜„์žฌ ํด๋ผ์šฐ๋“œ ์„ค๊ณ„ ๋ชฉํ‘œ๋Š” EKS์ž…๋‹ˆ๋‹ค. ์‹ค์ œ ์ ์šฉ ๋ฐฉ์‹๊ณผ ๊ฐ ๋‹จ๊ณ„ ์—ฐ๊ฒฐ์€ ํŒ€ ๊ฒ€ํ†  ํ›„ ํ™•์ •ํ•ฉ๋‹ˆ๋‹ค.

๋„คํŠธ์›Œํฌ ๊ตฌ์กฐ

VPC ์ฃผ์†Œ ์ œ์•ˆ: 10.20.0.0/16. ๊ธฐ์กด ํŒ€ ๋„คํŠธ์›Œํฌ์™€ ์ค‘๋ณต๋˜๋ฉด ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ ๋ฆฌ์ „๊ณผ AZ ์ด๋ฆ„์€ ์ถ”ํ›„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

๊ตฌ์—ญ AZ A AZ B ๋ฐฐ์น˜ ๋Œ€์ƒ
ํผ๋ธ”๋ฆญ 10.20.0.0/24 10.20.1.0/24 ALB์˜ AZ๋ณ„ ์—ฐ๊ฒฐ, NAT-A / NAT-B
ํ”„๋ผ์ด๋น— ์•ฑ 10.20.10.0/24 10.20.11.0/24 EC2 / EKS ์ž‘์—… ๋…ธ๋“œ
ํ”„๋ผ์ด๋น— ๋ฐ์ดํ„ฐ 10.20.20.0/24 10.20.21.0/24 RDS PrimaryยทStandby, Redis PrimaryยทReplica

๋ผ์šฐํŒ…

ํผ๋ธ”๋ฆญ A/B๋Š” rt-public, ์•ฑ A/B๋Š” ๊ฐ๊ฐ rt-app-aยทrt-app-b, ๋ฐ์ดํ„ฐ A/B๋Š” rt-data์— ์—ฐ๊ฒฐํ•˜๋Š” ์„ค๊ณ„์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ํ‘œ์— VPC local ๊ฒฝ๋กœ๋ฅผ ์œ ์ง€ํ•˜๋ฉฐ ์•ฑยทDB ์„œ๋ธŒ๋„ท์˜ ๊ณต์ธ IPv4 ์ž๋™ ํ• ๋‹น์€ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

  • ํผ๋ธ”๋ฆญ A/B: 0.0.0.0/0 โ†’ IGW.
  • ์•ฑ A: 0.0.0.0/0 โ†’ NAT-A, ์•ฑ B: 0.0.0.0/0 โ†’ NAT-B. ์•ฑ ๋ผ์šฐํŒ… ํ‘œ๋ฅผ AZ๋ณ„๋กœ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ A/B: ์ธํ„ฐ๋„ท ๊ธฐ๋ณธ ๊ฒฝ๋กœ ์—†์Œ. ๋‚ด๋ถ€ ํ†ต์‹ ์€ VPC local ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • NAT๋Š” ๊ฐ AZ์˜ ์•ฑ์ด ์ž๊ธฐ AZ์˜ NAT๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์žฅ์•  ์‹œ ๋‹ค๋ฅธ NAT๋กœ ๊ฒฝ๋กœ๊ฐ€ ์ž๋™ ๋ณ€๊ฒฝ๋˜๋Š” ์„ค๊ณ„๋Š” ์•„๋‹™๋‹ˆ๋‹ค.

์ ‘๊ทผ ์ œ์–ด

IPv4ยท๋™์ผ VPC ๊ธฐ์ค€์ž…๋‹ˆ๋‹ค. ์•„๋ž˜ SG ์ด๋ฆ„์€ ์„ค๊ณ„์šฉ ์ด๋ฆ„์ด๋ฉฐ ์‹ค์ œ SG ID๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. SG๋Š” ํ—ˆ์šฉ ๊ทœ์น™์„ ํ•ฉ์‚ฐํ•˜๋ฏ€๋กœ ๋‹ค๋ฅธ SG๋ฅผ ํ•จ๊ป˜ ์—ฐ๊ฒฐํ•ด ์šฐํšŒ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋„๋ก ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

SG ๋ฐฉํ–ฅ ์ƒ๋Œ€ ํ”„๋กœํ† ์ฝœยทํฌํŠธ ๋ชฉ์ 
sg-alb ์ธ๋ฐ”์šด๋“œ 0.0.0.0/0 TCP 443 API HTTPS ์ง„์ž…
sg-alb ์ธ๋ฐ”์šด๋“œ 0.0.0.0/0 TCP 80 HTTPS ๋ฆฌ๋””๋ ‰์…˜ ์ „์šฉ ๋ฆฌ์Šค๋„ˆ
sg-alb ์•„์›ƒ๋ฐ”์šด๋“œ sg-app TCP P_TARGET, P_HEALTH ๋Œ€์ƒ ์„œ๋น„์Šค์™€ ํ—ฌ์Šค์ฒดํฌ. ๋‘ ํฌํŠธ๊ฐ€ ๊ฐ™์œผ๋ฉด ๊ทœ์น™ ํ•˜๋‚˜
sg-app ์ธ๋ฐ”์šด๋“œ sg-alb TCP P_TARGET, P_HEALTH ์‚ฌ์šฉ์ž ์š”์ฒญยทํ—ฌ์Šค์ฒดํฌ๋Š” ALB์—์„œ๋งŒ ํ—ˆ์šฉ
sg-app ์•„์›ƒ๋ฐ”์šด๋“œ sg-db TCP 3306 APIยท์›Œ์ปคยท๋ฐฐ์น˜์˜ MySQL ์—ฐ๊ฒฐ
sg-app ์•„์›ƒ๋ฐ”์šด๋“œ sg-redis TCP 6379 Redis TLS ์—ฐ๊ฒฐ ๊ณ„ํš. ์‹ค์ œ ์—”์ง„ ์„ค์ • ํ™•์ธ
sg-app ์•„์›ƒ๋ฐ”์šด๋“œ 0.0.0.0/0 TCP 443 ํ•ด๋‹น AZ NAT๋ฅผ ํ†ตํ•œ ๋‰ด์ŠคยทAI API ๋ฐ ํ•„์š”ํ•œ HTTPS ์„œ๋น„์Šค ์ ‘๊ทผ
sg-db ์ธ๋ฐ”์šด๋“œ sg-app TCP 3306 ์•ฑ ๊ณ„์ธต๋งŒ DB ์ ‘์†
sg-redis ์ธ๋ฐ”์šด๋“œ sg-app TCP 6379 ์•ฑ ๊ณ„์ธต๋งŒ Redis ์ ‘์†
sg-db / sg-redis ์•„์›ƒ๋ฐ”์šด๋“œ ์‚ฌ์šฉ์ž ์ •์˜ ์‹ ๊ทœ ์—ฐ๊ฒฐ ์—†์Œ ๊ธฐ๋ณธ ์ „์ฒด ํ—ˆ์šฉ ์ œ๊ฑฐ๋ฅผ ๊ณ„ํš ํ—ˆ์šฉ๋œ ์—ฐ๊ฒฐ์˜ ์‘๋‹ต์€ ์ƒํƒœ ์ถ”์ ์œผ๋กœ ์ฒ˜๋ฆฌ. ๊ด€๋ฆฌํ˜• ์„œ๋น„์Šค ์‹ค์ œ ์š”๊ตฌ์‚ฌํ•ญ์€ ๊ตฌ์ถ• ์‹œ ํ™•์ธ

P_TARGET์€ ALB๊ฐ€ ์‹ค์ œ ์—ฐ๊ฒฐํ•˜๋Š” ๋Œ€์ƒ ํฌํŠธ, P_HEALTH๋Š” ๋Œ€์ƒ ๊ทธ๋ฃน ํ—ฌ์Šค์ฒดํฌ ํฌํŠธ์ž…๋‹ˆ๋‹ค. ์•„์ง ํ™•์ •๋˜์ง€ ์•Š์€ ์ˆซ์ž๋ฅผ ์‹ค์ œ ํฌํŠธ์ฒ˜๋Ÿผ ๊ฒŒ์‹œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฐฑ์—”๋“œ ์‹คํ–‰ ํฌํŠธ์™€ ALB ๋Œ€์ƒ ํƒ€์ž…์„ ํ™•์ธํ•œ ๋’ค ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

2026-10-21 ์ €์žฅ์†Œ ๋Œ€์กฐ: backend์™€ infra์˜ ์•ฑ ํฌํŠธ๋Š” 8080์ด๋ฉฐ readiness๋Š” /actuator/health/readiness, liveness๋Š” /actuator/health/liveness์ž…๋‹ˆ๋‹ค. ์˜จํ”„๋ ˜ Traefik NodePort๋Š” HTTP 30080ยทHTTPS 30443์ž…๋‹ˆ๋‹ค. ์ด๋Š” AWS์šฉ ๋Œ€์ƒยทํ—ฌ์Šค์ฒดํฌ ํฌํŠธ๋ฅผ ํ™•์ •ํ•œ ๊ฐ’์ด ์•„๋‹ˆ๋ฏ€๋กœ Terraform์—์„œ๋Š” alb_target_ports ํ•„์ˆ˜ ์ž…๋ ฅ์œผ๋กœ ๋‘ก๋‹ˆ๋‹ค. ๋Œ€์ƒ ๊ฒฝ๋กœยทํ˜ธ์ŠคํŠธ ๋ผ์šฐํŒ…์€ M4 ALB ๊ตฌ์„ฑ์—์„œ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ backend Category.java์— ์ •์˜๋œ RSS 8๊ฐœ๋Š” ๋ชจ๋‘ https://rss.etnews.com/ ์ฃผ์†Œ์ž…๋‹ˆ๋‹ค. ์™ธ๋ถ€ 443 โ†’ ๊ฐ™์€ AZ NAT โ†’ IGW ๊ฒฝ๋กœ๋ฅผ ์ฝ”๋“œ์™€ ๋Œ€์กฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ VPC์˜ DNSยทRSS ์ ‘์†์€ ๊ณ„์ • ์ˆ˜๋ น ํ›„ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค. Terraform ๋ชจ์˜ ํ…Œ์ŠคํŠธ ํ†ต๊ณผ์™€ AWS ์‹คํ†ต์‹  ์„ฑ๊ณต์€ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

  • 4์ฃผ์ฐจ kubeadm์˜ instance ๋Œ€์ƒ์ด๋ฉด ํ•„์š”ํ•œ NodePort/Ingress ๋Œ€์ƒ ํฌํŠธ๋งŒ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ ํฌํŠธ์™€ ๊ฐ™๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ฑฐ๋‚˜ NodePort ์ „์ฒด ๋ฒ”์œ„๋ฅผ ์—ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • EKS ip ๋Œ€์ƒ์ด๋ฉด ์‹ค์ œ ํŒŒ๋“œ ENI์— ์ ์šฉ๋˜๋Š” SG์™€ ๋Œ€์ƒ ํฌํŠธ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋ณ„๋„ ํŒŒ๋“œ SG๋ฅผ ์“ฐ๋Š”์ง€์— ๋”ฐ๋ผ sg-app ์ฐธ์กฐ ๋Œ€์ƒ์ด ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.
  • ํด๋Ÿฌ์Šคํ„ฐ ์ œ์–ด ์˜์—ญยท๋…ธ๋“œยทCNIยทDNSยท๊ด€๋ฆฌ ์ ‘์† ๊ทœ์น™์€ ์œ„ ์‚ฌ์šฉ์ž ํŠธ๋ž˜ํ”ฝ ํ‘œ์™€ ๋ณ„๋„๋กœ ํ™•์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ํ‘œ๋งŒ์œผ๋กœ Kubernetes ์ „์ฒด ํ†ต์‹  ๊ตฌ์„ฑ์ด ์™„๋ฃŒ๋˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ ์ „์ฒด ์•„์›ƒ๋ฐ”์šด๋“œ ๊ทœ์น™์ด ๋‚จ์•„ ์žˆ์œผ๋ฉด ์œ„ ์ œํ•œ์ด ๋ฌด์˜๋ฏธํ•˜๋ฏ€๋กœ ์‹ค์ œ ๊ตฌ์„ฑ ์‹œ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ VPC DNS์™€ ์‚ฌ์šฉ์ž ์ง€์ • DNS๋Š” ๊ตฌ๋ถ„ํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž ์ง€์ • DNS ์‚ฌ์šฉ ์‹œ ํ•ด๋‹น ์„œ๋ฒ„๋กœ UDP/TCP 53์„ ๋ณ„๋„ ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค.
  • SG๋งŒ์œผ๋กœ HTTPS ๋ชฉ์ ์ง€๋ฅผ ํŠน์ • ๋‰ด์ŠคยทAI ๋„๋ฉ”์ธ์œผ๋กœ ์ œํ•œํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ 443 ์•„์›ƒ๋ฐ”์šด๋“œ๋Š” ๋ชจ๋“  IPv4 ๋ชฉ์ ์ง€์— ๋Œ€ํ•œ ํ—ˆ์šฉ์ž…๋‹ˆ๋‹ค.
  • ์•ฑยทDBยทRedis์˜ ์ธํ„ฐ๋„ท ์ง์ ‘ ์ธ๋ฐ”์šด๋“œ๋Š” ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. SSH 22์™€ Kubernetes API 6443์„ ์ธํ„ฐ๋„ท ์ „์ฒด์— ์—ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ด€๋ฆฌ ๊ฒฝ๋กœ๋Š” ๊ณ„์ • ๊ถŒํ•œ ํ™•์ธ ํ›„ ๋ณ„๋„ ํ™•์ •ํ•ฉ๋‹ˆ๋‹ค.
  • NATยทS3ยทCloudFront์— ์ด SG ํ‘œ๋ฅผ ๊ทธ๋Œ€๋กœ ์ ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ™”๋ฉด์€ CloudFrontโ†’๋น„๊ณต๊ฐœ S3, API๋Š” api ๋„๋ฉ”์ธโ†’ALB๋ผ๋Š” ๊ธฐ์กด ๊ตฌ์„ฑ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

๊ตฌ์ถ• ํ›„์—๋Š” ALB ์ •์ƒ ๋Œ€์ƒ, ์•ฑโ†’DB/Redis ์—ฐ๊ฒฐ ์„ฑ๊ณต, ๋น„ํ—ˆ์šฉ ์ถœ๋ฐœ์ง€์˜ ์ ‘์† ์‹คํŒจ๋ฅผ ์‹ค์ œ๋กœ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.

์˜จํ”„๋ ˆ๋ฏธ์Šค (develop)

ํ•ญ๋ชฉ ๊ฐ’
ํ•˜์ดํผ๋ฐ”์ด์ € VirtualBox
์–ด๋Œ‘ํ„ฐ 1 NAT. VM์˜ ์ธํ„ฐ๋„ท ์ ‘์†(ํŒจํ‚ค์ง€ยท์ด๋ฏธ์ง€ ๋‹ค์šด๋กœ๋“œ)
์–ด๋Œ‘ํ„ฐ 2 ํ˜ธ์ŠคํŠธ ์ „์šฉ 192.168.56.0/24, DHCP ๋น„ํ™œ์„ฑ, ๋…ธ๋“œ ๊ณ ์ • IP
๋…ธ๋“œ IP k8s-cp 192.168.56.10, k8s-worker1 .11, k8s-worker2 .12
ํŒŒ๋“œ ๋Œ€์—ญ 10.244.0.0/16
์„œ๋น„์Šค ๋Œ€์—ญ 10.96.0.0/12 (kubeadm ๊ธฐ๋ณธ๊ฐ’)
CNI Calico
์™ธ๋ถ€ ๋…ธ์ถœ ingress-nginx(NodePort). / โ†’ ํ”„๋ก ํŠธ, /api/* โ†’ API
ํŒ€์› ์ ‘์† ๋ฏธ์ • (VPN ๊ฒ€ํ† )
  • ๋…ธ๋“œ ๊ฐ„ ํ†ต์‹ ์€ ํ˜ธ์ŠคํŠธ ์ „์šฉ ๋„คํŠธ์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ณต์œ ๊ธฐ์™€ ๋ฌด๊ด€ํ•ด ์žฅ์†Œ๊ฐ€ ๋ฐ”๋€Œ์–ด๋„ ๋…ธ๋“œ IP๊ฐ€ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.
  • VirtualBox NAT๋Š” ๋ชจ๋“  VM์— ๊ฐ™์€ IP(10.0.2.15)๋ฅผ ์ฃผ๋ฏ€๋กœ, kubelet์— --node-ip๋กœ ํ˜ธ์ŠคํŠธ ์ „์šฉ IP๋ฅผ ์ง€์ •ํ•ด ๋…ธ๋“œ ์ฃผ์†Œ๊ฐ€ ๊ฒน์น˜์ง€ ์•Š๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
  • ํŒŒ๋“œ ๋Œ€์—ญ์€ ๋…ธ๋“œ ๋Œ€์—ญ(192.168.56.x)๊ณผ ๊ฒน์น˜์ง€ ์•Š๋„๋ก 10.244.0.0/16์œผ๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ฒน์น˜๋ฉด ๋ผ์šฐํŒ…์ด ๊ผฌ์ž…๋‹ˆ๋‹ค.
  • ์˜จํ”„๋ ˆ๋ฏธ์Šค ๋Œ€์—ญ์€ AWS VPC(10.20.0.0/16)์™€๋„ ๊ฒน์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‘ ํ™˜๊ฒฝ์„ VPN์œผ๋กœ ์ง์ ‘ ์—ฐ๊ฒฐํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์˜จํ”„๋ ˆ๋ฏธ์Šค์—์„œ AWS๋กœ๋Š” S3 ๋ฐฑ์—… ์—…๋กœ๋“œ๋งŒ ๋‚˜๊ฐ‘๋‹ˆ๋‹ค.
  • ํ™”๋ฉด๊ณผ API๊ฐ€ ๊ฐ™์€ ์ถœ์ฒ˜(Nginx๊ฐ€ /api/*๋ฅผ ๋ฐฑ์—”๋“œ๋กœ ํ”„๋ก์‹œ)์ด๋ฏ€๋กœ ์˜จํ”„๋ ˆ๋ฏธ์Šค์—์„œ๋Š” CORS๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • /actuator/*๋Š” Ingress์— ์—ฐ๊ฒฐํ•˜์ง€ ์•Š๊ณ  ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€์—์„œ๋งŒ ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”ํŠธ๋ฆญยท์ปค๋ฐ‹ SHA ๊ฐ™์€ ๋‚ด๋ถ€ ์ •๋ณด๊ฐ€ ์™ธ๋ถ€์— ๋…ธ์ถœ๋˜์ง€ ์•Š๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ์ž…๋‹ˆ๋‹ค.

์ปดํ“จํŠธ

  • 4์ฃผ์ฐจ: EC2 + kubeadm, ์ œ์–ด ๋…ธ๋“œ 1๋Œ€์™€ A/B ์ž‘์—… ๋…ธ๋“œ ๊ฐ 1๋Œ€๋ฅผ ์ดˆ๊ธฐ์•ˆ์œผ๋กœ ๋‘ก๋‹ˆ๋‹ค. ์ œ์–ด ๋…ธ๋“œ 1๋Œ€๋Š” ๋‹จ์ผ ์žฅ์•  ์ง€์ ์ด๋ฉฐ ํ•™์Šต ๋‹จ๊ณ„์˜ ํ•œ๊ณ„์ž…๋‹ˆ๋‹ค.
  • 5์ฃผ์ฐจ: EKS ๊ด€๋ฆฌํ˜• ์ œ์–ด ์˜์—ญ์œผ๋กœ ์ „ํ™˜ํ•˜๊ณ  ์ž‘์—… ๋…ธ๋“œ๋ฅผ A/B์— ๋ถ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. EKS ์ œ์–ด ์˜์—ญ์€ ์šฐ๋ฆฌ ์•ฑ ์„œ๋ธŒ๋„ท์˜ EC2๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.
  • APIยท์›Œ์ปค ๋ณต์ œ๋ณธ์ด ๋‘ AZ์— ๋ถ„์‚ฐ๋˜๋„๋ก ๋ฐฐ์น˜ ๊ทœ์น™์„ ์ ์šฉํ•˜๊ณ , ํ•œ AZ ์žฅ์•  ์‹œ ์ž”์—ฌ ์šฉ๋Ÿ‰์„ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.
  • API๋Š” HPA, ์›Œ์ปค๋Š” ํ ๊ธธ์ด ๊ธฐ๋ฐ˜ KEDA ํ™•์žฅ์„ ๊ณ„ํšํ•ฉ๋‹ˆ๋‹ค. ๋…ธ๋“œ ์ฆ์„ค์€ ๋ณ„๋„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐฑ์‹  ๋ฐฐ์น˜๋Š” 30๋ถ„ ์ฃผ๊ธฐ CronJob์œผ๋กœ ์‹คํ–‰ํ•˜๋ฉฐ ์ค‘๋ณต ์‹คํ–‰์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.
  • ์„œ๋ฒ„ ํฌ๊ธฐยท์•ฑ ํฌํŠธยทํ—ฌ์Šค์ฒดํฌ ๊ฒฝ๋กœยท๋ฉ”๋ชจ๋ฆฌ๋Š” ๋ฐฑ์—”๋“œ ์‹คํ–‰ ์š”๊ฑด์— ๋งž์ถฐ ํ™•์ •ํ•ฉ๋‹ˆ๋‹ค.

์˜จํ”„๋ ˆ๋ฏธ์Šค (develop)

ํ•ญ๋ชฉ ๊ฐ’
ํ˜ธ์ŠคํŠธ ๋…ธํŠธ๋ถ 1๋Œ€ (AMD Ryzen 5, 6์ฝ”์–ด 12์Šค๋ ˆ๋“œ, 32GB, Windows)
ํ•˜์ดํผ๋ฐ”์ด์ € VirtualBox (Hyper-V ๋น„ํ™œ์„ฑ ์ƒํƒœ์—์„œ ์ง์ ‘ ์‹คํ–‰)
OS Ubuntu Server 24.04 LTS (amd64)
์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„ containerd 2.4 (SystemdCgroup ์‚ฌ์šฉ)
Kubernetes v1.35 (kubeadmยทkubeletยทkubectl ๋ฒ„์ „ ๊ณ ์ •)
๋…ธ๋“œ ์—ญํ•  vCPU RAM ๋””์Šคํฌ IP
k8s-cp control plane, self-hosted runner 2 4GB 40GB 192.168.56.10
k8s-worker1 worker 2 6GB 40GB 192.168.56.11
k8s-worker2 worker 2 6GB 40GB 192.168.56.12
์›Œํฌ๋กœ๋“œ ์ข…๋ฅ˜ ๋น„๊ณ 
API Deployment readiness๋Š” DB ์—ฐ๊ฒฐ ๊ธฐ์ค€ (Redis ์ œ์™ธ, API ๋ช…์„ธ ๊ธฐ์ค€)
์›Œ์ปค Deployment ์ตœ์†Œ 1๊ฐœ ์œ ์ง€. 0๊ฐœ๋กœ ์ค„์ด๋ฉด ๊ธฐ๋™ ์‹œ๊ฐ„ ๋•Œ๋ฌธ์— ์งˆ๋ฌธ ์žฌํˆฌ์ž…(30์ดˆ)ยท์‹คํŒจ ์ฒ˜๋ฆฌ(60์ดˆ) ๊ธฐ์ค€์— ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Œ
์š”์•ฝ ๊ฐฑ์‹  ๋ฐฐ์น˜ CronJob concurrencyPolicy: Forbid๋กœ ์ค‘๋ณต ์‹คํ–‰ ๋ฐฉ์ง€
ํ”„๋ก ํŠธ Deployment (Nginx) ์ •์  ํŒŒ์ผ + /api/* ํ”„๋ก์‹œ
  • ํ˜ธ์ŠคํŠธ CPU๊ฐ€ x86(amd64)์ด๋ผ AWS EC2์™€ ๊ฐ™์€ ์ด๋ฏธ์ง€๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์•ฑยทDBยท๋ชจ๋‹ˆํ„ฐ๋ง์€ ์›Œ์ปค์— ์˜ฌ๋ผ๊ฐ€๋ฏ€๋กœ ์›Œ์ปค์— RAM์„ ๋” ๋ฐฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ๋””์Šคํฌ๋Š” ์‚ฌ์šฉํ•œ ๋งŒํผ๋งŒ ์ปค์ง€๋Š” ๊ฐ€๋ณ€ ํฌ๊ธฐ์ž…๋‹ˆ๋‹ค.
  • swap์€ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. kubelet์ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ •ํ™•ํžˆ ๊ณ„์‚ฐํ•ด ํŒŒ๋“œ๋ฅผ ๋ฐฐ์น˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ์ž…๋‹ˆ๋‹ค.
  • ์˜จํ”„๋ ˆ๋ฏธ์Šค๋Š” 5์ฃผ์ฐจ์— KEDA๋ฅผ ์„ค์น˜ํ•˜๊ธฐ ์ „๊นŒ์ง€ ์›Œ์ปค ์ˆ˜๋ฅผ ๊ณ ์ •์œผ๋กœ ์šด์˜ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ๊ณ„์ธต

๊ตฌ์„ฑ AZ A ์ดˆ๊ธฐ ๋ฐฐ์น˜ AZ B ์ดˆ๊ธฐ ๋ฐฐ์น˜ ์žฅ์•  ๋Œ€์‘
RDS MySQL Multi-AZ DB instance Primary Standby ๋™๊ธฐ ๋ณต์ œ, ๋Œ€๊ธฐ DB ์ž๋™ ์Šน๊ฒฉ
ElastiCache Redis OSS ๋ณต์ œ ๊ทธ๋ฃน Primary Replica ๋น„๋™๊ธฐ ๋ณต์ œ, Multi-AZยทAutomatic Failover ํ™œ์„ฑํ™”
  • RDS๋Š” ๋…๋ฆฝ DB ๋‘ ๊ฐœ๊ฐ€ ์•„๋‹Œ Multi-AZ ๋ฐฐํฌ 1๊ฐœ์ž…๋‹ˆ๋‹ค. Standby๋Š” ํ‰์†Œ ์ฝ๊ธฐ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 3๊ฐœ AZ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Multi-AZ DB cluster์™€ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.
  • Redis๋Š” ํด๋Ÿฌ์Šคํ„ฐ ๋ชจ๋“œ ๋น„ํ™œ์„ฑ, ์ƒค๋“œ 1๊ฐœ, ์ฃผ ๋…ธ๋“œ 1๊ฐœ + ๋ณต์ œ ๋…ธ๋“œ 1๊ฐœ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค.
  • RDS๋Š” ํšŒ์›ยท์งˆ๋ฌธยท๊ฒฐ๊ณผยท์ž‘์—… ์ƒํƒœ๋ฅผ, Redis๋Š” ์บ์‹œยท์ž‘์—… ๋Œ€๊ธฐ์—ด์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ์Šคํ‚ค๋งˆ๋Š” ๋ฐฑ์—”๋“œ์™€ ERD ๋ฌธ์„œ์—์„œ ํ™•์ •ํ•ฉ๋‹ˆ๋‹ค.
  • A/B ์ฃผยท๋Œ€๊ธฐ ์—ญํ• ์€ ์ดˆ๊ธฐ ์˜ˆ์‹œ์ด๋ฉฐ ์žฅ์•  ์ „ํ™˜ ํ›„ ๋ฐ”๋€” ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ฑ์€ ๊ณ ์ • IP ๋Œ€์‹  ์„œ๋น„์Šค ์—”๋“œํฌ์ธํŠธ์™€ ์žฌ์—ฐ๊ฒฐ ๋กœ์ง์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • Redis ๋น„๋™๊ธฐ ๋ณต์ œ๋Š” ์ตœ๊ทผ ์“ฐ๊ธฐ ์ผ๋ถ€ ์œ ์‹ค ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. DB ์ž‘์—… ์ƒํƒœ, ์žฌ์ฒ˜๋ฆฌ, ์ค‘๋ณต ์ฒ˜๋ฆฌ ๋ฐฉ์ง€๋ฅผ ๋ฐฑ์—”๋“œ์™€ ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค.
  • ์ด์ค‘ํ™”๋Š” ๋ฐฑ์—…์„ ๋Œ€์ฒดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์Šค๋ƒ…์ƒท ๋ณต์›๊ณผ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ์€ ๋ณ„๋„๋กœ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์˜จํ”„๋ ˆ๋ฏธ์Šค (develop)

๊ตฌ์„ฑ ๋ฐฉ์‹ ๋น„๊ณ 
MySQL StatefulSet + PVC kubeadm์—๋Š” ๊ธฐ๋ณธ ์Šคํ† ๋ฆฌ์ง€๊ฐ€ ์—†์–ด local-path-provisioner๋กœ PVC๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค
Redis Deployment ๋‹จ์ผ ์ธ์Šคํ„ด์Šค. ์บ์‹œ์™€ ์ž‘์—… ๋Œ€๊ธฐ์—ด
๋ฐฑ์—… etcd ์Šค๋ƒ…์ƒทยทMySQL ๋คํ”„ ํ•˜๋ฃจ 1ํšŒ, 7์ผ ๋ณด๊ด€ 5์ฃผ์ฐจ๋ถ€ํ„ฐ S3๋กœ ์ „์†กํ•ฉ๋‹ˆ๋‹ค
  • ์˜จํ”„๋ ˆ๋ฏธ์Šค ๋ฐ์ดํ„ฐ๋Š” ๊ฐœ๋ฐœยท๊ฒ€์ฆ์šฉ์ด๋ฉฐ ์ด์ค‘ํ™”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์šด์˜ ๋ฐ์ดํ„ฐ๋Š” AWS์—๋งŒ ๋‘ก๋‹ˆ๋‹ค.
  • Redis ๋‹จ์ผ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ค‘๋‹จ๋˜๋ฉด ๋Œ€๊ธฐ์—ด ํ•ญ๋ชฉ์ด ์‚ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์ง€๋งŒ, ์งˆ๋ฌธ ์ƒํƒœ์˜ ๊ธฐ์ค€์€ DB์ด๊ณ  30์ดˆ ๋„˜์€ PENDING ์งˆ๋ฌธ์€ ๋‹ค์‹œ ๋Œ€๊ธฐ์—ด์— ๋„ฃ์œผ๋ฏ€๋กœ ์ฒ˜๋ฆฌ๊ฐ€ ์ด์–ด์ง‘๋‹ˆ๋‹ค (API ๋ช…์„ธ ๊ธฐ์ค€).

์ธ์ฆ

์—ญํ• ๋ณ„ IAM ์ตœ์†Œ ๊ถŒํ•œ

์•„๋ž˜๋Š” ์—ญํ• ๋ณ„ ๊ถŒํ•œ ๊ฒฝ๊ณ„์ด๋ฉฐ ์‹ค์ œ IAM ์ •์ฑ… ์ ์šฉ ์™„๋ฃŒ๋ฅผ ์˜๋ฏธํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ตฌ์ฒด์ ์ธ ์ž‘์—… ์ด๋ฆ„๊ณผ ๋ฆฌ์†Œ์Šค ARN์€ ๊ณ„์ •ยท๋ฐฐํฌ ๋ฐฉ์‹ ํ™•์ • ํ›„ ์ž‘์„ฑํ•œ๋‹ค.

์—ญํ•  ํ•„์š”ํ•œ ๋ฒ”์œ„ ์ œํ•œ ๊ธฐ์ค€
ํด๋ผ์šฐ๋“œ ์ธํ”„๋ผ ๋‹ด๋‹น ํ”„๋กœ์ ํŠธ ๋„คํŠธ์›Œํฌยท์ปดํ“จํŠธยท๋ฐ์ดํ„ฐ ์ž์›์˜ ์ƒ์„ฑยท์ˆ˜์ •ยท์กฐํšŒ ์„œ๋น„์Šค๋ณ„ ์ง€์› ๋ฒ”์œ„ ๋‚ด์—์„œ ํ”„๋กœ์ ํŠธ ๋ฆฌ์†Œ์Šคยทํƒœ๊ทธยท๋ฆฌ์ „์œผ๋กœ ์ œํ•œ. ๋ชจ๋“  ์ž‘์—…์ด ํƒœ๊ทธ ์กฐ๊ฑด์„ ์ง€์›ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ง€ ์•Š์Œ
๋ฐฑ์—”๋“œ ๋ฐฐํฌ ์ง€์ • ์ด๋ฏธ์ง€ ์ €์žฅ์†Œ์™€ ์•ฑ ๋ฐฐํฌ ๋Œ€์ƒ ์ธํ”„๋ผยท์‚ฌ์šฉ์ž ๊ด€๋ฆฌ ๊ถŒํ•œ๊ณผ ๋ถ„๋ฆฌ. IAM ์ธ์ฆ๊ณผ Kubernetes ๋ฐฐํฌ ๊ถŒํ•œ์„ ๋ณ„๋„๋กœ ์ œํ•œ
ํ”„๋ก ํŠธ ๋ฐฐํฌ ์ง€์ • S3 ๋ฐฐํฌ ๊ฒฝ๋กœ ์—…๋กœ๋“œ, ์ง€์ • CloudFront ๋ฐฐํฌ ๋ฌดํšจํ™” ๋‹ค๋ฅธ ๋ฒ„ํ‚ทยท๋ฐฐํฌ ์ ‘๊ทผ ์ œ์™ธ
์•ฑ ์‹คํ–‰ ์„ ํƒํ•œ AI ์„œ๋น„์Šค ํ˜ธ์ถœ๊ณผ ํ•„์š”ํ•œ ๋น„๋ฐ€๊ฐ’ ์ฝ๊ธฐ ๋“ฑ ๋ชจ๋ธยท๋น„๋ฐ€๊ฐ’ ๋“ฑ ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋กœ ์ œํ•œ. ์ธํ”„๋ผ ๊ด€๋ฆฌ ๊ถŒํ•œ ์ œ์™ธ
์กฐํšŒยท๋น„์šฉ ํ™•์ธ ํ•„์š”ํ•œ ๋ชจ๋‹ˆํ„ฐ๋งยท๋น„์šฉ ์กฐํšŒ ๋ณ€๊ฒฝ ๊ถŒํ•œ๊ณผ ๊ตฌ๋ถ„. ๋น„์šฉ ์ •๋ณด ์ ‘๊ทผ์€ ํŒ€ ๊ณ„์ • ์ •์ฑ…์— ๋งž์ถฐ ๋ถ€์—ฌ

GitHub Actions OIDC๋Š” ํ•ด๋‹น ์ €์žฅ์†Œยท๋ธŒ๋žœ์น˜ ๋˜๋Š” ๋ฐฐํฌ ํ™˜๊ฒฝ์œผ๋กœ ์‹ ๋ขฐ ์กฐ๊ฑด์„ ์ œํ•œํ•œ๋‹ค. ์‚ฌ๋žŒ ๊ณ„์ •์€ MFA๋ฅผ ์ ์šฉํ•œ๋‹ค. ์ •์  ๋น„๋ฐ€๊ฐ’์„ ์ €์žฅ์†Œ์— ์˜ฌ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค.

AWSยท๋ฐฐํฌ ๊ถŒํ•œ ์„ค๊ณ„

  • ํŒ€์›๋ณ„ ๋กœ๊ทธ์ธ๊ณผ MFA, ์—…๋ฌด์— ํ•„์š”ํ•œ ์ตœ์†Œ ๊ถŒํ•œ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์ธํ”„๋ผ ๊ด€๋ฆฌ, ์•ฑ ๋ฐฐํฌ, ํ”„๋ก ํŠธ ๋ฐฐํฌ, ์•ฑ ์‹คํ–‰ ๊ถŒํ•œ์„ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • GitHub Actions๋Š” OIDC ๊ธฐ๋ฐ˜ ๋‹จ๊ธฐ ๊ถŒํ•œ์„ ์‚ฌ์šฉํ•˜๋ฉฐ ์‹ ๋ขฐ ์กฐ๊ฑด์„ ํ•ด๋‹น ์ €์žฅ์†Œ์™€ ๋ธŒ๋žœ์น˜ ๋˜๋Š” ์Šน์ธ๋œ ๋ฐฐํฌ ํ™˜๊ฒฝ์œผ๋กœ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.
  • API ํ‚คยทDB ์•”ํ˜ธ๋Š” Git์— ์ €์žฅํ•˜์ง€ ์•Š๊ณ  ๋น„๋ฐ€๊ฐ’ ์ €์žฅ์†Œ๋กœ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ๋น„๊ณต๊ฐœ ํด๋Ÿฌ์Šคํ„ฐ๊นŒ์ง€ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๋ฐฐํฌ ์‹คํ–‰ ์œ„์น˜๋ฅผ ๋งˆ๋ จํ•ฉ๋‹ˆ๋‹ค. OIDC ์ธ์ฆ๋งŒ์œผ๋กœ ๋‚ด๋ถ€ ๋„คํŠธ์›Œํฌ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•ด์ง€๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

์˜จํ”„๋ ˆ๋ฏธ์Šค (develop)

  • ๋น„๋ฐ€ ๊ฐ’: AIยท๋‰ด์Šค API ํ‚ค์™€ DB ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” Kubernetes Secret์œผ๋กœ ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค.
  • ๋กœ๊ทธ์ธ ์ฟ ํ‚ค: ์˜จํ”„๋ ˆ๋ฏธ์Šค๋Š” HTTP๋กœ ์„œ๋น„์Šคํ•˜๋ฏ€๋กœ COOKIE_SECURE=false๋ฅผ ConfigMap์œผ๋กœ ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๋Š” localhost ์™ธ์˜ HTTP ์ฃผ์†Œ(VM IP)์—์„œ Secure ์ฟ ํ‚ค๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
  • ๋ฐฐํฌ ๊ถŒํ•œ: self-hosted runner๋Š” ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์ด ์•„๋‹Œ ๋ฐฐํฌ ์ „์šฉ ServiceAccount(RBAC๋กœ ์•ฑ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋งŒ ํ—ˆ์šฉ)๋กœ ํด๋Ÿฌ์Šคํ„ฐ์— ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค.
  • ์ด๋ฏธ์ง€ pull: GHCR ์ด๋ฏธ์ง€๊ฐ€ ๋น„๊ณต๊ฐœ๋ฉด ํด๋Ÿฌ์Šคํ„ฐ์— imagePullSecret์„ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.
  • S3 ๋ฐฑ์—…: ์˜จํ”„๋ ˆ๋ฏธ์Šค๋Š” IAM ์—ญํ• ์„ ์“ธ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ, ๋ฐฑ์—… ๋ฒ„ํ‚ท ์—…๋กœ๋“œ๋งŒ ํ—ˆ์šฉํ•œ ์ „์šฉ IAM ์‚ฌ์šฉ์ž๋ฅผ ํด๋ผ์šฐ๋“œ ๋‹ด๋‹น๊ณผ ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธยทJWT ๋“ฑ ์•ฑ ์ธ์ฆ ์ƒ์„ธ๋Š” ๋ฐฑ์—”๋“œ ๋‹ด๋‹น ์ž‘์„ฑ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

ํ”„๋ก ํŠธ์—”๋“œ

AWS ๋„๋ฉ”์ธยทHTTPS ๊ตฌ์„ฑ

2026-10-12 ํ”„๋ก ํŠธ์—”๋“œ ๋‹ด๋‹น ์ œ์•ˆ์„ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ ๋„๋ฉ”์ธ ์ด๋ฆ„์€ ํด๋ผ์šฐ๋“œ ๋‹ด๋‹น์ด ํ™•์ • ํ›„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

  • ํ™”๋ฉด: https://app.{๋„๋ฉ”์ธ} โ†’ CloudFront โ†’ ๋น„๊ณต๊ฐœ S3.
  • API: https://api.{๋„๋ฉ”์ธ} โ†’ ALB(HTTPS) โ†’ ์•ฑ ์„œ๋ฒ„.
  • ๋‘ ์ฃผ์†Œ๋Š” ๊ฐ™์€ ์ƒ์œ„ ๋„๋ฉ”์ธ์„ ์‚ฌ์šฉํ•˜๊ณ  Route 53์—์„œ ๊ฐ๊ฐ CloudFrontยทALB๋กœ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. HTTPS๋ฅผ ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉํ•ด ๋กœ๊ทธ์ธ ์ฟ ํ‚ค์˜ SameSite=Lax ์กฐ๊ฑด์— ๋งž๋Š” ๊ฐ™์€ ์‚ฌ์ดํŠธ ๊ตฌ์„ฑ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  • ํ™”๋ฉด๊ณผ API๋Š” ๊ฐ™์€ ์‚ฌ์ดํŠธ์ด์ง€๋งŒ ์„œ๋กœ ๋‹ค๋ฅธ ์ถœ์ฒ˜์ด๋ฏ€๋กœ CORS๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. AWS API๋Š” CloudFront์˜ /api/* ํ”„๋ก์‹œ๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  API ๋„๋ฉ”์ธ์œผ๋กœ ์ง์ ‘ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

CORSยทํ™˜๊ฒฝ๋ณ„ API ์ฃผ์†Œ

  • ๋ฐฑ์—”๋“œ๋Š” https://app.{๋„๋ฉ”์ธ} ์ถœ์ฒ˜๋งŒ ํ—ˆ์šฉํ•˜๊ณ  credentials๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ฟ ํ‚ค ์ธ์ฆ ์š”์ฒญ์— ์™€์ผ๋“œ์นด๋“œ ์ถœ์ฒ˜(*)๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ํ”„๋ก ํŠธ๋Š” ์ฟ ํ‚ค ํฌํ•จ ์š”์ฒญ(credentials: include ๋˜๋Š” Axios withCredentials: true)์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ํ™”๋ฉด์€ api.js์—์„œ ํ™˜๊ฒฝ๋ณ„ API ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค: ์˜จํ”„๋ ˆ๋ฏธ์Šค /api, AWS https://api.{๋„๋ฉ”์ธ}. /api ๊ฒฝ๋กœ๊ฐ€ ์ค‘๋ณต๋˜๊ฑฐ๋‚˜ ๋น ์ง€์ง€ ์•Š๋„๋ก ์‹ค์ œ ์—”๋“œํฌ์ธํŠธ ์กฐํ•ฉ์€ API ๋ช…์„ธ์— ๋งž์ถฐ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

์ธ์ฆ์„œ์™€ ๋‹ด๋‹น

  • app.{๋„๋ฉ”์ธ}์šฉ CloudFront ์ธ์ฆ์„œ๋Š” ACM์˜ us-east-1์—์„œ ๋ฐœ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค.
  • api.{๋„๋ฉ”์ธ}์šฉ ALB ์ธ์ฆ์„œ๋Š” ALB๋ฅผ ๋ฐฐ์น˜ํ•˜๋Š” ๋ฆฌ์ „์—์„œ ๋ฐœ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค. ALB๊ฐ€ ์„œ์šธ์ด๋ฉด ์„œ์šธ ๋ฆฌ์ „ ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ํด๋ผ์šฐ๋“œ ๋‹ด๋‹น: ๋„๋ฉ”์ธ ์ด๋ฆ„ ํ™•์ •, Route 53 ์—ฐ๊ฒฐ, ์ธ์ฆ์„œ ๋ฐœ๊ธ‰ยท๊ฒ€์ฆยท์—ฐ๊ฒฐ.
  • ํ”„๋ก ํŠธ ๋‹ด๋‹น: api.js ํ™˜๊ฒฝ๋ณ„ ์ฃผ์†Œ ๋ถ„๋ฆฌ ๋ฐ ์ฟ ํ‚ค ํฌํ•จ ์š”์ฒญ ์ ์šฉ.
  • ๋ฐฑ์—”๋“œ ๋‹ด๋‹น: CORSยท๋กœ๊ทธ์ธ ์ฟ ํ‚ค ์„ค์ •. ์šด์˜ ์ฟ ํ‚ค์˜ SecureยทHttpOnlyยทSameSite=Lax์™€ ์‹ค์ œ ๋กœ๊ทธ์ธ ๋™์ž‘์„ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.

SPA ๊ฒฝ๋กœ ์ฒ˜๋ฆฌ

  • CloudFront๋Š” ํ™”๋ฉด ํŒŒ์ผ๋งŒ ์ œ๊ณตํ•˜๋ฉฐ 403/404๋ฅผ /index.html๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” SPA ์„ค์ •์€ ํ™”๋ฉด ๋ฐฐํฌ์—๋งŒ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • API ์˜ค๋ฅ˜ ์‘๋‹ต์€ HTML๋กœ ์น˜ํ™˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ •์  ํŒŒ์ผ ๋ˆ„๋ฝ ์˜ค๋ฅ˜๊นŒ์ง€ ์ˆจ๊ฒจ์ง€์ง€ ์•Š๋Š”์ง€๋„ ๋ฐฐํฌ ์‹œ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ์˜จํ”„๋ ˆ๋ฏธ์Šค: Nginx ์ปจํ…Œ์ด๋„ˆ๋ฅผ Ingress / ๊ฒฝ๋กœ๋กœ ๋…ธ์ถœํ•˜๊ณ  /api/*๋Š” ๋ฐฑ์—”๋“œ๋กœ ํ”„๋ก์‹œํ•ฉ๋‹ˆ๋‹ค. SPA ๊ฒฝ๋กœ๋Š” /api/*๋ฅผ ์ œ์™ธํ•˜๊ณ  index.html๋กœ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

CI/CD

์šด์˜ ๋ฐฐํฌ ๊ณ„ํš: main ๋ณ€๊ฒฝ โ†’ ํ…Œ์ŠคํŠธ โ†’ ๋ฒ„์ „ ๊ณ ์ • ์ด๋ฏธ์ง€ ๋นŒ๋“œยท์ €์žฅ โ†’ ์šด์˜ ์•ฑ ๋ฐฐํฌ โ†’ ํ—ฌ์Šค์ฒดํฌ. ์‹คํŒจ ์‹œ ์ง์ „ ์ •์ƒ ์ด๋ฏธ์ง€๋กœ ๋ณต๊ท€ํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœยท์šด์˜ ๋ถ„๊ธฐ์™€ ์ด๋ฏธ์ง€ ์ €์žฅ์†Œ, ์‹คํ–‰๊ธฐ ์œ„์น˜, ์Šน์ธ ๊ทœ์น™์€ ๊ด€๋ จ ๋‹ด๋‹น๊ณผ ํ™•์ • ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

๊ตฌํ˜„ ์ ˆ์ฐจ๋Š” ๋ณ„๋„ ๋ฐฐํฌ ๊ฐ€์ด๋“œ์— ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ์ž๋™ ๋ฐฐํฌ๊ฐ€ ๊ตฌ์ถ•๋œ ์ƒํƒœ๋Š” ์•„๋‹™๋‹ˆ๋‹ค.

์˜จํ”„๋ ˆ๋ฏธ์Šค (develop)

develop ๋ณ€๊ฒฝ โ†’ ํ…Œ์ŠคํŠธ โ†’ ์ด๋ฏธ์ง€ ๋นŒ๋“œ โ†’ GHCR์— ์ปค๋ฐ‹ SHA ํƒœ๊ทธ๋กœ push โ†’ control plane VM์˜ self-hosted runner๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐ์— ์ ์šฉ โ†’ kubectl rollout status๋กœ ํ™•์ธ, ์‹คํŒจ ์‹œ ํŒ€ ์ฑ„๋„ ์•Œ๋ฆผ.

  • ์˜จํ”„๋ ˆ๋ฏธ์Šค VM์€ ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ, ํด๋Ÿฌ์Šคํ„ฐ ์•ˆ์˜ runner๊ฐ€ GitHub์—์„œ ์ž‘์—…์„ ๋ฐ›์•„์˜ค๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ๋ธŒ๋žœ์น˜ยท์Šน์ธยท๋กค๋ฐฑ ์ •์ฑ…์€ ๋ฐฐํฌ ๊ฐ€์ด๋“œ๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

๋ฆฌ์†Œ์Šค ํƒœ๊ทธ

์ดˆ๊ธฐ ํƒœ๊ทธ ์ œ์•ˆ์€ Project=likelion-team01, Owner=chaneee93, Environment=practice, ManagedBy=console์ž…๋‹ˆ๋‹ค. Owner๋Š” ์‹ค์ œ ๋‹ด๋‹น์ž, ManagedBy๋Š” ์‹ค์ œ ๊ด€๋ฆฌ ๋ฐฉ์‹์— ๋งž์ถฅ๋‹ˆ๋‹ค. ํŒ€ ๊ณตํ†ต ๊ฐ’์€ ์ ์šฉ ์ „์— ํ™•์ •ํ•ฉ๋‹ˆ๋‹ค. ๋น„์šฉ ๋ถ„๋ฅ˜์— ์‚ฌ์šฉํ•  ํƒœ๊ทธ๋Š” ๋น„์šฉ ํ• ๋‹น ํƒœ๊ทธ ํ™œ์„ฑํ™” ์—ฌ๋ถ€๋„ ํ™•์ธํ•˜๋ฉฐ, ํƒœ๊ทธ๋งŒ์œผ๋กœ ์ ‘๊ทผ ๊ถŒํ•œ์ด ํ†ต์ œ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

IaC (Terraform)

์•„๋ž˜๋Š” 5์ฃผ์ฐจ ์ฝ”๋“œํ™” ๋Œ€์ƒ์ด๋ฉฐ ์‹ค์ œ ๋ชจ๋“ˆ ๊ตฌํ˜„ ์ „์ž…๋‹ˆ๋‹ค.

๋ชจ๋“ˆ(์ œ์•ˆ) ์—ญํ• 
network VPC, ์„œ๋ธŒ๋„ท 6๊ฐœ, IGW, AZ๋ณ„ NAT 2๊ฐœ, ๋ผ์šฐํŒ…
compute EKS, ๊ด€๋ฆฌํ˜• ์ž‘์—… ๋…ธ๋“œ ๊ทธ๋ฃน, ๊ด€๋ จ ๋ณด์•ˆ ๊ทธ๋ฃน
data RDS Multi-AZ, Redis ๋ณต์ œ ๊ทธ๋ฃน, ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ทœ์น™
identity OIDC, ๋ฐฐํฌยท์•ฑ ์‹คํ–‰ ์—ญํ• ๊ณผ ์ตœ์†Œ ๊ถŒํ•œ
frontend S3ยทCloudFront, ํ”„๋ก ํŠธ ๋‹ด๋‹น๊ณผ ๊ด€๋ฆฌ ๋ฒ”์œ„ ํ˜‘์˜

์‹ค์Šต ์‹œ๊ฐ„์— ์„œ๋น„์Šค ์šด์˜์„ ๊ณ„ํšํ•ฉ๋‹ˆ๋‹ค. ์ข…๋ฃŒยท์žฌ์ƒ์„ฑ ๋Œ€์ƒ๊ณผ ์˜๊ตฌ ๋ฐ์ดํ„ฐยท๋ฐฑ์—…ยทTerraform ์ƒํƒœ ๋ณด๊ด€ ๋Œ€์ƒ์„ ๋ถ„๋ฆฌํ•˜๊ณ , ์‹ค์ œ ์ข…๋ฃŒ ์ ˆ์ฐจ๋Š” ๊ตฌ์ถ• ํ›„ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.

  • ์˜จํ”„๋ ˆ๋ฏธ์Šค VM์€ Terraform ๋Œ€์ƒ์ด ์•„๋‹ˆ๋ฉฐ, ์„ค์น˜ ์ ˆ์ฐจ๋ฅผ ๋ฌธ์„œ์™€ ์Šคํฌ๋ฆฝํŠธ๋กœ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์•ฑ ๋ฐฐํฌ๋Š” 5์ฃผ์ฐจ๋ถ€ํ„ฐ ์˜จํ”„๋ ˆ๋ฏธ์Šค์™€ EKS๊ฐ€ ๊ฐ™์€ Helm ์ฐจํŠธ๋ฅผ values ํŒŒ์ผ๋งŒ ๋ฐ”๊ฟ” ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋‹ˆํ„ฐ๋ง

ํด๋ผ์šฐ๋“œ ์ธก ๊ด€์ฐฐ ๋Œ€์ƒ์€ ALB ์ •์ƒ ๋Œ€์ƒยท์‘๋‹ต ์˜ค๋ฅ˜, ๋…ธ๋“œยทํŒŒ๋“œ ์ƒํƒœ, DB ์—ฐ๊ฒฐยท์žฅ์•  ์ „ํ™˜, Redis ๋ณต์ œยทํ ๊ธธ์ด, APIยท์›Œ์ปค ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค. ๋„๊ตฌยท๋Œ€์‹œ๋ณด๋“œยท์•Œ๋ฆผ ๊ตฌ์„ฑ์€ ์˜จํ”„๋ ˆ๋ฏธ์Šค ๋ฐ ๋ฐฑ์—”๋“œ ๋‹ด๋‹น๊ณผ ํ˜‘์˜ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

์˜จํ”„๋ ˆ๋ฏธ์Šค (develop)

  • 4์ฃผ์ฐจ๋ถ€ํ„ฐ kube-prometheus-stack(Prometheus + Grafana)์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ด€์ฐฐ ๋Œ€์ƒ: ๋…ธ๋“œยทํŒŒ๋“œ ์ž์›, ์•ฑ ๋ฉ”ํŠธ๋ฆญ(/actuator/prometheus, ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€ ์ˆ˜์ง‘), ์‘๋‹ต ์‹œ๊ฐ„ยท5xx ์—๋Ÿฌ์œจ, ์บ์‹œ ์ ์ค‘๋ฅ , ๋Œ€๊ธฐ์—ด ๊ธธ์ด, ๋ฐฑ์—… ์„ฑ๊ณต ์—ฌ๋ถ€.
  • ํด๋ผ์šฐ๋“œ์™€ ๊ฐ™์€ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ์“ธ ์ˆ˜ ์žˆ๋„๋ก ์ง€ํ‘œ ์ด๋ฆ„๊ณผ ํŒจ๋„ ๊ตฌ์„ฑ์„ ๊ณต์œ ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ํ˜‘์˜ํ•ฉ๋‹ˆ๋‹ค.

์‹ค์ธก ๊ฒ€์ฆ ๊ฒฐ๊ณผ ์š”์•ฝ

์•„์ง ๊ตฌ์ถ• ์ „์ด๋ฏ€๋กœ ์‹ค์ธก๊ฐ’์ด ์—†์Šต๋‹ˆ๋‹ค. 4์ฃผ์ฐจ ๊ธฐ์ค€๊ฐ’ ๋ฐ 6์ฃผ์ฐจ ๊ฐœ์„  ๊ฒฐ๊ณผ๋ฅผ ์ธก์ • ํ›„ ๊ธฐ์ž…ํ•ฉ๋‹ˆ๋‹ค.

์‹œ๋‚˜๋ฆฌ์˜ค ๋ถ€ํ•˜ ์‹คํŒจ์œจ p95 ์‘๋‹ต์‹œ๊ฐ„
์ธก์ • ํ›„ ์ž‘์„ฑ ๋ฏธ์ธก์ • ๋ฏธ์ธก์ • ๋ฏธ์ธก์ •

์˜ˆ์ • ๊ฒ€์ฆ: A/B ์•ฑ ๋ถ„์‚ฐ, AZ ํ•œ์ชฝ ์•ฑ ์ค‘๋‹จ ์‹œ ALBยท์ž”์—ฌ ์•ฑ์˜ ์™ธ๋ถ€ ํ†ต์‹ , RDSยทRedis ์žฅ์•  ์ „ํ™˜ ํ›„ ์žฌ์—ฐ๊ฒฐ, ๋ฐฑ์—… ๋ณต์›, HPAยทKEDA ํ™•์žฅ. ์ƒ์„ธ ์ ˆ์ฐจ๋Š” ์žฅ์•  ์‹œ๋‚˜๋ฆฌ์˜คยท์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ ๋ฌธ์„œ์—์„œ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์˜จํ”„๋ ˆ๋ฏธ์Šค ์˜ˆ์ • ๊ฒ€์ฆ: ์›Œ์ปค ๋…ธ๋“œ ๋‹ค์šด ์‹œ ํŒŒ๋“œ ์žฌ๋ฐฐ์น˜, etcd ์Šค๋ƒ…์ƒท ๋ณต๊ตฌ, MySQL ๋ฐฑ์—… ๋ณต์›, ์˜จํ”„๋ ˆ๋ฏธ์Šค์™€ ํด๋ผ์šฐ๋“œ ๋ณต๊ตฌ ์‹œ๊ฐ„ ๋น„๊ต.

์•Œ๋ ค์ง„ ํ•œ๊ณ„

  • ํŒ€ ๊ฒ€ํ†  ์ „ ์„ค๊ณ„์•ˆ์ด๋ฉฐ ์‹ค์ œ ๊ณ„์ •ยท๋ฆฌ์ „ยท๋ฒ„์ „ยท์„œ๋ฒ„ ํฌ๊ธฐยท์—ฐ๊ฒฐ ์ƒ์„ธ๋Š” ๋ฏธ์ •์ž…๋‹ˆ๋‹ค.
  • 4์ฃผ์ฐจ kubeadm ์ œ์–ด ๋…ธ๋“œ 1๋Œ€๋Š” ๋‹จ์ผ ์žฅ์•  ์ง€์ ์ž…๋‹ˆ๋‹ค. NATยท๋ฐ์ดํ„ฐ ์ด์ค‘ํ™”๋งŒ์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐ ์ „์ฒด ๊ณ ๊ฐ€์šฉ์„ฑ์ด ์™„์„ฑ๋˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.
  • AZ ์žฅ์•  ์‹œ ๋‚จ์€ ์•ฑ ์šฉ๋Ÿ‰๊ณผ ์žฌ์—ฐ๊ฒฐ ๋™์ž‘์„ ๊ฒ€์ฆํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์žฅ์•  ์ „ํ™˜ ์ค‘ ์ผ์‹œ ์ค‘๋‹จ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • Redis ๋ณต์ œ๋Š” ๋น„๋™๊ธฐ์ด๋ฏ€๋กœ ์ž‘์—… ์œ ์‹คยท์ค‘๋ณต ์ฒ˜๋ฆฌ ๋ฐฉ์ง€ ์„ค๊ณ„๊ฐ€ ๋ณ„๋„๋กœ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • ์ด ๋ฌธ์„œ๋Š” ํด๋ผ์šฐ๋“œ ์„ค๊ณ„ ์ค‘์‹ฌ์ด๋ฉฐ ์˜จํ”„๋ ˆ๋ฏธ์Šค ์ƒ์„ธยท์•ฑ ์ธ์ฆยทํ™”๋ฉด ์„ค๊ณ„๋Š” ๊ฐ ๋‹ด๋‹น์ด ๋ณด์™„ํ•ฉ๋‹ˆ๋‹ค.
  • ์˜จํ”„๋ ˆ๋ฏธ์Šค control plane๋„ 1๋Œ€๋ผ ๋‹จ์ผ ์žฅ์•  ์ง€์ ์ž…๋‹ˆ๋‹ค. control plane ์žฅ์•  ์‹œ ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ๊ฐ€ ๋ฉˆ์ถ”์ง€๋งŒ ์‹คํ–‰ ์ค‘์ธ ํŒŒ๋“œ๋Š” ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.
  • ์˜จํ”„๋ ˆ๋ฏธ์Šค๋Š” ๋…ธํŠธ๋ถ 1๋Œ€์—์„œ ์‹คํ–‰๋˜๋ฏ€๋กœ, ๋…ธํŠธ๋ถ์ด ๊บผ์ง€๊ฑฐ๋‚˜ ์ ˆ์ „์— ๋“ค์–ด๊ฐ€๋ฉด ๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ self-hosted runner๊ฐ€ ํ•จ๊ป˜ ๋ฉˆ์ถฅ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ๋Š” ์ „์› ์—ฐ๊ฒฐ ์‹œ ์ ˆ์ „์„ ํ•ด์ œํ•ด ์šด์˜ํ•ฉ๋‹ˆ๋‹ค.
  • ์˜จํ”„๋ ˆ๋ฏธ์Šค์—๋Š” ํด๋ผ์šฐ๋“œ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๊ฐ€ ์—†์–ด Ingress๋ฅผ NodePort๋กœ ๋…ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
  • ์˜จํ”„๋ ˆ๋ฏธ์Šค๋Š” HTTP๋กœ ์„œ๋น„์Šคํ•˜๋ฏ€๋กœ ์šด์˜๊ณผ ์ฟ ํ‚ค ๋ณด์•ˆ ์„ค์ •(COOKIE_SECURE)์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

์ฐธ๊ณ  ์ž๋ฃŒ

๊ณ„์ • ์„ค์ •ยท๋„คํŠธ์›Œํฌ ์‹คํ–‰ ์ ˆ์ฐจ ๋ฐ ์ง„ํ–‰ ์ƒํƒœ๋Š” ๊ณ„์ • ๋ณด์•ˆยท์˜ˆ์‚ฐ ์ด์Šˆ #26๊ณผ ๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑ ์ด์Šˆ #27์—์„œ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.