ํ๊ตญ์์ ๋๋ผ ๊ฑฐ์ผ? ์์ด๋ก ์ธ๊ณ ์์ฅ์ ๋ซ์ด๋ผ! ๐๐
์๋ ํ์ธ์. UC Berkeley์์ ๐ป ์ปดํจํฐ ๊ณตํ(EECS)์ ์ ๊ณตํ๊ณ , ์ค๋ฆฌ์ฝ ๋ฐธ๋ฆฌ์์ 15๋ ์ด์์ ์ํํธ์จ์ด ์์ง๋์ด๋ก ์ผํด์์ผ๋ฉฐ, ํ์ฌ๋ ์ค๋ฆฌ์ฝ๋ฐธ๋ฆฌ ๋น ํ ํฌ ๋ณธ์ฌ์์ ๋น ๋ฐ์ดํฐ์ DevOps๋ฅผ ๋ค๋ฃจ๋ Staff Software Engineer๋ก ์์ต๋๋ค.
๐งญ ์ค๋ฆฌ์ฝ ๋ฐธ๋ฆฌ์ ํ์ ํ์ฅ์์ ์ง์ ๋ฐฐ์ด ๊ธฐ์ ๊ณผ ๋ ธํ์ฐ๋ฅผ ์จ๋ผ์ธ ๊ฐ์๋ฅผ ํตํด ์ด์ ์ฌ๋ฌ๋ถ๊ณผ ํจ๊ป ๋๋๊ณ ์ ํฉ๋๋ค.
๐ ๊ธฐ์ ํ์ ์ ์ต์ ์ ์์ ๋ฐฐ์ฐ๊ณ ์ฑ์ฅํด ์จ ์ ์ ํจ๊ป, ์ฌ๋ฌ๋ถ๋ ๊ธ๋ก๋ฒ ๋ฌด๋์์ ๊ฒฝ์ํ ์ ์๋ ์ญ๋์ ํค์๋ณด์ธ์!
๐ซก ๋๋ํ์ง๋ ์์ง๋ง, ํฌ๊ธฐํ์ง ์๊ณ ๊พธ์คํ ํ๋ฉด ๋ญ๋ ์ง ์ด๋ฃฐ์ ์๋ค๋ ์ ์ ๊ผญ ๋ง์๋๋ฆฌ๊ณ ์ถ์ต๋๋ค. ํญ์ ์ข์ ์๋ฃ๋ก ์์์ ๋์์ ๋๋ฆฌ๊ฒ ์ต๋๋ค
Courses
Reviews
- Docker with Silicon Valley Engineers
- Ansible with Silicon Valley Engineers
- Docker with Silicon Valley Engineers
- Docker with Silicon Valley Engineers
- Python from Basics to Advanced Taught by Silicon Valley Engineers
Posts
Q&A
append ๋ชจ๋ ์ฌ์ฉ ์ ์ง๊ณ
์๋ ํ์ธ์ ๊ถ์งํ๋,ํต์ฌ์ โAppend ๋ชจ๋๋ก๋ โ์ต์ข ๊ฐ๋ง ํ์ ๋ ํโ๋ง ์ธ ์ ์๋คโ๋ ์ ์ด์์. ์ง๊ณ(aggregation)๋ ์๋ ๊ฐ์ด ๊ณ์ ๋ณํ๋ฏ๋ก, ์ต์ข ๊ฐ์ ํ์ ํ ๊ธฐ์ค(์ด๋ฒคํธ ์๊ฐ์ด ๋ซํ๋ค ๋ฑ)์ด ์์ผ๋ฉด append๊ฐ ๋ถ๊ฐํฉ๋๋คํ์ง๋ง, ์ด๋ฒคํธ ํ์ ์ด๊ณผ ์ํฐ๋งํฌ๋ฅผ ์ค์ ํ๊ณ , ์๊ฐ ์๋์ฐ(๋๋ ์ธ์ ์๋์ฐ) ๋ก ์ง๊ณํ๋ฉด, ์ํฐ๋งํฌ๋ฅผ ๋์ด ๋ฆ๊ฒ ์ฌ ๋ฐ์ดํฐ๋ ๋ฌด์๋๊ณ , ํด๋น ์๋์ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ต์ข ๊ฐ์ผ๋ก ํ์ ํ ์ ์์ด append๊ฐ ๋ฉ๋๋ค.from pyspark.sql import functions as F events = ( spark.readStream .format("kafka") .option("kafka.bootstrap.servers", "broker:9092") .option("subscribe", "events") .load() .selectExpr("CAST(value AS STRING) AS value", "CAST(timestamp AS TIMESTAMP) AS ts") ) agg = ( events .withWatermark("ts", "15 minutes") # ๋ฆ๊ฒ ์ค๋ ๋ฐ์ดํฐ ํ์ฉ ํ๋ .groupBy(F.window("ts", "10 minutes"), F.col("value")) .count() .select( # ์๋์ฐ ์ปฌ๋ผ ํํํ(์ ํ) F.col("value"), F.col("count"), F.col("window.start").alias("window_start"), F.col("window.end").alias("window_end"), ) ) query = ( agg.writeStream .outputMode("append") # ์๋์ฐ๊ฐ โ๋ซํ๋ฉดโ ์ต์ข ๋ ์ฝ๋๋ง append .format("kafka") .option("kafka.bootstrap.servers", "broker:9092") .option("topic", "events_agg_10m") .option("checkpointLocation", "/chk/agg_10m") .start() )์ ๋๋? ์๋์ฐ๋ ๋ ์๊ฐ์ด ์๊ณ , ์ํฐ๋งํฌ๊ฐ ์ง๋๋ฉด โ์ด ์๋์ฐ ๊ฐ์ ๋ ์ด์ ๋ฐ๋์ง ์๋๋คโ๋ผ๊ณ ํ๋จ ๊ฐ๋ฅ โ ์ต์ข ๋ ์ฝ๋๋ง append.์ฆ, Kafka/File ๋ฑ append-only ์ฑํฌ๋ก ์ง๊ณ๋ฅผ ์ฐ๊ณ ์ถ๋ค๋ผ๊ณ ํ์๋ฉด withWatermark + window ์ง๊ณ + outputMode("append")๋ก ๋์์ธ ํ์๋ฉด ๋ ๋ฏ ํฉ๋๋ค.
- 0
- 2
- 11
Q&A
CDC ๊ธฐ๋ฐ ์คํํฌ ์ํคํ ์ฒ ๊ตฌํ ๋ฐฉ๋ฒ์ด ๊ถ๊ธํฉ๋๋ค.
์ ์ฃ์กํฉ๋๋ค. ์ ๊ฐ ์ง๋ฌธ์ด ๋ค์ด์จ ๊ฑธ ์ธ์ง๋ฅผ ๋ชปํ๊ณ ์์๋ค์RDS -> (CDC) -> S3(Parquet) -> EMR/Spark ๋ ๋งค์ฐ ๋ณดํธ์ ์ด๊ณ ์ ์ฐ์ด๋ ํจํด์ ๋๋ค. ๋ค๋ง โCDC โ S3โ ๊ตฌ๊ฐ์ DMS๋ก ๋จ์ ์ ์ฌ๋ง ํ๊ณ , ์ค์ โ์ ์ํธ/์ญ์ ๋ฐ์ยท์ปดํฉ์ ยท์คํค๋ง ์งํโ๋ Lakehouse ํฌ๋งท(Hudi/Iceberg/Delta)๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ด ์ค๋ฌด์์ ๊ฐ์ฅ ๊น๋ํฉ๋๋ค. ์ฆ, DMS๋ ์ถ์ถยท์ ๋ฌ(Extraction), EMR/Glue๋ ํ ์ด๋ธ ๊ด๋ฆฌ(Upsert/Compaction/Optimize) ์ญํ ์ ๋ถ๋ฆฌํ๋ ๊ตฌ์ฑ์ด ๋ฒ ์คํธ ํ๋ํฐ์ค์ ๊ฐ๊น์ต๋๋ค.๋์์ด ๋์ จ๋ค๋ฉด ์ข๊ฒ ๋ค์.
- 0
- 2
- 31
Q&A
Dockerfile ์ง๋ฌธ
์๋ ํ์ธ์,์ฝ๋ฉํธ ๋จ๊ฒจ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ๋ถ๋ชจ ๋๋ ํ ๋ฆฌ๋ฅผ app์ด๋ผ๊ณ ํด๋จ๊ธฐ ๋๋ฌธ์ ํผ๋์ด ๋๋ ๊ฒฝ์ฐ๋ ์๊ธฐ๋ ํ๊ฒ ์ง๋ง, ๋ง์ํ์ ์ ์ ๋ง์ต๋๋ค.COPY app /app/โ ํธ์คํธ์ app ๋๋ ํ ๋ฆฌ๋ฅผ ์ปจํ ์ด๋ ์์ /app/ ๋๋ ํ ๋ฆฌ ๋ฐ์ผ๋ก ๋ณต์ฌํฉ๋๋ค.๋ฐ๋ผ์ ์ปจํ ์ด๋ ์์๋ /app/ ์ด ์์นํ๊ฒ ๋ฉ๋๋ค.์ฝ๋๋ฅผ ๋ค์ปค ์์ /app ๋ฐ์ผ๋ก ์กด์ฌํ๊ฒ ๋ง๋ค์ด๋จ๊ธฐ๋๋ฌธ์ ์ฝ๋๋ ๋ง์ต๋๋ค๋ง ํผ๋์ด ๋์ จ์ ์๋ ์๊ฒ ๋ค์.
- 0
- 2
- 23
Q&A
๊ณต์ compose ๋ด postgres db ์ค์น์
์๋ ํ์ธ์ ์ํด๋น๋,์ข์ ์ฝ๋ฉํธ ๊ฐ์ฌํฉ๋๋ค. ๋ฐ์ AI ์ธํด์ด ๋งํ ๊ฒ ๊ฐ์ด Compose๋ฅผ ์ฌ์ฉํ์ค๋ ์๋น์ค๋ช ์ ํธ์คํธ๋ช ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค. ๋จ ๊ฐ์ ๋คํธ์ํฌ ์์ ์์ด์ผํฉ๋๋ค.๋์์ด ๋์ค์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง https://inf.run/mrzP8 ์ ๋ฌด๋ฃ Docker ๊ฐ์๊ฐ ์์ผ๋, ๋ค์ผ์๋ฉด ๊ฐ๋ ์ดํดํ๋๋ฐ ๋์์ด ๋์ค ๊ฒ ๊ฐ์ต๋๋ค.
- 0
- 2
- 32
Q&A
vs code ํ๊ฒฝ์์ ์คํ๋ฐฉ๋ฒ
์๋ ํ์ธ์ sugmug๋,์ผ๋จ ๋ถํธ์ ๋๋ ค ์ฃ์กํฉ๋๋ค. ์ง๊ธ ๋ฐ๋ก ๋ นํํด์ ๊ณต์ง์ฌํญ ์ฌ๋ ค๋จ์ผ๋, ์ธ์ฝ๋ฉ ๋๋๊ณ , ์์ ๋ณด์๋ฉด ๋์์ด ๋ ์๋ ์์ ๊ฒ ๊ฐ์ต๋๋ค. ์ ๊ฐ ์ถ์ธกํด์ ๋ฃ์ ๋ด์ฉ์ธ๋ฐ ๋์์ด ๋์์ผ๋ฉด ์ข๊ฒ ์ต๋๋ค.๋์ค์ ์ข์ ๋ฆฌ๋ทฐ๋ ๋ถํ๋๋ ค์ ใ ใ (์ฌ์ง)
- 0
- 2
- 22
Q&A
์ค์ ๋ฌธ์ ํ์ด ์์ ์ฝ๋ ํฐํธ๊ฐ ์์ผ๋ฉฐ ์์์ด ๋ญ๊ฐ ํ๋ฆฟํฉ๋๋ค.
์๋ ํ์ธ์ ์ทํ๋งจ๋,๋จผ์ ๋ถํธ์ ๋ผ์ณ๋๋ฆฐ ์ ์ง์ฌ์ผ๋ก ์ฌ๊ณผ๋๋ฆฝ๋๋ค.์ด๋ค ๊ฐ์์ธ์ง ์๋ ค์ฃผ์๋ฉด ๋ฐ๋ก ํ์ธํ์ฌ ๋์๋๋ฆฌ๊ฒ ์ต๋๋ค.ํ์ฌ ๋ชจ๋ ๊ฐ์์ ์ฝ๋๊ฐ ์๋ฃ์ค์ ์ฌ๋ผ์ ์์ผ๋, ๋จผ์ ํ์ธํด ๋ณด์๋ฉด ๋ถํธํจ์ด ๋ค์ ํด์๋ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.์ถ๊ฐ๋ก ๋์์ด ํ์ํ์๋ฉด ์ธ์ ๋ ์ง ๋ง์ํด ์ฃผ์ธ์.๋ค์ ํ ๋ฒ ์ฌ๊ณผ๋๋ฆฝ๋๋ค.
- 0
- 1
- 32
Q&A
[ํ๊ธํ๋ ๊ฐ์์๋ฃ ์์ฒญ]
์๋ ํ์ธ์. ๊ฐ์ ๋ค์ด์ฃผ์ ์ ์ ๋ง ๊ฐ์ฌํฉ๋๋ค.๋ง์ํด์ฃผ์ ๋ถ๋ถ ์ถฉ๋ถํ ๊ณต๊ฐ๋๋ฉฐ, ์ ์ญ์ ํ์ต ์ ๊ฐ๋ ์ฑ์ด ์ผ๋ง๋ ์ค์ํ์ง ์ ์๊ณ ์์ต๋๋ค.๋ค๋ง, ํ์ฌ๋ ์์ด ๋ฒ์ ์ ์๋ฃ๋ง ๋ณด์ ํ๊ณ ์์ด ํ๊ตญ์ด ์๋ฃ๋ฅผ ๋ณ๋๋ก ์ ๊ณตํด ๋๋ฆฌ๊ธฐ ์ด๋ ค์ด ์ ์ํด ๋ถํ๋๋ฆฝ๋๋ค.๋ฒ์ญ๋ณธ์ ๊ฒฝ์ฐ ์ค์ญ์ด๋ ์๋ฏธ ์๊ณก์ ์ฐ๋ ค๊ฐ ์์ด, ๊ฐ์์์๋ ์ต๋ํ ๊ณต์ ๋ฌธ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ํํ๊ฒ ์ค๋ช ๋๋ฆฌ๊ธฐ ์ํด ์์ด ์๋ฌธ์ ์ค์ฌ์ผ๋ก ๊ตฌ์ฑํ์์ต๋๋ค.๋ถํธ์ ๋๋ ค ์ฃ์กํ๋ฉฐ, ๊ฐ์ ๋ด์ฉ ์ค ์ดํด๊ฐ ์ด๋ ค์ด ๋ถ๋ถ์ด ์์ผ์๋ฉด ์ธ์ ๋ ํธํ๊ฒ ์ง๋ฌธ ์ฃผ์ธ์. ์ต๋ํ ๋์๋๋ฆฌ๊ฒ ์ต๋๋ค.๊ฐ์ฌํฉ๋๋ค.
- 0
- 2
- 40
Q&A
์์์ด ์๋ฆฌ๋ง ๋์ค๊ณ ์์์ ์๋ณด์ ๋๋ค.
๋ค ์ธํ๋ฐ ๋ฌธ์ ์ผ ๊ฒ๋๋ค. ์ธํ๋ฐ์ ๋ฌธ์ํด ์ฃผ์๋ฉด ๋์์ ๋ฐ์ผ์ค ์ ์์ต๋๋ค! ๋ถํธ์ ๋๋ ค ์ฃ์กํฉ๋๋ค
- 0
- 2
- 28
Q&A
์๋์ด์์ง๋์ด ์ง์
๋ค, ์ด ์ ๋ ์ค์ฝํ๋ง ์ถฉ๋ถํ ์์งํ์ จ๋ค๋ฉด ์๋์ด ๋ ๋ฒจ ์์คํ ๋์์ธ ์ธํฐ๋ทฐ์์๋ ์๋น ๋ถ๋ถ์ ์ปค๋ฒํ ์ ์์ต๋๋ค. ํนํ ํต์ฌ ๊ฐ๋ ๋ค๊ณผ ์ํคํ ์ฒ ๊ฐ์ ํธ๋ ์ด๋์คํ๋ฅผ ๋ช ํํ๊ฒ ์ดํดํ๊ณ ์ค๋ช ํ ์ ์๋ค๋ฉด, ์ธํฐ๋ทฐ์ด ์ ์ฅ์์๋ ์ ๋ขฐ๋ฅผ ๊ฐ์ง ์ ์๋ ์์ค์ ๋๋ค. ๋ฌผ๋ก ํ์ฌ๋ง๋ค ๊ฐ์กฐํ๋ ์์ญ์ด ์กฐ๊ธ์ฉ ๋ค๋ฅผ ์๋ ์์ง๋ง, ์ง๊ธ์ ์ค๋น ๋ฐฉํฅ์ ํ์คํ ์ข์ ๋ฐฉํฅ์ด๊ณ , ๊ณ์ ๋ค๋ฌ์ด ๋๊ฐ์ ๋ค๋ฉด ์ถฉ๋ถํ ๊ฒฝ์๋ ฅ ์๋ ์ค๋ ฅ์ ๊ฐ์ถ๊ฒ ๋์ค ๊ฑฐ์์.
- 0
- 1
- 47
Q&A
ํด์ฆ6๋ฒ ๋ฌธ์
์๋ ํ์ธ์ jnkim๋,ํน์ ์ด๋ค ํด์ฆ๋ฅผ ๋ง์ํ์๋ ๊ฑด์ง ์ ์ ์์๊น์? ์ ๊ฐ ํด์ฆ๋ฅผ ๋ง๋ค์๋ ์ ์ ์๋๋ฐ, ์ธํ๋ฐ์์ ์๋์ผ๋ก ๋ด์ฉ์ ๋ฐํ์ผ๋ก ํด์ฆ๋ฅผ ๋ง๋ค์๋ ๋ณด๊ตฐ์.
- 0
- 2
- 32