[๐Ÿ”ฅTroubleShooting - TicToc๐Ÿ”ฅ] ๋ˆ์ด ๊ฑธ๋ฆฐ ๋ฌธ์ œโ€ผ๏ธ 1๋ช…๋งŒ ์ž…์ฐฐ ์„ฑ๊ณต โœ…, 4999๋ช… ์ž…์ฐฐ ์‹คํŒจ โŒ

._mungยท2025๋…„ 3์›” 8์ผ
0

TicToc

๋ชฉ๋ก ๋ณด๊ธฐ
5/6

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

ํŒ€์› : ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ
๊ธฐ๊ฐ„ : 2025.01 ~ ์ง„ํ–‰ ์ค‘
๋งํฌ : https://github.com/M-ung/TicToc_Server
์„œ๋น„์Šค ๋‚ด์šฉ : ๋‹น์‹ ์˜ ์‹œ๊ฐ„์— ๊ฐ€์น˜๋ฅผ ๋งค๊ธฐ๋‹ค, ์‹œ๊ฐ„ ๊ฑฐ๋ž˜ ๊ฒฝ๋งค ํ”Œ๋žซํผ


๐Ÿ”ฅTroubleShooting๐Ÿ”ฅ

Problems

์šฐ๋ฆฌ ์„œ๋น„์Šค "TicToc"์˜ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด์„œ ๊ณ ๋ฏผํ•  ์‹œ๊ฐ„์ด๋‹ค. ๋ฐ”๋กœ "์ž…์ฐฐ ๊ธฐ๋Šฅ" ์ด๋‹ค.
๋‹จ์ˆœํžˆ Bid ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ €์žฅํ•ด์„œ ์ž…์ฐฐ์„ ํ•˜๋Š” ๋ฐฉ์‹์€ ๋™์‹œ์„ฑ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๋™์‹œ์„ฑ ๋ฌธ์ œ๋ž€?
๋™์‹œ์„ฑ ๋ฌธ์ œ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŠธ๋žœ์žญ์…˜์ด ๋™์ผํ•œ ๋ฐ์ดํ„ฐ์— ๋™์‹œ ์ ‘๊ทผํ•˜์—ฌ ์˜ˆ๊ธฐ์น˜ ์•Š์€ ๊ฒฐ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด ์šฐ๋ฆฌ TicToc ์„œ๋น„์Šค์˜ ์ž…์ฐฐ ๊ธฐ๋Šฅ์€ ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐ™์€ ๊ฒฝ๋งค์— ๋™์‹œ์— ์ž…์ฐฐํ•  ๋•Œ, ์ž…์ฐฐ ๊ฒฐ๊ณผ๊ฐ€ ์˜ˆ์ƒ๊ณผ ๋‹ค๋ฅด๊ฒŒ ๋ฐ˜์˜๋˜๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

์šฐ๋ฆฌ ์„œ๋น„์Šค๋Š” ๋ˆ์œผ๋กœ ์ž…์ฐฐ์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ •ํ™•ํžˆ ์ž…์ฐฐ ๊ฒฐ๊ณผ๋ฅผ ์•Œ๋ ค์•ผ ํ•œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— "์ž…์ฐฐ ๊ธฐ๋Šฅ"์„ ๊ตฌํ˜„ํ•˜๋ฉด์„œ ์˜ค๋žœ ๊ณ ๋ฏผ์„ ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

๊ถ๊ธˆ์ ์œผ๋กœ ๋ฌธ์ œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

1. ๋™์ผํ•œ ๋ฐ์ดํ„ฐ์— ๋™์‹œ ์ ‘๊ทผํ•˜๋Š” ๋™์‹œ์„ฑ ๋ฌธ์ œ ํ•ด๊ฒฐ
2. ์—ฌ๋Ÿฌ ์ ‘๊ทผ ์ค‘์— ๋”ฑ ํ•˜๋‚˜์˜ ์ ‘๊ทผ๋งŒ ๊ฐ€์ ธ์˜ค๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋กค๋ฐฑ


How

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


Process

๋จผ์ € ๋ถ„์‚ฐ ๋ฝ์„ ํ™œ์šฉํ•ด์„œ ๋‹จ ํ•˜๋‚˜์˜ ์ž…์ฐฐ๋งŒ ์„ฑ๊ณตํ•  ์ˆ˜ ์žˆ๊ฒŒ ๊ตฌํ˜„ํ–ˆ๋‹ค.

๋˜ ๋‹จ์ˆœํžˆ ๋ถ„์‚ฐ ๋ฝ๋งŒ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ฝ์„ ํš๋“ํ–ˆ์„ ๋•Œ, ์›์ž์  ์—ฐ์‚ฐ์„ ํ†ตํ•ด ๋ฐ”๋กœ currentPrice๋ฅผ ์ฆ‰์‹œ DB์— ์—…๋ฐ์ดํŠธํ•ด ์ฃผ์—ˆ๋‹ค.

๊ทธ ํ›„ ์ž…์ฐฐ ๋กœ์ง์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์ง„ํ–‰ํ–ˆ๊ณ , ๋ฐ”๋กœ ๋ฝ์„ ํ•ด์ œํ–ˆ์„ ๋•Œ ๋Œ€๊ธฐ ์ค‘์ด์—ˆ๋˜ ์ž…์ฐฐ์ด ์„ฑ๊ณต๋  ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•ด Thread.sleep(RedisConstants.LOCK_LEASE_TIME * 1000); ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋”œ๋ ˆ์ด ์ „๋žต์„ ์ ์šฉํ–ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ Bid ํ…Œ์ด๋ธ”์— beforePrice ๋ผ๋Š” ์ž…์ฐฐ ์„ฑ๊ณต ์ „ ๊ฐ€๊ฒฉ์„ ์ €์žฅํ•˜๊ณ , @Table(name = "bid", uniqueConstraints = @UniqueConstraint(columnNames = {"auctionId", "beforePrice"})) ์œ ๋‹ˆํฌ ์ œ์•ฝ ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค.

์œ ๋‹ˆํฌ ์ œ์•ฝ ์กฐ๊ฑด์œผ๋กœ ์ธํ•ด Bid ํ…Œ์ด๋ธ”์—๋Š” ํ•˜๋‚˜์˜ auctionId์—๋Š” ์ค‘๋ณต๋˜๋Š” beforePrice๊ฐ€ ์˜ฌ ์ˆ˜ ์—†๊ธฐ์— ๊ฐ™์€ ๊ฒฝ๋งค๊ฐ€์— ์ž…์ฐฐ์„ ์„ฑ๊ณตํ•˜๋Š” Bid๊ฐ€ 2๊ฐœ ์ด์ƒ ์กด์žฌํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค.


Result

๋ฌธ์ œ ํ•ด๊ฒฐ๋กœ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป์—ˆ๋‹ค.
1. โ€œ์›์ž์  ์—ฐ์‚ฐ + ๋ถ„์‚ฐ ๋ฝ + ๋”œ๋ ˆ์ด + ์œ ๋‹ˆํฌ ์ œ์•ฝ ์กฐ๊ฑดโ€ โ†’ ๋™์‹œ์„ฑ ๋ฌธ์ œ ํ•ด๊ฒฐ.
2. 5,000๊ฑด ๊ธฐ์ค€, ๋™์‹œ ์ž…์ฐฐ ์š”์ฒญ ์ค‘ 1๊ฑด ์„ฑ๊ณต, 4,999๊ฑด ์‹คํŒจ.
3. ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์„ 100% ๋ณด์žฅ.
4. ์„œ๋น„์Šค์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ โ€œ์ž…์ฐฐโ€ ์„ ๋งค์šฐ ์•ˆ์ „ํ•˜๊ฒŒ ์šด์˜ ๊ฐ€๋Šฅ.

์ตœ์ข…์ ์œผ๋กœ "์›์ž์  ์—ฐ์‚ฐ + ๋ถ„์‚ฐ ๋ฝ + ๋”œ๋ ˆ์ด + ์œ ๋‹ˆํฌ ์ œ์•ฝ ์กฐ๊ฑด" ์„ ํ™œ์šฉํ•˜์—ฌ 5000๋ช… ์ด ๋™์‹œ์— ์ž…์ฐฐ ์‹œ๋„๋ฅผ ํ–ˆ์„ ๋•Œ, "1๋ช…๋งŒ ์ž…์ฐฐ ์„ฑ๊ณต โœ…, 4999๋ช… ์ž…์ฐฐ ์‹คํŒจ โŒ" ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.


Thoughts

"์ž…์ฐฐ ๊ธฐ๋Šฅ" ํ•˜๋‚˜๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ์— ๋งŽ์€ ์‹œ๊ฐ„ ๋™์•ˆ ๋งŽ์€ ๊ณต๋ถ€๋ฅผ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๋‹จ์ˆœํžˆ ์–ด๋…ธํ…Œ์ด์…˜์„ ๋ถ™์ด ๋™์‹œ์„ฑ ์ œ์–ด์—์„œ ๋๋‚ด๋Š” ๊ฒƒ์ด ์•„๋‹Œ Redis๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ถ„์‚ฐ ๋ฝ์„ ํ™œ์šฉํ–ˆ๊ณ , ๋‹จ์ˆœํžˆ ๋ถ„์‚ฐ ๋ฝ์—์„œ ๋๋‚ด๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๋”œ๋ ˆ์ด ์ „๋žต์„ ํ™œ์šฉํ•ด ์•ˆ์ „์„ฑ์„ ๋ณด์žฅํ–ˆ๋‹ค. ๋˜ ์ด์—์„œ ๋๋‚ด๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ์›์ž์  ์—ฐ์‚ฐ๊ณผ ์œ ๋‹ˆํฌ ์ œ์•ฝ ์กฐ๊ฑด์„ ํ†ตํ•ด ๋”์šฑ ์•ˆ์ „์„ฑ์„ ๋ณด๊ฐ•ํ–ˆ๋‹ค.

์ด๋ฒˆ ๊ฒฝํ—˜์„ ํ†ตํ•ด ๋™์‹œ์„ฑ ์ œ์–ด์˜ ์ค‘์š”์„ฑ์„ ๋‹ค์‹œ ๊นจ๋‹ฌ์•˜๊ณ , ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์˜ ์‹ ๋ขฐ์„ฑ์ด ์„œ๋น„์Šค ์•ˆ์ •์„ฑ์— ์ง์ ‘์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค๋Š” ์ ์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์•ž์œผ๋กœ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ๊พธ์ค€ํžˆ ์ž‘์„ฑํ•˜์—ฌ ๋”์šฑ ์•ˆ์ •์„ฑ๊ณผ ์‹ ๋ขฐ์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋กœ ์„ฑ์žฅํ•ด์•ผ๊ฒ ๋‹ค.


profile
๐Ÿ’ป ๐Ÿ’ป ๐Ÿ’ป

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด