All
12 posts
Terraform์œผ๋กœ AKS์— airflow ๋„์šฐ๊ณ  git์œผ๋กœ DAG ๊ด€๋ฆฌํ•˜๊ธฐ

๋“ค์–ด๊ฐ€๊ธฐ์— ์•ž์„œ ์ด๋ฒˆ์— RAG๋ฅผ ์ด์šฉํ•œ ์ฑ„์šฉ์ •๋ณด ์ฑ—๋ด‡ ๊ตฌ์ถ•์„ ์œ„ํ•ด Azure ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํ™˜๊ฒฝ(ํ†ต์นญ AKS)์—์„œ ETL ํ”„๋กœ์ ํŠธ๋ฅผ ํ•ด๋ณด๊ธฐ ์œ„ํ•ด ์•„๋ž˜์™€ ๊ฐ™์€ ๊ณ„ํš์„ ์งฐ๋‹ค. ํ”„๋กœ์ ํŠธ ํ™˜๊ฒฝ์— airflow๋ฅผ ๋„์šฐ๊ณ  ์ฃผ๊ธฐ์ ์ธ ํฌ๋กค๋ง SPARK๋ฅผ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ๋งˆํŠธ ๊ตฌ์ถ• GPT-3 ํ† ํฌ๋‚˜์ด์ €๋ฅผ ์ด์šฉํ•œ ๋ฐ์ดํ„ฐ ์ž„๋ฒ ๋”ฉ ํฌ๋กœ๋งˆ DB์— ๋ฐ์ดํ„ฐ ์ ์ œ ์ด๊ฑฐ ํ•  ์ƒ๊ฐ์— ์ž”๋œฉ ๊ธฐ๋Œ€ํ•˜๊ณ  ํ—ˆ๊ฒ์ง€๊ฒ ์ผ๋‹จ AKS ์œ„์— ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ์˜ฌ๋ฆฐ ํ›„ pod์— airflow๋ฅผ ์˜ฌ๋ฆฌ๊ณ  DAG๋ฅผ GIT์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ๋” ๊ตฌ์„ฑํ–ˆ๋‹ค. ACR(Azure Container Registry)๋„ ๋งŒ๋“ค์–ด ๋„์ปค๋กœ ํ™˜๊ฒฝ ๋ฐฐํฌ๊นŒ์ง€ ์ž๋™ํ™”๋ฅผ ํ•ด๋†จ์œผ๋‚˜ ๊ฒฐ๊ตญ ๋ฌด์‚ฐ ๋˜์—ˆ๋‹คโ€ฆ ๊ทธ ์ด์œ ๋Š” ๋ฐ”๋กœ ๋น„์šฉ๋ฌธ์ œ์ด๋‹ค. ์ผ๋‹จ ๋‚ด๊ฐ€ ๊ฐœ๋ฐœํ•œ ํฌ๋กค๋Ÿฌ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๋ฉด ๋ฐ์ดํ„ฐ์˜ ํ˜•ํƒœ๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐ”๋กœ โ€˜detail_dataโ€™๋‹ค. ์ด ๋ฐ์ดํ„ฐ๋ฅผ , , ๊ทธ๋ฆฌ๊ณ  ํ”„๋กฌํ”„ํŠธ๋งŒํ•ด๋„ ์ด ์—„์ฒญ๋‚˜๋‹ค. ๊ทผ๋ฐ ํ•ด๋‹น ๊ธฐ๋Šฅ์€ ํ•„์ˆ˜์ ์ธ ๊ธฐ๋Šฅ์ด๋ผ ๋ฐ์ดํ„ฐ ์—”์ง€๋‹ˆ์–ด๋ง ํŒŒํŠธ์—์„œ ๋น„์šฉ ์ ˆ๊ฐโ€ฆ

๊ธ€๋˜ 10๊ธฐ๋ฅผ ์‹œ์ž‘ํ•˜๋ฉฐ

๋“œ๋””์–ด ๊ธ€๋˜ 10๊ธฐ๋ฅผ ์‹œ์ž‘ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ๋“œ์ด์–ด ๊ธ€๋˜ 10๊ธฐ๋ฅผ ์‹œ์ž‘ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!!! ์ด๋ฒˆ์— ๊ธ€๋˜ 10๊ธฐ๋ฅผ ์‹œ์ž‘ํ•˜๊ฒŒ ๋˜์–ด์„œ ๋„ˆ๋ฌด ๊ฐ์‚ฌํ•˜๋‹ค. ์ด๋ ‡๊ฒŒ ์ข‹์€ ์Šต๊ด€๊ณผ ๋„คํŠธ์›Œํ‚น์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ์‹  ๋ณ€์„ฑ์œค๋‹˜๊ป˜๋„ ๊ฐ์‚ฌํ•˜๊ณ  ์•Œ๋งž์€ ์‹œ๊ธฐ์— ๋˜ ๊ธ€๋˜ 10๊ธฐ ๋ชจ์ง‘ ๊ธ€์„ ๋‹ค์‹œ ํ•œ๋ฒˆ ํ™•์ธํ•œ ์Šค์Šค๋กœ์—๊ฒŒ๋„ ๊ฐ์‚ฌํ•˜๋‹ค. ์ „์ฒด์ ์œผ๋กœ ๊ธ€๋˜ 10๊ธฐ๋ฅผ ์œ„ํ•ด์„œ ๋‹ค์งํ•œ ์‚ฌํ•ญ์ด ๋ช‡๊ฐ€์ง€ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‚˜์˜ 9๊ธฐ ํ™œ๋™์œผ๋กœ ๊ฐ€๋ด์•ผ ํ•œ๋‹ค. ์ž ๊น ๊ทธ์ „์—!! ์•„์ง ๊ธ€๋˜๊ฐ€ ๋ญ”์ง€ ๋ชจ๋ฅด์‹ ๋‹ค๊ตฌ์š”? ์•„๋ž˜ ์ด๋ฏธ์ง€๋ฅผ ๋ˆŒ๋Ÿฌ์ฃผ์„ธ์š” ์ด์ด.. ๊ธ€๋˜ docs A few months agoโ€ฆ ๋‚ด๊ฐ€ ๋‹ค์งํ–ˆ๋‹ค๋Š” ๊ฒƒ์€ 9๊ธฐ์—์„œ ๋Š๋‚€ ์•„์‰ฌ์šด ๋ถ€๋ถ„์ด ์žˆ์—ˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. 9๊ธฐ๋ณด๋‹ค ์ด๋Ÿฐ ๋ถ€๋ถ„์—์„œ๋Š” ๋” ๋‚˜์•„์ ธ์•ผ๊ฒ ๋‹ค ๋ผ๋Š” ์ƒ๊ฐ์„ ๊ธ€๋กœ ํ’€์–ด๋ณด๊ณ ์ž ํ•œ๋‹ค. 1. ๊ฒฝํ—˜ํ•œ ์‚ฌ์‹ค ๋ณด๋‹ค๋Š” ์ƒ๊ฐ๊ณผ ๋Š๋‚€์ ์— ๋Œ€ํ•œ ๊ธ€์„ ์“ฐ๊ธฐ โ€œ์ด๊ฒŒ ๋ฌด์Šจ ์†Œ๋ฆฌ์ธ๊ต..?โ€ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋‚ด๊ฐ€ ์“ด ๊ธ€์„ ๋Œ์•„๋ณด๋ฉด ํ•ญ์ƒ ๋‚ด๊ฐ€ ๊ฒฝํ—˜ํ•œ ์‚ฌ์‹ค์— ๋Œ€ํ•ด์„œ ์ผ์„ ๋ฟ, ๊ทธ๋ž˜์„œ ๋‚ด๊ฐ€ ์ด๊ฑธ ๊ฒฝํ—˜ํ•˜๋ฉด์„œ ๋Š๋‚€ ์–ด๋ ค์›€๊ณผ ๊นจ๋‹ฌโ€ฆ

Load Balancer๋ž€? Feat. AWS

๋“ค์–ด๊ฐ€๊ธฐ์— ์•ž์„œ ์ตœ๊ทผ์— BOAZ ๋™์•„๋ฆฌ์—์„œ Oauto2์™€ goole calender๋ฅผ ์ด์šฉํ•ด์„œ ์›น ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“œ๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋Š”๋ฐ(๊ณ„ํš์— ์ „ํ˜€์—†๋˜ ๋ฆฌ์•กํŠธ๊นŒ์ง€ ์จ๋ณด๋Š”์ค‘๐Ÿฅฒ) ์ „๋ฐ˜์ ์ธ ์ธํ”„๋ผ ๊ตฌ์„ฑ์„ ๋‚ด๊ฐ€ ๋งก์•˜๋‹ค. ์ด๋•Œ, ๋„๋ฉ”์ธ์„ AWS EC2์— ๋“ฑ๋กํ•˜๋Š” ๊ณผ์ •์—์„œ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ALB ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ์— SSL ์ธ์ฆ์„ ์ ์šฉํ•˜๋ฉด ๊ฐ Ec2 ์ธ์Šคํ„ด์Šค ๋งˆ๋‹ค SSL์„ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์•„๋„ HTTPS ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ธฐ์— ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œ ๋ถ€๋ถ„์ด์—ˆ๋‹ค. ๊ทธ ๊ณผ์ •์—์„œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ๋‹จ์ˆœํžˆ โ€œ๊ทธ๋ƒฅ ๋ถ€ํ•˜๋ถ„์‚ฐ ์•„๋‹˜?โ€์œผ๋กœ ์•Œ๊ณ  ์žˆ๋˜ ๋‚˜์—๊ฒŒ ๊ฐœ๋…์ •๋ฆฌ๊ฐ€ ๊ผญ ํ•„์š”ํ•œ ๋ถ€๋ถ„์ด๋ผ ์ด๋ฒˆ ๊ธ€์„ ์ž‘์„ฑํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ๊ทธ๋Ÿผ ์‹œ์ž‘ํ•ด๋ณด์ž ์‹œ์ž‘ํ•ด๋ณด์ž Core ๊ธฐ๋ณธ์ ์œผ๋กœ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๋Š” Scale out์—์„œ ์‚ฌ์šฉ๋œ๋‹ค. ์„œ๋น„์Šค๋Š” ์„ฑ์žฅํ•˜๋Š”๋ฐ ๋Š˜์–ด๋‚˜๋Š” ํŠธ๋ž˜ํ”ฝ์„ ์„œ๋ฒ„๊ฐ€ ๊ฐ๋‹นํ•  ์ˆ˜ ์—†์„๋•Œ ์„œ๋ฒ„๋ฅผ ์ฆ์„คํ•˜๋Š”๋ฐ ์ด ๊ณผ์ •์—์„œ ๊ฐ ์„œ๋ฒ„์— ๊ฑธ๋ฆฌ๋Š” ๋ถ€ํ•˜๋ฅผ ๊ณ ๋ฅด๊ฒŒ ๋‚˜๋ˆ„๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ์ด ํ•„์ˆ˜์ ์œผ๋กœ ๋™๋ฐ˜๋˜์–ด์•ผ ํ•œ๋‹ค. ์ฆ‰ ๋‹ค์–‘ํ•œ ๊ณณ์—์„œ ๋“ค์–ด์˜ค๋Š” โ€ฆ

nginx๋กœ Spark, Yarn, kafka ๋“ฑ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ Web ui ๊ตฌ์„ฑํ•˜๊ธฐ

๋“ค์–ด๊ฐ€๊ธฐ์— ์•ž์„œ kafka ํ† ํ”ฝ๊ด€๋ฆฌ๋‚˜ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๊ทธ๋ฆฌ๊ณ  SPARK ๋ฉ”๋ชจ๋ฆฌ๋‚˜ yarn ๊ทธ๋ฆฌ๊ณ  ํ”„๋กœ์ผ€ํ…Œ์šฐ์Šค์™€ ๊ทธ๋ผํŒŒ๋‚˜ ๋“ฑ์ด ์ž˜ ์ž‘๋™ํ•˜๋Š”์ง€ ๋ชจ๋‘ cli๋กœ ๊ด€๋ฆฌํ•˜๋Š”๊ฒƒ์€ ๋ช…๋ฐฑํ•œ ํ•œ๊ณ„๊ฐ€ ์กด์žฌํ•œ๋‹ค. ๋„ˆ๋ฌด ๋ถˆํŽธํ•˜๊ณ  ๊ทธ๊ฒŒ ๋‹ค ์‹œ๊ฐ„ ์ž์› ๋นผ๋จน๋Š”๊ฑฐ๋‹ค. ๋•Œ๋ฌธ์— Web ui๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๋ณดํ†ต ๊ต‰์žฅํžˆ ํŽธํ•œ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๋ฆฌ์†Œ์Šค์™€ ํˆด์ด ๋Š˜์–ด๋‚˜๋Š” ๋งŒํผ ๋งŽ์€ Web ui๋ฅผ ๋„์›Œ์•ผ ํ•œ๋‹ค. ๊ทธ๋™์•ˆ ๋‚˜๋Š” ํฌํŠธ ํฌ์›Œ๋”ฉ์œผ๋กœ ๋ชจ๋“  ui๋ฅผ ๋„์› ๋‹ค. ์ด๋ ‡๊ฒŒ ๋์„ ๊ฒฝ์šฐ ๋‹จ์ ์€ ์ธ์Šคํ„ด์Šค๋ฅผ ๋„๊ณ  ํ‚ฌ๋•Œ๋งˆ๋‹ค ๋งค๋ฒˆ ํฌํŠธํฌ์›Œ๋”ฉ์„ ์ˆ˜๋™์œผ๋กœ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.๊ทธ๋™์•ˆ์€ ํ•œ๋ฒˆ์— ํฌํŠธ ํฌ์›Œ๋”ฉ์„ ํ•ด์ฃผ๋Š” .shํŒŒ์ผ์„ ๊ธธ๊ฒŒ ๋งŒ๋“ค์–ด์„œ ํ•ด๊ฒฐํ•ด์™”์œผ๋‚˜ ์ ์  ๊ฐ๋‹นํ•˜๊ธฐ ์–ด๋ ค์šด ์ˆ˜์ค€๊นŒ์ง€ ๊ฐ”๋‹ค. ๋•Œ๋ฌธ์— ๋„์ž…ํ•œ ๊ฒƒ์ด ๋ฐ”๋กœ ์šฐ๋ฆฌ ํŒ€์› ๋กœ์ปฌ ๋‚ด๋ถ€์˜ hosts์— ip์ฃผ์†Œ์™€ ๋„๋ฉ”์ธ ์ด๋ฆ„์„ ์ง€์ •ํ•ด๋‘๊ณ  nginx๋กœ ui๋ฅผ ๋„์šธ ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •ํ•ด๋‘๋Š” ๋ฐฉํ–ฅ์ด์—ˆ๋‹ค. nginx ์„ค์ • public-nat์— nginx ์„ค์น˜ํ•˜์—ฌ http rewriteํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ • ๋จผ์ € nginโ€ฆ

ETL์˜ T(transform)๋ฅผ ์œ„ํ•œ Spark-Streaming ์ฝ”๋“œ ์ž‘์„ฑํ•˜๊ธฐ

๋“ค์–ด๊ฐ€๊ธฐ์— ์•ž์„œ.. ์š”์ƒˆ๋Š” ํ•™๊ต ๊ณผ์ œ๋ฅผ ์œ„ํ•œ ๋”ฐ๋ฆ‰์ด ๋Œ€์‹œ๋ณด๋“œ๊ฐ€ ์•„๋‹Œ ํ•œ์ด์Œ ICT ๊ณต๋ชจ์ „์„ ์œ„ํ•œ ๋”ฐ๋ฆ‰์ด ์‹ค์‹œ๊ฐ„ ๋Œ€์‹œ๋ณด๋“œ ๊ตฌ์ถ•์„ ์ง„ํ–‰์ค‘์ด๋‹ค. ์›๋ž˜๋Š” ์นดํ”„์นด๋กœ ๋ฐ์ดํ„ฐ๋ฅผ producing ํ•˜์ž๋งˆ์ž ์Šคํ”ผ๋“œ๋ ˆ์ด์–ด๋ฅผ ๊ตฌ์ถ•ํ•ด์„œ ๋Œ€์‹œ๋ณด๋“œ์— ๋งˆ์ดํฌ๋กœ ๋ฐฐ์น˜ ํ˜•ํƒœ๋กœ ์‹ค์‹œ๊ฐ„ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๊ตฌ์ถ•ํ–ˆ๋‹ค๋ฉด ์ด๋ฒˆ์—๋Š” ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋” ๊ณ ๋„ํ™”ํ•˜๊ธฐ ์œ„ํ•ด Spark๋ฅผ ์ด์šฉํ•ด ํ•œ๋ฒˆ ํ˜•ํƒœ ๋ณ€ํ™˜์„ ํ•˜๊ณ  S3์— ์ ์ œํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์ ธ๋ดค๋‹ค. ์ฆ‰, ์•„ํ‚คํ…์ณ์˜ ๋ณ€ํ™”๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ์ด์ „ ์•„ํ‚คํ…์ณ ๋ณ€๊ฒฝ ํ›„ ์•„ํ‚คํ…์ณ ์ข€ ๋งŽ์ด ํž˜์จ๋ดค๋‹ค. ๋‹จ์ˆœํ•˜๊ฒŒ ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง๋งŒ ํ•˜๋Š” ๋Œ€์‹œ๋ณด๋“œ๋Š” ์‹์ƒํ•˜๊ธฐ๋„ ํ•˜๊ณ  ์†”์งํžˆ ์š”์ฆ˜ ๊ฐ™์ด Chatgpt๊ฐ€ ๋ฐœ๋‹ฌํ•œ ์‹œ๋Œ€์— ๊ทธ ์ •๋„ ๋ชป๋งŒ๋“œ๋Š” ์‚ฌ๋žŒ ์—†์„ ๊ฒƒ์ด๋‹ค. ๋‹ค๋งŒ ์ด๋ ‡๊ฒŒ ํด๋ผ์šฐ์•ˆ์—์„œ ๋‹ค์–‘ํ•œ ํˆด๊ณผ ํ•จ๊ป˜ ์„œ๋น„์Šค๋ฅผ ์ œ์ž‘ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๋˜ ๋‹ค๋ฅธ ๊ฐœ๋…์ด๋ผ ๊ทธ ์˜๋ฏธ๊ฐ€ ํฌ๋‹ค. ๋‚˜๋Š” ์œ„ ์•„ํ‚คํ…์ณ์—์„œ ์นดํ”„์นด๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ›์•„ SPARK์—์„œ ๋ณ€ํ™˜ ํ›„ S3์— ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ ์ œํ•˜๋Š” Spark-Streaming ์ฝ”๋“œ๋ฅผ ์ด๋ฒˆ์— ์ž‘์„ฑํ•ด๋ดค๋‹ค.โ€ฆ

Implementing CI/CD with Github Actions CI + AWS CodeDeploy

๋“ค์–ด๊ฐ€๊ธฐ์— ์•ž์„œ ์ด๋ฒˆ์— AWS EC2๋ฅผ ์ด์šฉํ•ด NAT instance๋ฅผ ํ™œ์šฉํ•ด kafka broker๋ฅผ ๊ตฌ์ถ•ํ–ˆ๋‹ค. ์ด์ œ producer๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์นดํ”„์นด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.(๋ฆฌ์†Œ์Šค ๋น„์šฉ ์ด์Šˆ๋กœ ํ”„๋กœ๋“€์„œ ์„œ๋ฒ„๋ฅผ ๋”ฐ๋กœ ๋ถ„๋ฆฌํ•˜์ง€ ์•Š์•˜๋‹ค.ใ…Žใ…Ž) ๋‹ค๋งŒ producer๋Š” ์•„์ง ๋ณธ๊ฒฉ์ ์œผ๋กœ ๊ฐœ๋ฐœํ•œ ์ƒํƒœ๊ฐ€ ์•„๋‹๋ฟ๋”๋Ÿฌ ๋‚˜์ค‘์— ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋ฐฐํฌํ•  ๋•Œ producer๋ฅผ ์ง€์†์ ์œผ๋กœ ์ˆ˜์ •ํ•ด์•ผ ํ•œ๋‹ค. ๋•Œ๋ฌธ์— ๊ณ„์†ํ•ด์„œ TEST๋ฅผ ํ•ด์•ผ ํ•˜๋Š”๋ฐ ๊ทธ ๊ณผ์ •์ด ์—ฌ๊ฐ„ ๋ถˆํŽธํ•œ๊ฒŒ ์•„๋‹ˆ๋‹ค. ๋งค๋ฒˆ Ec2 ํ‚ค๊ณ  ์ ‘์†ํ•ด์„œ ์ฃผํ‚คํผ๋ž‘ ์นดํ”„์นด ์˜ฌ๋ฆฌ๊ณ โ€ฆ ์•„๋ฌดํŠผ ์ƒ๊ฐ๋ณด๋‹ค ๋…ธ๋ ฅ์„ ํ•„์š”๋กœ ํ•œ๋‹ค. ๋˜ Github์™€ ๊ฐ™์ด producer์˜ ๋ฒ„์ „์„ ๊ด€๋ฆฌํ•˜๊ณ  ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๊ณต์œ ๋„ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์‘๋‹น ๊ตฌ์ถ•ํ•ด์•ผํ•  ๊ฒƒ์ด ์žˆ๋‹ค. ๊ทธ๊ฒƒ์ด ๋ฐ”๋กœ.. CI/CD๋‹ค!! Devops์˜ ๊ธฐ๋ณธ ์†Œ์–‘์ด์ž DE๋ผ๋ฉด ๋‹น์—ฐํžˆ ์•Œ์•„์•ผ ํ•˜๋Š” CI/CD๋ฅผ ๊ตฌํ˜„ํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค. ๋‹คํ–‰ํžˆ๋„ ํ•™๊ต์—์„œ ์  ํ‚จ์Šค๋ฅผ ์ด์šฉํ•œ CI/CD ๊ตฌํ˜„ ์ˆ˜์—…์„ ๋“ค์—ˆ๊ธฐ์— ๊ฐœ๋… ์ •๋„๋Š” ๊ฟฐ๊ณ  ์žˆ์—ˆ๋‹คโ€ฆ

Realtime data streaming with Apache Kafka, Druid, Superset

Base ์ด๋ฒˆ์— ํ•œ์ด์Œ์˜ ์ผํ™˜์œผ๋กœ ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์—์„œ ์‹ค์‹œ๊ฐ„ ๋”ฐ๋ฆ‰์ด ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“ค๊ฒŒ ๋˜์—ˆ๋‹ค. ๋‹ค๋งŒ ๋‚ด ์—ญํ• ์ด ๋ฐ์ดํ„ฐ ์—”์ง€๋‹ˆ์–ด๋ง ๋ฐ ์ธํ”„๋ผ์— ๊ตญํ•œ๋˜์–ด ์žˆ์–ด ๊ฐœ์ธ์ ์œผ๋กœ ์˜คํ”ˆ์†Œ์Šค๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋กœ์ปฌ์—์„œ ํ•˜๋‚˜๋ฅผ ๋” ๋งŒ๋“ค์–ด ๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ๋•Œ๋ฌธ์— ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ์ฐพ๋˜ ๋„์ค‘ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธ€์„ ๋ฐœ๊ฒฌํ–ˆ๋‹ค. https://medium.com/@emergeit/realtime-data-streaming-with-apache-kafka-apache-pinot-apache-druid-and-apache-superset-e67161eb9666 2๋…„์ด ๋„˜์€ ์ž๋ฃŒ์ด๊ธฐ๋Š” ํ•˜์ง€๋งŒ ๋‚ด ์š”๊ตฌ์‚ฌํ•ญ์„ ๋ชจ๋‘ ๋งŒ์กฑํ–ˆ๊ธฐ์— ์•„์ฃผ ์ ํ•ฉํ•œ ๋ž˜ํผ๋Ÿฐ์Šค์˜€๋‹ค. ๊ทธ๋Ÿผ ์ด์ œ ์‹œ์ž‘ํ•ด๋ณด์ž ์‹œ์ž‘ํ•ด๋ณด์ž Ddareungi real-time Dashboard architecture Dashboard architecture ์œ„๋Š” ๋‚ด๊ฐ€ ์ˆ˜์ •ํ•œ ์•„ํ‚คํ…์ฒ˜๋‹ค. ์‹ ๊ฒฝ ์“ด ๋ถ€๋ถ„์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค. Docker๋Š” Superset์„ ์˜ฌ๋ฆด๋•Œ๋งŒ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•œ๋‹ค. ๋ ˆํผ๋Ÿฐ์Šค์—์„œ๋Š” ๋ชจ๋“ โ€ฆ

Apache Kafka์— ๋Œ€ํ•ด ์ „๋ฐ˜์ ์œผ๋กœ ์•Œ์•„๋ณด์ž

์‚ฌ์ง„์นดํ”„์นด ๋กœ๊ณ  ์ด๋ฒˆ์— ์นดํ”„์นด๋ฅผ ๋กœ์ปฌ์—์„œ๋„ ๋Œ๋ ค๋ณด๊ณ  ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์—์„œ๋„ ๋‹ค๋ค„๋ณด๊ฒŒ ๋˜์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์นดํ”„์นด์˜ ๊ตฌ์กฐ๋‚˜ ๊ธฐ๋ณธ ๊ฐœ๋…์— ๋Œ€ํ•ด ์ •๋ฆฌ๋ฅผ ํ•˜๊ณ  ๊ฐ€์•ผํ•  ํ•„์š”์„ฑ์„ ๋Š๊ผˆ๋‹ค. ๋ฌผ๋ก  ์‹ค์ œ ๊ตฌ์ถ•์„ ํ• ๋•Œ๋Š” ์ธํ”„๋ผ์ ์ธ ์ธก๋ฉด์—์„œ ๋” ์• ๋ฅผ ๋จน๋Š”๋‹ค. ๋ฐฉํ™”๋ฒฝ ์„ค์ •์ด๋ผ๋˜์ง€.. ๊ทธ๋ž˜์„œ ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋…์— ๋Œ€ํ•ด์„œ๋Š” ์•ฝ๊ฐ„ ์†Œํ™€ํ•ด ์ง€๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์—ˆ๋‹ค. ์•„๋ž˜ ํ† ํ”ฝ ์ƒ์„ฑํ•  ๋•Œ์˜ shell ๋ช…๋ น์–ด๋ฅผ ๋ณด์ž ์‚ฌ์‹ค ์ด ๋ฌธ๊ตฌ๋ฅผ ๊ทธ๋ƒฅ copy/paste ํ•œ๋‹ค๋ฉด์•ผ ์ƒ์„ฑ ๊ฐ€๋Šฅํ•˜๊ฒ ์ง€๋งŒ ๋ผ๋Š” ๋ช…๋ น์–ด๊ฐ€ ์–ด๋–ค ์˜๋ฏธ์ธ์ง€ ์ž˜ ๋ชจ๋ฅธ๋‹ค๋ฉด ์‚ฌ์‹ค์ƒ kafka๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์˜๋ฏธ๊ฐ€ ์—†๋‹ค. ๋•Œ๋ฌธ์— ์ด๋ฒˆ ๊ธฐํšŒ์— ๊นŠ์ด์žˆ๊ฒŒ๋Š” ์•„๋‹ˆ๋”๋ผ๋„ ๋Œ€๋žต์ ์œผ๋กœ ์ •๋ฆฌ๋ฅผ ํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. Back ground of Kafka Kafka๋Š” ์™œ Kafka์ผ๊นŒ? ์นดํ”„์นด์˜ ์ฐฝ์‹œ์ž์ธ Jay Kreps๋Š” kafka๋Š” ์“ฐ๊ธฐ์— ์ตœ์ ํ™”๋œ ์‹œ์Šคํ…œ์ด๊ธฐ์— ์ž‘๊ฐ€์˜ ์ด๋ฆ„์„ ๋ถ™์ด๋Š”๊ฒŒ ๋‚ซ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์—ฌ ๋ณธ์ธ์ด ์ข‹์•„ํ•˜๋Š” ์ž‘๊ฐ€์ธ ํ”„๋ž€์ธ  ์นดํ”„์นด์˜ ์ด๋ฆ„์„ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์œผ๋กœ ๋ช…๋ช…ํ–ˆ๋‹ค. Before Kafka &โ€ฆ

AWS - jammy InRelease & 101 Network is unreachable ํ•ด๊ฒฐํ•˜๊ธฐ

AWS - jammy InRelease & 101: Network is unreachable jammy InRelease ์˜ค๋ฅ˜ ์นดํ”„์นด ๋ธŒ๋กœ์ปค Ubuntu ์„œ๋ฒ„์— java๋ฅผ ์„ค์น˜ํ•˜๋ ค๊ณ  ํ•˜๋Š”๋ฐ ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฌธ๊ตฌ๊ฐ€ ๋œจ๋ฉด์„œ ๋™์ž‘์ด ๋˜์ง€ ์•Š์•˜๋‹ค. ๋ฌด์Šจ jammy๊ฐ€ inrelease๋œ ๊ฒƒ ๊ฐ™์€๋ฐ ์žฌ๋ฏธ ํ•˜๋‚˜๋„ ์—†๊ณ  ๋จธ๋ฆฌ ์•„ํ”„๋‹ค ๋‹คํ–‰ํžˆ๋„ ํ•ด๋‹น ์—๋Ÿฌ์— ๋Œ€ํ•ด์„œ๋Š” AWS์ธก์—์„œ ๋‹ต๋ณ€ ๋‹ฌ์•„์ค€ ๋ถ€๋ถ„ ์žˆ๋‹ค. ๊ณต์‹ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ๋Œ€์ถฉ ํ•ด์„์„ ๋ณด๋ฉด ์•„๋ž˜์˜ ํฌ์ธํŠธ๋“ค์„ ๋‹ค์‹œ ์ฒดํฌํ•ด๋ด๋ผ ๊ฐ™์€๋ฐ ํ•ด์„ํ•ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ํ˜„์žฌ EC2๊ฐ€ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š” ๋‹ค๋ฅธ EC2๋“ค๊ณผ ๋™์ผํ•œ VPC ๋ฐ ์„œ๋ธŒ๋„ท์— ๋ฐฐํฌ๋˜์—ˆ๋Š”๊ฐ€? ๊ทธ๊ฒŒ ์•„๋‹ˆ๋ผ๋ฉด VPC๊ฐ€ ์ธํ„ฐ๋„ท ๊ฒŒ์ดํŠธ์›จ์ด๋กœ ์ธํ„ฐ๋„ท์— ์ ‘๊ทผ์ด ํ—ˆ์šฉ๋˜์–ด ์žˆ๋Š”๊ฐ€? ์„œ๋ธŒ๋„ท์ด public์ด๋ผ๋ฉด ์ธํ„ฐ๋„ท ๋ฐ”์šด๋“œ ํŠธ๋ ˆํ”ฝ์„ ์ธํ„ฐ๋„ท ๊ฒŒ์ดํŠธ ์›จ์ด๋กœ ๋ผ์šฐํŒ…ํ•˜๋Š” ๋ผ์šฐํŒ… ํ…Œ์ด๋ธ”์ด ์žˆ๋Š”๊ฐ€? ์„œ๋ธŒ๋„ท์ด private์ด๋ผ๋ฉด ์ธํ„ฐ๋„ท ๋ฐ”์šด๋“œ ํŠธ๋ž˜ํ”ฝ์„ ๊ณต์šฉ ์„œ๋ธŒ๋„ท์˜ NAT ๊ฒŒ์ดํŠธ ์œ„์—์ด๋กœ ๋ผ์šฐํŒ…ํ•˜๋Š” ๋ผ์šฐํŒ… ํ…Œ์ด๋ธ”์ด ์žˆ๋Š”๊ฐ€? ์ฒดํฌ๋ฆฌ์ŠคํŠธโ€ฆ

AWS NAT instance๋ฅผ ํ™œ์šฉํ•œ ๋น„์šฉ์ ˆ์•ฝ

NAT ์ธํ”„๋ผ ์ด๋ฒˆ์— ์‹ค์‹œ๊ฐ„ ๋”ฐ๋ฆ‰์ด ๋Œ€์‹œ๋ณด๋“œ ์ œ์ž‘ ํ”„๋กœ์ ํŠธ์— ๋ฐ์ดํ„ฐ ์—”์ง€๋‹ˆ์–ด ๋ฐ ์ธํ”„๋ผ๋กœ ์ฐธ์—ฌํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ํ˜‘์—… ๋ฐ ๋ฐฐํฌ์˜ ์šฉ์ด์„ฑ ๋•Œ๋ฌธ์— ํด๋ผ์šฐ๋“œ๋ฅผ ์ด์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •์ด ๋‚ฌ๊ณ  AWS์— EC2์— ์นดํ”„์นด ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ํ”„๋กœ๋“€์„œ๋ฅผ ๊ฐœ๋ฐœํ•˜๊ธฐ๋กœ ํ•˜์˜€๋‹ค. AWS๋ฅผ ์ด์šฉํ•œ ํ˜‘์—…์€ ์ฒ˜์Œ์ด๊ธฐ์— ์„ธ์„ธํ•˜๊ฒŒ ์‚ฌ์ „์กฐ์‚ฌ๋ฅผ ํ–ˆ๋Š”๋ฐ ์ฒซ์งธ๋กœ ์•Œ๊ฒŒ ๋œ ์‚ฌ์‹ค์€ AWS์—์„œ ๋„คํŠธ์›Œํฌ๋ฅผ ์„ค๊ณ„ํ• ๋•Œ NAT์˜ ์‚ฌ์šฉ์€ ํ•„์ˆ˜์ ์ด๋ผ๋Š” ๊ฒƒ์ด๋‹ค. ๋ณด์•ˆ์ƒ ์นดํ”„์นด ํด๋Ÿฌ์Šคํ„ฐ ์„œ๋ฒ„๋“ค์„ ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๊ฒŒ ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋•Œ๋ฌธ์— VPC ์ธํ”„๋ผ๋ฅผ ๊ตฌ์ถ•ํ• ๋•Œ Public ์„œ๋ธŒ๋„ท๊ณผ Private ์„œ๋ธŒ๋„ท์„ ๋งŒ๋“ค์–ด ๊ทธ์•ˆ์— EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ๋‘๊ณ , Bastion Host๋ฅผ ํ†ตํ•ด Public ์„œ๋ธŒ๋„ท์—์„œ Priavate ์„œ๋ธŒ๋„ท์œผ๋กœ ์ ‘์†ํ•œ ํ›„, NAT Gateway๋ฅผ ํ†ตํ•ด์„œ ์™ธ๋ถ€ ์ธํ„ฐ๋„ท ์†Œ์Šค๋ฅผ ์‚ฌ์„ค๋ง์—์„œ ๋ฐ›๋Š” ์‹์œผ๋กœ ์šด์šฉ๋œ๋‹ค. ๊ทธ๋งŒํผ ์ค‘์š”ํ•œ ๊ฒƒ์œผ๋กœ ๋‹น์—ฐํžˆ AWS์—๋„ ๊ด€๋ จ ์„œ๋น„์Šค์ธ NAT Gateway๊ฐ€ ์กด์žฌํ•˜๊ณ  ๊ทธ๊ฒƒ์„ ์ด์šฉํ•ด์„œ ์†์‰ฝ๊ฒŒ ์‚ฌ์„ค๋ง โ€ฆ

DataOptimizations - Speed up your pipeline

๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ ์ตœ์ ํ™”์˜ ํ•„์š”์„ฑ ๋Œ€ ๋น…๋ฐ์ดํ„ฐ ์‹œ๋Œ€์ธ ๋งŒํผ ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ์„ ์ตœ์ ํ™”ํ•˜๋Š” ๊ฒƒ์€ ๊ต‰์žฅํžˆ ์ค‘์š”ํ•˜๋‹ค. ํŠนํžˆ MLOps ๋ถ„์•ผ์—์„œ๋Š” ํ›จ์”ฌ ๋” ์ค‘์š”ํ•˜๋‹ค. ์™œ๋ƒํ•˜๋ฉด AI ์„ฑ๋Šฅ์ด ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ๋ฐœ์ „ํ•˜๋ฉด์„œ ๊ทธ๋งŒํผ ์ถ”๋ก ์†๋„๋‚˜ ํ•™์Šต ์†๋„ ๋˜ํ•œ ๊ต‰์žฅํžˆ ์ค‘์š”ํ•ด์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์‚ฌ์ง„ ๋ณดํŽธ์ ์ธ ์ตœ์ ํ™” ๋ฐฉ์•ˆ์ด ์กด์žฌํ• ๊นŒ? ๊ทธ๋ ‡๋‹ค๋ฉด ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ์„ ์ตœ์ ํ™”ํ•˜๋Š” ๋ณดํŽธ์ ์ธ ์ •๋‹ต์ด ์กด์žฌํ• ๊นŒ? ๋‚ด ๋Œ€๋‹ต์€ No!๋‹ค. ๊ตฌ์ถ•ํ•˜๋Š” ํŒŒ์ดํ”„๋ผ์ธ๋งˆ๋‹ค ๋„๋ฉ”์ธ๊ณผ ์š”๊ตฌ์‚ฌํ•ญ๋“ค์ด ๋ชจ๋‘ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋ณดํŽธ์ ์ธ ์š”๊ตฌ์‚ฌํ•ญ์ด๋ž€ ์กด์žฌํ•  ์ˆ˜ ์—†๋‹ค. ์‚ฌ์ง„ ๋ณดํŽธ์ ์ธ ์ปดํฌ๋„ŒํŠธ๋Š” ์กด์žฌํ• ๊นŒ? ๊ทธ๋ ‡๋‹ค๋ฉด ๋ณดํŽธ์ ์ธ ์ปดํฌ๋„ŒํŠธ๋Š” ์ค‘์š”ํ• ๊นŒ? ๋‚ด ๋Œ€๋‹ต์€ Yes๋‹ค. ๋ณดํŽธ์ ์ธ ์ปดํฌ๋„ŒํŠธ๋Š” ์กด์žฌํ•œ๋‹ค. ๋ฐ”๋กœ DataLake๋‹ค. ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ์€ โ€œ์ˆ˜์ง‘ -> ์ ์žฌ -> ์ฒ˜๋ฆฌ -> ํ™œ์šฉโ€์˜ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์น˜๋Š”๋ฐ ์ด๋•Œ ์ ์žฌ ๋ถ€๋ถ„์—์„œ ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์šด์˜์šฉ์œผ๋กœ์“ฐ๋Š” ๊ฒฝ์šฐ์—๋Š” Datalake๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋ฐ–์— ์—†๋‹ค. ๋”ฐ๋ผ์„œ datalake๋ฅผ ์ตœ์ ํ™” ํ•˜๋Š”๊ฒƒ์ด ๊ฒฐ๊ตญ ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผโ€ฆ

๋ญ? Mongo DB๊ฐ€ ๊ฐ€์šฉ์„ฑ์„ ๋ณด์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ ?

์ œ๋ชฉ์„ ๋ณด๋ฉด ์ด๊ฒŒ ๋ฌด์Šจ ์†Œ๋ฆฌ์ธ๊ฐ€ ์‹ถ์„ ์ˆ˜ ์žˆ๋‹ค. ๋‚˜๋„ ์ฒ˜์Œ ๋“ฃ๊ณ  ๋ ์š”์˜น? ํ–ˆ์—ˆ๋‹ค. ๋‚ด๊ฐ€ ์•Œ๊ณ  ์žˆ๋Š” MongoDB๋Š” BASE(BA: Basicallyย Avaliable) ์ฆ‰, ๊ฐ€์šฉ์„ฑ๊ณผ ์„ฑ๋Šฅ์„ ์ค‘์‹œํ•œ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์˜ ํŠน์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  ๋˜ํ•œ ์ด ์ ์ด ๊ธฐ์กด์— ACID ํŠน์„ฑ์„ ๊ฐ€์ง„ RDBMS์™€์˜ ์ฐจ์ด์ ์ด๋ผ๊ณ  ์•Œ๊ณ  ์žˆ์—ˆ๋‹ค. ๋”๊ตฐ๋‹ค๋‚˜ Mongo DB๊ฐ€ ํƒ„์ƒํ•˜๊ฒŒ ๋œ ๋ฐฐ๊ฒฝ์ด ์•„๋ž˜์™€ ๊ฐ™์€ ๊ณ ๋ฏผ ๋์— ํƒ„์ƒํ•œ ๊ฒƒ์„ ์•Œ์•˜๊ธฐ์— ๋”์šฑ ์˜์•„ํ–ˆ์—ˆ๋‹ค. ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š”๋ฐ RDBMS๋Š” ์„ฑ์žฅ ํ•œ๊ณ„๊ฐ€ ์žˆ๊ตฌ๋‚˜ ์ผ๊ด€์„ฑ๊ณผ ๋ฌด๊ฒฐ์„ฑ์„ ๋ฒ„๋ฆฌ๊ณ  ๋” ๋น ๋ฅธ ์ฝ๊ธฐ ์„ฑ๋Šฅ๊ณผ ์ˆ˜ํ‰ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•œ DB๊ฐ€ ํ•„์š”ํ•ด! ๊ทธ๋Ÿผ ์–ด์ฉŒ๋‹ค ์ œ๋ชฉ๊ณผ ๊ฐ™์ด ๋ˆˆ์ด ํฌ๊ฒŒ ๋– ์ง€๋Š” ์งˆ๋ฌธ์„ ์Šค์Šค๋กœ์—์„œ ๋˜์กŒ์„๊นŒ ์ด๋ฒˆ์— ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๊ธฐ์ดˆ ๋„์„œ๋ฅผ ๊ณต๋ถ€ํ•˜๋ฉด์„œ CAP์ด๋ก ์ด๋ผ๋Š” ๊ฒƒ์„ ์ฒ˜์Œ ์ ‘ํ•˜๋ฉฐ ์ด ์˜๋ฌธ์ด ์‹œ์ž‘๋˜์—ˆ๋‹ค. CAP์ด๋ก  ์ด๋ž€? CAP ์ด๋ก ์€ 2000๋…„์— ์—๋ฆญ ๋ธŒ๋ฅ˜์–ด๊ฐ€ ์ตœ์ดˆ๋กœ ์†Œ๊ฐœํ•œ ์ด๋ก ์ด๋ฉฐ ์–ด๋–ค ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์ด๋”๋ผ๋„ย Consistencyย (์ผ๊ด€์„ฑ),ย Avaโ€ฆ