์ธํ”„๋Ÿฐ ์˜๋ฌธ ๋ธŒ๋žœ๋“œ ๋กœ๊ณ 
์ธํ”„๋Ÿฐ ์˜๋ฌธ ๋ธŒ๋žœ๋“œ ๋กœ๊ณ 
BEST

์นดํ”„์นด ์™„๋ฒฝ ๊ฐ€์ด๋“œ - ์ปค๋„ฅํŠธ(Connect) ํŽธ

์นดํ”„์นด ์ปค๋„ฅํŠธ(Kafka Connect)์— ๋Œ€ํ•œ ๊นŠ์ด ์žˆ๋Š” ์ด๋ก  ์„ค๋ช…๊ณผ ํ˜„์—…์—์„œ ๋ฐ”๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ์ˆ˜์ค€์˜ ์ƒ์„ธํ•œ ์‹ค์Šต์„ ํ†ตํ•ด ์—ฌ๋Ÿฌ๋ถ„์„ ํ˜„์žฅ์—์„œ ํ•„์š”๋กœ ํ•˜๋Š” ์นดํ”„์นด ์ปค๋„ฅํŠธ ๊ธฐ๋ฐ˜์˜ ๋ฐ์ดํ„ฐ ์—ฐ๋™ ๋ฐ ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ• ์ „๋ฌธ๊ฐ€๋กœ ์„ฑ์žฅ์‹œ์ผœ ๋“œ๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ค‘๊ธ‰์ž๋ฅผ ์œ„ํ•ด ์ค€๋น„ํ•œ
[๋ฐ์ดํ„ฐ ์—”์ง€๋‹ˆ์–ด๋ง, ๋ฐ๋ธŒ์˜ต์Šค ยท ์ธํ”„๋ผ] ๊ฐ•์˜์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๊ฑธ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์–ด์š”

  • ์นดํ”„์นด ์ปค๋„ฅํŠธ ์ฃผ์š” ๊ตฌ์„ฑ์š”์†Œ๋“ค์˜ ํ•ต์‹ฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜

  • CDC(Change Data Capture)์˜ ์ดํ•ด์™€ ์‹ค๋ฌด ์ ์šฉ ๊ธฐ๋ฒ•

  • MySQL ๋ฐ์ดํ„ฐ ๋ณต์ œ์™€ CDC(Change Data Capture) ์ดํ•ด ๋ฐ ์‹ค๋ฌด ์ ์šฉ ๋ฐฉ์•ˆ

  • Debezium CDC Source ์ปค๋„ฅํ„ฐ์˜ ํ•ต์‹ฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜๊ณผ ํŠน์ง•

  • Debezium CDC ์†Œ์Šค ์ปค๋„ฅํ„ฐ๋ฅผ ์ด์šฉํ•œ RDBMS๊ฐ„ ๋ฐ์ดํ„ฐ ์—ฐ๋™

  • Debizium ์ปค๋„ฅํŠธ ๊ธฐ๋ฐ˜์˜ ์—ฐ๋™ ์‹œ์Šคํ…œ ๊ตฌ์ถ• ๋…ธํ•˜์šฐ

  • JDBC ๊ธฐ๋ฐ˜์˜ Source ์ปค๋„ฅํ„ฐ์™€ Sink Connector ํ™˜๊ฒฝ ์„ค์ • ๋ฐ ๊ตฌ๋™

  • ๋ฉ”์‹œ์ง€ ๋ณ€ํ™˜์„ ์œ„ํ•œ ๋‹ค์–‘ํ•œ SMT ํด๋ž˜์Šค๋“ค์˜ ์ ์šฉ

  • REST API๋ฅผ ์ด์šฉํ•œ ์ปค๋„ฅํŠธ ๊ด€๋ฆฌ

  • ์Šคํ‚ค๋งˆ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ(Schema Registry)์˜ ํ™œ์šฉ๊ณผ ์ปค๋„ฅํŠธ์™€์˜ ํ†ตํ•ฉ

  • REST API๋ฅผ ์ด์šฉํ•œ ์Šคํ‚ค๋งˆ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๊ด€๋ฆฌ

์•„ํŒŒ์น˜ ์นดํ”„์นด ์‹ค๋ฌด๋ฅผ ์œ„ํ•œ ์ปค๋„ฅํŠธ, 
์›๋ฆฌ๋ถ€ํ„ฐ ์‹ค๋ฌด ์‘์šฉ๊นŒ์ง€ ํ™•์‹คํ•˜๊ฒŒ! 

๊ฐ•๋ ฅํ•œ ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์—ฐ๋™์„ ์œ„ํ•œ 
์นดํ”„์นด ์ปค๋„ฅํŠธ(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์— ๋Œ€ํ•œ ์–ด๋А ์ •๋„์˜ ๊ฒฝํ—˜์ด ์—†์œผ์‹œ๋‹ค๋ฉด ์‹ค์Šต์ด ์–ด๋ ต๊ฒŒ ๋А๊ปด์ง€์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๋ถ„๋“ค๊ป˜
์ถ”์ฒœ๋“œ๋ ค์š”!

ํ•™์Šต ๋Œ€์ƒ์€
๋ˆ„๊ตฌ์ผ๊นŒ์š”?

  • ์นดํ”„์นด ์ปค๋„ฅํŠธ์˜ ๋‚ด๋ถ€ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํ™•์‹คํžˆ ์ดํ•ดํ•˜๊ณ  ์‹ค๋ฌด์— ์ ์šฉํ•˜๊ธฐ๋ฅผ ์›ํ•˜์‹œ๋Š” ๋ชจ๋“  ๋ถ„

  • ์ „์‚ฌ ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ•๊ณผ CDC ๊ธฐ๋ฐ˜์˜ ๋ฐ์ดํ„ฐ ์•„ํ‚คํ…์ฒ˜ ์ดํ•ด๋ฅผ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ ์—”์ง€๋‹ˆ์–ด ๋˜๋Š” ์•„ํ‚คํ…์ฒ˜

  • JDBC๋˜๋Š” Debezium CDC Connector์˜ ์šด์˜์ด ํ•„์š”ํ•œ DBA๋˜๋Š” ์‹œ์Šคํ…œ ์šด์˜์ž

  • ์šด์˜ DB์˜ ์‹ค์‹œ๊ฐ„ ๋™๊ธฐํ™”๋ฅผ ํ†ตํ•œ ETL๋ฐ DB ์—ฐ๋™์„ ๊ณ ๋ฏผํ•˜๋Š” DW๊ฐœ๋ฐœ์ž

  • ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค ๊ธฐ๋ฐ˜์˜ ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์„ฑ ์‹œ CDC๊ธฐ๋ฐ˜์˜ ๋ฐ์ดํ„ฐ ์—ฐ๋™ ๋ฐฉ์‹์„ ๊ณ ๋ฏผํ•˜๋Š” ๊ฐœ๋ฐœ์ž ๋ฐ ์•„ํ‚คํ…ํŠธ

์„ ์ˆ˜ ์ง€์‹,
ํ•„์š”ํ• ๊นŒ์š”?

  • ์นดํ”„์นด Broker, Producer, Consumer์— ๋Œ€ํ•œ ๊ธฐ๋ฐ˜ ์ง€์‹

  • 3๊ฐœ์›” ์ด์ƒ์˜ RDBMS ๊ฐœ๋ฐœ ๋˜๋Š” ์šด์˜ ๊ฒฝํ—˜

์•ˆ๋…•ํ•˜์„ธ์š”
๊ถŒ ์ฒ ๋ฏผ์ž…๋‹ˆ๋‹ค.

25,146

๋ช…

์ˆ˜๊ฐ•์ƒ

1,189

๊ฐœ

์ˆ˜๊ฐ•ํ‰

3,920

๊ฐœ

๋‹ต๋ณ€

4.9

์ 

๊ฐ•์˜ ํ‰์ 

13

๊ฐœ

๊ฐ•์˜

(์ „) ์—”์ฝ”์•„ ์ปจ์„คํŒ…

(์ „) ํ•œ๊ตญ ์˜ค๋ผํด

AI ํ”„๋ฆฌ๋žœ์„œ ์ปจ์„คํ„ดํŠธ

ํŒŒ์ด์ฌ ๋จธ์‹ ๋Ÿฌ๋‹ ์™„๋ฒฝ ๊ฐ€์ด๋“œ ์ €์ž

์ปค๋ฆฌํ˜๋Ÿผ

์ „์ฒด

147๊ฐœ โˆ™ (24์‹œ๊ฐ„ 35๋ถ„)

ํ•ด๋‹น ๊ฐ•์˜์—์„œ ์ œ๊ณต:

์ˆ˜์—…์ž๋ฃŒ
๊ฐ•์˜ ๊ฒŒ์‹œ์ผ: 
๋งˆ์ง€๋ง‰ ์—…๋ฐ์ดํŠธ์ผ: 

์ˆ˜๊ฐ•ํ‰

์ „์ฒด

23๊ฐœ

4.9

23๊ฐœ์˜ ์ˆ˜๊ฐ•ํ‰

  • nonoa846๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
    nonoa846

    ์ˆ˜๊ฐ•ํ‰ 27

    โˆ™

    ํ‰๊ท  ํ‰์  5.0

    5

    95% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

    ์ด๋ฒˆ์— ํ”„๋กœ์ ํŠธ ํ•˜๋Š”๋ฐ ์นดํ”„์นด๋กœ db๋™๊ธฐํ™”๋ฅผ ํ•ด์•ผ๋˜์„œ ๋„ˆ๋ฌด ๋ง‰๋ง‰ํ–ˆ๋Š”๋ฐ ๊ถŒ์ฒ ๋ฏผ๋‹˜์˜ ๊ฐ•์˜๋ฅผ ์น˜ํŠธํ‚ค๋ฅผ ์จ์„œ ํ”„๋กœ์ ํŠธ ์ž˜ ์ ์šฉํ–ˆ๊ณ  ์™„๋ฃŒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋„ˆ๋ฌด ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค ๋งˆ๋ฆฌ์•„db -> postgresql postgresql -> ๋งˆ๋ฆฌ์•„db

    • ์ž‰์—ฌ์ธ๊ฐ„๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
      ์ž‰์—ฌ์ธ๊ฐ„

      ์ˆ˜๊ฐ•ํ‰ 32

      โˆ™

      ํ‰๊ท  ํ‰์  5.0

      5

      100% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

      ๊ฐ•์˜ ์ž๋ฃŒ๊ฐ€ ์ž˜ ์ค€๋น„๋˜์–ด์žˆ์–ด์„œ ์‹ค์Šต ํ•˜๋Š”๋ฐ ๋ง‰ํž˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์ •๋ง ์žฌ๋ฏธ์žˆ๊ฒŒ ์ˆ˜๊ฐ•ํ–ˆ์Šต๋‹ˆ๋‹ค.

      • ๊ถŒ ์ฒ ๋ฏผ
        ์ง€์‹๊ณต์œ ์ž

        ์žฌ๋ฏธ์žˆ๊ฒŒ ์ˆ˜๊ฐ•ํ•˜์…จ๋‹ค๋‹ˆ ์ €๋„ ๋ฟŒ๋“ฏํ•ฉ๋‹ˆ๋‹ค. ์ข‹์€ ์ˆ˜๊ฐ•ํ‰ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

    • ์กฐ์˜์ง„๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
      ์กฐ์˜์ง„

      ์ˆ˜๊ฐ•ํ‰ 2

      โˆ™

      ํ‰๊ท  ํ‰์  5.0

      5

      31% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

      • ๊ถŒ ์ฒ ๋ฏผ
        ์ง€์‹๊ณต์œ ์ž

        ์ข‹์€ ์ˆ˜๊ฐ•ํ‰ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค ^^

    • logt๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
      logt

      ์ˆ˜๊ฐ•ํ‰ 10

      โˆ™

      ํ‰๊ท  ํ‰์  5.0

      5

      100% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

      ๋„ˆ๋ฌด ์ข‹์€ ๊ฐ•์˜์˜€์Šต๋‹ˆ๋‹ค. ์ „๋ฐ˜์ ์ธ connect ๋ฉ”์ปค๋‹ˆ์ฆ˜๋ฟ ์•„๋‹ˆ๋ผ, MySQL๊ณผ PostgreSQL๋ฅผ ํ†ตํ•œ DBMS Replication์˜ ๊ธฐ์ดˆ์ ์ธ ์ง€์‹๊นŒ์ง€ ์–ป์–ด ๊ฐ‘๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค :) ๊ฐœ์ธ์ ์œผ๋กœ ์นดํ”„์นด ์™„๋ฒฝ ๊ฐ€์ด๋“œ ์ฝ”์–ด ํŽธ์„ ๋ฐ˜๋“œ์‹œ ์ •๋…ํ•˜์‹œ๊ณ  ํ•ด๋‹น ๊ฐ•์˜๋ฅผ ์ˆ˜๊ฐ•ํ•˜์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค! ์ฝ”์–ด ํŽธ์„ ๋ณธ ์‚ฌ๋žŒ๊ณผ ์•ˆ ๋ณธ ์‚ฌ๋žŒ์ด ์งˆ๋ฌธ ๊ฒŒ์‹œํŒ์—์„œ ์ฐจ์ด๊ฐ€ ๋‚ฉ๋‹ˆ๋‹ค.

      • ๊ถŒ ์ฒ ๋ฏผ
        ์ง€์‹๊ณต์œ ์ž

        ์ด๋ ‡๊ฒŒ ์ข‹์€ ๊ธ€์„ ๋‚จ๊ฒจ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ € ์—ญ์‹œ ๊ฐ•์˜๋ฅผ ๋งŒ๋“  ๋ณด๋žŒ์„ ๋А๋‚„ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

    • hy.gill๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
      hy.gill

      ์ˆ˜๊ฐ•ํ‰ 1

      โˆ™

      ํ‰๊ท  ํ‰์  5.0

      5

      31% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

      • ๊ถŒ ์ฒ ๋ฏผ
        ์ง€์‹๊ณต์œ ์ž

        ์†Œ์ค‘ํ•œ ์ˆ˜๊ฐ•ํ‰ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

    ๊ถŒ ์ฒ ๋ฏผ๋‹˜์˜ ๋‹ค๋ฅธ ๊ฐ•์˜

    ์ง€์‹๊ณต์œ ์ž๋‹˜์˜ ๋‹ค๋ฅธ ๊ฐ•์˜๋ฅผ ๋งŒ๋‚˜๋ณด์„ธ์š”!

    ๋น„์Šทํ•œ ๊ฐ•์˜

    ๊ฐ™์€ ๋ถ„์•ผ์˜ ๋‹ค๋ฅธ ๊ฐ•์˜๋ฅผ ๋งŒ๋‚˜๋ณด์„ธ์š”!

    ์›” โ‚ฉ19,800

    5๊ฐœ์›” ํ• ๋ถ€ ์‹œ

    โ‚ฉ99,000