top of page

์ด๊ฒƒ๋งŒ ๋ณด๋ฉด ๋‹น์‹ ๋„ AWS MSK Standard Owner!

  • 2024๋…„ 5์›” 7์ผ
  • 4๋ถ„ ๋ถ„๋Ÿ‰

์ด๊ฒƒ๋งŒ ๋ณด๋ฉด ๋‹น์‹ ๋„ AWS MSK Standard Owner!

์ด๊ฒƒ๋งŒ ๋ณด๋ฉด ๋‹น์‹ ๋„ AWS MSK Standard Owner

Written by Minhyeok Cha


2๋ถ€ ์•„๋‹Œ 2๋ถ€์ž…๋‹ˆ๋‹ค. ์ €๋ฒˆ ๋ธ”๋กœ๊ทธ์—์„œ ๋ง์”€๋“œ๋ ธ๋“ฏ ์ด๋ฒˆ ๊ธ€์€ AWS MSK๋ฅผ ๋”์šฑ ๊นŠ๊ฒŒ ์•Œ์•„๋ณด๊ณ  Cluster ๋ฐ Connect๋ฅผ ๊ตฌ์„ฑ๊นŒ์ง€ ์ž‘์„ฑํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.


โ–ผ ์ง€๋‚œ ๋ธ”๋กœ๊ทธ ๋ณด๋Ÿฌ๊ฐ€๊ธฐ

์ตœ๋Œ€ํ•œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…๋“œ๋ฆฝ๋‹ˆ๋‹ค. AWS์˜ ์ŠคํŠธ๋ฆฌ๋ฐ Event Broker

  1. MSK(Kafka)์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์šฉ์–ด๋“ค

  2. ๋ฐ๋ชจ1: MSK ๊ตฌ์ถ• ์‹œ์ž‘

    1. AWS MSK Cluster

      1. Network

      2. Security

      3. Monitoring

    2. Cloud9

      1. ์„œ๋ฒ„ ์ƒ์„ฑ

      2. EC2๋กœ ๋„˜์–ด๊ฐ€ Cloud9 ์—ญํ•  ์ถ”๊ฐ€

      3. Cloud9 ํ„ฐ๋ฏธ๋„ ์ ‘๊ทผ ํ›„ ๋‹ค์Œ ๋ช…๋ น์–ด ์‹คํ–‰

  3. ๋ฐ๋ชจ2: MSK Connect๋ฅผ ์‚ฌ์šฉํ•ด S3๋กœ ๋„˜๊ธฐ๊ธฐ(S3 Sink Connector)

    1. S3 ๋ฒ„ํ‚ท ์ƒ์„ฑ

      1. IAM ์ƒ์„ฑ

      2. ์‹ ๋ขฐ๊ด€๊ณ„ ํ˜•์„ฑ

      3. S3 ์—”๋“œํฌ์ธํŠธ ๊ฒŒ์ดํŠธ์›จ์ด

    2. MSK Connect ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฐ ์ปค๋„ฅํ„ฐ ์ƒ์„ฑ

    3. ์ปค๋„ฅํ„ฐ ๊ตฌ์„ฑ ํ•„๋“œ

  4. ๋งˆ๋ฌด๋ฆฌ


MSK(Kafka)์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์šฉ์–ด๋“ค

MSK ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ๋Œ์•„๊ฐ€๋Š” VPC์™€ ํ”„๋กœ๋“€์„œ, ์ปจ์Šˆ๋จธ ๋ฐ์ดํ„ฐ๊ฐ€ ์˜ค๊ฐ€๋Š” ์‚ฌ์ง„
MSK ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ๋Œ์•„๊ฐ€๋Š” VPC์™€ ํ”„๋กœ๋“€์„œ, ์ปจ์Šˆ๋จธ ๋ฐ์ดํ„ฐ๊ฐ€ ์˜ค๊ฐ€๋Š” ์‚ฌ์ง„

ZooKeeper

  • ์ฃผํ‚คํผ๋Š” ๋ธŒ๋กœ์ปค ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ๋ธŒ๋กœ์ปค ์ƒํƒœ ๋ณ€๊ฒฝ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์ฃผํ‚คํผ๊ฐ€ ํ”„๋กœ๋“€์„œ์™€ ์ปจ์Šˆ๋จธ์—๊ฒŒ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.


Broker

  • ๋ธŒ๋กœ์ปค๋Š” MSK ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๋ธŒ๋กœ์ปค ๋…ธ๋“œ ์ˆ˜๋ฅผ ์ •ํ•˜๋ฉฐ ์ด๋Š” ํด๋Ÿฌ์Šคํ„ฐ ์•ˆ์—์žˆ๋Š” ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค.

  • ํด๋Ÿฌ์Šคํ„ฐ๋Š” ๊ฐ ๊ฐ€์šฉ์˜์—ญ ๋‹น ํ•˜๋‚˜์”ฉ์˜ ๋ธŒ๋กœ์ปค๊ฐ€ ์žˆ์œผ๋ฉฐ ์ด๋Š” ํ”„๋กœ๋“€์„œ์—์„œ ์ปจ์Šˆ๋จธ๊นŒ์ง€ ๋ฉ”์„ธ์ง€๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.


๋ธŒ๋กœ์ปค ๋‚ด๋ถ€ ํ๋ฆ„๋„๋ฅผ ๊ฐ ์šฉ์–ด์— ๋งž๊ฒŒ ๊ทธ๋ ค๋ดค์Šต๋‹ˆ๋‹ค.
๋ธŒ๋กœ์ปค ๋‚ด๋ถ€ ํ๋ฆ„๋„๋ฅผ ๊ฐ ์šฉ์–ด์— ๋งž๊ฒŒ ๊ทธ๋ ค๋ดค์Šต๋‹ˆ๋‹ค.

Topic

  • ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋‹จ์œ„์ž…๋‹ˆ๋‹ค.

  • ํ† ํ”ฝ์—๋Š” ํŒŒํ‹ฐ์…˜์ด ์กด์žฌ ํ•˜๋Š”๋ฐ, ํŒŒํ‹ฐ์…˜์˜ ์ตœ์†Œ 1๊ฐœ๋Š” ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.


Partition

  • ํ‚ค๊ฐ’์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ณ  ํ‚ค๊ฐ’์ด ์—†์„ ๊ฒฝ์šฐ ๋ผ์šด๋“œ ๋กœ๋นˆ ํ˜•์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ํŒŒํ‹ฐ์…˜์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.


offset

  • ๊ฐ ํŒŒํ‹ฐ์…˜๋งˆ๋‹ค ๋ ˆ์ฝ”๋“œ(๋ฐ์ดํ„ฐ) ์œ„์น˜๋ฅผ ๋ฐฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

  • ์˜คํ”„์…‹์˜ ๊ฐ’์€ ํŒŒํ‹ฐ์…˜ ๋‚ด๋ถ€์—์„œ ๊ณ ์œ ์˜ ๊ฐ’์œผ๋กœ ์šด์šฉ๋ฉ๋‹ˆ๋‹ค.


record

  • ๋ ˆ์ฝ”๋“œ๋Š” ๋ฐ์ดํ„ฐ์ด๋ฉฐ ํƒ€์ž„์Šคํƒฌํ”„ , ๋ฉ”์„ธ์ง€ ํ‚ค , ๋ฉ”์„ธ์ง€ ๊ฐ’ , ์˜คํ”„์…‹ , ํ—ค๋”๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.


์ด์ •๋„๋งŒ ์•Œ์•„๋„ ํ…Œ์ŠคํŠธ ๊ตฌ์ถ•์—๋Š” ๋ฌธ์ œ์—†์œผ๋‹ˆ ๋ฐ”๋กœ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.



๋ฐ๋ชจ 1: MSK ๊ตฌ์ถ• ์‹œ์ž‘

๊ตฌ์ถ•์€ AWS ์„œ๋น„์Šค์—์„œ 2๊ฐœ๋งŒ ์ƒ์„ฑํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

  1. AWS MSK cluster - ์นดํ”„์นด ๋ธŒ๋กœ์ปค

  2. Cloud9 - ํ”„๋กœ๋“€์„œ, ์ปจ์Šˆ๋จธ์šฉ์œผ๋กœ ๋ฉ”์„ธ์ง€ ์ „์†ก ๋ฐ ์ˆ˜์‹  ํ™•์ธ

โ€ป ์ „์šฉ VPC ์ƒ์„ฑํ•ด์„œ ์ง„ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— VPC ๋ฐ ์„œ๋น„์Šค ์‚ฌ์ „ ์ƒ์„ฑ

AWS MSK Cluster

AWS MSK ํด๋Ÿฌ์Šคํ„ฐ ์„ค์ • - ์‚ฌ์šฉ์ž ์ง€์ • ์ƒ์„ฑ

๋น ๋ฅธ ์ƒ์„ฑ์œผ๋กœ ํ•˜๋ฉด ์—„์ฒญ ๊ฐ„๋‹จํ•˜๊ธด ํ•œ๋ฐ, ๊ธฐ๋ณธ๊ฐ’(VPC, ์„œ๋ธŒ๋„ท, ๊ฐ€์šฉ ์˜์—ญ)์œผ๋กœ ์„ค์ •๋˜๋Š” ๊ฒƒ๋“ค์ด ๋งŽ์•„์„œ ์‚ฌ์šฉ์ž ์ง€์ •์œผ๋กœ ์ƒ์„ฑํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


ํ…Œ์ŠคํŠธ ์šฉ์ด๋‹ˆ ์‚ฌ์–‘์€ ์ตœ์†Œํ•œ ์ž‘๊ฒŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ถ”๊ฐ€๋กœ ๊ฐ€์šฉ์˜์—ญ = 2, ๋ธŒ๋กœ์ปค = 2๋กœ ์ด 4๊ฐœ์˜ ๋ธŒ๋กœ์ปค๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋˜๋ฉฐ, ์ด๋Š” 2๊ฐœ์˜ AZ์— ๊ท ๋“ฑํ•˜๊ฒŒ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.


Network
ํด๋Ÿฌ์Šคํ„ฐ ์ƒ์„ฑ ์‹œ ๋ธŒ๋กœ์ปค์˜ ์˜์—ญ์„ 2๊ฐœ๋กœ ์„ค์ •ํ•˜์˜€๊ธฐ์—, VPC ์„ค์ • ํ›„ ๋‚ด๋ถ€ ์„œ๋ธŒ๋„ท์„ 2๊ฐœ๋กœ ์ง€์ •

ํด๋Ÿฌ์Šคํ„ฐ ์ƒ์„ฑ ์‹œ ๋ธŒ๋กœ์ปค์˜ ์˜์—ญ์„ 2๊ฐœ๋กœ ์„ค์ •ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— VPC ์„ค์ • ํ›„ ๋‚ด๋ถ€ ์„œ๋ธŒ๋„ท 2๊ฐœ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.


MSK ํด๋Ÿฌ์Šคํ„ฐ๋„ ๋ณด์•ˆ๊ทธ๋ฃน์ด ๋“ค์–ด๊ฐ€๋Š”๋ฐ, ์ด๋•Œ ๋ณด์•ˆ๊ทธ๋ฃน์€ ์ถ”๊ฐ€ํ•  Cloud9๊ณผ ๋™์ผํ•˜๊ฒŒ ์‚ฌ์šฉํ•ด์•ผ ์—ฐ๊ฒฐ ๊ฐ€๋Šฅ

MSK ํด๋Ÿฌ์Šคํ„ฐ๋„ ๋ณด์•ˆ๊ทธ๋ฃน์ด ๋“ค์–ด๊ฐ€๋Š”๋ฐ, ์ด๋•Œ ์ด ๋ณด์•ˆ๊ทธ๋ฃน์€ ์ถ”๊ฐ€ํ•  cloud9๊ณผ ๋™์ผํ•˜๊ฒŒ ์‚ฌ์šฉํ•ด์•ผ ์—ฐ๊ฒฐ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.


Security
์ธ์ฆ๋˜์ง€ ์•Š์€ ์•ก์„ธ์Šค๋ฅผ ์‚ฌ์šฉํ•ด ํด๋ผ์ด์–ธํŠธ์— ๋Œ€ํ•œ ์ธ์ฆ ์ž‘์—… ์—†์ด ํ—ˆ์šฉํ•˜๋„๋ก ํ•จ

์ธ์ฆ๋˜์ง€ ์•Š์€ ์•ก์„ธ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์— ๋Œ€ํ•œ ์ธ์ฆ ์ž‘์—… ์—†์ด ํ—ˆ์šฉํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ถ”๊ฐ€๋กœ ์ „์†ก ๋ฐ์ดํ„ฐ ๋ฐ ์ €์žฅ ๋ฐ์ดํ„ฐ์˜ ์•”ํ˜ธํ™”๋Š” ์œ„์™€ ๊ฐ™์ด ์ฒดํฌํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.


Monitoring
๊ธฐ๋ณธ ๋ชจ๋‹ˆํ„ฐ๋ง์œผ๋กœ ์„ค์ •

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ธฐ๋ณธ ํ…Œ์ŠคํŠธ๋‚˜ ๊ธฐ๋ณธ ๋ชจ๋‹ˆํ„ฐ๋ง์œผ๋กœ ์„ค์ •ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.


์ดํ›„ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ตฌ์„ฑํ•˜๋ฉด ๋˜๋Š”๋ฐ ์ƒ์„ฑ์— 20๋ถ„ ์ •๋„ ์žก์•„๋จน์Šต๋‹ˆ๋‹ค.

20๋ถ„๊ฐ„ cloud9 ์ƒ์„ฑ ๋ฐ ์นดํ”„์นด ์•ฑ์„ ์„ค์น˜ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.



Cloud9

์„œ๋ฒ„์ƒ์„ฑ

Cloud9์˜ ๊ตฌ์„ฑ์€ ์—„์ฒญ ๊ฐ„๋‹จํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์œ„ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด ํ•ด์ฃผ์„ธ์š”.


์ฃผ์˜์‚ฌํ•ญ์œผ๋กœ๋Š” VPC ์„ค์ •์„ ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ VPC์— ๊ตฌ์„ฑ์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์— MSK ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ƒ์„ฑํ•œ ๊ณณ๊ณผ ๊ฐ™์€ ๊ณณ์—์„œ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


EC2๋กœ ๋„˜์–ด๊ฐ€ Cloud9 ์—ญํ•  ์ถ”๊ฐ€
EC2๋กœ ๋„˜์–ด๊ฐ€ Cloud9 ์—ญํ•  ์ถ”๊ฐ€ํ•˜๊ธฐ

FM์œผ๋กœ ์ง„ํ–‰ํ•˜๋ ค๋ฉด MSK arn ์ฐ๊ณ  ํ•˜๋‚˜์”ฉ ๊ถŒํ•œ๋ถ€์—ฌ๋ฅผ ํ•ด์•ผํ•˜์ง€๋งŒ, ํ•  ๊ฒŒ ๋งŽ์œผ๋‹ˆ admin ํ•˜๋‚˜ ์ฅ์–ด์ฃผ๊ณ  ๋„˜์–ด๊ฐ‘์‹œ๋‹ค.


Cloud9 ํ„ฐ๋ฏธ๋„ ์ ‘๊ทผ ํ›„ ๋‹ค์Œ ๋ช…๋ น์–ด ์‹คํ–‰

$ sudo yum -y install java-11
 
$ wget https://archive.apache.org/dist/kafka/{YOUR MSK VERSION}/kafka_2.13-{YOUR MSK VERSION}.tgz
 
$ tar -xzf kafka_2.13-{YOUR MSK VERSION}.tgz

์ž๋ฐ” ๋ฐ ์•„ํŒŒ์น˜ ์นดํ”„์นด๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ MSK ํด๋Ÿฌ์Šคํ„ฐ ๋ฒ„์ „๊ณผ ๋™์ผํ•˜๊ฒŒ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

*ํ…Œ์ŠคํŠธ ํ•ด๋ดค๋Š”๋ฐ, ๋ฒ„์ „์„ ํ‹€๋ ค๋„ ์—ฐ๊ฒฐ์€ ๋ฌธ์ œ๊ฐ€ ์—†๊ธด ํ–ˆ์Šต๋‹ˆ๋‹ค.



$ cd kafka_2.13-{YOUR MSK VERSION}/libs

$ wget https://github.com/aws/aws-msk-iam-auth/releases/download/v1.1.1/aws-msk-iam-auth-1.1.1-all.jar

$ cd kafka_2.13-{YOUR MSK VERSION}/bin

$ vi client.properties
	
	security.protocol=SASL_SSL
	sasl.mechanism=AWS_MSK_IAM
	sasl.jaas.config=software.amazon.msk.auth.iam.IAMLoginModule required;
	sasl.client.callback.handler.class=software.amazon.msk.auth.iam.IAMClientCallbackHandler

Amazon MSK IAM JAR ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œ ํ•ฉ๋‹ˆ๋‹ค. Amazon MSK IAM JAR์„ ์‚ฌ์šฉํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ ๋จธ์‹ ์ด ํด๋Ÿฌ์Šคํ„ฐ์— ์•ก์„ธ์Šค ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋ณด์•ˆ ๋ฐ ์ธ์ฆ ๊ตฌ์„ฑ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.


์ดํ›„ MSK ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ๊ฐ„๋‹จํ•œ topic ์ƒ์„ฑ ๋ฐ producer์—์„œ consumer๋กœ ๋ฉ”์„ธ์ง€๋ฅผ ๋˜์ ธ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


$ cd kafka_2.13-{YOUR MSK VERSION}/bin

$ ./kafka-topics.sh --create --bootstrap-server <MSK ํด๋Ÿฌ์Šคํ„ฐ ์ผ๋ฐ˜ ํ…์ŠคํŠธ> --command-config client.properties --replication-factor 2 --partitions 1 --topic MSKTutorialTopic

$ ./kafka-console-producer.sh --broker-list <MSK ํด๋Ÿฌ์Šคํ„ฐ ์ผ๋ฐ˜ ํ…์ŠคํŠธ> --producer.config client.properties --topic MSKTutorialTopic

# ํ„ฐ๋ฏธ๋„ ์ถ”๊ฐ€ ํ›„ ๋™์ผํ•œ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋“ค์–ด๊ฐ€ ์‹คํ–‰
$ ./kafka-console-consumer.sh --bootstrap-server <MSK ํด๋Ÿฌ์Šคํ„ฐ ์ผ๋ฐ˜ ํ…์ŠคํŠธ> --consumer.config client.properties --topic MSKTutorialTopic --from-beginning
MSK ํด๋Ÿฌ์Šคํ„ฐ ์ผ๋ฐ˜ ํ…์ŠคํŠธ๋Š” ํด๋ผ์ด์–ธํŠธ ์ •๋ณด ๋ณด๊ธฐ๋ฅผ ์ฐธ์กฐ
MSK ํด๋Ÿฌ์Šคํ„ฐ ์ผ๋ฐ˜ ํ…์ŠคํŠธ๋Š” ํด๋ผ์ด์–ธํŠธ ์ •๋ณด ๋ณด๊ธฐ๋ฅผ ์ฐธ์กฐ
์œ„์˜ producer ํ„ฐ๋ฏธ๋„์—์„œ ์•„๋ž˜ consumer ํ„ฐ๋ฏธ๋„๋กœ ๋ฉ”์„ธ์ง€๊ฐ€ ์ž˜ ์ „๋‹ฌ๋˜๋Š” ๋ชจ์Šต

์ƒ๋‹จ์˜ producer ํ„ฐ๋ฏธ๋„์—์„œ ์•„๋ž˜ consumer ํ„ฐ๋ฏธ๋„๋กœ ๋ฉ”์„ธ์ง€๊ฐ€ ์ž˜ ์ „๋‹ฌ๋˜๋Š” ๋ชจ์Šต์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.



๋ฐ๋ชจ 2: MSK Connect ๋ฅผ ์‚ฌ์šฉํ•ด S3๋กœ ๋„˜๊ธฐ๊ธฐ(S3 Sink Connector)

๋จผ์ € ์ด MSK Connect๋Š” ์™ธ๋ถ€ ์‹œ์Šคํ…œ๊ณผ ์นดํ”„์นด ํด๋Ÿฌ์Šคํ„ฐ ์‚ฌ์ด์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๊ธฐ ์‰ฝ๊ฒŒ ํ•ด์ฃผ๋Š” ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.


Kafka Connect ๋งŒ ์‚ฌ์šฉํ•˜์—ฌ CDCํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๋ฉด ์ƒ๋‹นํžˆ ๋งŽ์€ ์ธํ”„๋ผ ์ˆ˜์ž‘์—…์„ ํ•„์š”๋กœ ํ•˜๋Š”๋ฐ, MSK Connect๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด AWS Console ์ƒ์—์„œ ์‰ฝ๊ฒŒ Kafka Connect๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ๋ฐฐํฌ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


MSK Connect๋ฅผ ์‚ฌ์šฉํ•ด S3๋กœ ๋„˜๊ธฐ๊ธฐ(S3 Sink Connector)

์œ„ ๊ทธ๋ฆผ์—์„œ ๋ณด๋ฉด MSK ํด๋Ÿฌ์Šคํ„ฐ ์–‘์ชฝ์— MSK Connect๊ฐ€ ์žˆ๋Š”๋ฐ, ๊ฐ๊ฐ Source Connector๋Š” Producer์˜ ์—ญํ•  Sink Connector๋Š” Consumer์˜ ์—ญํ• ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹œ๋ฉด ํŽธํ•ฉ๋‹ˆ๋‹ค.


๋˜ํ•œ MSK Connect๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ํ•„์š”ํ•œ๋ฐ ์ด ๋˜ํ•œ ์—ฌ๋Ÿฌ๊ฐ€์ง€์˜ ์˜คํ”ˆ์†Œ์Šค (Debezium, Confluent ๋“ฑ๋“ฑ) ๊ฐ€ ๋งˆ๋ จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.


์šฐ๋ฆฌ์˜ ๋ชฉํ‘œ๋Š” ์ธ์Šคํ„ด์Šค์—์„œ ๋ฐ›๋Š” ๋ฉ”์„ธ์ง€๋กœ MSK์—์„œ S3๊นŒ์ง€๊ฐ€ ๋ชฉ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— Amazon S3 Sink Connector ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•˜์—ฌ ๋ฐ๋ชจ๋ฅผ ์ง„ํ–‰ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

โ€ป ์•„ํ‚คํ…์ณ์ƒ MSK Sink Connetc์— ํ•ด๋‹นํ•˜๋ฉฐ ์•„๋ž˜์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์น˜ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”.

๊ธฐ์กด MSK ํด๋Ÿฌ์Šคํ„ฐ ์ƒ์„ฑ์€ ์Šคํ‚ตํ•˜๊ณ  ์ง„ํ–‰ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

S3 ๋ฒ„ํ‚ท ์ƒ์„ฑ

S3 ๋ฒ„ํ‚ท ์ƒ์„ฑ

์œ„ ๋งํฌ์—์„œ ๋ฐ›์€ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ƒ์„ฑํ•œ ๋ฒ„ํ‚ท์— ์—…๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.


์ดํ›„ MSK Connect๊ฐ€ ํ•ด๋‹น ๋ฒ„ํ‚ท์— ์ ‘๊ทผ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๊ธฐ ์œ„ํ•œ IAM์„ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


IAM ์ƒ์„ฑ
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListAllMyBuckets"
      ],
      "Resource": "arn:aws:s3:::*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:GetBucketLocation",
        "s3:DeleteObject"
      ],
      "Resource": "<์ƒ์„ฑ ๋ฒ„ํ‚ท ARN>"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:AbortMultipartUpload",
        "s3:ListMultipartUploadParts",
        "s3:ListBucketMultipartUploads"
      ],
      "Resource": "*"
    }
  ]
}

์‹ ๋ขฐ๊ด€๊ณ„ ํ˜•์„ฑ
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "kafkaconnect.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

์œ„์—์„œ ์ƒ์„ฑํ•œ ์—ญํ• ์„ S3 ๊ธฐ๋ฐ˜ ๋กค๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ์‹ ๋ขฐ๊ด€๊ณ„์—์„œ ๋ณด์ด๋Š” "Service"๋ฅผ S3์—์„œ kafkaconnect๋กœ ๋ณ€๊ฒฝํ•ด์•ผ์ง€ MSK Connect์—์„œ ํ•ด๋‹น ๋กค์„ ์„œ์น˜ํ•ฉ๋‹ˆ๋‹ค.


S3 ์—”๋“œํฌ์ธํŠธ ๊ฒŒ์ดํŠธ์›จ์ด
MSK์—์„œ S3๊นŒ์ง€ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž˜ ํ๋ฅผ ์ˆ˜ ์žˆ๋„๋ก S3 endpoint๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฐฐ์น˜

๋งˆ์ง€๋ง‰์œผ๋กœ MSK์—์„œ S3๊นŒ์ง€ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž˜ ํ๋ฅผ ์ˆ˜ ์žˆ๋„๋ก S3 endpoint๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฐฐ์น˜ํ•ด์ค๋‹ˆ๋‹ค.



MSK Connect ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฐ ์ปค๋„ฅํ„ฐ ์ƒ์„ฑ

MSK Connect ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฐ ์ปค๋„ฅํ„ฐ ์ƒ์„ฑ

์œ„์˜ S3์— ์—…๋กœ๋“œํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ ์••์ถ•ํŒŒ์ผ๊นŒ์ง€ ๊ฒฝ๋กœ๋ฅผ ์œ„ ์‚ฌ์ง„์ฒ˜๋Ÿผ ์ง€์ •ํ•œ ๋’ค ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.


์‚ฌ์šฉ์ž ์ง€์ • ํ”Œ๋Ÿฌ๊ทธ์ธ์—์„œ ์œ„์—์„œ ์ƒ์„ฑํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ ํƒํ•œ๋‹ค

์œ„์—์„œ ๋งŒ๋“  ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋ฐ”๋กœ ์ปค๋„ฅํ„ฐ ์ƒ์„ฑ์— ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ ํƒํ•˜์—ฌ ์ƒ์„ฑํ•ด์ฃผ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.


์ปค๋„ฅํ„ฐ ๊ตฌ์„ฑ ํ•„๋“œ

์ปค๋„ฅํ„ฐ ๊ตฌ์„ฑ
์•„๊นŒ ๋งŒ๋“ค์–ด ๋‘” ํ•ด๋‹น MSK Connect๊ฐ€ S3 ๋ฒ„ํ‚ท ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ๋งŒ๋“  ์—ญํ•  ๋ถ€์—ฌํ•˜๊ธฐ

๋งˆ์ง€๋ง‰์œผ๋กœ ์•„๊นŒ ๋งŒ๋“ค์–ด ๋‘” ํ•ด๋‹น MSK Connect๊ฐ€ S3 ๋ฒ„ํ‚ท ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ๋งŒ๋“  ์—ญํ• ์„ ๋„ฃ์Šต๋‹ˆ๋‹ค.

(MSK Connect๋„ MSK Cluster์ฒ˜๋Ÿผ ๋งŒ๋“œ๋Š”๋ฐ ์‹œ๊ฐ„์ด ์ข€ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.)


๋งˆ์ง€๋ง‰์œผ๋กœ Cloud9์— ๋“ค์–ด์™€ kafka/bin ๋””๋ ‰ํ„ฐ๋ฆฌ์— client.propertiesย ํ…์ŠคํŠธ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  ๋‹ค์Œ ๋‚ด์šฉ์„ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค.

security.protocol=PLAINTEXT

์ด๋Š” Kafka ํด๋Ÿฌ์Šคํ„ฐ์™€์˜ ํ†ต์‹ ์— ์‚ฌ์šฉ๋˜๋Š” ๋ณด์•ˆ ํ”„๋กœํ† ์ฝœ์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์‚ฌ์ „์— ๋งŒ๋“  ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์ผ๋ฐ˜ ํ…์ŠคํŠธ๋กœ ๊ตฌ์„ฑํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— "PLAINTEXT"๋ผ๋Š” ํ”„๋กœํ† ์ฝœ์„ ๊ธฐ์ž…ํ•˜์˜€์Šต๋‹ˆ๋‹ค.


์ดํ›„ producer๋ฅผ ํ†ตํ•ด ๋ฉ”์„ธ์ง€๋ฅผ 3๊ฐœ ์ •๋„ ๋ณด๋‚ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

producer๋ฅผ ํ†ตํ•ด ๋ฉ”์„ธ์ง€๋ฅผ 3๊ฐœ ๋ณด๋‚ด๊ธฐ
producer ํ„ฐ๋ฏธ๋„์—์„œ ๋ณด๋‚ธ 3๊ฐœ์˜ ๋ฉ”์„ธ์ง€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด S3์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ (+S3 ์ƒ๋‹จ์˜ ๊ฒฝ๋กœ๋ฅผ ํ†ตํ•ด ์•Œ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ๋ฉ”์„ธ์ง€๊ฐ€ ์—ฌ๋Ÿฌ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ฒฝ์œ ํ•ด ๋„์ฐฉํ•œ๋‹ค๋Š” ๊ฒƒ)

3๊ฐœ์˜ ๋ณด๋‚ธ ๋ฉ”์„ธ์ง€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด S3์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์ถ”๊ฐ€๋กœ ์„ค๋ช…๋“œ๋ฆด ๊ฒƒ์€ S3 ์ƒ๋‹จ์˜ ๊ฒฝ๋กœ๋ฅผ ๋ณด์‹œ๋ฉด ๋ฐ”๋กœ json ๋ฉ”์„ธ์ง€๊ฐ€ ๋‚˜์˜ค๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ฒฝ์œ ํ•ด์„œ ๋„์ฐฉํ•œ ๊ฒƒ์„ ๋ณด์‹ค ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๋Š” MSK Connect ๊ตฌ์„ฑ์˜ topics.dir=testchamsk์˜ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ฃผ์ œ ๋ฐ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ตฌ๋ถ„์‹œ์ผœ ๋‘์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.


๋ฟ๋งŒ ์•„๋‹ˆ๋ผ MSK Connect ๊ตฌ์„ฑ ํ•„๋“œ๋Š” ๋‹ค์Œ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋งํฌ๋ฅผ ํ†ตํ•ด ์ปค์Šคํ…€ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.



๋งˆ๋ฌด๋ฆฌ

์›๋ž˜๋Š” AWS MSK ๋ชจ๋‘๊ฐ€ ์•Œ๋‹ค ์‹œํ”ผ ์˜คํ”ˆ์†Œ์Šค ๊ธฐ๋ฐ˜์ด๊ธฐ ๋•Œ๋ฌธ์— EC2์— kafka๋ฅผ ์ง์ ‘ ์„ค์น˜ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ MSK๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์˜ ๋น„์šฉ์ฐจ์ด๋„ ํ™•์ธํ•ด ๋ณผ ๊ณ„ํš๊นŒ์ง€๋„ ์žก์•„ ๋‘์—ˆ๋Š”๋ฐ ๋‚ด์šฉ์ด ๋ฐ๋ชจ๊ฐ€ ๊ธฐ์ค€์ด๋‹ค ๋ณด๋‹ˆ๊นŒ ๋„ฃ์ง€๋ฅผ ๋ชปํ–ˆ๋„ค์š”.


๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ฝ˜์†” ๋ฐ ํด๋Ÿฌ์Šคํ„ฐ ๋‹จ์˜ ์ˆ˜์ค€์ด ์•„๋‹ˆ๋ผ ๋”์šฑ ๋‚˜๊ฐ€ ๋ฐ์ดํ„ฐ ๋ ˆ์ฝ”๋“œ, ์˜คํ”„์…‹ ์„ค์ • ๋“ฑ ๋ชปํ•œ๊ฒŒ ์•„์‰ฝ์Šต๋‹ˆ๋‹ค.


๋ถ„๋Ÿ‰ ์กฐ์ ˆ ์‹คํŒจโ€ฆ


์ถ”๊ฐ€๋กœ S3 Sink Connector๋ฅผ ํ•˜๋ฉด์„œ ์•Œ๊ฒŒ๋œ ์‚ฌ์‹ค์ด์ง€๋งŒ ์ปค๋„ฅํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์ž‘๋…„์— ์ถœ์‹œ๋œ Amazon MSK, Kinesis Data Firehose๋ฅผ ํ†ตํ•ด Kafka ํ† ํ”ฝ S3 ์ „์†ก ๊ธฐ๋Šฅ์ด ๋‚˜์™”๋”๋ผ๊ณ ์š”. ๊ตณ์ด ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•˜์ง€ ์•Š์•„๋„ AWS ๋‚ด๋ถ€์—์„œ ์ „๋ถ€ ํ•ด๊ฒฐํ•ด ์ค€๋‹ค๋Š” ์ ์ด ํŽธ๋ฆฌํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.



๋‹ค์Œ ์ฃผ์ œ๋กœ๋Š” ์ด์–ด์„œ Kinesis๋กœ ์ฐพ์•„๋ต™๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

SmileShark Logo

์Šค๋งˆ์ผ์ƒคํฌ๋Š” 
AWS ํ”„๋ฆฌ๋ฏธ์–ด ํŒŒํŠธ๋„ˆ์ด๋ฉฐ
AI MSP ์„ธ์ƒ์„ ๋งŒ๋“ค์–ด ๊ฐ€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค

์ž์‚ฐ 2premier tier.png
ISMS-P.webp

์ธ์ฆ๋ฒ”์œ„  |  ํด๋ผ์šฐ๋“œ ๋ฉ”๋‹ˆ์ง€๋“œ ์„œ๋น„์Šค ์šด์˜           Cloud MSP

โ€‹์œ ํšจ๊ธฐ๊ฐ„  |  2026-03-05 ~ 2029-03-04     (์‹ฌ์‚ฌ ๋ฐ›์ง€ ์•Š์€ ๋ฌผ๋ฆฌ์  ์ธํ”„๋ผ ๋ฐ SaaS ์„œ๋น„์Šค ์ธํ”„๋ผ ์˜์—ญ ์ œ์™ธ)

์Šค๋งˆ์ผ์ƒคํฌ ์ฃผ์‹ํšŒ์‚ฌ  |  ์‚ฌ์—…์ž๋ฒˆํ˜ธ : 198-87-01516  |  ๋Œ€ํ‘œ์ด์‚ฌ : ์žฅ์ง„ํ™˜      ์„œ์šธ ๊ฐ•๋‚จ๊ตฌ ํ…Œํ—ค๋ž€๋กœ44๊ธธ 5, 8์ธต (๋Œ€์•„๋นŒ๋”ฉ)  |  ๋Œ€ํ‘œ์ „ํ™” : 070-5001-2205 

 |  ์ด๋ฉ”์ผ : contact@smileshark.kr

  • LinkedIn
  • Youtube
  • Facebook
ยฉCopyright
bottom of page