๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ285

[TIL] ํ”„๋กœ์ ํŠธ 15์ผ์ฐจ.. ํ”„๋กœ์ ํŠธ ๋ฆฌํŒฉํ† ๋ง ๋ฐ ๊ณ ๋„ํ™” ๊ณ ๋ฏผํ•˜๊ธฐ! ๐ŸŒž ์˜ค๋Š˜์€ ์–ด๋–ค ํ•˜๋ฃจ์˜€์ง€..์˜ค๋Š˜์€ ํŒ€์›๋ถ„์ด ํ’€๋ฆฌํ€˜ ์˜ฌ๋ฆฌ๊ณ  merge ๋œ ์ฝ”๋“œ๋ฅผ pull ๋ฐ›์•„์„œ ๋‚ด ์ฝ”๋“œ๋ฅผ ์˜ฎ๊ธฐ๋Š” ์ž‘์—…์„ ํ–ˆ๋‹ค.์ง€๊ธˆ๊นŒ์ง€๋Š” ๋‚ด๊ฐ€ ๊ฐœ์ธ์ ์œผ๋กœ ํ…Œ์ŠคํŠธ Controller๋ฅผ ๋งŒ๋“ค๊ณ  ๊ฑฐ๊ธฐ์„œ ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด์ œ๋Š” ํŒ€์›์˜ ์ฝ”๋“œ์™€ ํ•ฉ์ณ์•ผ ํ•˜๋‹ˆ ๋‚ด ์ฝ”๋“œ๊ฐ€ ์ž˜ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ์˜ฎ๊ธฐ๋Š” ์ž‘์—…์„ ํ–ˆ๋‹ค!์™„๋ฒฝํ•˜๊ฒŒ ๋‹ค ์˜ฎ๊ธฐ๋ ค๊ณ  ํ–ˆ์ง€๋งŒ ๊ฒฐ์ œ ํŒŒํŠธ์—์„œ ๋„˜์–ด์˜ค๋Š” DTO๋ฅผ ์˜ˆ์ƒํ•  ์ˆ˜ ์—†์–ด์„œ ๋กœ์ง์„ ๋‹ค ์ž‘์„ฑํ•˜์ง€ ๋ชปํ•˜๊ณ  ์šฐ์„ ์€ ํ‹€๋งŒ ์žก์•„๋‘๊ณ  ํŒ€์›์˜ ์–‘์‹๋Œ€๋กœ ๋‚˜๋จธ์ง€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค.case INVENTORY_DECREASE -> { // todo ๊ฒฐ์ œ ํŒŒํŠธ์—์„œ ์ „๋‹ฌ๋˜๋Š” payload ๊ตฌ์กฐ ํ™•์ธ ํ›„ DTO ์ •์˜ // log.info("๐Ÿ“ฅ Kafka ์žฌ๊ณ  ๊ฐ์†Œ ๋ฉ”์‹œ์ง€ ์ˆ˜์‹ : {}", message);.. 2025. 6. 4.
[TIL] ํ”„๋กœ์ ํŠธ 12์ผ์ฐจ.. ์žฌ๊ณ  ๊ฐ์†Œ ๋กœ์ง๊ณผ ๋ฐฐ์†ก ์ƒ์„ฑ ๋กœ์ง ์—ฐ๊ฒฐ ๋งˆ๋ฌด๋ฆฌํ•˜๊ธฐ! ๐ŸŒž ์˜ค๋Š˜์€ ์–ด๋–ค ํ•˜๋ฃจ์˜€์ง€..์˜ค๋Š˜์€ ์ง„์งœ ์ง„์งœ ๋งˆ์ง€๋ง‰์œผ๋กœ ์žฌ๊ณ  ๊ฐ์†Œ ๋กœ์ง๊ณผ ๋ฐฐ์†ก ์ƒ์„ฑ ๋กœ์ง์„ ์—ฐ๊ฒฐํ•˜๋Š” ์ž‘์—…์„ ๋งˆ๋ฌด๋ฆฌํ–ˆ๋‹ค.์ฃผ๋ฌธ์„ ์ƒ์„ฑํ•˜๋Š” ์‹œ์ ์—์„œ ๋ฐฐ์†ก ์ƒ์„ฑ์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ๋‹ด๊ณ  ๊ฒฐ์ œ ํŒŒํŠธ๋กœ ๋„˜๊ฒจ์ฃผ๊ณ  ์žˆ์—ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์–ด์ œ ๊ณ„์† ๊ณ ๋ฏผํ–ˆ๋˜ ๋ฐฐ์†ก ์ƒ์„ฑ์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์—†์–ด ๋ณด์˜€๋‹ค.์ฃผ๋ฌธ → ๊ฒฐ์ œ → ์žฌ๊ณ  ๊ฐ์†Œ → ๋ฐฐ์†ก๊นŒ์ง€ ์˜ค๋ฉด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ๋‹ด๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— DB๋ฅผ ์กฐํšŒํ•ด์„œ ํ•˜์ง€ ์•Š์•„๋„ RequestDTO ๋‚ด์— ์ „๋ถ€ ์žˆ์–ด์„œ Service์˜ ๋กœ์ง์ด ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.๊ทธ๋ ‡๋‹ค๋ฉด ๊ฒฐ์ œ์—์„œ๋„ ๋ฐ์ดํ„ฐ๋ฅผ ์ž˜ ๋„˜๊ฒจ์ฃผ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ๋„˜๊ฒจ์ฃผ์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋‹ด๋‹น ํŒ€์›์—๊ฒŒ ๋ถ€ํƒํ•ด์„œ ๋ฐ์ดํ„ฐ ๊ทธ๋Œ€๋กœ ๋„˜๊ฒจ๋‹ฌ๋ผ๊ณ  ์š”์ฒญํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.๊ทธ๋Ÿผ ๋‚œ ๊ทธ ์•ˆ์—์„œ ์žฌ๊ณ  ๊ฐ์†Œ ๋กœ์ง ์ดํ›„์— ๋ฐฐ์†ก ์ƒ์„ฑ ์š”์ฒญ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ผ.. 2025. 6. 4.
[๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค] ๋‚˜๋งŒ ๋ชจ๋ฅด๋Š” ์ค„ ์•Œ์•˜๋˜ ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค.. ๐Ÿ“จ ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๋ž€ ๋ฌด์—‡์ผ๊นŒ..?์„œ๋กœ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์ด๋‚˜ ํ”„๋กœ๊ทธ๋žจ๋ผ๋ฆฌ "๋ฉ”์‹œ์ง€(๋ฐ์ดํ„ฐ)"๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ์ค‘๊ฐ„์—์„œ ์ „๋‹ฌํ•ด ์ฃผ๋Š” ์†Œํ”„ํŠธ์›จ์–ด์ด๋‹ค.์‰ฝ๊ฒŒ ๋งํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๊ณ  ์‹ถ์€ ์‹œ์Šคํ…œ๊ณผ ์ˆ˜์‹ ํ•  ์‹œ์Šคํ…œ ์‚ฌ์ด์— ์ค‘๊ฐ„ ์ „๋‹ฌ์ž ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ๐Ÿ“จ ๊ทธ๋ ‡๋‹ค๋ฉด ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๊ฐ€ ์™œ ํ•„์š”ํ• ๊นŒ??โŒ ๊ธฐ์กด ๋ฐฉ์‹ : A ํ”„๋กœ๊ทธ๋žจ → ์ง์ ‘ B ํ”„๋กœ๊ทธ๋žจ ํ˜ธ์ถœ๐Ÿ‘‰ A์™€ B๊ฐ€ ์„œ๋กœ ๊ฐ•ํ•˜๊ฒŒ ์—ฐ๊ฒฐ๋œ๋‹ค. (Coupling)๐Ÿ‘‰ B๊ฐ€ ๋А๋ฆฌ๊ฑฐ๋‚˜ ์žฅ์• ๊ฐ€ ๋‚˜๋ฉด A๋„ ์˜ํ–ฅ์„ ๋ฐ›๋Š”๋‹ค.๐Ÿ‘‰ ๋น„๋™๊ธฐ ๋ถˆ๊ฐ€๋Šฅ → ํ™•์žฅ์„ฑ/์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ต๋‹ค.โœ… ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค ์‚ฌ์šฉ : A ํ”„๋กœ๊ทธ๋žจ → ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค → B ํ”„๋กœ๊ทธ๋žจ๐Ÿ‘‰ A๋Š” ๋ฉ”์‹œ์ง€๋งŒ ๋ณด๋‚ด๋ฉด ๋์ด๋‹ค. (B๊ฐ€ ์ฃฝ์–ด ์žˆ์–ด๋„ ๊ดœ์ฐฎ๋‹ค.)๐Ÿ‘‰ A์™€ B๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค. (๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.)๐Ÿ‘‰.. 2025. 5. 30.
[TIL] ํ”„๋กœ์ ํŠธ 11์ผ์ฐจ.. ๋“œ๋””์–ด ์žฌ๊ณ  ๊ฐ์†Œ๋ž‘ ๋ฐฐ์†ก ์ƒ์„ฑ์ด๋ž‘ ์—ฐ๊ฒฐ์„?! ๐ŸŒž ์˜ค๋Š˜์€ ์–ด๋–ค ํ•˜๋ฃจ์˜€์ง€..์˜ค๋Š˜์€ ๋“œ๋””์–ด ์žฌ๊ณ  ๊ฐ์†Œ ๋กœ์ง์ด๋ž‘ ๋ฐฐ์†ก ์ƒ์„ฑ ๋กœ์ง์„ Kafka๋ฅผ ํ™œ์šฉํ•ด์„œ ์—ฐ๊ฒฐํ•˜๋ ค๊ณ  ํ–ˆ๋‹ค!๊ทผ๋ฐ ๋ง‰์ƒ ์—ฐ๊ฒฐํ•˜๋ ค๊ณ  ์„ค๊ณ„๋ฅผ ํ•˜๋‹ค ๋ณด๋‹ˆ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.. ๋ฐฐ์†ก์„ ์ƒ์„ฑํ•  ๋•Œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋“ค์„ ์ „๋ถ€ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์—†๋Š” ๊ฒƒ์ด์—ˆ๋‹ค..๋ฐฐ์†ก์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” orderId, sellerId, senderId, addressId, deliveryRequest ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.ํ•˜์ง€๋งŒ ์ง€๊ธˆ ๋‹น์žฅ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ orderId์™€ sellerId์ด๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋ฐ›์•„์˜ฌ ์ˆ˜ ์—†๋Š” ๊ฒƒ์ด์—ˆ๋‹ค..๊ทธ๋ž˜์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐ™์ด ์ง„ํ–‰ํ•˜๋Š” ํŒ€์›๋“ค๊ณผ ์–˜๊ธฐํ•ด๋ณธ ๊ฒฐ๊ณผ Sender(์ถœ๊ณ ์ง€(๋ฌผ๋ฅ˜์„ผํ„ฐ))์™€ Seller(ํŒ๋งค์ž) ์‚ฌ์ด์—๋Š” ์—ฐ๊ด€๊ด€๊ณ„๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ํŒ๋งค์ž๊ฐ€ ์–ด๋А ์ถœ๊ณ ์ง€(๋ฌผ๋ฅ˜์„ผํ„ฐ)๋กœ ์ƒํ’ˆ์„ ๋ณด๋‚ด์„œ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ–ˆ๋‹ค... 2025. 5. 29.
[ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…] ์˜ˆ์™ธ ๋ฉ”์‹œ์ง€๊ฐ€ null๋กœ ์ถœ๋ ฅ๋œ ๋ฌธ์ œ.. ๐Ÿ› ๋ฌธ์ œ ํ˜„์ƒKafka Consumer์—์„œ ConflictException์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, ๋กœ๊ทธ ๋ฉ”์‹œ์ง€๊ฐ€ null๋กœ ์ถœ๋ ฅ๋๋‹ค.โš ๏ธ ์žฌ๊ณ  ๋ถ€์กฑ์œผ๋กœ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ ์‹คํŒจ: null→ getMessage()๋กœ ์˜ˆ์™ธ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ–ˆ์ง€๋งŒ, null์ด ๋‚˜์™”๋‹ค. ๐Ÿ” ์›์ธ ๋ถ„์„โœ… ๊ธฐ์กด ์ฝ”๋“œ ๊ตฌ์กฐpublic class ConflictException extends CustomRuntimeException { public ConflictException(ErrorCode errorCode) { super(errorCode); // message๋Š” ์ „๋‹ฌํ•˜์ง€ ์•Š์Œ }}@Getter@RequiredArgsConstructorpublic class CustomRuntimeException extends .. 2025. 5. 28.
[ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…] Kafka Consumer ์žฌ์‹œ๋„ ์‹คํŒจ๋กœ ์ธํ•œ ๋ฉ”์‹œ์ง€ ์œ ์‹ค.. ๐Ÿ› ๋ฌธ์ œ ํ˜„์ƒKafka ๋ฉ”์‹œ์ง€๋ฅผ ์ •์ƒ์ ์œผ๋กœ ์ˆ˜์‹ ํ•œ ํ›„ ์ฒ˜๋ฆฌ ๊ณผ์ •์—์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, ๊ฐ™์€ ๋กœ๊ทธ๊ฐ€ ๋ฐ˜๋ณต ์ถœ๋ ฅ๋˜๋ฉด์„œ ๊ฒฐ๊ตญ ๋ฉ”์‹œ์ง€๊ฐ€ ํ๊ธฐ๋˜์—ˆ๋‹ค..Backoff FixedBackOff{interval=0, currentAttempts=10, maxAttempts=9} exhausted for stock-management-topic-0@3 ๐Ÿ“Œ ์ฃผ์š” ๋กœ๊ทธListener method 'public void ... listen(...)' threw exception...Caused by: turtleMart.global.exception.ConflictException...DefaultErrorHandler : Backoff FixedBackOff{...} exhausted ๐Ÿ” ์›์ธ ๋ถ„์„Spring Ka.. 2025. 5. 28.