Community

๐Ÿ•Š๏ธ Kafka Schema Registry: ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ๊ด€๋ฆฌ

Apache Kafka๋Š” ๊ณ ์„ฑ๋Šฅ์˜ ๋ถ„์‚ฐ ์ŠคํŠธ๋ฆฌ๋ฐ ํ”Œ๋žซํผ์œผ๋กœ, ํ”„๋กœ๋“€์„œ(Producer)์™€ ์ปจ์Šˆ๋จธ(Consumer) ๊ฐ„์˜ ํšจ์œจ์ ์ธ ๋ฐ์ดํ„ฐ ์ „์†ก์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Kafka ์ž์ฒด๋Š” ๋ฐ์ดํ„ฐ์˜ ๊ตฌ์กฐ๋‚˜ ํ˜•์‹์— ๋Œ€ํ•œ ๊ฒ€์ฆ์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ์˜ ๊ด€๋ฆฌ์™€ ํ˜ธํ™˜์„ฑ ์œ ์ง€์— ์–ด๋ ค์›€์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Schema Registry๊ฐ€ ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ย  Schema Registry๋ž€ ๋ฌด์—‡์ธ๊ฐ€? Schema Registry๋Š” Kafka์™€ ๋ณ„๋„๋กœ ๋™์ž‘ํ•˜๋Š” ๋…๋ฆฝ์ ์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ, Kafka์—์„œ ์ฃผ๊ณ ๋ฐ›๋Š” ๋ฉ”์‹œ์ง€์˜ ์Šคํ‚ค๋งˆ๋ฅผ ์ค‘์•™์—์„œ ๊ด€๋ฆฌํ•˜๊ณ  ์ €์žฅํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํ”„๋กœ๋“€์„œ์™€ ์ปจ์Šˆ๋จธ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์— ๋Œ€ํ•œ ๋ช…ํ™•ํ•œ ์ •์˜๋ฅผ ๊ณต์œ ํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ๊ณผ ํ˜ธํ™˜์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. ย  ์™œ Schema Registry๊ฐ€ ํ•„์š”ํ•œ๊ฐ€? Kafka๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ์˜ ๊ตฌ์กฐ๋‚˜ ํ˜•์‹์— ๋Œ€ํ•œ ์ œ์•ฝ์ด ์—†์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: * ์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•œ ์žฅ์•  ๋ฐœ์ƒ: ํ”„๋กœ๋“€์„œ๊ฐ€ ๋ฐ์ดํ„ฐ ํ˜•์‹์„ ๋ณ€๊ฒฝํ•˜๋ฉด, ์ด๋ฅผ ์•Œ์ง€ ๋ชปํ•œ ์ปจ์Šˆ๋จธ๋Š” ์—ญ์ง๋ ฌํ™” ๊ณผ์ •์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. * ๋ฐ์ดํ„ฐ ๋ช…์„ธ ๊ด€๋ฆฌ์˜ ์–ด๋ ค์›€: ์—ฌ๋Ÿฌ ํ”„๋กœ๋“€์„œ์™€ ์ปจ์Šˆ๋จธ๊ฐ€ ์กด์žฌํ•˜๋Š” ํ™˜๊ฒฝ์—์„œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์— ๋Œ€ํ•œ ๋ช…ํ™•ํ•œ ์ •์˜๊ฐ€ ์—†์œผ๋ฉด, ์‹œ์Šคํ…œ ์ „์ฒด์˜ ์•ˆ์ •์„ฑ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.ย  Schema Registry๋Š” ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค: * ์Šคํ‚ค๋งˆ ์ค‘์•™ ๊ด€๋ฆฌ: ๋ชจ๋“  ์Šคํ‚ค๋งˆ๋ฅผ ์ค‘์•™์—์„œ ๊ด€๋ฆฌํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. * ํ˜ธํ™˜์„ฑ ๊ฒ€์ฆ: ์ƒˆ๋กœ์šด ์Šคํ‚ค๋งˆ ๋“ฑ๋ก ์‹œ ๊ธฐ์กด ์Šคํ‚ค๋งˆ์™€์˜ ํ˜ธํ™˜์„ฑ์„ ๊ฒ€์ฆํ•˜์—ฌ, ์Šคํ‚ค๋งˆ ์ง„ํ™”๋กœ ์ธํ•œ ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค. * ์Šคํ‚ค๋งˆ ๋ฒ„์ „ ๊ด€๋ฆฌ: ์Šคํ‚ค๋งˆ์˜ ๋ฒ„์ „์„ ์ฒด๊ณ„์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜์—ฌ, ํ•„์š” ์‹œ ์ด์ „ ๋ฒ„์ „์œผ๋กœ์˜ ๋กค๋ฐฑ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. Schema Registry์˜ ์ž‘๋™ ์›๋ฆฌ Schema Registry๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ๋ฆ„์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค: 1. ์Šคํ‚ค๋งˆ ๋“ฑ๋ก: ํ”„๋กœ๋“€์„œ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ Kafka์— ์ „์†กํ•˜๊ธฐ ์ „์— ํ•ด๋‹น ๋ฉ”์‹œ์ง€์˜ ์Šคํ‚ค๋งˆ๋ฅผ Schema Registry์— ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.ย  2. ์Šคํ‚ค๋งˆ ID ๋ถ€์—ฌ: Schema Registry๋Š” ๋“ฑ๋ก๋œ ์Šคํ‚ค๋งˆ์— ๊ณ ์œ ํ•œ ID๋ฅผ ๋ถ€์—ฌํ•˜๊ณ , ํ”„๋กœ๋“€์„œ๋Š” ์ด ์Šคํ‚ค๋งˆ ID๋ฅผ ๋ฉ”์‹œ์ง€์— ํฌํ•จ์‹œ์ผœ Kafka์— ์ „์†กํ•ฉ๋‹ˆ๋‹ค. 3. ๋ฉ”์‹œ์ง€ ์†Œ๋น„: ์ปจ์Šˆ๋จธ๋Š” Kafka์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ์ฝ์–ด๋“ค์ธ ํ›„, ๋ฉ”์‹œ์ง€์— ํฌํ•จ๋œ ์Šคํ‚ค๋งˆ ID๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Schema Registry์—์„œ ์Šคํ‚ค๋งˆ๋ฅผ ์กฐํšŒํ•˜๊ณ , ์ด๋ฅผ ํ†ตํ•ด ๋ฉ”์‹œ์ง€๋ฅผ ์—ญ์ง๋ ฌํ™”ํ•ฉ๋‹ˆ๋‹ค. { "type": "record", "name": "User", "fields": [ {"name": "name", "type": "string"}, {"name": "age", "type": "int"} ] } ย  ์ด๋Ÿฌํ•œ ๊ณผ์ •์€ ํ”„๋กœ๋“€์„œ์™€ ์ปจ์Šˆ๋จธ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์— ๋Œ€ํ•œ ๋ช…ํ™•ํ•œ ๊ณ„์•ฝ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋ฉฐ, ์‹œ์Šคํ…œ์˜ ์•ˆ์ •์„ฑ๊ณผ ๋ฐ์ดํ„ฐ์˜ ์‹ ๋ขฐ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. ย  Schema Registry์˜ ์žฅ๋‹จ์  โœ… ์žฅ์  * ์‹œ์Šคํ…œ ์•ˆ์ •์„ฑ ํ–ฅ์ƒ: ์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ ์‹œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜ค๋ฅ˜๋ฅผ ์‚ฌ์ „์— ๋ฐฉ์ง€ํ•˜์—ฌ ์‹œ์Šคํ…œ์˜ ์•ˆ์ •์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค. * ๋ฐ์ดํ„ฐ ๋ช…์„ธ ๊ด€๋ฆฌ ์šฉ์ด: ์ค‘์•™์—์„œ ์Šคํ‚ค๋งˆ๋ฅผ ๊ด€๋ฆฌํ•จ์œผ๋กœ์จ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์— ๋Œ€ํ•œ ๋ช…ํ™•ํ•œ ์ •์˜๋ฅผ ์ œ๊ณตํ•˜๊ณ , ์šด์˜์˜ ํšจ์œจ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. * ์—…๋ฌด ํšจ์œจ์„ฑ ์ฆ๋Œ€: ์Šคํ‚ค๋งˆ ๊ด€๋ฆฌ๋กœ ์ธํ•œ ๋ถˆํ•„์š”ํ•œ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์„ ์ค„์—ฌ ๊ฐœ๋ฐœ์ž๋“ค์ด ๋ณธ์—ฐ์˜ ์—…๋ฌด์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. โŒ ๋‹จ์  * ๊ด€๋ฆฌ ํฌ์ธํŠธ ์ฆ๊ฐ€: Schema Registry ์„œ๋ฒ„๋ฅผ ์ถ”๊ฐ€๋กœ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์šด์˜ ๋ณต์žก์„ฑ์ด ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. * ์Šคํ‚ค๋งˆ ๊ด€๋ฆฌ ๋ถ€๋‹ด: ์—„๊ฒฉํ•œ ์Šคํ‚ค๋งˆ ๊ฒ€์ฆ์œผ๋กœ ์ธํ•ด ์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ ์‹œ ์ถ”๊ฐ€์ ์ธ ๊ด€๋ฆฌ ์ž‘์—…์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ย  ๊ฒฐ๋ก  Kafka Schema Registry๋Š” ๋ฐ์ดํ„ฐ์˜ ์Šคํ‚ค๋งˆ๋ฅผ ์ค‘์•™์—์„œ ๊ด€๋ฆฌํ•˜์—ฌ ํ”„๋กœ๋“€์„œ์™€ ์ปจ์Šˆ๋จธ ๊ฐ„์˜ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ํ•„์ˆ˜์ ์ธ ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์˜ ์‹ ๋ขฐ์„ฑ์„ ์œ ์ง€ํ•˜๊ณ , ์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•œ ์žฅ์• ๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ย  ๐Ÿ“Œ ๊ธฐ์–ตํ•  ์  * Kafka ์ž์ฒด๋Š” ๋ฐ์ดํ„ฐ ํ˜•์‹์„ ๊ฒ€์ฆํ•˜์ง€ ์•Š์Œ โ†’ Schema Registry๊ฐ€ ํ•„์š”ํ•จ * ํ”„๋กœ๋“€์„œ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•˜๊ธฐ ์ „์— Schema Registry์— ์Šคํ‚ค๋งˆ๋ฅผ ๋“ฑ๋กํ•ด์•ผ ํ•จ * ์ปจ์Šˆ๋จธ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์†Œ๋น„ํ•  ๋•Œ Schema Registry์—์„œ ์Šคํ‚ค๋งˆ๋ฅผ ์กฐํšŒํ•˜์—ฌ ์—ญ์ง๋ ฌํ™”ํ•จ * JSON, Avro, Protobuf ๋“ฑ์˜ ๋‹ค์–‘ํ•œ ํฌ๋งท์„ ์ง€์›ํ•จ

์•Œ๋ฆผ

์•Œ๋ฆผ์ด ์—†์Šต๋‹ˆ๋‹ค