์ํ์น ์นดํ์นด ์ค๋ฌด๋ฅผ ์ํ ์ปค๋ฅํธ,
์๋ฆฌ๋ถํฐ ์ค๋ฌด ์์ฉ๊น์ง ํ์คํ๊ฒ!
๊ฐ๋ ฅํ ์ค์๊ฐ ๋ฐ์ดํฐ ์ฐ๋์ ์ํ
์นดํ์นด ์ปค๋ฅํธ(Kafka Connect).
๋ค์ํ ๋ฐ์ดํฐ ์์คํ
๊ฐ์ ์ค์๊ฐ ์ฐ๋์ ์ํ ์ต๊ณ ์ ์คํ์์ค ์๋ฃจ์
!
์นดํ์นด ์ปค๋ฅํธ๋ ๋ณ๋์ ์ฝ๋ฉ ๊ตฌํ ์์ด ์ด๋ฏธ ๋ง๋ค์ด์ง ์ปค๋ฅํฐ(Connector)๋ค์ ํตํด ๋ค์ํ ์์คํ
๊ฐ์ ์ค์๊ฐ ๋ฐ์ดํฐ ์ฐ๋์ ์ฝ๊ณ ๋น ๋ฅด๋ฉฐ ์์ ์ ์ผ๋ก ๊ตฌ์ถํ ์ ์๊ฒ ๋ง๋ค์ด ์ค๋๋ค.
ํด์ธ์์๋ ์ด๋ฏธ ๋ง์ ๊ธฐ์
๋ค์ด ์นดํ์นด ์ปค๋ฅํธ๋ฅผ ๋์
ํ์๊ณ , ๊ตญ๋ด์์๋ ์นดํ์นด ์ปค๋ฅํธ๋ฅผ ์ด๊ธฐ์ข
๋ฐ์ดํฐ ์์คํ
๊ฐ์ ํตํฉ ๋ฐ ์ ์ฌ ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ ๊ตฌ์ถ์ ํ์ฉํ๋ฉด์ ์นดํ์นด ๋ฐ ์นดํ์นด ์ปค๋ฅํธ์ ๋ํ ์ค๋ฌด ์ญ๋์ ๊ฐ์ถ ์ธ์ฌ์ ๋ํ ์์๊ฐ ๋๊ณ ์์ต๋๋ค. ํ์ง๋ง ์์ฝ๊ฒ๋ ์นดํ์นด ์ปค๋ฅํธ์ ๋ํ ํ์ต ์๋ฃ๋ ์ฌ์ ํ ๋ถ์กฑํ ์ํฉ์
๋๋ค. ๊ธฐ๋ณธ์ ์ด๊ณ ํผ์์ ์ธ ์์ค์ ์ ๋ณด๋ง ์ ๊ณตํ๋ ์ฑ
/์๋ฃ/๊ฐ์๋ง ์ฐพ์๋ณผ ์ ์๊ธฐ ๋๋ฌธ์, ์ค๋ฌด์์ ์ํ๋ ์ ๋์ ์ค์ ์ญ๋์ ๊ฐ์ถ ์ธ๋ ฅ์ ์์ฑํ๊ธฐ ์ด๋ ต์ต๋๋ค.
์ค๋ฌด์์ ์ํ๋ ์นดํ์นด ์ปค๋ฅํธ ์ ๋ฌธ๊ฐ๋ก ์ฑ์ฅํ ์ ์๊ฒ ์ด๋์ด ๋๋ฆฝ๋๋ค.
์์ธํ
๋ฉ์ปค๋์ฆ ์ค๋ช
์ค๋ฌด ์์ค์
๋ค์ํ ์์
์ด์ ํด๊ฒฐ
๋ฐฉ์๊น์ง OK
๋ณธ ๊ฐ์๋ ์ง๊ธ๊ป ์ด๋ค ๊ฐ์๋ ์ฑ
์์๋ ์ ํ ์ ์์๋, ์์ธํ๊ณ ์ค์ ์ ์ธ ์์ค์ผ๋ก ์นดํ์นด ์ปค๋ฅํธ๋ฅผ ๋ค๋ฃจ๊ณ ์์ต๋๋ค. ์นดํ์นด ์ปค๋ฅํธ ํต์ฌ ๊ตฌ์ฑ ์์๋ค์ ์์ธํ ๋ฉ์ปค๋์ฆ ์ค๋ช
, ๊ทธ๋ฆฌ๊ณ ์ปค๋ฅํธ๋ฅผ ํ์ฉํ ๋ค์ํ ๋ฐ์ดํฐ ์ฐ๋๊ณผ ์ด์ ๊ด๋ฆฌ๋ฅผ ๋ค๋ค๋ณผ ์ ์๋ ๋ง์ ์ค์ต ์์ ๋ค์ ํตํด ์ฌ๋ฌ๋ถ์ ํ์ฅ์์ ํ์๋ก ํ๋ ์นดํ์นด ์ปค๋ฅํธ ์ ๋ฌธ๊ฐ๋ก ์ฑ์ฅ์์ผ ๋๋ฆด ๊ฒ์
๋๋ค.
๋ฌด์๋ณด๋ค, CDC ๊ธฐ๋ฐ์ ์นดํ์นด ์ปค๋ฅํธ ๋ฐ์ดํฐ ์ฐ๋์ ํ์คํ๊ฒ ์ตํ์ค ์ ์์ต๋๋ค.
๋๋ถ๋ถ ๊ธฐ์
์ ์ค์ ๋ฐ์ดํฐ ์์คํ
์ RDBMS์
๋๋ค. ๋ฌผ๋ฆฌ์ ์ผ๋ก ์๋ก ๋จ์ด์ ธ ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ค์๊ฐ ์ฐ๋์ CDC(Change Data Capture)๊ฐ ๋์ธ์
๋๋ค. CDC๋ ๋์ฉ๋์ ๋ฐ์ดํฐ๋ฅผ ์ง์ฐ์์ด ์ค์๊ฐ์ผ๋ก ์ฐ๋ํ๋ฉด์๋ ์์คํ
์ ๋ถํ๋ ์ต์ํํ ์ ์๋ ํ๋ฅญํ ๋ฐ์ดํฐ ์ฐ๋ ๊ธฐ๋ฒ์
๋๋ค. Debezium Connector๋ ์นดํ์นด ์ปค๋ฅํธ๋ฅผ ์ด์ฉํ์ฌ ์๋ก ๋ค๋ฅธ RDBMS๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฐ๋ํ ์ ์๊ฒ ํด์ฃผ๋ ๊ฐ์ฅ ๋ํ์ ์ธ CDC ์๋ฃจ์
์
๋๋ค.
๋ง์ ๊ธฐ์
์์ CDC ๊ธฐ๋ฐ์ ์ปค๋ฅํธ๋ฅผ ๋ค๋ฃฐ ์ ์๋ ์ธ๋ ฅ์ ์๊ตฌํ๊ณ ์์ต๋๋ค. ์ด์ ๋ณธ ๊ฐ์์์๋ CDC์ Debezium Connector์ ๋ฉ์ปค๋์ฆ๊ณผ ํ๊ฒฝ ์ค์ ๋ฐ ์ ์ฉ ๋ฐฉ์, ๊ทธ๋ฆฌ๊ณ Debezium์ ํ์
์ ์ ์ฉํ ๋ ๋ฐ์ํ ์ ์๋ ์ฌ๋ฌ ์ด์ ์ฌํญ ๋ฐ ๊ทธ์ ๋ฐ๋ฅธ ํด๊ฒฐ ๋ฐฉ์๋ค์ ์์ธํ ์ด๋ก ์ค๋ช
๊ณผ ์ค์ต์ ํตํด ์์ธํ ์ค๋ช
ํฉ๋๋ค.
์ด ๊ฐ์๋ง์ ํน์ง์
ํ์ธํด๋ณด์ธ์.
์์ธํ ์ค๋ช
๊ณผ ์ค์ต์ ํตํ ์นดํ์นด ์ปค๋ฅํธ ์ฃผ์ ๊ตฌ์ฑ ์์๋ค์ ์ดํด
์ปค๋ฅํธ ํด๋ฌ์คํฐ, Connector, SMT(Single Message Transform), Converter ๋ฑ์ ๋ํ ํต์ฌ ๊ธฐ๋ฐ ์ง์์ ์์ธํ ์ค๋ช
๊ณผ ์ค์ต์ ํตํด ์์ ์์ฌ๋ก ํ์ฉํ ์ ์๋ ์์ค์ผ๋ก ์ฒด๋์์ผ ๋๋ฆฝ๋๋ค.
๋ค์ํ Connector๋ค์ ๋ํ ํ๊ฒฝ ๊ตฌ์ฑ ๋ฐ ๊ตฌ๋ ์ค์ต
SpoolDir Source, JDBC Source/Sink, Debezium Source Connector ๋ฑ RDBMS ์ด์ ํ๊ฒฝ์ ์ ์ฉ๋ ์ ์๋ ๋ค์ํ Connector๋ค์ ํ๊ฒฝ ์ค์ ํ๋ผ๋ฏธํฐ์ ๋ด๋ถ ๋ฉ์ปค๋์ฆ, ๊ทธ๋ฆฌ๊ณ ๋ค์ํ ์ ์ฉ ์ค์ต์ ํตํด ์นดํ์นด ๊ธฐ๋ฐ์ ์ค์ ๋ฐ์ดํฐ ์ฐ๋ ์์คํ
์ ๊ตฌ์ถํ ์ ์๋๋ก ๋์๋๋ฆฝ๋๋ค.
Debizium CDC ์์ค Connector์ ๋ํ ์์ธํ ๋ฉ์ปค๋์ฆ ์ค๋ช
, ๋ค์ํ ์ค์ต & ๋ฐ์ํ ์ ์๋ ์ด์ ์ฌํญ ๋ฐ ํด๊ฒฐ ๋ฐฉ์๊น์ง!
Debezium CDC ์์ค ์ปค๋ฅํฐ์ ๋ํด์ ๋ง์ ๋ด์ฉ์ ๋ด์์ต๋๋ค. RDBMS ์ด์ ํ๊ฒฝ์์ Debezium CDC์ JDBC Sink Connector๋ฅผ ํตํด์ ์๋ก ๋จ์ด์ ธ ์๋ RDBMS๊ฐ ์ค์๊ฐ ์ฐ๋์ ์ด์์ ์ด๋ป๊ฒ ๊ตฌ์ถํด์ผ ํ ์ง ์์ธํ ๊ฐ์ด๋๋ฅผ ๋๋ฆฝ๋๋ค.
Avro ๋ฐ ์คํค๋ง ๋ ์ง์คํธ๋ฆฌ(Schema Registry) ์ดํด์ ํ์ฉ
์ปค๋ฅํธ ๋ฟ๋ง ์๋๋ผ Avro ๋ฐ ์คํค๋ง ๋ ์ง์คํธ๋ฆฌ๋ฅผ ํตํ ์คํค๋ง ๋ฐ์ดํฐ์ ์ ์ก ๋ฐ ์ค์ ๊ด๋ฆฌ, ํนํ ์ค๋ฌด์์ ์ค์ํ๊ฒ ๋ค๋ค์ ธ์ผ ํ๋ ์คํค๋ง ํธํ์ฑ์ ๋ํด์ ์์ธํ๊ฒ ์ค๋ช
๋๋ฆฝ๋๋ค. ์ด๋ฅผ ํตํด ์ปค๋ฅํธ์ ์คํค๋ง ๋ ์ง์คํธ๋ฆฌ๋ฅผ ์ฐ๋ํ์ฌ ์ค๋ฌด์์ ํ์๋ก ํ๋ ํจ์จ์ ์ธ ์ ์ฌ ๋ฐ์ดํฐ ํตํฉ ๋ฐ ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ ๊ตฌ์ถ ๋ฐฉ์์ ์ตํ์ค ์ ์์ต๋๋ค.
REST API๋ฅผ ํตํ Connect์ Schema Registry์ ๊ด๋ฆฌ ๋ฐฉ์
Connect์ Schema Registry ์ฃผ์ ์์๋ค์ ๋ค์ํ REST API๋ค์ ํตํด์ ์์ฑ/์์ /์ญ์ /๊ด๋ฆฌํ ์ ์๋ ๋ฐฉ๋ฒ๋ค์ ๋ฐฐ์ฐ๊ฒ ๋ฉ๋๋ค.
Kafka Connect ๋ง์คํฐ๋ฅผ ์ํ Bonus!
์ฝ 200ํ์ด์ง ๋ถ๋์ ๊ฐ์ ๊ต์ฌ๋ฅผ ์๊ฐ์ ์ฌ๋ฌ๋ถ๊ป ์ ๊ณตํฉ๋๋ค. ์นดํ์นด ์ปค๋ฅํธ๋ฅผ ์ตํ๋ ๋ฐ ๋์์ด ๋์๊ธธ ๋ฐ๋๋๋ค.
์ค์ต ํ๊ฒฝ ๐พ

์๋ฒ OS
์นดํ์นด ์๋ฒ OS๋ก ์ค๋ผํด(Oracle) VirtualBox VM ๊ธฐ๋ฐ์์ Ubuntu Linux(์ฐ๋ถํฌ ๋ฆฌ๋
์ค) 20.04๋ฅผ ์ด์ฉํฉ๋๋ค. ๋ฆฌ๋
์ค๋ฅผ ์ด์ฉํ์ง๋ง ๊ฐ์ ๋จธ์ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ๋๋๋ฏ๋ก Windows/macOS ํ๊ฒฝ ๋ชจ๋์์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
VirtualBox๋ Windows/macOS ํ๊ฒฝ์์ ๊ฑฐ์ ๋๋ถ๋ถ ์ค์น ๊ฐ๋ฅํฉ๋๋ค. ๋ค๋ง Mac์ ๊ฒฝ์ฐ ์ต์ M1 ๋ชจ๋ธ์์ VirtualBox๊ฐ ์ค์น๋์ง ์์ผ๋ฏ๋ก UTM๋ฑ์ ๊ฐ์ํ๊ฒฝ์ ์ด์ฉํ์ฌ Ubuntu๋ฅผ ์ค์นํ์
์ผ ํฉ๋๋ค. M1 ๋ชจ๋ธ์ ๊ฒฝ์ฐ ๋ฐ๋์ ๊ฐ์ํ๊ฒฝ์์ Ubuntu๊ฐ ์ค์น๋๋์ง ํ์ธ ํ ๊ฐ์๋ฅผ ์ ํํด ์ฃผ์๊ธฐ ๋ฐ๋๋๋ค.
์ปจํ๋ฃจ์ธํธ ์นดํ์นด
์ปค๋ฎค๋ํฐ ์๋์
์นดํ์นด๋ ์ํ์น ์นดํ์นด(Apache Kafka)๊ฐ ์๋ ์ปจํ๋ฃจ์ธํธ ์นดํ์นด(Confluent Kafka) Community Edition ๋ฒ์ 7.1.2๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ปจํ๋ฃจ์ธํธ๋ ์นดํ์นด๋ฅผ ๋ง๋ ํต์ฌ ์ธ๋ ฅ์ด ์ฃผ์ถ์ด ๋์ด ์ธ์ด ํ์ฌ๋ก, ๊ธฐ์
๊ณ ๊ฐ์ ์ํด ์ฑ๋ฅ ๋ฐ ํธ์์ฑ ์ธก๋ฉด์์ ๋ณด๋ค ํฅ์๋ ๊ธฐ์
์ฉ ์นดํ์นด๋ฅผ ์ ๊ณตํ๊ณ ์์ต๋๋ค. ์ํ์น ์นดํ์นด์ 100% ํธํ๋๋ฉด์๋ ๋ณด๋ค ๋ค์ํ ์นดํ์นด ๋ชจ๋ ๋ฐ ์ผ์ฒดํ๋ Binary๋ฅผ ์ด์ฉํ ์ ์์ต๋๋ค. ์ปจํ๋ฃจ์ธํธ๋ก ๊ฐ๋ ฅํ ๋ถ์ฐํ ์์คํ
์นดํ์นด๋ฅผ ๋์ฑ ํ๋ ฅ์ ์ผ๋ก ํ์ฅ ๊ฐ๋ฅํ ํํ๋ก ์ฌ์ฉํด ๋ณด์ธ์. ์ธํ๋ผ ๊ตฌ์ถ ๋ฐ ์ ์ง ๊ด๋ฆฌ ๋ถ๋ด์ ์ค์ด๊ณ , ๋ ๋น ๋ฅธ ๊ฐ๋ฐ์ ํ ์ ์๋๋ก ๋์์ ์ค ๊ฒ์
๋๋ค.
RDBMS
Spooldir Source Connector์ ๊ฐ์ด ํ์ผ ๋ฐ์ดํฐ์ ์ฐ๋๋ ์ค์ต์ผ๋ก ์ ๊ณตํ์ง๋ง ๋๋ถ๋ถ์ ์ปค๋ฅํธ ์ค์ต ์ฐ๋์ RDBMS๊ฐ ๋ฐ์ดํฐ ์ฐ๋์ ์ฃผ์ถ์ผ๋ก ํฉ๋๋ค.
ํนํ Source์ Sink๊ฐ ๋ชจ๋ MySQL DB๋ก ๋์ผํ ์ค์ต์ด ๋ง์ผ๋ฉฐ Source๋ MySQL, Sink๋ PostgreSQL ์ค์ต๋ ํจ๊ป ์ํํฉ๋๋ค. ์ค์ต์ ์ฌ์ฉ๋ ๋ฒ์ ์ MySQL 8.0.31, PostgreSQL 12์
๋๋ค.
๊ถ์ฅ PC ์ฌ์
์ ์ฒด ์ค์ต ํ๊ฒฝ ๊ตฌ์ฑ์ผ๋ก 20~30GB์ ์คํ ๋ฆฌ์ง ์ฉ๋, 4GB ์ด์์ RAM์ ๊ฐ์ถ PC ํ๊ฒฝ์ด ์๊ตฌ๋ ์ ์์ต๋๋ค.
Q&A๋ฅผ ํ์ธํด๋ณด์ธ์ ๐ฌ
Q. ์ ์นดํ์นด ์ปค๋ฅํธ๋ฅผ ๋ฐฐ์์ผ ํ๋์?
์นดํ์นด ์ปค๋ฅํธ๋ ์นดํ์นด ๊ธฐ๋ฐ์ ๋ฐ์ดํฐ ์ฐ๋์ ์ํ ํต์ฌ ์ปดํฌ๋ํธ์
๋๋ค. ์ด๋ฏธ ์นดํ์นด๋ฅผ ๋์
ํ ๋ง์ ๊ธฐ์
๋ค์ด ์นดํ์นด ์ปค๋ฅํธ๋ฅผ ํจ์จ์ ์ผ๋ก ํ์ฉํ์ฌ ๋๊ท๋ชจ ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ์ ์์ฝ๊ฒ ๊ตฌ์ถํ๊ณ ์์ต๋๋ค.
์นดํ์นด ์ปค๋ฅํธ๋ 120์ฌ๊ฐ์ ๋ค์ํ Connector๋ฅผ ํตํด Oracle, MySQL, PostgreSQL๋ฑ์ ๋ํ์ ์ธ RDBMS๋ฟ๋ง ์๋๋ผ MongoDB, ElasticSearch์ ๊ฐ์ NoSQL, RedShift, SnowFlake, Vertica, Teradata๋ฑ์ DW ์์คํ
๋ฑ ์๋ก ๋ค๋ฅธ ์ด๊ธฐ์ข
๋ฐ์ดํฐ ์์คํ
์ ์ํธ ์ฐ๊ฒฐํ๋ ๋ฐ ์ฐ์ด๊ณ ์์ต๋๋ค.
๋ณ๋์ ์ฝ๋ฉ ๊ตฌํ ์์ด๋ ์นดํ์นด ์ปค๋ฅํธ๋ฅผ ํตํด ์ฝ๊ฒ ์ด๊ธฐ์ข
๋ฐ์ดํฐ ์์คํ
์ ์ํธ ์ฐ๋/ํตํฉํ ์ ์์ผ๋ฉฐ, ํนํ Community license๋ฅผ ํตํ ์ฐ๋ S/W ๋น์ฉ์ ์ ๊ฐ๊ณผ CDC ๊ธฐ๋ฐ์ผ๋ก ๋์ฉ๋ ๋ฐ์ดํฐ์ ์ง์ฐ ์๊ฐ ์๋ ์ค์๊ฐ ์ฐ๋ ๋ฑ์ ์ฅ์ ์ผ๋ก ์ฌ๋ฌ ๊ธฐ์
์์ ๊ทธ ์ฐ์์์ ํ์ฉ๋๊ฐ ์ปค์ง๊ณ ์์ต๋๋ค.
๋ณธ ๊ฐ์๋ฅผ ํตํด ์นดํ์นด ์ปค๋ฅํธ๋ฅผ ์ ์ตํ์๊ฒ ๋๋ค๋ฉด ๊ธฐ์
์ด ์ํ๋ ์นดํ์นด ์ ๋ฌธ ์ธ๋ ฅ์ผ๋ก ํ์ธต ๋ ๋ฐ๋์ ํ์ค ์ ์์ต๋๋ค.
Q. ์ด์ ๊ฐ์์ธ ์นดํ์นด ์๋ฒฝ ๊ฐ์ด๋ - ์ฝ์ดํธ์ ๋ค์ด์ผ ํ๋์?
์ด์ ๊ฐ์์ธ ์นดํ์นด ์๋ฒฝ ๊ฐ์ด๋ - ์ฝ์ดํธ์ ์๊ฐํ์๋ฉด ๋ ์ข์ง๋ง, ์๊ฐ์ ํ์ง ์์ผ์
จ๋๋ผ๋ ์นดํ์นด์ ๊ธฐ๋ณธ์ธ Broker, Producer, Consumer์ ๋ํ ๊ฐ๋
์ด ์ ์ ๋ฆฝ๋์ด ์๊ณ , ์นดํ์นด์ ๋ฉ์์ง ์ ์ก ๋ฐ ์ฝ๊ธฐ๋ฅผ ์ ์ฉํด ๋ณด์ ๊ฒฝํ์ด ์์ผ์ ๋ถ์ด๋ผ๋ฉด ์ถฉ๋ถํ ๋ณธ ๊ฐ์๋ฅผ ๋ค์ผ์ค ์ ์์ต๋๋ค.
Q. ๊ฐ์ ์๊ฐ์ ์ํด RDBMS ๊ฒฝํ์ด ์์ด์ผ ํ๋์?
์์ฝ์ง๋ง, ๋ณธ ๊ฐ์๋ 3๊ฐ์ ์ด์์ RDBMS ๊ฒฝํ์ ํ์๋ก ํฉ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก RDBMS ํ
์ด๋ธ๊ณผ ์ปฌ๋ผ ๋ณ๊ฒฝ ์์ฑ ์ ๋๋ง ์ดํดํ์
๋ ๋๋ถ๋ถ์ ๊ฐ์ ์ค์ต์ด ๊ฐ๋ฅํ์ง๋ง, CDC๋ RDBMS ๋ณต์ ๋ฑ์ ๊ฐ์์์ ํด๋น ๋ด์ฉ์ ์์ธํ ์ค๋ช
์ ๋๋ฆผ์๋ ๋ถ๊ตฌํ๊ณ RDBMS์ ๋ํ ์ด๋ ์ ๋์ ๊ฒฝํ์ด ์์ผ์๋ค๋ฉด ์ค์ต์ด ์ด๋ ต๊ฒ ๋๊ปด์ง์ค ์ ์์ต๋๋ค.