Skip to content

munyeol-Yoon/TicketNest-Pub

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

94 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Final Project : TicketNest


ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ

๋Œ€์šฉ๋Ÿ‰ ํŠธ๋ž˜ํ”ฝ ํ•ธ๋“ค๋ง์„ ํƒ€๊ฒŒํŒ… ํ•œ ํ‹ฐ์ผ“ํŒ… ์˜ˆ๋งค ์†Œ์…œ ์ด์ปค๋จธ์Šค์ž…๋‹ˆ๋‹ค.

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

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

FE-Repository : https://github.com/TicketNest/TicketNest-FE

Pub-Repository : https://github.com/TicketNest/TicketNest-Pub

Sub-Repository : https://github.com/TicketNest/TicketNest-sub

Notion : https://www.notion.so/7-J-o-J-e21d060e8f474805aeef6a4828b37712

์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜

ERD

๊ธฐ์ˆ ์  ์˜์‚ฌ ๊ฒฐ์ •

NestJS
  • ๋ชฐ๋” ๋ฐ ํŒŒ์ผ ๊ตฌ์กฐ๋ฅผ ์žก์•„์คŒ
  • ์ปดํŒŒ์ผ ๋‹จ๊ณ„์—์„œ ์—๋Ÿฌ๋ฅผ ๋ฏธ๋ฆฌ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์–ด ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ
  • ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์–ด ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ธฐ๋Œ€ํ•œ ๊ฒฐ๊ด๊ฐ’๊ณผ ๋‹ค๋ฅธ ๊ฐ’์ด ๋ฐ˜ํ™˜๋˜๋Š” ํ˜„์ƒ ๋ฐฉ์ง€
PostgreSQL
  • ์˜คํ”ˆ์†Œ์Šค ๊ธฐ๋ฐ˜ ๋ฐ ๋‹ค์–‘ํ•œ ๋ ˆํผ๋Ÿฐ์Šค
  • ํ”„๋กœ์ ํŠธ ์ฃผ์ œ์˜ ํŠน์„ฑ์ƒ ์ฝ๊ธฐ ์ž‘์—… ๋ชป์ง€์•Š์€ ๋Œ€๋Ÿ‰์˜ ์“ฐ๊ธฐ ์ž‘์—…
  • ์ถ”ํ›„ ํ”„๋กœ์ ํŠธ ํ™•์žฅ ๋ฐ ํ…Œ์ด๋ธ” ๊ด€๊ณ„์˜ ๋ณต์žก์„ฑ์— ๋Œ€ํ•œ ์„ฑ๋Šฅ ๋ณด์žฅ
TypeORM
  • ์ฟผ๋ฆฌ์˜ ๋ณต์žก๋„๊ฐ€ ์ƒ์Šนํ•จ์— ๋”ฐ๋ฅธ ๊ฐ€๋…์„ฑ ๋ฐ ์„ฑ๋Šฅ ๊ณ ๋ ค
  • ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ์œ„ํ•ด ํ๋ฆ„ ์ œ์–ด์— ํ•„์š”ํ•œ ACID ์†์„ฑ ์ง€์›
  • NestJS์˜ ๊ณต์‹ ORM์œผ๋กœ์จ ์•ˆ์ •์ ์ธ ์ง€์›๊ณผ ์ค€์ˆ˜ํ•œ ์„ฑ๋Šฅ
Redis
  • ๋ฉ”์„ธ์ง€๋ฅผ ๊ธฐ๋กํ•˜์ง€ ์•Š๋Š” ๋Œ€์‹  ๋†’์€ ์ฒ˜๋ฆฌ ์†๋„ ๋ณด์žฅ
  • ๋‹ค์–‘ํ•œ ๋ ˆํผ๋Ÿฐ์Šค์™€ Learning Curve
  • Pub/Sub๊ณผ ์ธ๋ฉ”๋ชจ๋ง ์บ์‹ฑ ๊ธฐ์ˆ ์„ ํ•˜๋‚˜๋กœ ์‚ฌ์šฉํ•จ์— ๋”ฐ๋ผ ์šด์šฉ ๋ฒ”์œ„ ์ถ•์†Œ
nGrinder
  • ๋น„๊ต์  ์‰ฌ์šด ์„ค์น˜ ๋ฐ ๊ตฌ์„ฑ
  • ๊ตญ๋‚ด ์ปค๋ฎค๋‹ˆํ‹ฐ ๋ฐ ๋‹ค์–‘ํ•œ ๋ ˆํผ๋Ÿฐ์Šค ์กด์žฌ
  • ์—ฌ๋Ÿฌ ๋Œ€์˜ Agent๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€๊ทœ๋ชจ ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ ์ง„ํ–‰ ๊ฐ€๋Šฅ
Elastic APM
  • ์ž‘์—… ์ฒ˜๋ฆฌ ์†Œ์š” ์‹œ๊ฐ„์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๊ฐ€์‹œํ™” ๋ฐ์ดํ„ฐ
  • ๋ณ‘๋ชฉ ํ˜„์ƒ ์ง€์  ํŒŒ์•… ์šฉ์ด
  • Transaction์— ์†Œ์š”๋˜๋Š” ์‹œ๊ฐ„ ์ฒดํฌ
HAPROXY
  • ๊ฐ„๋‹จํ•œ ์„ค์น˜ ๋ฐ ์„ค์ •
  • L4/L7 ์ง€์›์ด ๊ฐ€๋Šฅํ•ด ์•„ํ‚คํ…์ณ ํ™•์žฅ์— ๋Œ€ํ•œ ์œ ์—ฐ์„ฑ ๋ณด์žฅ
  • ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง์œผ๋กœ ์„œ๋ฒ„๋ณ„ ์ƒํƒœ ์ง€์† ํŒŒ์•… ๊ฐ€๋Šฅ
Pgpool-II
  • PostgreSQL์— ํŠนํ™”๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์ตœ์ ์˜ ์„ฑ๋Šฅ๊ณผ ๊ธฐ๋Šฅ ์ œ๊ณต
  • ํ•˜๋‚˜์˜ ์ฟผ๋ฆฌ๋ฅผ ์—ฌ๋Ÿฌ ์„œ๋ฒ„์— ๋™์‹œ ๋ถ„์‚ฐํ•˜์—ฌ ์‘๋‹ต ์‹œ๊ฐ„ ๋‹จ์ถ•

์„ฑ๋Šฅ ๊ฐœ์„ 

์ดˆ๊ธฐ๋‹จ๊ณ„ SQL ๋กœ๊ทธ ์ œ๊ฑฐ ์ฟผ๋ฆฌ ์ตœ์ ํ™” Redis Cache Redis Pub/Sub
TPS 110.3 172.9 175.4 657.7 1040.7
MTT 421.78ms 286.45ms 278.36ms 73.59ms 48.33ms

Terminal ์—์„œ SQL Log ์ œ๊ฑฐ

Issue

EC2 Instance CPU ์‚ฌ์šฉ๋Ÿ‰ ์•ฝ 90% ๊ณผ๋ถ€ํ•˜ ์ƒํƒœ ํ˜„์ƒ

Try

DB์˜ CPU์™€ I/O ๋ถ€ํ•˜ ๋“ฑ ์ƒํƒœ๋ฅผ ํ™•์ธํ•ด ๋ดค์œผ๋‚˜, ์ฝ๊ธฐ/์“ฐ๊ธฐ ๋ชจ๋‘ ์ผ์ •ํ•œ ํŒจํ„ด

์„œ๋ฒ„๋ฅผ Scale Up ํ•ด๋ดค์ง€๋งŒ, CPU ์‚ฌ์šฉ๋Ÿ‰ 80%๋กœ ์—ฌ์ „ํžˆ ๋†’์€ ํ˜„์ƒ

Solution

DB์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด ๋ฐœ์ƒํ•˜๋Š” ๋กœ๊ทธ๊ฐ€ Instance์— ์ƒ๋‹นํ•œ ๋ถ€ํ•˜๋ฅผ ์ฃผ๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜์—ฌ ๋กœ๊ทธ๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜์ง€ ์•Š๋„๋ก ์ˆ˜์ •

ํ•ญ๋ชฉ ์ ์šฉ ์ „ ์ ์šฉ ํ›„ ๋ณ€ํ™”๋Ÿ‰
TPS 110.3 172.9 ์•ฝ 57% ์ƒ์Šน
Mean Time 421.78ms 286.45ms ์•ฝ 68% ๊ฐ์†Œ
CPU ์‚ฌ์šฉ๋Ÿ‰ 80% 40% 40% ๊ฐ์†Œ
์ฟผ๋ฆฌ ์ตœ์ ํ™”(Dynamic Query)

Issue

CreateBooking API ํ˜ธ์ถœ ์‹œ Latency๊ฐ€ ๋‚ฎ์€ ํ˜„์ƒ

Try

goods entity์˜ BookingCount Update ์‹œ TypeORM์˜ Save Method๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, Select ๋ฌธ์„ ํ†ตํ•ด ํ•ด๋‹นํ•˜๋Š” id Column์„ ์ „์ฒด ์กฐํšŒ ํ›„ Update๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ํ˜•ํƒœ์˜ ์ฟผ๋ฆฌ๋ฅผ ํ™•์ธํ•˜์—ฌ ์ตœ์ ํ™” ์‹œ๋„

Solution

TypeORM์˜ QueryBuilder๋ฅผ ํ†ตํ•ด ๋™์  ์ฟผ๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ TPS ๋ฐ MTT ๊ฐœ์„ 

ํ•ญ๋ชฉ ์ ์šฉ ์ „ ์ ์šฉ ํ›„ ๋ณ€ํ™”๋Ÿ‰
TPS 138.4 175.4 ์•ฝ 21% ์ƒ์Šน
Mean Time 357.67ms 275.05ms ์•ฝ 22% ๊ฐ์†Œ
Redis Cache

Issue

QueryBuilder๋ฅผ ํ†ตํ•ด ๋™์  ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Latency, TPS ๋“ฑ ์„ฑ๋Šฅ ํ–ฅ์ƒ์€ ํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ์ ˆ๋Œ“๊ฐ’์€ ํฌ์ง€ ์•Š์€ ํ˜„์ƒ

Try

๋„คํŠธ์›Œํฌ ํ”ผํฌ ๊ฐ’์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ณ , ์‹œ์Šคํ…œ ๋ถ€ํ•˜๋„ ๋‚ฎ์€ ์ƒํƒœ์—์„œ ๋””์Šคํฌ I/O ๊ฐ’๋งŒ ๋†’์€ ์ƒํƒœ์—ฌ์„œ DB์˜ ๊ตฌ์กฐ์  ํ•œ๊ณ„๋กœ ํŒ๋‹จํ•˜์—ฌ Redis Cache ์ ์šฉ ์‹œ๋„

Solution

Redis Cache๋ฅผ ํ†ตํ•ด DB์˜ ๋ถ€ํ•˜๋ฅผ ์ค„์—ฌ์„œ CPU ์‚ฌ์šฉ๋Ÿ‰์„ ๊ฐœ์„ ํ•˜๊ณ , Cache๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๊ธฐ ๋•Œ๋ฌธ์— TPS ๋ฐ Mean Time๊นŒ์ง€ ๊ฐœ์„ 

ํ•ญ๋ชฉ ์ ์šฉ ์ „ ์ ์šฉ ํ›„ ๋ณ€ํ™”๋Ÿ‰
TPS 215.4 657.7 ์•ฝ 205% ์ƒ์Šน
Mean Time 226.05ms 73.59ms ์•ฝ 67% ๊ฐ์†Œ
CPU ์‚ฌ์šฉ๋Ÿ‰ 40~50% 80% 30~40% ์ƒ์Šน
Redis Pub/Sub

Issue

In-memory ๊ธฐ๋ฐ˜์˜ Redis Cache๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ „๋ฐ˜์ ์ธ ์„ฑ๋Šฅ์€ ๊ฐœ์„ ํ–ˆ์ง€๋งŒ, ๋™์‹œ์„ฑ ์ œ์–ด์˜ ์‹คํŒจ

Try

Redis ๋ถ„์‚ฐ๋ฝ์„ ํ†ตํ•œ ๋™์‹œ์„ฑ ์ œ์–ด ์‹œ๋„ ์‹คํŒจ

Solution

  • ์—ฌ๋Ÿฌ ๊ฐœ์˜ Pub์—์„œ Message๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋ฐœํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ์ด ๊ฐœ์„ ๋จ๊ณผ ๋™์‹œ์— Queue๋Š” ์ˆœ์ฐจ์ ์œผ๋กœ Message๋ฅผ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋™์‹œ์„ฑ ์ œ์–ด ๋˜ํ•œ ํ•ด๊ฒฐ

  • Queue๋กœ ์ธํ•ด ์ˆœ์ฐจ์ ์œผ๋กœ ์ €์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์— Transaction์˜ ํ•„์š”์„ฑ์ด ์‚ฌ๋ผ์ง€๋ฉฐ ๋กœ์ง์˜ ๊ฐ„์†Œํ™”

ํ•ญ๋ชฉ ์ ์šฉ ์ „ ์ ์šฉ ํ›„ ๋ณ€ํ™”๋Ÿ‰
TPS 657.7 1,040.7 ์•ฝ 585% ์ƒ์Šน
Mean Time 73.59ms 48.33ms ์•ฝ 34% ๊ฐ์†Œ
CPU ์‚ฌ์šฉ๋Ÿ‰ 80% 65% 15% ๊ฐ์†Œ
Scale Out

Issue

์„ฑ๋Šฅ ๊ฐœ์„  ๋ฐ ๋™์‹œ์„ฑ ์ œ์–ด์— ์œ ์˜๋ฏธํ•œ ๊ฒฐ๊ณผ๋ฅผ ์–ป์—ˆ์ง€๋งŒ, ์‚ฌ์šฉ์ž ์ˆ˜๋ฅผ ์ฆ๊ฐ€์‹œ์ผœ๋„ ๋” ์ด์ƒ TPS ๊ฐ€ ์ƒ์Šนํ•˜์ง€ ์•Š๋Š” ํ˜„์ƒ

Solution

๋‹ค์ˆ˜์˜ ์„œ๋ฒ„๋ฅผ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ ๋ฐ ๋ถ„์‚ฐํ•˜์—ฌ ์ถ”๊ฐ€์ ์ธ TPS ์ƒ์Šน

ํ•ญ๋ชฉ ์ ์šฉ ์ „ ์ ์šฉ ํ›„ ๋ณ€ํ™”๋Ÿ‰
TPS 1,252 3,066 ์•ฝ 245% ์ƒ์Šน
Mean Time 1,588ms 604.58ms ์•ฝ 40% ๊ฐ์†Œ
CPU ์‚ฌ์šฉ๋Ÿ‰ 100% ์•ฝ 80% 20% ๊ฐ์†Œ
Run Time 13m 46s 5m 54s ์•ฝ 57% ๊ฐ์†Œ

  • TPS : 110.3 -> 1040.7 (์•ฝ 845% ์ƒ์Šน)

  • Mean Time : 421.78ms -> 48.33ms (์•ฝ 89% ๊ฐ์†Œ)


Trouble Shooting

EC2 ์ธ์Šคํ„ด์Šค ๊ฐ„ ์—ฐ๊ฒฐ

โ— Issue

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ Instance -> PostgreSQL Instance ์—ฐ๊ฒฐ ์‹คํŒจ

๐Ÿ’ก Solution

  • Public IPv4 / Private IPv4 ์ฐจ์ด์ ์„ ํ™œ์šฉ

  • ๋„์ปค ์ปจํ…Œ์ด๋„ˆ์˜ -p ์˜ต์…˜์„ ํ†ตํ•ด ํ˜ธ์ŠคํŠธ์™€ ๋ณ„๋„์˜ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ์ฒ˜๋ฆฌ

  • ์ธ๋ฐ”์šด๋“œ ๊ทœ์น™์„ ํ†ตํ•ด Instance์— ์ ‘๊ทผ ๊ถŒํ•œ์„ ์ค€ ๊ฒƒ์€ ipv4 ์ด๋‹ค.

  • -p ์˜ต์…˜์„ ํ†ตํ•ด ํ˜ธ์ŠคํŠธ IP ์ฃผ์†Œ๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ ์ž ํ•˜๋Š” Instance์˜ public ipv4๋กœ ์„ค์ •ํ•˜์˜€๋‹ค.

  • ํ˜ธ์ŠคํŠธ IP ์ฃผ์†Œ๋ฅผ ์„ค์ •ํ•  ๋•Œ, Public๊ณผ Private ์ค‘ ๋ฌด์—‡์„ ์„ค์ •ํ•ด์•ผ ํ• ์ง€ ์ž˜ ์ƒ๊ฐํ•ด ๋ด์•ผ ํ–ˆ๋‹ค.

    • Public IPv4: ์™ธ๋ถ€ ๋„คํŠธ์›Œํฌ์—์„œ ์ธ์Šคํ„ด์Šค๋กœ์˜ ์—ฐ๊ฒฐ์„ ๋„์™€์ฃผ๋Š” ์ฃผ์†Œ๋กœ์จ. ์ธ์Šคํ„ด์Šค๋ฅผ ์ค‘์ง€ํ•˜๊ณ  ์žฌ์‹œ์ž‘ํ•  ๊ฒฝ์šฐ IPv4 ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋‹ค.
    • Private IPv4: VPC ๋˜๋Š” ๋กœ์ปฌ ๋„คํŠธ์›Œํฌ ๋‚ด์—์„œ๋งŒ ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ์ฃผ์†Œ์ด๋‹ค.
๋ฐ์ดํ„ฐ ๋™์‹œ์„ฑ ์ œ์–ด

โ— Issue

  • ๋‹ค์ˆ˜์˜ User๊ฐ€ ๋™์‹œ ์ ‘์† ์‹œ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์ด ์ง€์ผœ์ง€์ง€ ์•Š๋Š” ์ƒํƒœ ๋ฐœ์ƒ

๐Ÿ’ก Solution

  • goods_entity ํ…Œ์ด๋ธ”์— BookingCount๋ผ๋Š” ์ƒˆ๋กœ์šด Column์„ ์ƒ์„ฑํ•˜์—ฌ Write Lock์„ ๊ฑธ์–ด Row ์ˆ˜์ค€์—์„œ์˜ Lock ์ง„ํ–‰

  • ์ด๋ฅผ ํ†ตํ•ด API์— ๋‹ค์ˆ˜์˜ ์‚ฌ์šฉ์ž๊ฐ€ ๋™์‹œ์— ์ ‘๊ทผํ–ˆ์„ ๋•Œ ์ˆœ์ฐจ์ ์œผ๋กœ ์˜ˆ๋งคํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •

  • Transaction์€ Read COMMITED๋กœ ์„ค์ •ํ•˜๊ณ , Find Method์— Write Lock์„ ๊ฑธ์–ด ๋™์‹œ์„ฑ์„ ์ œ์–ดํ•œ๋‹ค.

    • ๋” ๋†’์€ Isolate Level์ด๋‚˜, Read Lock(๊ณต์œ ๋ฝ)์„ ์„ค์ • ์‹œ DeadLock ํ˜„์ƒ์ด ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์ 
  • Count Method๋Š” Row ์ˆ˜์ค€์˜ Lock์ด ๊ฑธ๋ฆฌ์ง€ ์•Š๋Š” ๋ถ€๋ถ„์„ ํ™•์ธํ•˜์˜€๋‹ค

    • Table ์ „์ฒด๋ฅผ ์กฐํšŒํ•˜์—ฌ ํ•ด๋‹นํ•˜๋Š” Row์˜ ๊ฐฏ์ˆ˜๋ฅผ Count ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Row ์ˆ˜์ค€์˜ Lock์€ ๊ฑธ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค.
  • ๋”ฐ๋ผ์„œ, Goods Table์— BookingCount Column์„ ์ถ”๊ฐ€ํ•œ ๋’ค, ํ•ด๋‹น Row์— Write Lock์„ ์ ์šฉํ•˜์˜€๋‹ค.

  • Transaction์„ ์„ค์ •ํ•  ๋•Œ, Transaction์˜ ์›๋ฆฌ, Lock์˜ ์ข…๋ฅ˜ ๋“ฑ์„ ์ž˜ ์ƒ๊ฐํ•˜์—ฌ ์ ์šฉํ•ด์•ผ ํ•œ๋‹ค ํŠนํžˆ, ๋‹ค์ˆ˜์˜ Transaction์„ ๋„์‹ํ™”ํ•˜๋ฉด์„œ ๋ถ„์„ํ•˜๋ฉด, ๋”์šฑ ๋น ๋ฅด๊ฒŒ ํ•ด๋ฒ•์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

504 Gateway Time-out Error

โ— Issue

  • ์•ฝ VUser 3500 / Run Count 1000 ์ด์ƒ์˜ ๋ถ€ํ•˜ ์กฐ๊ฑด์—์„œ 504 Gateway Time-Out Error ๋ฐœ์ƒ

๐Ÿ’ก Solution

  • ํ•œ ์„œ๋ฒ„๊ฐ€ ๋‹ค๋ฅธ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์ œ๋•Œ ์‘๋‹ต์„ ๋ฐ›์ง€ ๋ชปํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ์˜ timeout ๊ฐ’ ์„ค์ •์„ ํ†ตํ•ด ์ž์ฒด ๋Œ€๊ธฐ ์‹œ๊ฐ„ ๋ฐ ๋ฆฌ์†Œ์Šค ์ œํ•œ ํ•ด๊ฒฐ

๊ธฐ์ˆ ์Šคํƒ

๋ถ„๋ฅ˜ ๊ธฐ์ˆ 
Language
FrameWork
DB & ORM
Caching
Monitor
Test
Cloud & OS
Load Balance
Etc

๊ตฌ์„ฑ์›

์—ญํ•  ์ด๋ฆ„ ๊นƒํ—ˆ๋ธŒ
BE(ํŒ€์žฅ) ์œค๋ฌธ์—ด https://github.com/munyeol-Yoon
BE ๋ฐ•ํ˜•์ฃผ https://github.com/Hangju0610
BE ์‹ ์„ฑ์œค https://github.com/since1630
BE ์ด์ƒํ•œ https://github.com/tkdgks7036

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •