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

๐Ÿ–ฅ๏ธ ๋ญ”๊ฐ€๋ญ”๊ฐ€ํ”„๋กœ์ ํŠธ20

[TIL] ํ”„๋กœ์ ํŠธ 25์ผ์ฐจ.. ๊ตฌํ˜„ํ–ˆ๋˜ ๊ธฐ๋Šฅ๋“ค ๋งˆ๋ฌด๋ฆฌํ•˜๊ธฐ!! ๐ŸŒž ์˜ค๋Š˜์€ ์–ด๋–ค ํ•˜๋ฃจ์˜€์ง€..์˜ค์ „์—๋Š” ์ƒํ’ˆ ๊ฐ€๊ฒฉ ๋ณ€๋™ ๋กœ์ง์„ ๋งˆ๋ฌด๋ฆฌํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ์Ÿ์•˜๋‹ค.// ๊ฐ€๊ฒฉ ๊ด€๋ จ Kafka Listener@KafkaListener(topics = "${kafka.topic.price}", groupId = "${spring.kafka.consumer.product-combination.group-id}")public void listenPriceChange(@Header(KafkaHeaders.RECEIVED_KEY) String key, String value) { log.info("๐Ÿ“ฅ ๊ฐ€๊ฒฉ๋ณ€๋™ ๋ฉ”์‹œ์ง€ ์ˆ˜์‹ : key={}, value={}", key, value); try { OperationWrapperDto wrapperDto = JsonHelp.. 2025. 6. 12.
[TIL] ํ”„๋กœ์ ํŠธ 24์ผ์ฐจ.. ์ „์ฒด์ ์ธ ๋กœ์ง ๋งˆ๋ฌด๋ฆฌํ•˜๊ธฐ!! ๐ŸŒž ์˜ค๋Š˜์€ ์–ด๋–ค ํ•˜๋ฃจ์˜€์ง€..์šฐ์„  ํŒ€์›์˜ ํ”ผ๋“œ๋ฐฑ๋ถ€ํ„ฐ ์ฝ”๋“œ์— ๋ฐ˜์˜ํ–ˆ๋‹ค.Kafka๋กœ ์žฌ๊ณ  ๋ณต์› ์š”์ฒญ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๋Š” ๋ถ€๋ถ„์ด ์ค‘๋ณต๋˜์–ด์„œ ๋ฉ”์„œ๋“œ๋กœ ์ถ”์ถœํ•˜๋Š” ๊ฒƒ์ด ๋‚˜์•„ ๋ณด์ธ๋‹ค๋Š” ์˜๊ฒฌ์— ์ˆ˜๊ธํ•˜๊ณ  ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”์ถœํ–ˆ๋‹ค.private void sendInventoryRestoreMessage(CreateDeliveryRequest request) { String payload = JsonHelper.toJson(request); OperationWrapperDto wrapper = OperationWrapperDto.from(OperationType.DELIVERY_FAIL_INVENTORY_RESTORE, payload); String wrappedMessage = JsonHelper.toJson(wra.. 2025. 6. 11.
[TIL] ํ”„๋กœ์ ํŠธ 23์ผ์ฐจ.. ์นด์นด์˜คํ†ก ์•Œ๋ฆผ ๊ตฌํ˜„ํ•˜๊ธฐ!! ๐ŸŒž ์˜ค๋Š˜์€ ์–ด๋–ค ํ•˜๋ฃจ์˜€์ง€..๊ฐ€์žฅ ๋จผ์ € ๋ฐฐ์†ก ์ƒ์„ฑ ์‹คํŒจ ์‹œ ์žฌ๊ณ  ๋ณต์›์„ ์œ„ํ•œ ๋กœ์ง์„ ๊ตฌํ˜„ํ–ˆ๋‹ค.์ฃผ๋ฌธ ์ƒ์„ฑ ํ† ํ”ฝ์— ๋“ค์–ด๊ฐ€ ์žˆ๋˜ ์žฌ๊ณ  ๊ฐ์†Œ ๋กœ์ง๊ณผ ํ•จ๊ป˜ ๋”ฐ๋กœ ์žฌ๊ณ  ๊ด€๋ จ ํ† ํ”ฝ์„ ์ƒ์„ฑํ•ด์„œ ๋ฉ”์‹œ์ง€ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋„๋ก ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ํ–ˆ๋‹ค.// ์žฌ๊ณ  ๊ด€๋ จ Kafka Listener@KafkaListener(topics = "${kafka.topic.product}", groupId = "${spring.kafka.consumer.product.inventory.group-id}")public void listenInventory(@Header(KafkaHeaders.RECEIVED_KEY) String key, String value) { try { OperationWrapperDto wr.. 2025. 6. 10.
[TIL] ํ”„๋กœ์ ํŠธ 22์ผ์ฐจ.. ํ”„๋กœ์ ํŠธ ๊ณ ๋„ํ™” ์ž‘์—…ํ•˜๊ธฐ!! ๐ŸŒž ์˜ค๋Š˜์€ ์–ด๋–ค ํ•˜๋ฃจ์˜€์ง€..์ „์ฒด์ ์œผ๋กœ ๊ตฌํ˜„ํ•œ ๋‚ด์šฉ๋“ค์— ๋Œ€ํ•ด ๊ณ ๋„ํ™”๋ฅผ ์ง„ํ–‰ํ–ˆ๋‹ค!์šฐ์„  Slack ์•Œ๋ฆผ์ด ํ•„์š”ํ•œ ๊ณณ์— ์ถ”๊ฐ€์ ์œผ๋กœ ์•Œ๋ฆผ ๋ฉ”์‹œ์ง€๊ฐ€ ์ „์†ก๋  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„ํ–ˆ๋‹ค.์ฒ˜์Œ์—๋Š” ๋‹จ์ˆœํžˆ ์ถœ๊ณ ๋˜์—ˆ์„ ๋•Œ์™€ ๋ฐฐ์†ก ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ๋„ ๋˜‘๊ฐ™์ด Slack ์•Œ๋ฆผ์ด ์˜จ๋‹ค๋ฉด ํŽธํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.ํ•˜์ง€๋งŒ ์Šฌ๋ž™์€ ๊ฐœ๋ฐœ์ž๋“ค์ด ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ์•ฑ์ด์—ˆ๊ณ , ์‚ฌ์šฉ์ž๋“ค์ด ์Šฌ๋ž™์„ ์‚ฌ์šฉํ•˜์ง€๋Š” ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํ˜„์‹ค์„ฑ์ด ๋งŽ์ด ๋–จ์–ด์ง€๋Š” ์•Œ๋ฆผ์ด์—ˆ๋‹ค..๊ทธ๋ž˜์„œ ์–ด๋–ป๊ฒŒ ์•Œ๋ฆผ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด์ฃผ๋Š” ๊ฒƒ์ด ์ข‹์„๊นŒ? ์ƒ๊ฐํ–ˆ๊ณ , ๋ฌธ์ž ๋ฉ”์‹œ์ง€/์นด์นด์˜คํ†ก/์ด๋ฉ”์ผ์„ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.๊ทธ์ค‘์—์„œ ๋ฌธ์ž ๋ฉ”์‹œ์ง€๋Š” ์œ ๋ฃŒ ์„œ๋น„์Šค๋ผ๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ๊ณ , ์ด๋ฉ”์ผ๊ณผ ์นด์นด์˜คํ†ก ์ค‘ ์‚ฌ์šฉ์ž๋“ค์ด ๋” ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ƒ๊ฐํ•ด ๋ดค๋‹ค. ์šฐ๋ฆฌ๋‚˜๋ผ ์‚ฌ๋žŒ๋“ค์€ ์นด์นด์˜คํ†ก์„ ํ›จ์”ฌ ๋” ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.๊ทธ๋ž˜์„œ .. 2025. 6. 9.
[TIL] ํ”„๋กœ์ ํŠธ 18์ผ์ฐจ.. ์Šฌ๋ž™ ์•Œ๋ฆผ ๋งˆ๋ฌด๋ฆฌํ•˜๊ธฐ!! ๐ŸŒž ์˜ค๋Š˜์€ ์–ด๋–ค ํ•˜๋ฃจ์˜€์ง€..์šฐ์„  ์žฌ๊ณ  ๊ฐ์†Œ ์‹คํŒจ ๊ด€๋ จ Slack ์•Œ๋ฆผ์„ ๋งˆ๋ฌด๋ฆฌํ–ˆ๋‹ค!// ์žฌ๊ณ  ๊ฐ์†Œ ์‹คํŒจ ์•Œ๋ฆผ ๋ฉ”์‹œ์ง€ ์ƒ์„ฑpublic String formatInventoryDecreaseFailureMessage(Long orderId, String memberName, String productId, String productName, String reason, LocalDateTime time) { Map payload = getPayload(); List blocks = new ArrayList(); blocks.add(Map.of( "type", "header", "text", Map.of("type", "plain_text", "text", "โŒ ์žฌ๊ณ  .. 2025. 6. 5.
[TIL] ํ”„๋กœ์ ํŠธ 17์ผ์ฐจ.. Slack ์•Œ๋ฆผ ๊ตฌํ˜„ํ•˜๊ธฐ!! ๐ŸŒž ์˜ค๋Š˜์€ ์–ด๋–ค ํ•˜๋ฃจ์˜€์ง€..์˜ค๋Š˜์€ Slack Webhook์„ ์ด์šฉํ•˜์—ฌ ์•Œ๋ฆผ์„ ๊ตฌํ˜„ํ–ˆ๋‹ค!๋จผ์ € Slack ์›Œํฌ์ŠคํŽ˜์ด์Šค๋ถ€ํ„ฐ ์ƒ์„ฑํ•œ ํ›„์— ์•ฑ์„ ์ƒ์„ฑํ–ˆ๋‹ค.Slack Webhook์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋ฌด์กฐ๊ฑด ์•ฑ์„ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค.Webhook์€ Slack ์•ฑ์— ๊ท€์†๋˜๊ธฐ ๋•Œ๋ฌธ์—, ์•ฑ ์—†์ด Webhook URL์„ ๋ฐœ๊ธ‰๋ฐ›์„ ์ˆ˜๋Š” ์—†๋‹ค..Slack ์›Œํฌ์ŠคํŽ˜์ด์Šค์™€ ์•ฑ ์ƒ์„ฑ ๋ฐฉ๋ฒ•์€ ๋ฐ‘์— ๋‚จ๊ฒจ๋‘๊ฒ ๋‹ค!๊ทธ๋‹ค์Œ "Slack์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•˜๋Š” ์—ญํ• ๋งŒ ๋‹ด๋‹น"ํ•˜๋Š” ๋‹จ์ผ ์ฑ…์ž„ ํด๋ž˜์Šค๋กœ SlackNotifier๋ฅผ ์„ค๊ณ„ํ–ˆ๋‹ค.application.yml ์„ค์ •slack: webhook: url: url ์ฃผ์†Œ ์ž…๋ ฅSlackNotifier ํด๋ž˜์Šค ๊ตฌํ˜„@Slf4j@Component@RequiredArgsConstructorpublic class S.. 2025. 6. 4.