[๐Ÿ”ฅTroubleShooting - TicToc๐Ÿ”ฅ] ์žฅ๊ธฐ ํ”„๋กœ์ ํŠธ ์ด๋Œ€๋กœ.. ๊ดœ์ฐฎ์„๊นŒ..โ“๐Ÿ’ฆ๐Ÿ’ฆ

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

TicToc

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

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

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


๐Ÿ”ฅTroubleShooting๐Ÿ”ฅ

Problems

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


How

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


Process

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด, ๋จผ์ € tictoc-api ๋ชจ๋“ˆ์˜ Controller ๊ณ„์ธต์—์„œ ์ด๋ฅผ ์ˆ˜์‹ ํ•œ๋‹ค. ๊ทธ ๋‹ค์Œ, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์˜ ์ธํ„ฐํŽ˜์ด์Šค ๊ณ„์ธต์ธ UseCase๋ฅผ ํ†ตํ•ด ์š”์ฒญ์ด ์ „๋‹ฌ๋˜๋ฉฐ, ํ•ด๋‹น ์š”์ฒญ์€ ๊ตฌํ˜„์ฒด์ธ Service ๊ณ„์ธต์—์„œ ์ฒ˜๋ฆฌ๋œ๋‹ค.
๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ณผ์ •์—์„œ ๋„๋ฉ”์ธ ๊ฐ์ฒด ๋ฐ DB ์ ‘๊ทผ์ด ํ•„์š”ํ•  ๊ฒฝ์šฐ, tictoc-domain ๋ชจ๋“ˆ์˜ Port ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•œ๋‹ค. ๊ทธ ๋‹ค์Œ, Port ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ตฌํ˜„์ฒด์ธ Adaptor๋Š” Repository๋ฅผ ํ™œ์šฉํ•˜์—ฌ DB์— ์ ‘๊ทผํ•˜์—ฌ ์ˆ˜ํ–‰ํ•˜๋Š” ํ๋ฆ„์ด๋‹ค.

์œ„ ์‚ฌ์ง„์„ ๋ณด๋ฉด DB๊ฐ€ Master์™€ Slave๋กœ ๋‚˜๋ˆ ์ ธ ์žˆ๊ณ , Query์™€ Command๋ผ๋Š” ๋‹จ์–ด๊ฐ€ ๋ณด์ธ๋‹ค. ์ด๋Š” ๋‹ค์Œ ๊ธ€์—์„œ ์ž์„ธํžˆ ๋‹ค๋ฃจ๊ฒ ์ง€๋งŒ, ์ดํ•ด๋ฅผ ๋•๊ธฐ ์œ„ํ•ด ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•˜๊ฒ ๋‹ค.

Query์™€ Command๋ฅผ ๋‚˜๋ˆ„๋Š” ๊ธฐ์ค€์€ ํฌ๊ฒŒ ์—ญํ• ์ด "์“ฐ๊ธฐ"๋ƒ "์ฝ๊ธฐ"๋ƒ์— ๋”ฐ๋ผ ๊ฒฐ์ •ํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋Š” ์ด์œ ๋Š” CQRSํŒจํ„ด, DB๋ถ„๋ฆฌ, ์†๋„ ๊ฐœ์„ , ๋“ฑ ์—ฌ๋Ÿฌ ์ด์œ ๊ฐ€ ์žˆ๊ฒ ์ง€๋งŒ, ์ €๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ์ตœ๋Œ€ํ•œ ๋ชจ๋“ˆํ™”ํ•˜๊ณ  ์‹ถ๊ณ  ๊ฐ์ฒด๋ฅผ ์—ญํ•  ๋ณ„๋กœ ๊น”๋”ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•˜๊ณ  ์‹ถ์–ด์„œ ์œ„ ๋„ค์ด๋ฐ ๋ฒ•์น™์„ ๊ฐ€์ ธ์˜ค๊ณ  ์žˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” DB๋ฅผ Mysql์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ์ด๋ฅผ Master์™€ Slave๋กœ ๋‚˜๋ˆ ์„œ ์œ„ ์œ„ ์‚ฌ์ง„๋Œ€๋กœ ๊ด€๋ฆฌํ•  ์˜ˆ์ •์ด๋‹ค.


Result

๋ฌธ์ œ ํ•ด๊ฒฐ๋กœ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป์—ˆ๋‹ค.
1. ์œ ์ง€๋ณด์ˆ˜์„ฑ ๋ฐ ํ™•์žฅ์„ฑ ํ–ฅ์ƒ.
2. ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๋กœ์ง ๋ถ„๋ฆฌ.

์ตœ์ข… ํ”„๋กœ์ ํŠธ ๋ชจ๋“ˆ ํ˜•ํƒœ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

๋˜ "๊ฒฝ๋งค ๋“ฑ๋ก" ๊ธฐ๋Šฅ์„ ์•„๋ž˜์™€ ๊ฐ™์ด ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜๋กœ ๊ตฌํ˜„ํ–ˆ๋‹ค.

๐Ÿ“ AuctionCommandController.java

๐Ÿ“ AuctionCommandUseCase.java

๐Ÿ“ AuctionCommandService.java

๐Ÿ“ AuctionRepositoryPort.java

๐Ÿ“ AuctionRepositoryAdapter.java

๐Ÿ“ AuctionRepository.java


Thoughts

์ด์ „๊นŒ์ง€ ๋‹จ์ผ๋ชจ๋“ˆ๋กœ ๊ฐœ๋ฐœ์„ ํ•ด์™”์—ˆ๊ณ  ๋ฉ€ํ‹ฐ๋ชจ๋“ˆ์ด ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์ด๋ฒˆ์— ์ฒ˜์Œ ์•Œ์•˜๋‹ค. ์ด์ „๊นŒ์ง€ ๋‹จ์ผ๋ชจ๋“ˆ๋กœ ๊ฐœ๋ฐœ์„ ํ•˜๋ฉด์„œ ๋””๋ ‰ํ† ๋ฆฌ์™€ ํด๋ž˜์Šค์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚  ๋•Œ๋งˆ๋‹ค ๊ด€๋ฆฌํ•˜๊ณ  ์›ํ•˜๋Š” ํŒŒ์ผ ์ฐพ๊ธฐ๊ฐ€ ์–ด๋ ค์› ์—ˆ๋‹ค.
์ด๋ฒˆ ๋ฉ€ํ‹ฐ๋ชจ๋“ˆ๋กœ ๋ณ€๊ฒฝํ•œ ํ›„ ๊ฐœ๋ฐœ์„ ์ญ‰ ๋Œ€๋žต 2๊ฐœ์›” ๊ฐ€๊นŒ์ด ์ง„ํ–‰ํ•ด ๋ณด์•˜๋Š”๋ฐ, ํ™•์‹คํžˆ ์›ํ•˜๋Š” ํŒŒ์ผ ์ฐพ๊ธฐ๊ฐ€ ๋‹จ์ผ๋ชจ๋“ˆ์ผ ๋•Œ๋ณด๋‹ค ํ›จ์”ฌ ์ˆ˜์›”ํ•ด์กŒ๋‹ค.

ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜๋ผ๋Š” ๋‹จ์–ด ๋˜ํ•œ ์ด๋ฒˆ์— ์ฒ˜์Œ ๋“ค์–ด๋ดค๋‹ค. ์ฒ˜์Œ์—๋Š” ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋จผ์ € ์•Œ๊ฒŒ ๋˜์—ˆ์–ด์„œ ์ด๋ฅผ ์ ์šฉํ•ด ๋ณด๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ, ๊ตฌ๊ธ€์—์„œ ๋ž˜ํผ๋Ÿฐ์Šค๋ฅผ ์ฐพ๊ธฐ๊ฐ€ ์‰ฝ์ง€ ์•Š์•˜๋‹ค. ๊ทธ๋ž˜์„œ ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜์—์„œ ํŒŒ์ƒ๋œ ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜๊ฐ€ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ๊ณ  ์•Œ์•„๋ณด๊ฒŒ ๋˜์—ˆ๊ณ , ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜๋ณด๋‹ค ๋ž˜ํผ๋Ÿฐ์Šค๋„ ๋งŽ์ด ์žˆ๊ธฐ์— ์ด๋ฅผ ํƒํ–ˆ๋‹ค.
์ ์šฉํ•œ ๊ฒฐ๊ณผ, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‚˜ ์™ธ๋ถ€ API์— ์ง์ ‘ ์˜์กดํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ,
UseCase, Port์™€ ๊ฐ™์€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œํ•œํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์ด ๋•๋ถ„์— DB ๋‚ด์šฉ์„ ๋ณ€๊ฒฝํ•  ๋•Œ, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†์–ด์ง€๋Š” ์žฅ์ ๊ณผ ์ฝ”๋“œ๊ฐ€ ํ›จ์”ฌ ๊น”๋”ํ•ด์ง€๋Š” ํšจ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

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


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

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

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