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

IT/Kafka, ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ14

Kafka Streams์™€ ์Šคํ”„๋ง ๋ถ€ํŠธ ํ†ตํ•ฉ: ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์ถ•ํ•˜๊ธฐ Apache Kafka Streams ๋Š” ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆฌ๋ฐ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฐ•๋ ฅํ•œ API๋กœ, Kafka์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” Kafka Streams API ์™€ ์Šคํ”„๋ง ๋ถ€ํŠธ ๋ฅผ ํ†ตํ•ฉํ•˜์—ฌ ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ƒํƒœ ์ €์žฅ ๋ณ€ํ™˜ ๊ณผ ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ์ฟผ๋ฆฌ ๋ฅผ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ƒํƒœ ์ €์žฅ์†Œ ๋ฅผ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•˜๋Š”์ง€๋„ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค.   1. Kafka Streams API ์†Œ๊ฐœ Kafka Streams ๋Š” Apache Kafka ์œ„์—์„œ ๋™์ž‘ํ•˜๋Š” ์ŠคํŠธ๋ฆผ ์ฒ˜๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋กœ, ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ณ€ํ™˜, ํ•„ํ„ฐ๋ง, ์ง‘๊ณ„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ๋ถ„์‚ฐ ํ™˜๊ฒฝ ์—์„œ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ์–ด ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆฌ๋ฐ .. IT/Kafka, ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ 2024. 10. 23.
Kafka ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ…Œ์ŠคํŠธํ•˜๊ธฐ: ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ถ€ํ„ฐ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๊นŒ์ง€ Apache Kafka ๋Š” ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆฌ๋ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋ฉฐ, ์ด๋Ÿฌํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ…Œ์ŠคํŠธ ๋Š” ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ํ”„๋กœ๋“€์„œ์™€ ์ปจ์Šˆ๋จธ์˜ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ , Embedded Kafka๋ฅผ ํ™œ์šฉํ•œ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ , Kafka ๋ชจ์˜ ๊ฐ์ฒด(Mock) ๋ฅผ ์‚ฌ์šฉํ•œ ํ…Œ์ŠคํŠธ ๋ฐฉ๋ฒ•, ๊ทธ๋ฆฌ๊ณ  ๋น„๋™๊ธฐ ์ฝ”๋“œ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ๋ชจ๋ฒ” ์‚ฌ๋ก€์— ๋Œ€ํ•ด ๋‹ค๋ฃน๋‹ˆ๋‹ค.   1. ํ”„๋กœ๋“€์„œ์™€ ์ปจ์Šˆ๋จธ์˜ ๋‹จ์œ„ ํ…Œ์ŠคํŠธKafka ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํ”„๋กœ๋“€์„œ ์™€ ์ปจ์Šˆ๋จธ ์˜ ๋™์ž‘์„ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๋กœ ํ™•์ธํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. Mockito ์™€ ๊ฐ™์€ ๋ชจ์˜ ๊ฐ์ฒด(Mock)๋ฅผ ํ™œ์šฉํ•˜์—ฌ Kafka ๋ธŒ๋กœ์ปค์™€์˜ ์‹ค์ œ ์—ฐ๊ฒฐ ์—†์ด๋„ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.ํ”„๋กœ๋“€์„œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์˜ˆ์‹œ@RunWith(Spr.. IT/Kafka, ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ 2024. 10. 23.
Kafka ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์Šค์ผ€์ผ๋ง: ํ”„๋กœ๋“€์„œ์™€ ์ปจ์Šˆ๋จธ์˜ ํ™•์žฅ ๋ฐ ๊ณ ๊ฐ€์šฉ์„ฑ ์ „๋žต Apache Kafka ๋Š” ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆฌ๋ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ง€์›ํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค. Kafka ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์„ฑ๊ณต์ ์œผ๋กœ ์Šค์ผ€์ผ๋งํ•˜๋ ค๋ฉด ํ”„๋กœ๋“€์„œ์™€ ์ปจ์Šˆ๋จธ์˜ ์ˆ˜ํ‰ ํ™•์žฅ , ํ† ํ”ฝ์˜ ํŒŒํ‹ฐ์…”๋‹ ์ „๋žต , ์ปจ์Šˆ๋จธ ๊ทธ๋ฃน ๊ด€๋ฆฌ , ๊ทธ๋ฆฌ๊ณ  ๊ณ ๊ฐ€์šฉ์„ฑ ์„ ์œ„ํ•œ ์žฅ์•  ๋Œ€์‘ ์ „๋žต ์ด ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์ด๋Ÿฌํ•œ ์š”์†Œ๋“ค์„ ์‚ดํŽด๋ณด๊ณ , ํšจ๊ณผ์ ์ธ Kafka ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์Šค์ผ€์ผ๋ง ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.   1. ํ”„๋กœ๋“€์„œ์™€ ์ปจ์Šˆ๋จธ์˜ ์ˆ˜ํ‰ ํ™•์žฅKafka ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ˆ˜ํ‰ ํ™•์žฅ (Horizontal Scaling)ํ•˜๋ ค๋ฉด ํ”„๋กœ๋“€์„œ ์™€ ์ปจ์Šˆ๋จธ ์ธ์Šคํ„ด์Šค๋ฅผ ๋Š˜๋ฆฌ๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค. ์ˆ˜ํ‰ ํ™•์žฅ์€ ํŠธ๋ž˜ํ”ฝ์ด ์ฆ๊ฐ€ํ•  ๋•Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ฒ˜๋ฆฌ ๋Šฅ๋ ฅ์„ ํ™•์žฅํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.ํ”„๋กœ๋“€์„œ ํ™•์žฅ ํ”„๋กœ๋“€์„œ ๋Š”.. IT/Kafka, ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ 2024. 10. 23.
Kafka ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ๋กœ๊น…: ์‹ค์‹œ๊ฐ„ ์šด์˜ ํšจ์œจ์„ฑ ๊ทน๋Œ€ํ™”ํ•˜๊ธฐ Apache Kafka ๋Š” ๋Œ€๊ทœ๋ชจ ์ŠคํŠธ๋ฆฌ๋ฐ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์‹œ์Šคํ…œ์˜ ํ•ต์‹ฌ์œผ๋กœ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์•ˆ์ •์ ์œผ๋กœ ์šด์˜๋˜๋ ค๋ฉด ๋ชจ๋‹ˆํ„ฐ๋ง ๊ณผ ๋กœ๊น… ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” Logback ์ด๋‚˜ Log4j ๊ฐ™์€ ๋กœ๊น… ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Kafka ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋กœ๊น…์„ ๊ด€๋ฆฌํ•˜๊ณ , JMX ๋‚˜ Prometheus ๋ฅผ ํ†ตํ•ด Kafka ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, Grafana ๋ฅผ ํ†ตํ•ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฉ”ํŠธ๋ฆญ ์‹œ๊ฐํ™” ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.   1. Logback์ด๋‚˜ Log4j ๊ฐ™์€ ๋กœ๊น… ํ”„๋ ˆ์ž„์›Œํฌ ์‚ฌ์šฉKafka ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋กœ๊น… ์€ ๋ฌธ์ œ๋ฅผ ์ถ”์ ํ•˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ๋ฅผ ํŒŒ์•…ํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. Logback ๊ณผ Log4j ๋Š” Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ .. IT/Kafka, ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ 2024. 10. 23.
๋น„๋™๊ธฐ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ ํŒจํ„ด: ํšจ์œจ์ ์ธ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์™€ ๋ฉ”์‹œ์ง€ ์ˆœ์„œ ๋ณด์žฅํ•˜๊ธฐ ๋น„๋™๊ธฐ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ ๋Š” ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ์—์„œ ์„ฑ๋Šฅ๊ณผ ํšจ์œจ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ์ค‘์š”ํ•œ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ๋™๊ธฐ์‹ ์ฒ˜๋ฆฌ ์™€ ๋น„๋™๊ธฐ์‹ ์ฒ˜๋ฆฌ ์˜ ์ฐจ์ด๋ฅผ ์‚ดํŽด๋ณด๊ณ , CompletableFuture ์™€ ๊ฐ™์€ ๋น„๋™๊ธฐ API ํ™œ์šฉ ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ๋ฉ”์‹œ์ง€ ์ƒ๊ด€๊ด€๊ณ„ ๋ฐ ์ถ”์  ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ๋ฉ”์‹œ์ง€ ์ˆœ์„œ ๋ณด์žฅ ์„ ์œ„ํ•œ ๊ธฐ๋ฒ•๋„ ๋‹ค๋ฃจ๊ฒ ์Šต๋‹ˆ๋‹ค.   1. ๋™๊ธฐ์‹ vs ๋น„๋™๊ธฐ์‹ ์ฒ˜๋ฆฌ ์ดํ•ดํ•˜๊ธฐ ๋™๊ธฐ์‹ ์ฒ˜๋ฆฌ ๋™๊ธฐ์‹ ์ฒ˜๋ฆฌ ๋Š” ํ•œ ์ž‘์—…์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๋‹ค์Œ ์ž‘์—…์ด ์‹œ์ž‘๋˜์ง€ ์•Š๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์ด ๋ฐฉ์‹์€ ๋‹จ์ˆœํ•˜์ง€๋งŒ, ์ž‘์—…์ด ์ฐจ๋ก€๋Œ€๋กœ ์ง„ํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜๋ฆฌ ์†๋„๊ฐ€ ๋Š๋ ค์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค .public String processSync() { // ๋™๊ธฐ์‹ ์ฒ˜๋ฆฌ: ๋‹ค์Œ ์ž‘์—…์€ ์ด์ „ ์ž‘์—…์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ .. IT/Kafka, ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ 2024. 10. 23.