๐Ÿ“ˆ ์„œ๋น„์Šค ์†Œ๊ฐœ

10๋งŒ๊ฑด์˜ ๋™์‹œ ์ฃผ๋ฌธ๋„ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅํ•œ ๋ชจ์˜ ์ฃผ์‹ ํˆฌ์ž ์„œ๋น„์Šค

10๋งŒ๊ฑด์˜ ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ: ํ‰๊ท  ์‘๋‹ต ์‹œ๊ฐ„ 100ms, TPS 894.2/s



10๋งŒ๊ฑด์˜ ๋™์‹œ ์ฃผ๋ฌธ์‹œ์—๋„ ์ฒด๊ฒฐ์ด ์ง„ํ–‰๋˜๋Š” ๋ชจ์Šต

๐ŸŽฏ ์„œ๋น„์Šค์˜ ๋ชฉํ‘œ

  • ์ฒ˜์Œ ํ•ด๋ณด๋Š” ์œ ์ €๋“ค๋„ ์‰ฝ๊ฒŒ ์ฐธ์—ฌ๊ฐ€ ๊ฐ€๋Šฅํ•œ ๋ชจ์˜ ์ฃผ์‹ ํˆฌ์ž ์„œ๋น„์Šค
  • ๋Œ€์šฉ๋Ÿ‰ ํŠธ๋ž˜ํ”ฝ์—์„œ๋„ ์•ˆ์ „ํ•˜๊ฒŒ ์ฒด๊ฒฐ์ด ์ง„ํ–‰๋˜๋Š” ์„œ๋ฒ„
  • ์ฃผ๋ฌธ์˜ ์ˆœ์„œ๊ฐ€ ๋ณด์žฅ๋˜๋Š” ๋ฉ”์‹œ์ง€ ์ฒด๊ฒฐ(๋™์‹œ์„ฑ ์ œ์–ด)
  • ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง์œผ๋กœ ์„œ๋ฒ„์˜ ์ƒํƒœ ํ™•์ธ ๋ฐ ์„œ๋ฒ„ ์ด์ƒ ์‹œ ์Šฌ๋ž™์œผ๋กœ ์•Œ๋žŒ

๐Ÿ–‡๏ธ ํ”„๋กœ์ ํŠธ ๋งํฌ

๊ตฌ๋ถ„ ๋งํฌ
์Šคํ†กํ‚น ๋กœ๊ณ  STOCKING
FE Github ์•„์ด์ฝ˜ FE Github
BE Github ์•„์ด์ฝ˜ BE Github
๋…ธ์…˜ ์•„์ด์ฝ˜ ๋ธŒ๋กœ์Šˆ์–ด
์œ ํŠœ๋ธŒ ์•„์ด์ฝ˜ ๋ฐœํ‘œ ์˜์ƒ
์œ ํŠœ๋ธŒ ์•„์ด์ฝ˜ ์†Œ๊ฐœ ์˜์ƒ

๐Ÿ“š๊ธฐ์ˆ  ์Šคํƒ ์ •๋ฆฌ






๐Ÿชถ ์ฃผ์š” ๊ธฐ๋Šฅ

๐Ÿ“Œ๋กœ๊ทธ์ธ & ํšŒ์›๊ฐ€์ž…
  • ๋กœ์ปฌ ํšŒ์›๊ฐ€์ž… ๊ฐ€๋Šฅ ๋ฐ ์นด์นด์˜ค, ๋„ค์ด๋ฒ„, ๊ตฌ๊ธ€์˜ ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ฐ€๋Šฅ
  • redis๋ฅผ ํ™œ์šฉํ•ด ์„ธ์…˜ ์ €์žฅ
  • ์ค‘๋ณต๋กœ๊ทธ์ธ์‹œ ์›น ์†Œ์ผ“์„ ์‚ฌ์šฉํ•ด ๋กœ๊ทธ์•„์›ƒ ๋ฉ๋‹ˆ๋‹ค ๋ผ๋Š” ๋ฉ”์„ธ์ง€ ์ „์†ก ํ›„ ์„ธ์…˜ ์‚ญ์ œ
๐Ÿ“Œ๊ฒŒ์ž„ ์‹œ์Šคํ…œ
  • 12๋ถ„ ๋งˆ๋‹ค ๊ฒŒ์ž„ ์‹œ์ž‘ ๊ฒŒ์ž„์˜ ์‹œ์ž‘์€ ์ฑ„ํŒ…์—์„œ ์•Œ๋ ค์ฃผ๋ฉฐ ๊ฐ์ข… ์ด๋ฒคํŠธ์˜ ์ •๋ณด๋ฅผ ๋ณด์—ฌ์คŒ
  • ์ด๋ฒคํŠธ๊ฐ€ ํ˜ธ์žฌ์ธ์ง€ ์•…์žฌ์ธ์ง€์— ๋”ฐ๋ผ ๋”๋ฏธ์˜ ์ฃผ๋ฌธ์ด ๋‹ฌ๋ผ์ง โ†’ ๋ณด๋‹ค ์‹ค๊ฐ๋‚˜๋Š” ๋ชจ์˜ ์ฃผ์‹์ด ๊ฐ€๋Šฅ
  • ์‹œ์žฅ๊ฐ€/์ง€์ •๊ฐ€, ๋งค์ˆ˜/๋งค๋„ ์ฃผ๋ฌธ์˜ ์ƒ์„ฑ ๋ฐ ์ฃผ๋ฌธ ์ •์ •, ์‚ญ์ œ ๊ฐ€๋Šฅ
  • ์ข…๋ชฉ๋ณ„/ ๋งค์ˆ˜/๋งค๋„, ์ตœ์‹ ์ˆœ/ ์˜ค๋ž˜๋œ์ˆœ๊ณผ ๊ฐ™์ด ์›ํ•˜๋Š” ์กฐ๊ฑด์œผ๋กœ ์ฃผ๋ฌธ ์กฐํšŒ ๊ฐ€๋Šฅ
  • ์ฐจํŠธ์™€ ํ˜ธ๊ฐ€์ฐฝ์„ ์ด์šฉํ•ด ์‹œ๊ฐ์ ์œผ๋กœ ์ฃผ์‹์˜ ํ๋ฆ„ ํŒŒ์•…๊ฐ€๋Šฅ
  • ๊ฒŒ์ž„์ด ์ง„ํ–‰๋˜๋Š” ๋™์•ˆ ๊ฐ€์žฅ ๋งŽ์€ ์ˆ˜์ต๋ฅ ์„ ๋‚ธ ์‚ฌ๋žŒ์ด ์šฐ์Šน
๐Ÿ“Œ๋žญํฌ ์‹œ์Šคํ…œ
  • ๊ฒŒ์ž„์—์„œ์˜ ์ˆ˜์ต๋ฅ ์— ๋”ฐ๋ผ ์ˆœ์œ„๊ฐ€ ๊ณต์ง€
  • ์ˆ˜์ต๋ฅ ์— ๋”ฐ๋ผ MMR ์ ์ˆ˜๊ฐ€ ์˜ฌ๋ผ๊ฐ€๊ณ  MMR์— ๋”ฐ๋ผ ํ‹ฐ์–ด๊ฐ€ ๋ณ€๋™
๐Ÿ“Œ์ฑ„ํŒ… ์‹œ์Šคํ…œ
  • ๋ฉ”์ธํŽ˜์ด์ง€, ํšŒ์‚ฌ ํŽ˜์ด์ง€, ์ฃผ๋ฌธํŽ˜์ด์ง€์— ์ฑ„ํŒ…์ฐฝ ์กด์žฌ
  • ๊ฐ ์‚ฌ์šฉ์ž๋“ค์˜ ์ฑ„ํŒ… ๋ฟ๋งŒ์ด ์•„๋‹ˆ๋ผ ๊ฒŒ์ž„์˜ ์‹œ์ž‘๊ณผ ์ข…๋ฃŒ, ๊ฐ์ข… ์ด๋ฒคํŠธ๋“ค์ด ์ˆ˜์‹ ๋จ
  • ์ฒด๊ฒฐ ์„ฑ๊ณต ๋ฐ ์‹คํŒจ ์—ฌ๋ถ€๋ฅผ ์ฑ„ํŒ…์œผ๋กœ ์ „๋‹ฌ

๐Ÿ™‹๐Ÿป ํŒ€์› ์†Œ๊ฐœ

์—ญํ•  ์ด๋ฆ„ ๋‹ด๋‹น Email GitHub
ํŒ€์žฅ ์ •์†Œ์ด BE/FE writer__soi@naver.com soijeongg
ํŒ€์› ์กฐ์„ฑํ˜„ BE/FE cshcho99@gmail.com jovid18
ํŒ€์› ์ตœ์ค€ํ˜ BE/FE jhmhmami@naver.com norwegianwood97
ํŒ€์› ์œคํ˜•์‹ BE/FE fly010905@gmail.com nyeongsik13

๐Ÿ“œ๊ฐœ๋ฐœ ๊ธฐํš ๋ฐ ์ง„ํ–‰

โœ๐Ÿป๊ธฐํš

todoist ์‚ฌ์ „ ํšŒ์˜

todoist USER FLOW

todoist ERD

todoist WIRE FRAME

todoist SEQUENCE DIAGRAM

todoist ์„œ๋ฒ„ ๋ฒ„์ „ ๊ด€๋ฆฌ

๐Ÿ““ ์ง„ํ–‰

todoist TO-DO LIST

todoist ํ”„๋ก ํŠธ ํŽ˜์ด์ง€ ์ •๋ฆฌ

todoist ๋ฐฑ์—”๋“œ API ์ •๋ฆฌ

todoist ์Šค์ผ€์ฅด๋ง ํ•จ์ˆ˜ ์ •๋ฆฌ

todoist .env ์ •๋ฆฌ

todoist ๋ฉ”์‹œ์ง€ ํ ์ •๋ฆฌ

todoist ๋ถ€ํ•˜ํ…Œ์ŠคํŠธ&๋ชจ๋‹ˆํ„ฐ๋ง

๐Ÿงญ ์„œ๋น„์Šค ์•„ํ‚คํ…์ณ

serivce

โœ”๏ธ ๊ธฐ์ˆ ์  ์˜์‚ฌ ๊ฒฐ์ •

์‚ฌ์šฉ ๊ธฐ์ˆ  ๊ธฐ์ˆ  ์„ค๋ช…
Node.JS JavaScript๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฐ€์žฅ ๋Œ€์ค‘์ ์ธ ํ”„๋ ˆ์ž„์›Œํฌ์ธ Node.JS๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
MySQL MySQL์€ ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์†”๋ฃจ์…˜์„ ๋ฌด๋ฃŒ๋กœ ๊ฐœ๋ฐœํ•˜๊ณ  ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ACID ๊ทœ์•ฝ์„ ์ค€์ˆ˜ํ•ด ๋†’์€ ์‹ ๋ขฐ์„ฑ๊ณผ ์•ˆ์ •์„ฑ์„ ๋ณด์žฅํ•˜๊ณ , ๋˜ํ•œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋น ๋ฅธ ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ ์†๋„ ๋“ฑ ๋งŽ์€ ์žฅ์ ์„ ๊ฐ€์ ธ์„œ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.
Redis Redis๋Š” ์ธ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์†๋„๊ฐ€ ๋””์Šคํฌ ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋ฆฌ์†Œ์Šค ์†Œ๋ชจ์™€ DB ์„œ๋ฒ„์˜ ๋ถ€ํ•˜๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ฃผ๋ฌธ ์ฒ˜๋ฆฌ ์†๋„๋ฅผ ๋Œ€ํญ ๊ฐœ์„ ํ•˜๊ณ  ์ „๋ฐ˜์ ์ธ ์‹œ์Šคํ…œ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
Session vs JWT ์„ธ์…˜์˜ ๊ฒฝ์šฐ์—๋Š” ๋ชจ๋“  ์ธ์ฆ ์ •๋ณด๋ฅผ ์„ธ์…˜์—์„œ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณด์•ˆ ์ธก๋ฉด์—์„œ ์œ ๋ฆฌํ•˜๊ณ , ๋งŒ์•ฝ ์„ธ์…˜์ด ํƒˆ์ทจ๊ฐ€ ๋˜์–ด๋„ ์„œ๋ฒ„์—์„œ ํ•ด๋‹น ์„ธ์…˜์„ ๋ฌดํšจํ™”ํ•˜๋ฉด ๋˜์ง€๋งŒ ํ† ํฐ์—๋Š” ์ •๋ณด๊ฐ€ ๋‹ค ๋“ค์–ด์žˆ์–ด์„œ ํ•ด๋‹น ํ† ํฐ์„ ๋ฌดํšจํ™”ํ•˜๋”๋ผ๋„ ์ •๋ณด ์œ ์ถœ์„ ๋ง‰์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด์— ๋”ฐ๋ผ ๋ณด์•ˆ์„ฑ์ด ๋” ๋›ฐ์–ด๋‚œ ์„ธ์…˜์„ ์“ฐ๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
PRISMA ํ”„๋ฆฌ์ฆˆ๋งˆ๋Š” ๊ฐ„๋‹จํ•œ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ORM์ด๋ฉฐ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์ง€์›ํ•˜์—ฌ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.
ioredis vs redis ioredis ํŒจํ‚ค์ง€๋Š” redis ํŒจํ‚ค์ง€์— ๋น„ํ•ด ๋Œ€๊ทœ๋ชจ ๋ฐ ๋ณต์žกํ•œ ํ™˜๊ฒฝ์—์„œ ๋” ๋งŽ์€ ๊ธฐ๋Šฅ๊ณผ ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•˜์—ฌ ์ฑ„ํƒํ•˜์˜€์Šต๋‹ˆ๋‹ค.
passport Passport๋Š” ๋‹ค์–‘ํ•œ ์ธ์ฆ ์ „๋žต์„ ์ง€์›ํ•˜์—ฌ ๋กœ์ปฌ ๋กœ๊ทธ์ธ ์™ธ์—๋„ Google, Kakao ๋“ฑ ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ์˜ ์ธ์ฆ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ณต์žกํ•œ ์ธ์ฆ ๋กœ์ง์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์–ด ๊ฐœ๋ฐœ ํŽธ์˜์„ฑ๊ณผ ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„์„ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
Argon2 vs bcrypt Argon2๋Š” bcrypt ๋ณด๋‹ค ์ตœ๊ทผ์— ๊ฐœ๋ฐœ๋˜์—ˆ๊ณ , ํ˜„์žฌ๊นŒ์ง€ ๊ฐœ๋ฐœ๋œ ์•”ํ˜ธํ™” ํ•จ์ˆ˜ ์ค‘ ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•œ ๋ณด์•ˆ์„ฑ์„ ์ œ๊ณตํ•˜์—ฌ Argon2๋ฅผ ์ฑ„ํƒํ•˜์˜€์Šต๋‹ˆ๋‹ค.
WebSocket vs socket.io Socket.io์— ๋น„ํ•ด ์ƒ๋Œ€์ ์œผ๋กœ ๊ฒฝ๋Ÿ‰ํ™”๋˜์–ด์žˆ๋Š” WebSocket์„ ์„ ํƒํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ์™€ CPU์˜ ์‚ฌ์šฉ์„ ์ค„์˜€์Šต๋‹ˆ๋‹ค.
Jest Jest๋Š” ์„ค์ •์ด ๊ฐ„ํŽธํ•˜๊ณ , ์‹คํ–‰ ์†๋„๊ฐ€ ๋น ๋ฅด๋ฉฐ ์Šค๋ƒ…์ƒท ํ…Œ์ŠคํŒ…์„ ํ†ตํ•ด ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์‰ฝ๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์™€ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ์— ์ ํ•ฉํ•œ ๋‹ค์–‘ํ•œ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ด ํŽธ๋ฆฌํ•˜์—ฌ ํ…Œ์ŠคํŠธ ํŒจํ‚ค์ง€๋กœ jest๋ฅผ ์ฑ„ํƒํ•˜์˜€์Šต๋‹ˆ๋‹ค.
Vercel React ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์†์‰ฝ๊ฒŒ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ์ ํ™”๋œ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•˜๋ฉฐ GitHub์™€ ๊ฐ™์ด ์†Œ์Šค ์ฝ”๋“œ ์ €์žฅ์†Œ์™€ ํ†ตํ•ฉ์„ ํ†ตํ•ด ์ฝ”๋“œ ์ปค๋ฐ‹์ด ์ด๋Ÿฌ์–ด์งˆ ๋•Œ๋งˆ๋‹ค ์ž๋™์œผ๋กœ ๋นŒ๋“œ์™€ ๋ฐฐํฌ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ์— ๋ฐฐํฌ ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•œ ๊ด€๋ฆฌ ๋ถ€๋‹ด์„ ์ค„์ด๊ณ , ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์‹ ์†ํ•˜๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ์–ด ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
Github Actions GitHub Actions๋Š” ์‚ฌ์šฉ์ด ์‰ฝ๊ณ  ๋ณต์žกํ•œ ์ ˆ์ฐจ ์—†์ด GitHub๊ณผ ์›ํ™œํ•˜๊ฒŒ ํ†ตํ•ฉ๋  ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ๋ฐฐํฌ ๊ณผ์ •์— ๋„์›€์ด ๋˜๋Š” ๋‹ค์–‘ํ•œ ํ…œํ”Œ๋ฆฟ์„ ์ œ๊ณตํ•˜์—ฌ ํšจ์œจ์ ์ธ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์–ด ๋ฐฐํฌ์— Github Actions๋ฅผ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.
prettier/eslint ๊ฐ์ž ์ž‘์„ฑํ•œ ์ฝ”๋“œ์˜ ์Šคํƒ€์ผ์„ ์ผ์น˜์‹œํ‚ค๊ธฐ ์œ„ํ•ด prettier๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ธ๋ฏธ์ฝœ๋ก , ์ค„ ๋ฐ”๊ฟˆ๊ณผ ๊ด€๋ จํ•˜์—ฌ ์ž๋™์œผ๋กœ ์กฐ์ •ํ•˜๊ณ ์ž ํ•˜์˜€๊ณ , ESLint๋ฅผ ์ด์šฉํ•ด prettier์˜ ์Šคํƒ€์ผ์— ๋งž๊ฒŒ ์ฝ”๋“œ ์Šคํƒ€์ผ์„ ์ผ์น˜์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.
ALB ALB๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ์—ฌ๋Ÿฌ ์„œ๋ฒ„์— ๊ฑธ์ณ ํŠธ๋ž˜ํ”ฝ์„ ํšจ๊ณผ์ ์œผ๋กœ ๋ถ„์‚ฐ์‹œํ‚ฌ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๊ฐ ์„œ๋ฒ„์˜ ๊ณผ๋ถ€ํ•˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ  ์„œ๋ฒ„๊ฐ„ ํŠธ๋ž˜ํ”ฝ์ด ๊ณ ๋ฅด๊ฒŒ ๋ถ„์‚ฐ๋˜๋ฉด์„œ ๊ฐ ์„œ๋ฒ„์˜ ๋ถ€ํ•˜๊ฐ€ ๊ฒฝ๊ฐ๋ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ, ์ด๋Š” ๊ฐ ์„œ๋ฒ„์—์„œ ๋” ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์ธ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜์—ฌ ์ตœ์ข… ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์–ด ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.
Docker Docker๋Š” ์ปจํ…Œ์ด๋„ˆํ™” ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹คํ–‰ ํ™˜๊ฒฝ์„ ๊ฒฉ๋ฆฌํ•˜๋ฏ€๋กœ, Amazon EC2 ์ธ์Šคํ„ด์Šค ๋‚ด์—์„œ ์ง์ ‘ ์„œ๋ฒ„๋ฅผ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ๊ณผ ๋น„๊ตํ•ด ๋” ๋†’์€ ํ™˜๊ฒฝ์˜ ์ผ๊ด€์„ฑ๊ณผ ์ด์‹์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ Docker๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด CD ๊ณผ์ •์—์„œ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๊ณ ,์ด๋ฅผ ๋ฐฐํฌํ•˜๋Š” ๊ณผ์ •์ด ์ผ๊ด€๋˜๊ฒŒ ์ด๋ฃจ์–ด์ง€๋ฏ€๋กœ, ๋” ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์ธ ๋ฐฐํฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
ECR vs Docker Hub CD๋ฅผ ํ†ตํ•ด ๋ฐฐํฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ž๋™ํ™”ํ•˜๋Š” ๊ณผ์ •์—์„œ ๊นƒ ์•ก์…˜์„ ํ†ตํ•ด ์ด๋ฏธ์ง€๋ฅผ ๊ธฐ์กด์—๋Š” ๋„์ปค ํ—ˆ๋ธŒ์— ์˜ฌ๋ ธ์œผ๋‚˜ ๋ณด์•ˆ์ด ์šฐ๋ ค๋˜์–ด ์ด๋ฏธ์ง€ ์ €์žฅ์†Œ๋ฅผ AWS์˜ ECR๋กœ ๋ณ€๊ฒฝํ•˜์˜€์Šต๋‹ˆ๋‹ค.
ECS ECS๋Š” ์†์‰ฝ๊ฒŒ ECR์˜ ์ด๋ฏธ์ง€๋ฅผ ์ด์šฉํ•˜์—ฌ ECS ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ด์ฃผ๋Š” ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ์„œ๋น„์Šค๋กœ ๋Ÿฌ๋‹์ปค๋ธŒ๊ฐ€ ๋‚ฎ๊ณ , ์˜คํ† ์Šค์ผ€์ผ๋ง ๋ฐ ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ๊ฐ€ ์ง€์›๋˜๊ธฐ ๋•Œ๋ฌธ์— ECS๋ฅผ ์ฑ„ํƒํ•˜์˜€์Šต๋‹ˆ๋‹ค.
Kafka vs Redis-Streams ์‚ฌ์šฉ์ž์˜ ์ฃผ๋ฌธ์— ๋Œ€ํ•ด ์ˆœ์„œ๋ฅผ ์ง€ํ‚ค๋ฉฐ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ”์‹œ์ง€ํ ํ†ต์‹ ์„ ์„ ํƒํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ด์— ๋”ฐ๋ผ Kafka์™€ Redis-Streams์˜ ์‚ฌ์šฉ์„ ๊ณ ๋ฏผํ•˜๊ณ  Kafka๊ฐ€ ํ™•์žฅ์„ฑ์ด ๋†’๊ณ  ๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ ์ตœ์ ํ™” ๋˜์–ด ์žˆ์–ด Kafka๋ฅผ ์ฑ„ํƒํ•˜์—ฌ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
Jmeter Jmeter๋Š” ์˜คํ”ˆ์†Œ์Šค์ด๋ฉฐ, csv์™€ ๋‹ค์–‘ํ•œ ํ…Œ์ŠคํŠธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•ด ํ…Œ์ŠคํŠธ ์ž‘์—…์„ ๊ฐ„์†Œํ™” ํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋งŽ์€ ๋ ˆํผ๋Ÿฐ์Šค๊ฐ€ ์กด์žฌํ•ด ์†์‰ฝ๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— Jmeter๋ฅผ ์ฒดํƒํ•ด ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ์— ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
node-exporter node-exporter๋Š” ์„œ๋ฒ„ ์ˆ˜์ค€์—์„œ ์‹œ์Šคํ…œ์˜ ์ƒํƒœ๋ฅผ ์ˆ˜์ง‘ํ•ฉ๋‹ˆ๋‹ค node-exporter๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ง์ ‘ ๋งคํŠธ๋ฆญ์„ ์ˆ˜์ง‘ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์“ฐ์ง€ ์•Š๊ณ ๋„ ๊ฐ„ํŽธํ•˜๊ฒŒ ์‹œ์Šคํ…œ์˜ ๋งคํŠธ๋ฆญ์„ ์ˆ˜์ง‘ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— node-exporter๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
Prometheus ํ”„๋กœ๋ฉ”ํ…Œ์šฐ์Šค๋Š” ์˜คํ”ˆ์†Œ์Šค ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๊ฒฝ๊ณ  ๋„๊ตฌ๋กœ, ์‹œ์Šคํ…œ๊ณผ ์„œ๋น„์Šค์˜ ์ƒํƒœ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ๋ฉ”ํ…Œ์šฐ์Šค๋Š” ์‹œ์Šคํ…œ์˜ ์„ฑ๋Šฅ ์ง€ํ‘œ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ˆ˜์ง‘ํ•˜๊ณ  ๋น„์นจํˆฌ์ ์ธ ๋ชจ๋‹ˆํ„ฐ๋งํ†ตํ•ด ์„œ๋น„์Šค๊ฐ€ ๋ชจ๋‹ˆํ„ฐ๋ง ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์„ฑ๋Šฅ ์ €ํ•˜๋‚˜ ์ค‘๋‹จ ์—†์ด ์ง€์†์ ์œผ๋กœ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์žฅ์  ๋•Œ๋ฌธ์— Prometheus์„ ์„ ํƒํ•˜์—ฌ ์‹œ์Šคํ…œ๊ณผ ์„œ๋น„์Šค์˜ ์ƒํƒœ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
Grafana Grafana๋Š” ์˜คํ”ˆ์†Œ์Šค ๋ฐ์ดํ„ฐ์‹œ๊ฐํ™” ํˆด๋กœ์จ ๋‹ค์–‘ํ•œ ๊ทธ๋ž˜ํ”„, ์ง€์˜ค๋งต๋“ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์‹œ๊ฐํ™” ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋” ์ง๊ด€์ ์œผ๋กœ ์ดํ•ด ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ๊ณผ ์Šฌ๋ž™์ด๋‚˜ ๋ฉ”์ผ์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž์—๊ฒŒ ์•Œ๋ฆผ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ๋•Œ๋ฌธ์— ์ฒดํƒํ•ด ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ”Ž ์„ฑ๋Šฅ ๊ฐœ์„  ๊ฒฐ๊ณผ

๐Ÿ“• ์„œ๋ฒ„ ๋ฒ„์ „๋ณ„ ์š”์•ฝ

๐Ÿ“— ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง ๊ฒฐ๊ณผ

์œ ์ €์ˆ˜๋Š” ๋™์ผํ•˜๊ฒŒ 100๋ช…์œผ๋กœ ํ…Œ์ŠคํŠธํ•˜๊ณ , ๋ณธ ์„œ๋น„์Šค์˜ ํ•ต์‹ฌ์ธ ์ฃผ๋ฌธ ์š”์ฒญ์— ๋Œ€ํ•œ ๋ถ€ํ•˜๋ฅผ ๊ฒ€์ฆ
Jmeter๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ€์ƒ์˜ ์œ ์ €๊ฐ€ 1๋ฒˆ์˜ ํšŒ์›๊ฐ€์ž…โ†’ 1๋ฒˆ์˜ ๋กœ๊ทธ์ธโ†’ n๋ฒˆ์˜ ์ฃผ๋ฌธ โ†’ 1๋ฒˆ์˜ ๋กœ๊ทธ์•„์›ƒ์„ ์š”์ฒญํ•˜๋Š” ์ŠคํŒŒ์ดํฌ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰

100๋ช…์˜ ์œ ์ €๊ฐ€ 100๋ฒˆ์˜ ์ฃผ๋ฌธ ์š”์ฒญ


100๋ช…์˜ ์œ ์ €๊ฐ€ 200๋ฒˆ์˜ ์ฃผ๋ฌธ ์š”์ฒญ


100๋ช…์˜ ์œ ์ €๊ฐ€ 500๋ฒˆ์˜ ์ฃผ๋ฌธ ์š”์ฒญ

1๏ธโƒฃ TPS ๋ฐ ํ‰๊ท  ์‘๋‹ต ์‹œ๊ฐ„ ๊ฐœ์„ 

๐Ÿ†™ ์„ฑ๋Šฅ ๊ฐœ์„  ๊ฒฐ๊ณผ

  • TPS: 77.6/sโ†’590.3/s (660.7% ์ฆ๊ฐ€), ํ‰๊ท ์‘๋‹ต์‹œ๊ฐ„: 1211.3msโ†’177ms (85.39% ๊ฐ์†Œ) change

2๏ธโƒฃ ์ฃผ๋ฌธ ์ฒ˜๋ฆฌ ์†๋„ ๊ฐœ์„ 

  • STOCKING์˜ ์ฒด๊ฒฐ ๋กœ์ง: ์ฃผ๋ฌธ ์œ ํšจ์„ฑ ๊ฒ€์ฆ โ‡’ ์ฃผ๋ฌธ ์ƒ์„ฑ ๋ฐ ์‚ญ์ œ โ‡’ ์ฃผ๋ฌธ ๋งค์นญ โ‡’ ์ฃผ๋ฌธ ์ฒด๊ฒฐ
  • Ver 3.0์€ ์ฒด๊ฒฐ์„œ๋ฒ„( MySQL, ์ฃผ๋ฌธ ์œ ํšจ์„ฑ ๊ฒ€์ฆ โ‡’ ์ฃผ๋ฌธ ์ƒ์„ฑ ๋ฐ ์‚ญ์ œ โ‡’ ์ฃผ๋ฌธ ๋งค์นญ โ‡’ ์ฃผ๋ฌธ ์ฒด๊ฒฐ)
  • Ver 4.0์€ ๋งค์นญ์„œ๋ฒ„( Redis, ์ฃผ๋ฌธ ์œ ํšจ์„ฑ ๊ฒ€์ฆ โ‡’ ์ฃผ๋ฌธ ์ƒ์„ฑ ๋ฐ ์‚ญ์ œ โ‡’ ์ฃผ๋ฌธ ๋งค์นญ) , ์ฒด๊ฒฐ ์„œ๋ฒ„ (MySQL, ์ฃผ๋ฌธ ์ฒด๊ฒฐ)
  • ์ฆ‰, ver 3.0์˜ ์ฒด๊ฒฐ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์ฒด๊ฒฐ ๊ณผ์ •์˜ ์ผ๋ถ€๋ฅผ Redis๋ฅผ ์ด์šฉํ•˜๋Š” ๋งค์นญ ์„œ๋ฒ„๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์ฃผ๋ฌธ ์ฒ˜๋ฆฌ ์†๋„ ๊ฐœ์„ 

๐Ÿ†™ ์„ฑ๋Šฅ ๊ฐœ์„  ๊ฒฐ๊ณผ

  • ๋‹จ์ผ ์ฃผ๋ฌธ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„: 87.16msโ†’77.28ms (11.34% ๊ฐ์†Œ), 1๋งŒ๊ฑด์˜ ๋™์‹œ ์ฃผ๋ฌธ ์ด ์ฒ˜๋ฆฌ์‹œ๊ฐ„: 796sโ†’601s (24.5% ๊ฐ์†Œ)

โœ… ๋‹จ์ผ ์ฃผ๋ฌธ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„ ๋น„๊ต

only one

โœ… ๋™์‹œ ์ฃผ๋ฌธ 10000๊ฑด์˜ ์ด ์ฒ˜๋ฆฌ ์‹œ๊ฐ„ ๋น„๊ต

100000

โ—ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…(์„ฑ๋Šฅ ๊ฐœ์„ /๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ ์ฒ˜๋ฆฌ)

์‚ฌ์šฉ์ž์—๊ฒŒ ์ฃผ๋ฌธ์˜ ์ฒด๊ฒฐ ๊ฒฐ๊ณผ๋ฅผ ์‘๋‹ต์œผ๋กœ ์ „๋‹ฌํ•˜์—ฌ ๋Œ€๊ธฐ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ๊ธธ์–ด์ง€๋Š” ๋ฌธ์ œ (ver 0.0)

  • ๋ฌธ์ œ ์ƒํ™ฉ
    • ๊ธฐ์กด ์ฝ”๋“œ์˜ ๊ฒฝ์šฐ ์ฃผ๋ฌธ ์ฒ˜๋ฆฌ๋ฅผ ๋‹คํ•œ ๋’ค ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ์‘๋‹ตํ•˜๋Š” ๋ฐฉ์‹
    • 
      postOrder = async (req, res) => {
          const { userId } = res.locals.user;
          const orderData = req.body;
          if (orderData.price) {
              orderData.price = 10000 * Math.floor(+orderData.price / 10000);
          }
          try {
              const result = await this.orderService.createOrder(userId, orderData);
              return res.json({ message: result });
          } catch (error) {
              console.log(error.message);
              const { message } = error.message ? error : { message: '์ฃผ๋ฌธ ์ƒ์„ฑ ๋„์ค‘ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.' };
              if (error.message) return res.status(400).json({ message });
          }
      };
                          
    • ์ด๋กœ ์ธํ•ด ์‘๋‹ต์œผ๋กœ ์ธํ•œ ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ๊ฑธ๋ฆผ

  • ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•
    • ์ฃผ๋ฌธ ์ฒ˜๋ฆฌ๋ฅผ ๋Œ€๊ธฐํ•˜์ง€ ์•Š๊ณ , ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” ์ฃผ๋ฌธ ์ ‘์ˆ˜์— ๋Œ€ํ•œ ์„ฑ๊ณต/์‹คํŒจ ์—ฌ๋ถ€๋ฅผ ๋ฐ”๋กœ ์ „๋‹ฌ
    • ์ดํ›„ ์ฃผ๋ฌธ ์ฒ˜๋ฆฌ์˜ ๊ฒฐ๊ณผ๋Š” ์†Œ์ผ“ ์ฑ„ํŒ…์ฐฝ์œผ๋กœ ๊ณต์ง€

์‚ฌ์šฉ์ž๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•œ ์ฃผ๋ฌธ์„ ํ—ˆ์šฉํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค ๋‚ญ๋น„ (ver 0.0 โ‡’ ver 1.0)

  • ๋ฌธ์ œ ์ƒํ™ฉ
    • ๊ฐ€๋ น ์‚ฌ์šฉ์ž๊ฐ€ ํ˜„์žฌ ์ž”์•ก์ด 1000๋งŒ์›์ด ์žˆ๋Š” ์ƒํ™ฉ์—์„œ ํ˜„์žฌ๊ฐ€๋ณด๋‹ค ๋‚ฎ์€ ๊ฐ€๊ฒฉ์œผ๋กœ ์ง€์ •๊ฐ€ ๋งค์ˆ˜ 100๋งŒ์› ์ฃผ๋ฌธ์„ 20๋ฒˆ ์‹ ์ฒญํ•˜๋”๋ผ๋„ ์ด๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์—†์—ˆ์Œ
    • ์ด๋กœ ์ธํ•ด, ์ฒด๊ฒฐ๊ณผ์ •์—์„œ ํ˜„์žฌ ์‚ฌ์šฉ์ž๊ฐ€ ์ฒด๊ฒฐ ๋‹น์‹œ ํ˜„๊ธˆ ๋˜๋Š” ์ฃผ์‹์ด ์žˆ๋Š”์ง€ ์ฒดํฌ๋ฅผ ํ–ˆ์–ด์•ผ ํ–ˆ๊ณ  ์ด๋กœ ์ธํ•ด ๋ถˆํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๊ฐ€ ๋‚ญ๋น„

  • ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•
    • ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐ€์šฉ ๊ธˆ์•ก, ๊ฐ€์šฉ ์ฃผ์‹์„ ๋„์ž…ํ•˜์—ฌ ์•„์ง ์ฒด๊ฒฐ๋˜์ง€ ์•Š์€ ์ฃผ๋ฌธ์ด๋ผ๋„ ๊ฐ€์šฉ ๊ธˆ์•ก/๊ฐ€์šฉ ์ฃผ์‹์ด ๊ฐ์†Œํ•˜์—ฌ ์‚ฌ์šฉ์ž์˜ ํ˜„์žฌ ์ƒํ™ฉ์œผ๋กœ๋Š” ๋ถˆ๊ฐ€๋Šฅํ•œ ์ฃผ๋ฌธ์„ ๋ฐฉ์ง€
    • ERD์— tradableQuantity, tradableQuantity๋ฅผ ๋„์ž…ํ•˜๊ณ  ๊ทธ์— ๋งž๊ฒŒ ์ฒด๊ฒฐ ํ•จ์ˆ˜๋ฅผ ver 0.0์—์„œ ver 1.0์œผ๋กœ ๋ณ€๊ฒฝ

    • ์ฒด๊ฒฐํ•จ์ˆ˜ ver 0.0
      ์ฒด๊ฒฐํ•จ์ˆ˜ ver 1.0

๋ฉ”์ธ ์„œ๋ฒ„์—์„œ API ํ†ต์‹ ๊ณผ ์†Œ์ผ“ ํ†ต์‹  ๋‘˜ ๋‹ค ๋‹ด๋‹นํ•˜๋Š” ๋ฌธ์ œ (ver 1.0 โ‡’ver 2.0)

  • ๋ฌธ์ œ ์ƒํ™ฉ
    • ๋ฉ”์ธ ์„œ๋ฒ„์™€ ์†Œ์ผ“ ์„œ๋ฒ„๊ฐ€ ๊ฐ™์€ ์—ญํ• ์„ ๊ฒธํ•จ, ์ด๋Š” ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๊ฐ€ ์ ‘์†ํ•ด ์žˆ์„ ๋•Œ ๋ฉ”์ธ ์„œ๋ฒ„์˜ ๋ถ€ํ•˜๋ฅผ ํ‚ค์šฐ๊ฒŒ ๋จ

  • ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•
    • ๋ฉ”์ธ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์†Œ์ผ“ ์„œ๋ฒ„๋ฅผ ๋ถ„๋ฆฌํ•˜์˜€๊ณ , ALB๋ฅผ ์ด์šฉํ•ด ๋ฉ”์ธ ์„œ๋ฒ„๋กœ ๊ฐ€๋Š” ์š”์ฒญ(/api*)๊ณผ ์†Œ์ผ“ ์„œ๋ฒ„๋กœ ๊ฐ€๋Š” ์š”์ฒญ์„ (/ws*) ๊ฒฝ๋กœ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ… ์ฒ˜๋ฆฌ

    • ์„œ๋ฒ„ ๋ฒ„์ „ 1.0
      ์„œ๋ฒ„ ๋ฒ„์ „ 2.0
      ALB ์ ์šฉ

๋ฉ”์ธ ์„œ๋ฒ„์—์„œ API ํ†ต์‹ ๊ณผ ์ฒด๊ฒฐ์„ ๋™์‹œ์— ๋‹ด๋‹นํ•˜๋Š” ๋ฌธ์ œ (ver 2.0 โ‡’ ver 3.0)

  • ๋ฌธ์ œ ์ƒํ™ฉ
    • ver 2.0์—์„œ ์†Œ์ผ“ ์„œ๋ฒ„๋ฅผ ๋ถ„๋ฆฌํ•˜์˜€์œผ๋‚˜, ๋งŽ์€ ์ฒด๊ฒฐ์ด ๋ชฐ๋ ธ์„ ๋•Œ CPU์—์„œ API ์š”์ฒญ๊ณผ ๋ฉ”์ธ ์ฒ˜๋ฆฌ๋ฅผ ๋‘˜ ๋‹ค ๋‹ด๋‹นํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ

    • ver 0.0์—์„œ 100๋ช…์˜ ์œ ์ €๊ฐ€ 500๋ฒˆ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ์‹ค์ œ๋กœ 504,Gateway Time-out ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ์ œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•จ
      ver 0.0~ver 2.0 ๋ชจ๋‘ ์ „์ฒด์ ์œผ๋กœ ์‘๋‹ต ์‹œ๊ฐ„๊ณผ TPS๊ฐ€ ๋‚ฎ๊ฒŒ ๋‚˜์˜ด
      ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ ์ดํ›„ ๊ทธ๋ผํŒŒ๋‚˜๋ฅผ ์ด์šฉํ•œ ๋ชจ๋‹ˆํ„ฐ๋ง ๊ฒฐ๊ณผ CPU์— ๊ฐ€ํ•ด์ง€๋Š” ๋ถ€ํ•˜๊ฐ€ ๋ฌด์ฒ™ ํฐ ๊ฒƒ์„ ํ™•์ธ

  • ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•
    • ์นดํ”„์นด ๋ฉ”์‹œ์ง€ ํ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”์ธ ์„œ๋ฒ„์—์„œ ์ฒด๊ฒฐ์„ ์ง„ํ–‰ํ•˜์ง€ ์•Š๊ณ  ์ฃผ๋ฌธ์˜ ๋‚ด์šฉ์„ ์ง๋ ฌํ™” ํ•˜์—ฌ ๋ฉ”์‹œ์ง€๋กœ ์ „๋‹ฌ
    • ์ฒด๊ฒฐ ์„œ๋ฒ„์—์„œ๋Š” ํ•ด๋‹น ๋ฉ”์‹œ์ง€๋ฅผ ์—ญ์ง๋ ฌํ™” ํ•˜์—ฌ ์ฒด๊ฒฐ์„ ์ง„ํ–‰

    • ์„œ๋ฒ„ ๋ฒ„์ „ 2.0
      ์„œ๋ฒ„ ๋ฒ„์ „ 3.0
      ๋ฒ„์ „ 3.0 ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ TPS์™€ ํ‰๊ท  ์‘๋‹ต ์‹œ๊ฐ„์ด ํฌ๊ฒŒ ๊ฐœ์„ ๋œ ๊ฒƒ์„ ํ™•์ธ
      ๋ฒ„์ „ 3.0 ๋ชจ๋‹ˆํ„ฐ๋ง ๊ฒฐ๊ณผ CPU์˜ ๋ถ€ํ•˜๊ฐ€ ํฌ๊ฒŒ ๊ฐ์†Œํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธ

์ฃผ๋ฌธ ์ฒด๊ฒฐ ์ฒ˜๋ฆฌ์— ๋งŽ์€ ์‹œ๊ฐ„์„ ์†Œ๋ชจํ•˜๋Š” ๋ฌธ์ œ (ver 3.0 โ‡’ ver4.0)

  • ๋ฌธ์ œ ์ƒํ™ฉ
    • ์ฃผ๋ฌธ ์œ ํšจ์„ฑ ๊ฒ€์ฆ, ์ฃผ๋ฌธ ์ƒ์„ฑ ๋ฐ ์‚ญ์ œ, ์ฃผ๋ฌธ ๋งค์นญ, ์ฃผ๋ฌธ ์ฒด๊ฒฐ ์ฒ˜๋ฆฌ๋ฅผ ์ฒด๊ฒฐ ์„œ๋ฒ„์—์„œ ์ „๋ถ€ ๋‹ด๋‹น ์ฒด๊ฒฐ ํ•จ์ˆ˜ ver 1.0 ์•„๋ž˜์˜ ๊ณผ์ •์ด ๋ชจ๋‘ ํ•˜๋‚˜์˜ ์ฒด๊ฒฐ ์„œ๋ฒ„์—์„œ MySQL ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์ฒ˜๋ฆฌ

  • ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•
    • ๋งค์นญ ์„œ๋ฒ„์—์„œ Redis๋ฅผ ์ด์šฉํ•˜์—ฌ ์ฃผ๋ฌธ ์œ ํšจ์„ฑ ๊ฒ€์ฆ ๋ฐ ๋งค์นญ ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๊ณ  , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ”์‹œ์ง€ํ๋กœ ์ฒด๊ฒฐ์„œ๋ฒ„์— ์ „๋‹ฌ ์ฒด๊ฒฐ ์„œ๋ฒ„์—์„œ ๋ฐ›์•„ MySQL์„ ์ด์šฉํ•˜์—ฌ ์ฃผ๋ฌธ์„ ์ฒด๊ฒฐ
    • ์˜ˆ์ƒ ํšจ๊ณผ
      • ๋‹จ์ผ ์ฃผ๋ฌธ ์ฒ˜๋ฆฌ ์†๋„ ํ–ฅ์ƒ

      • ์ผ์„ ๋ถ„ํ• ํ•˜๋ฉด์„œ ์ „์ฒด ์ฒ˜๋ฆฌ ์‹œ๊ฐ„ ํ–ฅ์ƒ

    • Redis์˜ string, hashset, sortedset์˜ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋งค์นญ ์„œ๋ฒ„์—์„œ๋„ ์ฒด๊ฒฐ ์„œ๋ฒ„์˜ MySQL DB์™€ ๊ฐ™์ด ์ •๋ณด๋ฅผ ์ €์žฅ
      ์ฒด๊ฒฐ ์„œ๋ฒ„์˜ ์ฒ˜๋ฆฌ ๋‚ด์šฉ์ด ๋‹ค์‹œ ๋งค์นญ ์„œ๋ฒ„์— ์˜ํ–ฅ์„ ๋ผ์น˜์ง€ ์•Š๋„๋ก ๋กœ์ง์„ ๊ตฌ์„ฑํ•˜์—ฌ ์ •ํ•ฉ์„ฑ ์œ ์ง€
      ์„œ๋ฒ„ ๋ฒ„์ „ 3.0
      ์„œ๋ฒ„ ๋ฒ„์ „ 4.0
      ๊ฐœ์„  ๊ฒฐ๊ณผ
      ๋‹จ์ผ ์ฃผ๋ฌธ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„ ๋น„๊ต "
      ๋™์‹œ ์ฃผ๋ฌธ 10000๊ฑด์˜ ์ด ์ฒ˜๋ฆฌ ์‹œ๊ฐ„ ๋น„๊ต "

ํ•œ๊ฐœ์˜ ๋ฉ”์ธ ์„œ๋ฒ„์—์„œ ๋ถ€ํ•˜๋ฅผ ๊ฐ๋‹นํ•˜๋Š” ๋ฌธ์ œ (ver 4.0 โ‡’ ver 5.0)

  • ๋ฌธ์ œ ์ƒํ™ฉ
    • ๋งŽ์€ ์‚ฌ์šฉ์ž์˜ API ์š”์ฒญ์ด ํ•˜๋‚˜์˜ EC2 ์ธ์Šคํ„ด์Šค์—์„œ ์ฒ˜๋ฆฌ
    • ์ด๋กœ ์ธํ•ด ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ์—์„œ ํŠน์ • ์‹œ๊ฐ„์— CPU์— ๊ณผ๋ถ€ํ•˜๊ฐ€ ๊ฑธ๋ฆฌ๋Š” ๊ฒƒ์„ ํ™•์ธ (ver 4.0, ๋™์‹œ ์ฃผ๋ฌธ 2๋งŒ๊ฑด ๋ถ€ํ•˜ํ…Œ์ŠคํŠธ)

  • ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•
    • Main ์„œ๋ฒ„์—์„œ ๊ฒŒ์ž„์„ ๊ด€๋ฆฌํ•˜๋Š” ํŒŒํŠธ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ฒŒ์ž„ ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค๊ณ  Main ์„œ๋ฒ„์˜ EC2 ์ธ์Šคํ„ด์Šค๋ฅผ 3๋Œ€๋กœ ๋Š˜๋ฆผ
    • ALB๋ฅผ ํ†ตํ•ด ๋Œ€์ƒ ๊ทธ๋ฃน์— ๋ฉ”์ธ ์„œ๋ฒ„ ์ธ์Šคํ„ด์Šค๋ฅผ 3๊ฐœ ์ถ”๊ฐ€ํ•˜์—ฌ ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ์„ ์ง„ํ–‰

    • ์„œ๋ฒ„ ๋ฒ„์ „ 4.0
      ์„œ๋ฒ„ ๋ฒ„์ „ 5.0
      ALB๋ฅผ ํ†ตํ•ด main ์ธ์Šคํ„ด์Šค3๊ฐœ์— ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ(๋ผ์šด๋“œ ๋กœ๋นˆ)
      ๋ถ€ํ•˜ํ…Œ์ŠคํŠธ TPS์™€ ํ‰๊ท  ์‘๋‹ต ์‹œ๊ฐ„์ด ํฌ๊ฒŒ ๊ฐœ์„ ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธ
      ๋ถ€ํ•˜ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ CPU์˜ ๋ฆฌ์†Œ์Šค์˜ ์‚ฌ์šฉ๋ฅ ์ด ๊ฐ์†Œํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธ(ver 5.0, ๋™์‹œ ์ฃผ๋ฌธ 2๋งŒ๊ฑด ๋ถ€ํ•˜ํ…Œ์ŠคํŠธ)

๋Šฅ๋™์ ์ธ ์ธ์Šคํ„ด์Šค ๊ด€๋ฆฌ ๋ถ€์žฌ์™€ ๋ธ”๋ฃจ-๊ทธ๋ฆฐ ๋ฐฐํฌ๋กœ ์ธํ•œ ๋น„์šฉ ๋ฌธ์ œ (ver 5.0 โ‡’ ver final)

  • ๋ฌธ์ œ ์ƒํ™ฉ
    • ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์— ๊ด€๊ณ„ ์—†์ด ๊ณ ์ •๋œ EC2 ์ธ์Šคํ„ด์Šค์˜ ์ˆ˜๊ฐ€ ๋ณ€ํ•˜์ง€ ์•Š์•„ ์š”์ฒญ์ด ์ ์„ ๋•Œ์—๋Š” ๋ฆฌ์†Œ์Šค๊ฐ€ ๋‚ญ๋น„๋˜๊ณ , ์š”์ฒญ์ด ๋งŽ์„ ๋•Œ์—๋Š” ์„œ๋ฒ„์— ๊ณผ๋„ํ•œ ๋ถ€ํ•˜๊ฐ€ ์ง‘์ค‘๋จ

    • ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ๋ฅผ NIGNX๋ฅผ ์ด์šฉํ•œ ๋ธ”๋ฃจ-๊ทธ๋ฆฐ ๋ฐฐํฌ๋ฅผ ์ง„ํ–‰ํ•˜์˜€๋Š”๋ฐ, ์ด ๊ณผ์ •์— ํ•˜๋‚˜์˜ ๋ฉ”์ธ ์„œ๋ฒ„๋ฅผ ์œ„ํ•ด 3๊ฐœ์˜ EC2 ์ธ์Šคํ„ด์Šค๊ฐ€ ํ•„์š”ํ•˜์—ฌ ๋น„์šฉ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ

  • ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•
    • ๊ธฐ์กด์˜ CD ๊ณผ์ •์—์„œ ECR์— ์ด๋ฏธ์ง€๋ฅผ ์—…๋กœ๋“œ ํ•˜์˜€๋Š”๋ฐ, ์ด๋ฅผ ์ด์šฉํ•˜์—ฌ AWS์—์„œ ์ œ๊ณตํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ์„œ๋น„์Šค์ธ ECS๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฉ”์ธ ์„œ๋ฒ„์˜ ์ฆ์„ค ๋ฐ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ, ์˜คํ† ์Šค์ผ€์ผ๋ง, ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ(๋กค๋ง ๋ฐฐํฌ)๋ฅผ ์ ์šฉ

    • ECS๋กœ ์ƒ์„ฑ๋œ EC2์— ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์ด ์ ์šฉ
      CPU์˜ ๋ถ€ํ•˜์œจ์— ๋”ฐ๋ผ ์˜คํ†  ์Šค์ผ€์ผ๋ง ์ ์šฉ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด CPU๋ฅผ 1%๋งŒ ์‚ฌ์šฉํ•ด๋„ ํ™•์žฅํ•˜๋„๋ก ๋ณ€๊ฒฝ ECS ํƒœ์Šคํฌ ํ™•์ธ ๊ฒฐ๊ณผ ํƒœ์Šคํฌ๊ฐ€ 5๊ฐœ๋กœ ์ถ”๊ฐ€ ๋œ ๊ฒƒ์„ ํ™•์ธ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ์—๋„ ์ œ๋Œ€๋กœ ๋ฐ˜์˜์ด ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธ
      ๊ธฐ์กด ๊ทธ๋ฆฐ-๋ธ”๋ฃจ ๋ฐฐํฌ์—์„œ ๋กค๋ง ๋ฐฐํฌ๋กœ ์ „ํ™˜
      ์‹ค์ œ ๋กค๋ง ๋ฐฐํฌ๊ฐ€ ์ ์šฉ๋˜๋Š” ๋ชจ์Šต ์ฝ”๋“œ ์—…๋ฐ์ดํŠธ ์ดํ›„ ์ƒˆ๋กœ์šด ๋ฐฐํฌ๊ฐ€ ํ™œ์„ฑํ™” ๊ธฐ์กด์˜ EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ํ•˜๋‚˜์”ฉ ๋Œ€์ฒดํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธ ๋ชจ๋“  ๋ฐฐํฌ๊ฐ€ ์™„๋ฃŒ๋˜๊ณ  ๊ธฐ์กด ๋ฒ„์ „์ด Draining ๋˜๋Š” ๋ชจ์Šต

๐Ÿ”ง์žฅ์•  ๋Œ€์‘

์นดํ”„์นด์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ ์‹œ

  • ๋งŒ์ผ ํ•˜๋‚˜์˜ ๋ธŒ๋กœ์ปค์— ์žฅ์• ๊ฐ€ ์ƒ๊ฒจ ์—ญํ• ์„ ๋ชปํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ์„œ๋ฒ„ ์ž์ฒด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋จ
  • ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์นดํ”„์นด์˜ ๋ธŒ๋กœ์ปค๋ฅผ 3๋Œ€๋กœ ๊ตฌ์ถ•ํ•˜์—ฌ ํ•˜๋‚˜์˜ ๋ธŒ๋กœ์ปค์— ์žฅ์• ๊ฐ€ ์ƒ๊ฒผ์„๋•Œ ๋‹ค๋ฅธ ๋ธŒ๋กœ์ปค๋“ค์ด ํ•ด๋‹น ๋ธŒ๋กœ์ปค์˜ ์—ญํ• ์„ ๋Œ€์‹ ํ•ด ์ฒ˜๋ฆฌ
  • ์‹œ์Šคํ…œ ์ „์ฒด๊ฐ€ ์ค‘๋‹จ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•œ ๋ธŒ๋กœ์ปค ๊ฒฉ๋ฆฌ ๊ฐ€๋Šฅ

AWS RDS์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ ์‹œ

  • RDS์˜ muiti-AZ ๋ฐฐํฌ ์˜ต์…˜์„ ์‚ฌ์šฉํ•ด RDS์˜ ์—๋Ÿฌ์— ๋Œ€๋น„ ๊ฐ€๋Šฅ
  • multil-AZ ๋ฐฐํฌ ์˜ต์…˜ ์‚ฌ์šฉ์‹œ RDS๋Š” ๋งˆ์Šคํ„ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๋™๊ธฐ์ ์œผ๋กœ ๋ณต์ œ๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ณต์ œ๋ณธ์„ ๋‹ค๋ฅธ ๊ฐ€์šฉ ์˜์—ญ์— ์ƒ์„ฑ
  • ๋งˆ์Šคํ„ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์žฅ์•  ๋ฐœ์ƒ์‹œ RDS๊ฐ€ ์ž๋™์œผ๋กœ ๋ณต์ œ๋ณธ์„ ๋งˆ์Šคํ„ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ์Šน๊ฒฉํ•ด ๋งˆ์Šคํ„ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ์„œ๋น„์Šค๋ฅผ ๊ณ„์† ์ œ๊ณตํ•จ

์นดํ”„์นด ์ค‘๋ณต ๋ฉ”์‹œ์ง€ ๋ฐฉ์ง€

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

โ“๊ธฐํƒ€ ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…(๊ฐ์ข… ๋ฒ„๊ทธ๋“ค)

์ „์ฒด ๋ชฉ๋ก

Transaction API error

๋กœ์ปฌ ๋ฉ”์‹œ์ง€ ํ์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š๋Š” ์—๋Ÿฌ

ํ…Œ์ŠคํŠธ ์ค‘ RDS ์—ฐ๊ฒฐ์ด ๋Š๊ธฐ๋Š” ์˜ค๋ฅ˜

jmeter ๋กœ์ปฌ ํ…Œ์ŠคํŠธ ์ค‘ ๋ฐœ์ƒํ•œ ์˜ค๋ฅ˜

์ƒˆ๋กœ๊ณ ์นจ์„ ํ• ๋•Œ๋งˆ๋‹ค ์—ฐ๊ฒฐ๋˜๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋Š˜์–ด๋‚˜๋Š” ์—๋Ÿฌ

๋กœ์ปฌ์—์„œ elastic cache ์ ‘์†์‹œ timeout

๋ฉ”์ธ/์†Œ์ผ“ ์„œ๋ฒ„ ๋ถ„๋ฆฌ ์ดํ›„ ์†Œ์ผ“ ์—ฐ๊ฒฐ์ด ์•ˆ๋˜๋Š” ์—๋Ÿฌ

EC2 ์ธ์Šคํ„ด์Šค์—์„œ public IP๋ฅผ ํƒ„๋ ฅ์  IP๋กœ ์žฌํ• ๋‹น ํ•œ ์ดํ›„์— ์ ‘์†์ด ์•ˆ๋˜๋Š” ์˜ค๋ฅ˜

EC2์—์„œ ๋ฐฐํฌ๋œ ๋ฉ”์ธ์„œ๋ฒ„๊ฐ€ ์†Œ์ผ“์„œ๋ฒ„์™€ ์ž๋™์œผ๋กœ ์—ฐ๊ฒฐ์ด ์ข…๋ฃŒ๋˜๋Š” ์˜ค๋ฅ˜

EC2์—์„œ Jmeter๋กœ ํ…Œ์ŠคํŠธ ์‹œ WARNING์ด ๋œจ๋Š” ์˜ค๋ฅ˜

๋ฐฐํฌ ์ดํ›„ ๋กœ์ปฌ์—์„œ ์นดํ”„์นด ์ปจ์Šˆ๋จธ๊ฐ€ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š” ์˜ค๋ฅ˜

์ฑ„ํŒ…์ฐฝ ๊ด€๋ จ ์ด์Šˆ

Kafka ๊ด€๋ จ ์ด์Šˆ

์›น์†Œ์ผ“ ์—ฐ๊ฒฐ ์‹คํŒจ