๐๏ธ 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 ๋ฑ์ ๋ค์ํ ํฌ๋งท์ ์ง์ํจ