Skip to content
@hanghae99-Challenge-2-teams

Neticket

๐ŸŽŸNETicket๐ŸŽŸ

๋Œ€๊ทœ๋ชจ ํŠธ๋žœ์žญ์…˜์„ ๋น ๋ฅด๊ณ  ์•ˆ์ •์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ํ‹ฐ์ผ“ ์˜ˆ๋งค ์‚ฌ์ดํŠธ๐Ÿค—

๐Ÿ“šTeam Notion ๋ณด๋Ÿฌ๊ฐ€๊ธฐ

Notion

โœจTeam Brochure ๋ณด๋Ÿฌ๊ฐ€๊ธฐโœจ

Brochure

๐Ÿ’๐Ÿปโ€โ™‚๏ธํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ

๐ŸŽซ NETicket 
    
No Error Ticket!
๋™์‹œ์ ‘์†์ž๊ฐ€ ๋งŽ์•„์ ธ๋„ No Error!
๋‚จ๋…€๋…ธ์†Œ ๋ˆ„๊ตฌ๋‚˜ ๋‚ด ํ‹ฐ์ผ“์€ NETicket์—์„œ ์‰ฝ๊ณ  ํŽธ๋ฆฌํ•˜๊ฒŒ! 
   
์ €ํฌ ์„œ๋น„์Šค๋Š” ๊ฐ„ํŽธํ•˜๊ณ  ์ง๊ด€์ ์ธ ๋ ˆ์ด์•„์›ƒ์œผ๋กœ,
๋ถˆํŽธํ•œ ์˜ˆ๋งค ๊ณผ์ •์„ ์ตœ์†Œํ™”ํ•ด ๋ชจ๋‘๊ฐ€ ์‰ฝ๊ฒŒ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์˜ˆ๋งค ์‚ฌ์ดํŠธ์ž…๋‹ˆ๋‹ค.

๋‹ค์–‘ํ•œ ํ™”๋ฉด ํฌ๊ธฐ์™€ ์žฅ์น˜์—์„œ ์ผ๊ด€๋œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋„๋ก,
๋ฐ˜์‘ํ˜• ๋””์ž์ธ์œผ๋กœ ์„ค๊ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค. 

๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๋ฉฐ, 
์ตœ์†Œ ๋น„์šฉ์œผ๋กœ ์‹œ์Šคํ…œ์˜ ์•ˆ์ •์„ฑ๊ณผ ์„ฑ๋Šฅ ํ–ฅ์ƒ์— ์ค‘์ ์„ ๋‘๊ณ  ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. 

ํ•œ ๋ฒˆ์— 50K์˜ ์˜ˆ๋งค ์š”์ฒญ์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ,
1000 TPS์˜ ์ฒ˜๋ฆฌ๋Ÿ‰์œผ๋กœ ํ‰๊ท  ์‘๋‹ต์†๋„ ์•ฝ 1์ดˆ ๋‚ด์™ธ๋กœ Error ์—†์ด ์šด์˜ ์ค‘์ž…๋‹ˆ๋‹ค. 

๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ Team

์ด๋ฆ„ GITHUB
์žฅ์ง„ํ˜๐Ÿ”ฐ https://github.com/jangjh45
๊น€๊ฑด์œจ https://github.com/ChoonB
์„œ์„ฑํ˜ https://github.com/dltngurxodud
์ด์œ ์ง„ https://github.com/Yujin-17

๐Ÿ’ป์ฃผ์š”๊ธฐ๋Šฅ

์ฃผ์š”๊ธฐ๋Šฅ๐Ÿง

๐Ÿ“Œ Redis Cache๋ฅผ ์‚ฌ์šฉํ•œ ๋น ๋ฅธ ์˜ˆ๋งค

์˜ˆ๋งค2

  • Scheduling ๊ธฐ๋Šฅ์„ ์ด์šฉํ•˜์—ฌ ์˜ˆ๋งค ์˜คํ”ˆ ์‹œ๊ฐ„์— ๊ณต์—ฐ์˜ ๋‚จ์€ ์ขŒ์„ ์ˆ˜๋ฅผ Redis Cache์— ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„
  • ๊ณ ๊ฐ์ด ์„ ํƒํ•œ ํ‹ฐ์ผ“ ์ˆ˜๋งŒํผ Write Back ๋ฐฉ์‹์œผ๋กœ Redis Cache์— ์žˆ๋Š” ๊ณต์—ฐ์˜ ๋‚จ์€ ์ขŒ์„ ์ˆ˜๋ฅผ ์ฐจ๊ฐํ•ด ๋น ๋ฅธ ์‘๋‹ต ์‹œ๊ฐ„ ๋„์ถœ
  • ํ•œ ๋ฒˆ์— 50K ์ด์ƒ์˜ ์š”์ฒญ์„ ํ‰๊ท  ์‘๋‹ต์‹œ๊ฐ„ ์•ฝ 1์ดˆ ๋‚ด์™ธ๋กœ ์˜ˆ๋งค ๊ฐ€๋Šฅ

๐Ÿ“Œ Admin ๊ณต์—ฐ๊ด€๋ฆฌ ํŽ˜์ด์ง€

๊ด€๋ฆฌ์ž

  • ๊ด€๋ฆฌ์ž๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ Admin ๊ณต์—ฐ ๊ด€๋ฆฌ ํŽ˜์ด์ง€์—์„œ ๊ณต์—ฐ ์ถ”๊ฐ€๋ฅผ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ถ”๊ฐ€๋˜๋Š” ๊ณต์—ฐ์˜ ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ๋Š” AWS S3๋ฅผ ํ†ตํ•ด ์•ˆ์ •์ ์œผ๋กœ ์ฒ˜๋ฆฌ
  • Redis Cache์— ์ž๋™ ๊ฐฑ์‹  ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•ด, ๋ฐ์ดํ„ฐ๊ฐ€ ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜์ง€๋งŒ, ์žฅ์•  ์ƒํ™ฉ์„ ๋Œ€๋น„ํ•ด ๊ด€๋ฆฌ์ž ์ œ์–ด ์‹œ์Šคํ…œ ์ถ”๊ฐ€. ์ด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ๊ณผ ๊ฐ€์šฉ์„ฑ์„ ๋ณด์žฅ ๊ฐ€๋Šฅ
  • Redis Cache์— ์ด์ƒ์ด ์ƒ๊ธฐ๋ฉด Redis CLI๋ฅผ ํ†ตํ•˜์ง€ ์•Š๊ณ , ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€์—์„œ ์‰ฝ๊ณ  ์ง๊ด€์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑ

๐Ÿ“Œ QueryDSL์„ ์‚ฌ์šฉํ•œ ๊ฒ€์ƒ‰

๊ฒ€์ƒ‰2

  • ํ‚ค์›Œ๋“œ ๊ณต๋ฐฑ ๊ธฐ์ค€์œผ๋กœ ๋ถ„ํ• ํ•ด ์—ฌ๋Ÿฌ ๋‹จ์–ด๋กœ ๊ตฌ์„ฑ๋œ ํ‚ค์›Œ๋“œ ์ฒ˜๋ฆฌ
  • title๊ณผ place์—์„œ ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ ์—†์ด ๋‹จ์–ด๋ฅผ ํฌํ•จํ•˜๋Š” event๋ฅผ ์ฐพ๋Š” ๊ฒ€์ƒ‰ ์กฐ๊ฑด
  • ์˜ˆ๋งค ๊ฐ€๋Šฅ ์—ฌ๋ถ€์™€, ๋‚ ์งœ๋ฅผ ๊ณ ๋ คํ•œ ์ •๋ ฌ ์ˆœ์„œ
  • ๊ฒ€์ƒ‰ ์กฐ๊ฑด์— ์ผ์น˜ํ•˜๋Š” ์ „์ฒด ์ด๋ฒคํŠธ ์ˆ˜ ๊ณ„์‚ฐ์„ ์ด์šฉํ•œ Pagination

๐Ÿ“Œ ๋งˆ์ดํŽ˜์ด์ง€ ์˜ˆ๋งค์ทจ์†Œ

๋งˆ์ดํŽ˜์ด์ง€

  • ๋งˆ์ดํŽ˜์ด์ง€์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐ€์žฅ ์ตœ๊ทผ์— ์˜ˆ๋งคํ•œ ๊ณต์—ฐ๋ถ€ํ„ฐ ์ •๋ ฌ
  • ์•„์ง ์‹œ์ž‘ํ•˜์ง€ ์•Š์€ ๊ณต์—ฐ๋งŒ ์‚ฌ์šฉ์ž๊ฐ€ ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ์˜ˆ๋งค ์ทจ์†Œ ๊ฐ€๋Šฅ

๐ŸŽ€ํ”„๋กœ์ ํŠธ ์ฑŒ๋ฆฐ์ง€ ํฌ์ธํŠธ

๐Ÿ“ˆ ์‚ฌ์šฉ์ž์˜ ์›ํ™œํ•˜๊ณ  ๋Š๊น€ ์—†๋Š” ์„œ๋น„์Šค ์ œ๊ณต ์œ„ํ•œ ๋†’์€ TPS์™€ ๋น ๋ฅธ ์‘๋‹ต์†๋„
์ €ํฌ ํ”„๋กœ์ ํŠธ์˜ ์ฃผ์š” ๋ชฉํ‘œ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ํ•ญ์ƒ ์›ํ™œํ•˜๊ณ  ๋Š๊น€ ์—†๋Š” ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด, ๋Œ€๊ทœ๋ชจ ํŠธ๋žœ์žญ์…˜ ์ƒํ™ฉ์—์„œ๋„ ์•ˆ์ •์ ์ด๋ฉด์„œ๋„ ๋†’์€ TPS์™€ ๋น ๋ฅธ ์‘๋‹ต์†๋„๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ๊ธฐ์ˆ ์  ์š”์†Œ๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ํ™œ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์šฐ์„ , ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ ์•„ํ‚คํ…์ฒ˜์™€ In-memory caching, Database Tuning ๋“ฑ์˜ ๊ธฐ์ˆ ์„ ์กฐํ•ฉํ•˜์—ฌ ์•ˆ์ •์ ์ด๋ฉด์„œ๋„ ๋†’์€ TPS์™€ ๋น ๋ฅธ ์‘๋‹ต์†๋„๋ฅผ ์‹คํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค. 
ํŠนํžˆ, Redis Cache๋ฅผ ํ™œ์šฉํ•˜์—ฌ In-memory Data Store๋ฅผ ๊ตฌ์ถ•ํ•˜์—ฌ ์‘๋‹ต์†๋„๋ฅผ ํฌ๊ฒŒ ํ–ฅ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ, ๋ถ€ํ•˜ ๋ถ„์‚ฐ์„ ์œ„ํ•œ Load Balancing๊ณผ ์ž์› ํ™•์žฅ ๋ฐ ์ถ•์†Œ๋ฅผ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” Auto Scaling์„ ๋„์ž…ํ•˜์—ฌ, ์„œ๋ฒ„ ๋ถ€ํ•˜๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ๋ถ„์‚ฐํ•˜๊ณ  ํŠธ๋ž˜ํ”ฝ ๋ณ€ํ™”์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ์ž์›์„ ํ• ๋‹นํ•จ์œผ๋กœ์จ, ํŠธ๋ž˜ํ”ฝ ๊ธ‰์ฆ ์‹œ์—๋„ ๋Š๊น€ ์—†๋Š” ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค. 

๋งˆ์ง€๋ง‰์œผ๋กœ, HikariCP์™€ MySQL์„ Tuning ํ•˜์—ฌ Database ์—ฐ๊ฒฐ์„ ์ตœ์ ํ™”ํ•˜๊ณ , ์„œ๋ฒ„ ๋ถ„์‚ฐ์„ ํ†ตํ•ด ๋ณ‘๋ชฉ ํ˜„์ƒ์„ ์˜ˆ๋ฐฉํ•˜์—ฌ ์•ˆ์ •์ ์ธ ์„œ๋น„์Šค๋ฅผ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค. 

์ด๋Ÿฌํ•œ ๋‹ค์–‘ํ•œ ๊ธฐ์ˆ ์  ์š”์†Œ๋“ค์„ ์ ์ ˆํ•˜๊ฒŒ ์กฐํ•ฉํ•˜์—ฌ, ์ €ํฌ ์„œ๋น„์Šค๋Š” ๋†’์€ ์„ฑ๋Šฅ๊ณผ ์•ˆ์ •์„ฑ์„ ๋™์‹œ์— ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž๋“ค์€ ์–ธ์ œ๋‚˜ ์›ํ™œํ•˜๊ณ  ๋Š๊น€ ์—†๋Š” ์„œ๋น„์Šค๋ฅผ ๊ฒฝํ—˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
๐Ÿ•ธ ๋ฐ์ดํ„ฐ์˜ ์ •ํ™•์„ฑ๊ณผ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•ด, ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ํ™•๋ณด
์ €ํฌ๋Š” Redis๋ฅผ ๋„์ž…ํ•˜์—ฌ ๋†’์€ TPS์™€ ๋น ๋ฅธ ์‘๋‹ต ์†๋„๋ฅผ ํ™•๋ณดํ•˜์˜€์œผ๋‚˜, ์ค‘๋ณต ๋ฐ์ดํ„ฐ๋กœ ์ธํ•œ ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ๊ณผ ์ •ํ™•์„ฑ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€์‘ํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ํ™•๋ณดํ•˜๊ธฐ ์œ„ํ•ด ์•„๋ž˜์™€ ๊ฐ™์€ ์บ์‹œ ์ „๋žต์„ ์ˆ˜๋ฆฝํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๋จผ์ € ์“ฐ๊ธฐ ์ „๋žต์œผ๋กœ Write Back ๋ฐฉ์‹์„ ๋„์ž…ํ•˜์—ฌ, ํ‹ฐ์ผ“์˜ ๋‚จ์€ ์ขŒ์„ ์ˆ˜ ๋ฐ์ดํ„ฐ ์ˆ˜์ • ์‹œ ์บ์‹œ์—๋งŒ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ๊ธฐ๋ก๋˜๊ณ , ์ฃผ๊ธฐ์ ์œผ๋กœ ๋˜๋Š” ํŠน์ • ์กฐ๊ฑด์ด ์ถฉ์กฑ๋  ๋•Œ Database์— ๋™๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋น ๋ฅธ ์‘๋‹ต ์‹œ๊ฐ„๊ณผ Database์˜ ๋ถ€ํ•˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

ํŠนํžˆ, Redis์˜ Single Thread ํŠน์„ฑ๊ณผ ์›์ž์  ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•ด ๋ฝ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ๋„ ๋™์‹œ์„ฑ ์ œ์–ด๋ฅผ ํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ฝ๊ธฐ ์ „๋žต์€ Look Aside ๋ฐฉ์‹์„ ๋„์ž…ํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํŠน์ • ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ๋•Œ๋งˆ๋‹ค ์บ์‹œ๋ฅผ ๋จผ์ € ํ™•์ธํ•˜๊ณ , Cache miss์˜ ๊ฒฝ์šฐ Database์—์„œ Data๋ฅผ ๊ฐ€์ ธ์™€ ์บ์‹œ์— ์ €์žฅํ•œ ํ›„ ํด๋ผ์ด์–ธํŠธ์— ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฐฉ์‹์„ ํ†ตํ•ด Database์™€ ์บ์‹œ ๊ฐ„์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ข…ํ•ฉ์ ์œผ๋กœ Redis๋ฅผ ํ†ตํ•ด ๋Œ€๊ทœ๋ชจ ํŠธ๋žœ์žญ์…˜ ์ƒํ™ฉ์—์„œ์˜ ๋™์‹œ์„ฑ ์ œ์–ด๋ฅผ ํ•˜๋ฉด์„œ, ์œ„์˜ ์บ์‹œ ์ „๋žต์œผ๋กœ ๋ฐ์ดํ„ฐ์˜ ์ •ํ™•์„ฑ๊ณผ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•ด ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
๐Ÿ“Š APM์„ ํ™œ์šฉํ•ด์„œ ์‹œ์Šคํ…œ์˜ ์„ฑ๋Šฅ๊ณผ ์•ˆ์ •์„ฑ์„ ์ง€์†์ ์œผ๋กœ ๊ด€๋ฆฌ
๋Œ€๊ทœ๋ชจ ํŠธ๋žœ์žญ์…˜ ์ƒํ™ฉ์—์„œ ๋™์‹œ์„ฑ ์ œ์–ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ํ”„๋กœ์ ํŠธ์˜ ์ฑŒ๋ฆฐ์ง€ ํฌ์ธํŠธ ์ค‘ ํ•˜๋‚˜๋กœ APM์„ ํ™œ์šฉํ•œ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ๋„์ž…ํ•˜์˜€์Šต๋‹ˆ๋‹ค. 
์ด๋ฅผ ํ†ตํ•ด ์‹œ์Šคํ…œ์˜ ์„ฑ๋Šฅ๊ณผ ์•ˆ์ •์„ฑ์„ ์ง€์†์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. 

์ €ํฌ ํŒ€์€ Grafana, Cloud Watch ๋ฐ Pinpoint์™€ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ๋ชจ๋‹ˆํ„ฐ๋ง ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ์Šคํ…œ์˜ ์ „๋ฐ˜์ ์ธ ์„ฑ๋Šฅ์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ™•์ธํ•˜์˜€์Šต๋‹ˆ๋‹ค.
 
ํŠนํžˆ, Grafana์™€ Cloud Watch๋ฅผ ํ†ตํ•ด EC2, Elastic Cache, ALB, RDS, Auto Scaling ๋“ฑ์˜ ์ƒํƒœ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. 

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

์ข…ํ•ฉ์ ์œผ๋กœ, ์ด๋Ÿฌํ•œ ๋ชจ๋‹ˆํ„ฐ๋ง ๋„๊ตฌ๋“ค์˜ ํ™œ์šฉ์„ ํ†ตํ•ด ์‹œ์Šคํ…œ ๋‚ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋น ๋ฅด๊ฒŒ ์ง„๋‹จํ•˜๊ณ  ์ˆ˜์ • ๋ฐ ๊ฐœ์„  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ํ”„๋กœ์ ํŠธ๋Š” ์•ˆ์ •์„ฑ๊ณผ ๋†’์€ ์„ฑ๋Šฅ์„ ๋ณด์žฅํ•˜๋Š” ์„ฑ๊ณต์ ์ธ ๊ตฌํ˜„์ด ์ด๋ฃจ์–ด์กŒ์Šต๋‹ˆ๋‹ค.  
๐Ÿ“‰ ๋น„์šฉ์„ ์ตœ์†Œํ™”ํ•˜๋ฉด์„œ๋„ ๋†’์€ ๊ฐ€์šฉ์„ฑ๊ณผ ์„ฑ๋Šฅ์„ ์œ ์ง€ํ•˜๋Š” ๊ฐ€์„ฑ๋น„ ์ตœ์ ํ™” ์ „๋žต
์ €ํฌ๋Š” ์ตœ์†Œ ๋น„์šฉ์œผ๋กœ๋„ ๋†’์€ ๊ฐ€์šฉ์„ฑ๊ณผ ์„ฑ๋Šฅ์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๋ฉฐ, ์ด๋ฅผ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ๊ธฐ์ˆ ์ ์ธ ๋ฐฉ๋ฒ•๊ณผ ์ „๋žต์ ์ธ ์„ค๊ณ„๋ฅผ ์ฑ„ํƒํ•˜์˜€์Šต๋‹ˆ๋‹ค. 

EC2๋Š” ์ง์ „ ๋ฒ„์ „๋ณด๋‹ค 20% ์ €๋ ดํ•œ Graviton2 arm64 ์•„ํ‚คํ…์ณ ๊ธฐ๋ฐ˜์—, ๋ฌด๋ฃŒ๋กœ๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ t4g.small ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„ ํ™•์žฅ์ด ํ•„์š”ํ•  ๊ฒฝ์šฐ ๋น„์šฉ์ด ๋” ๋ฐœ์ƒํ•˜๋Š” Scale Up ๋ฐฉ์‹๋ณด๋‹ค Load Balancing์„ ์ด์šฉํ•ด Scale Out ๋ฐฉ์‹์˜ ์ˆ˜ํ‰์  ํ™•์žฅ์œผ๋กœ ๋น„์šฉ์„ ์ตœ์†Œํ™” ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๊ณต์—ฐ ์˜ˆ๋งค ์‚ฌ์ดํŠธ์˜ ํŠน์„ฑ์ƒ ์˜ˆ๋งค ์˜คํ”ˆ ์‹œ๊ฐ„๋Œ€์— ํŠธ๋ž˜ํ”ฝ์ด ์ง‘์ค‘๋˜๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ Auto Scaling์„ ์„ค์ •ํ•ด ์˜คํ”ˆ ์‹œ๊ฐ„ ์ง์ „๊ณผ ํŠธ๋žœ์žญ์…˜์ด ๋ชฐ๋ฆฌ๋Š” ์ƒํ™ฉ์—์„œ๋งŒ ์„œ๋ฒ„ ์ธ์Šคํ„ด์Šค ํ™•์žฅ์„ ํ•˜๊ณ , ์„œ๋ฒ„ ๋ถ€ํ•˜๊ฐ€ ์—†๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์‹œ๊ฐ„์—๋Š” ์„œ๋ฒ„ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ตœ์†Œ๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„ ์ˆ˜๋ฅผ ๋™์ ์œผ๋กœ ์กฐ์ ˆํ•˜์—ฌ ์ž์› ์‚ฌ์šฉ๋Ÿ‰์„ ์ตœ์ ํ™”ํ•˜๊ณ  ๋น„์šฉ ์ ˆ๊ฐ ํšจ๊ณผ๋ฅผ ๊ทน๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ํ†ตํ•ด ๋†’์€ ๊ฐ€์šฉ์„ฑ๊ณผ ์„ฑ๋Šฅ์„ ์œ ์ง€ํ•˜๋ฉด์„œ๋„ ๋น„์šฉ์„ ์ตœ์†Œํ™”ํ•˜๋Š” ๊ฒƒ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ๊ฐ€์„ฑ๋น„ ์ธก๋ฉด์—์„œ๋„ ์ตœ์ ์˜ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“š ๊ธฐ์ˆ  ์Šคํƒ

โš™ Architecture ๊ตฌ์„ฑ๋„

neticket3

โš” ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•œ ๊ธฐ์ˆ 

๐Ÿ’ป Backend


๐Ÿ“š Tech Stack

๐Ÿ”ฉ DB

๐Ÿ—œ DevOps



โš– Test

๐Ÿ–ฅ Monitoring


๐Ÿน ๊ธฐ์ˆ ์  ์˜์‚ฌ ๊ฒฐ์ •

๊ธฐ์ˆ ์  ์˜์‚ฌ ๊ฒฐ์ • ๊ณผ์ • ๋ณด๋Ÿฌ๊ฐ€๊ธฐ

๐Ÿ—บ API ๋ช…์„ธ์„œ

API ๋ช…์„ธ์„œ ๋ณด๋Ÿฌ๊ฐ€๊ธฐ

๐Ÿ’พ ERD

Untitled (3)


๐Ÿ‘พ Trouble Shooting

๐ŸŒŸ ์˜ˆ๋งค ์„œ๋น„์Šค ๋กœ์ง์—์„œ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ์ง€ํ‚ค๋ฉฐ ์‘๋‹ต์†๋„์™€ TPS ๊ฐœ์„  ๐ŸŒŸ

๐Ÿ’ก ์ฑŒ๋ฆฐ์ง€ ํฌ์ธํŠธ๋กœ ์„ค์ •ํ•œ ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด
์˜ˆ๋งค ์„œ๋น„์Šค ๋กœ์ง์—์„œ โ€˜๋‚จ์€ ์ขŒ์„ ์ˆ˜โ€™์˜ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ์ง€์ผœ์•ผ ํ•˜๊ณ ,
๋งŽ์€ ํŠธ๋žœ์žญ์…˜์„ ์ฒ˜๋ฆฌํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋น ๋ฅธ ์‘๋‹ต ์†๋„๋กœ ์˜ˆ๋งค ๊ฒฐ๊ณผ๋ฅผ ๋Œ๋ ค์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

1. ํŠธ๋žœ์žญ์…˜ ์ถฉ๋Œ ๋ฌธ์ œ๋ฅผ ๋น„๊ด€์  ๋ฝ์œผ๋กœ ํ•ด๊ฒฐ
2. ๋น„๊ด€์  ๋ฝ ์ ์šฉ ์‹œ ์†๋„ ๋ฌธ์ œ๋ฅผ Redis Cache๋กœ ํ•ด๊ฒฐ
3. ๋” ๋†’์€ ๋ชฉํ‘œ์น˜๋ฅผ Scale Out์œผ๋กœ ํ•ด๊ฒฐ
4. ์„œ๋ฒ„ ํ™•์žฅ์œผ๋กœ ์ธํ•œ ๋น„์šฉ ๋ฌธ์ œ๋ฅผ AutoScaling์œผ๋กœ ํ•ด๊ฒฐ
5. APM์œผ๋กœ ์ฐพ์€ ๋ณ‘๋ชฉํ˜„์ƒ์„ Hikari, MySQL ํŠœ๋‹์œผ๋กœ ํ•ด๊ฒฐ


๐Ÿš€ ์„ฑ๋Šฅ ๊ฐœ์„ 

๐Ÿ›  ์ €ํฌ๋Š” ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…์˜ ๊ฐ ๋‹จ๊ณ„์—์„œ ์„ฑ๋Šฅ์ด ์–ด๋А ์ •๋„๊นŒ์ง€ ๊ฐœ์„ ๋˜์—ˆ๋Š”์ง€ ์•Œ์•„๋ณด๊ธฐ ์œ„ํ•ด,
ํ”„๋กœ์ ํŠธ ๋‚ด๋‚ด Apache Jmeter๋ฅผ ํ†ตํ•ด ๋ถ€ํ•˜ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.
ํ‰๊ท  ์‘๋‹ต ์†๋„(ms)์™€ ์ฒ˜๋ฆฌ๋Ÿ‰(TPS, Transacion Per Second)์„ ์œ„์ฃผ๋กœ ์ •๋ฆฌํ•ด ๋‘์—ˆ์Šต๋‹ˆ๋‹ค.

์„ฑ๋Šฅ๊ฐœ์„  ํ•ญ๋ชฉ ๋ณด๋Ÿฌ๊ฐ€๊ธฐ


Popular repositories Loading

  1. NETicket NETicket Public

    ๋Œ€๊ทœ๋ชจ ํŠธ๋žœ์žญ์…˜ ๋™์‹œ์„ฑ ์ œ์–ด ํ‹ฐ์ผ“ ์„œ๋น„์Šค

    Java 18 2

  2. .github .github Public

Repositories

Showing 2 of 2 repositories

Top languages

Loadingโ€ฆ

Most used topics

Loadingโ€ฆ