END!! and.. NEXT ๐Ÿ˜Ž

๋ณต์ค€์ˆ˜ยท2024๋…„ 12์›” 29์ผ

rankingflow (DATA PIPLINE PROJECT)

๋ชฉ๋ก ๋ณด๊ธฐ
10/10
post-thumbnail

์ฒ˜์Œ์—๋Š” Airflow์˜ ๋ฐ”๋žŒ๊ฐœ๋น„ ๋กœ๊ณ ๊ฐ€ ๋งˆ์Œ์— ๋“ค์–ด์„œ Airflow๋ฅผ ๋ฐ”ํƒ•์œผ๋กœํ•œ
๋ฐ์ดํ„ฐํŒŒ์ดํ”„๋ผ์ธ์„ ํ•œ๋ฒˆ ๊ตฌ์ถ•ํ•ด๋ณด์ž๋Š” ์ƒ๊ฐ์œผ๋กœ ์‹œ์ž‘ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.
(๋ฐ”๋žŒ๊ฐœ๋น„๊ฐ€ ์ƒ๋‹นํžˆ ์„ผ์Šค์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.....)

๊ทธ๋Ÿฐ ๊ณผ์ •์—์„œ ๋А๋‚€์ ๋„, ์–ด๋ ค์› ๋˜์  ๊ทธ๋ฆฌ๊ณ  ์•ž์œผ๋กœ ๋” ๊ณต๋ถ€ํ•ด๋ณผ ๊ฒƒ์„ ํ•œ๋ฒˆ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

๐Ÿ”’ TODO

rankingflow์˜ ํ•ต์‹ฌ์œผ๋กœ ํ•ด๊ฒฐ๋˜์–ด์•ผ ํ–ˆ๋˜ ๋ถ€๋ถ„์€ ์•„๋งˆ ๋‹ค์Œ 5๊ฐ€์ง€๋กœ ์ถ•์•ฝ๋  ๊ฒƒ ๊ฐ™๋‹ค.

  • airflow - DAG ์ž‘์„ฑ
  • spark๋ฅผ ์ด์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ •์ œ
  • sparkjob์„ ์œ„ํ•œ ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ, python๋ฌธ๋ฒ•
  • ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง
  • docker container ๋นŒ๋“œ์™€ ํŒŒ์ดํ”„๋ผ์ธ์˜ ์—ฐ๊ฒฐ

๐Ÿ—๏ธ Airflow DAG ๊ฐœ๋ฐœ

  • ์ตœ์„ ์˜ ๋ฐฉ๋ฒ•

    BranchOperator๋ฅผ ํฌํ•จํ•œ DAG๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ณผ์ •์—์„œ
    ์ด๊ฒƒ๋„ ๋ ๊นŒ? ํ˜น์€ ์ด๋ ‡๊ฒŒ ๊ตฌ์„ฑ๋˜๋ฉด ํŽธ๋ฆฌํ•  ๊ฒƒ ๊ฐ™์€๋ฐ? ๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค๊ฒŒ ๋˜๋ฉด ํ•ด๋‹น ๋ฐฉ๋ฒ•์„ ์–ด๋–ป๊ฒŒ ํ•ด์„œ๋“  ๊ตฌํ˜„ํ•˜๋ ค ํ•œ๊ฒƒ ๊ฐ™๋‹ค.

    ์˜ˆ๋ฅผ๋“ค์–ด A๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ์— ์ตœ์ ํ™”๋˜์–ด ์žˆ์œผ๋ฉฐ ๋ณดํŽธ์ ์œผ๋กœ ์ ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•,
    B๋Š” ๋ฌธ์ œ๋ฅผ ์ ๋‹นํžˆ ํ•ด๊ฒฐํ•  ์ˆ˜๋Š” ์žˆ์œผ๋‚˜ ๋ณดํŽธ์ ์œผ๋กœ ์ ์šฉ๋˜๋Š” ํ•ด๊ฒฐ์ฑ…์€ ์•„๋‹ˆ๋ผ๊ณ  ํ•˜์ž.

    ์ด๋Ÿฐ ๊ฒฝ์šฐ์— B๋Š” ์†์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์œผ๋‚˜, ํ•ด๋‹น ๋ฐฉ๋ฒ•์œผ๋กœ ํŒŒ์ดํ”„๋ผ์ธ์˜ ํ•ด๋‹น ๋ถ€๋ถ„์„ ๋งค๊พธ๊ณ  ๋‚˜๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„์— task์—์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๊ธฐ๋„ ํ–ˆ์œผ๋ฉฐ, ๋Œ€์ถฉ ๋ญ‰๊ฒŒ๋Š” ๋А๋‚Œ์ด ๋“ค์–ด ๋งˆ์Œ์— ๊ฑธ๋ ธ๋‹ค.
    ์ด๋Ÿฐ ๊ฒฝ์šฐ์— ๋Œ€๊ฒŒ ๊ณต์‹๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉด ์–ด๋А์ •๋„ ํ•ด๊ฒฐ์ด ๋œ๋‹ค๋Š” ๊ฒƒ์„ ๋ฐฐ์› ๋‹ค.
    (๋ฌผ๋ก  ๋ธ”๋กœ๊ทธ๋‚˜ chatgpt๋„ ํ™œ์šฉํ–ˆ์ง€๋งŒ ์–ด๋А์ •๋„์˜ ํ‹€๋งŒ ๊ฐ–์ถœ ์ˆ˜ ์žˆ์—ˆ๊ณ , ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ๊ธฐ์œ„ํ•ด์„œ๋Š” ๊ฒฐ๊ตญ ๊ณต์‹๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•ด์•ผ ํ–ˆ๋‹ค.)

    ๊ทธ๋ ‡๊ฒŒ A๋ฅผ ์ฐพ๋Š” ๊ณผ์ •์—์„œ DAG๋ฅผ ์ž‘์„ฑํ•˜๋Š”๋ฐ์— ์ž์‹ ๊ฐ๋„ ์ƒ๊ธฐ๊ณ , ์ด๋ณด๋‹ค ์ง๊ด€์ ์ธ ํˆด์ด ์žˆ์„๊นŒ?๋ผ๋Š” ์ƒ๊ฐ๋„ ํ–ˆ๋‹ค.

๐Ÿ—๏ธ Spark..

  • ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ

    spark๋Š” ์ฃผ๋กœ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์— ์‚ฌ์šฉ๋˜๋Š” ๋ถ„์‚ฐ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์›Œํฌ์ด๊ณ , ์ด๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์š”์†Œ๊ฐ€ workernode,cluster manger, driver program๊ฐ€ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์ •๋„๋งŒ ๊ฐ€์ง€๊ณ  spark๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

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

    ํ•˜์ง€๋งŒ ์‹ค์ œ ์‚ฐ์—…์—์„œ ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•œ๋‹ค๋ฉด, ์ด๋ผ๋Š” ์ƒ๊ฐ์œผ๋กœ ์ž„ํ•ด์•ผ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— spark์™€ airflow์˜ ์กฐํ•ฉ์„ ์„ ํƒํ–ˆ๋‹ค.
    ๊ทธ ๊ณผ์ •์—์„œ SparkAPI๋ฅผ ์ด์šฉํ•ด์„œ ์ „์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์ต์ˆ™ํ•ด์กŒ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

  • ๋ฐ์ดํ„ฐ ์ €์žฅ
    spark๋„ ๊ทธ๋ ‡๊ณ  , spark dataframe์„ ์ €์žฅํ•˜๋Š” JDBC์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ์‹ฌ๋„์žˆ๊ฒŒ ๊ณต๋ถ€ํ•˜๊ณ , Java๋ฅผ ๊ณต๋ถ€ํ•˜๋ฉฐ ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ๋‚ด๊ฒƒ์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ๋„ ๋ถ„๋ช… ๋„์›€์ด ๋  ๊ฒƒ์ด๋‹ค.

    ํ•˜์ง€๋งŒ, ๋ฐ์ดํ„ฐ ์—”์ง€๋‹ˆ์–ด๋ง์„ ์œ„ํ•ด์„œ๋Š” ๋‚ด๊ฐ€ ์–ด๋–ค ํ”„๋ ˆ์ž„ ์›Œํฌ๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ์‹ฌ๋„์žˆ๊ฒŒ ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค๋Š”
    ์ƒˆ๋กœ์šด ํ”„๋ ˆ์ž„์›Œํฌ์— ์œ ์—ฐํ•˜๊ฒŒ์ ์‘ํ•˜๊ณ  ๊ทธ๊ฒƒ์„ ๊ฐ€์ ธ๋‹ค ์ตœ์ ํ™”ํ•˜์—ฌ ์ž˜์“ธ ์ˆ˜ ์žˆ๋Š” ๊ณต๋ถ€๋ฅผ ํ•ด์•ผ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

    ๊ทธ๋ž˜์„œ JDBC์™€ Spark์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ• ๋•Œ๋„ ์ด ๋ถ€๋ถ„์— ์œ ์˜ํ•ด์„œ ๊ณต๋ถ€ํ•ด์•ผ ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

๐Ÿ—๏ธ sparkjob & python

  • python ๋ฌธ๋ฒ•

    ์ด์ „๊นŒ์ง€๋Š” python์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ์ž๋ฃŒ๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฌธ๋ฒ•์ด๋ผ๋˜์ง€, pandasํ˜น์€ numpy๋ฅผ ์ด์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•˜๊ณ , ์ฒ˜๋ฆฌํ•ด๋ณธ๊ฒŒ ๋์ด์—ˆ๋˜๊ฒƒ ๊ฐ™๋‹ค. ๊ทธ๋ž˜์„œ์ธ์ง€ ์‹ค์ œ ๊ฐœ๋ฐœ์—์„œ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ๋ฌธ๋ฒ•๋“ค์„ ์ด๋ฒˆ๊ธฐํšŒ์— ์ ‘ํ•˜๊ณ  ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ ๊ฒƒ ๊ฐ™๋‹ค.

    ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ์ตœ๋Œ€๋กœ ๋Œ์–ด์˜ฌ๋ฆฌ๊ณ , ํ•จ์ˆ˜์˜ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ์ฑ™๊ธฐ๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅ์„ ๋งŽ์ด ํ•œ ๊ฒƒ ๊ฐ™๋‹ค.
    ์ด ๊ณผ์ •์—์„œ class์— ๋Œ€ํ•œ ๋ฌธ๋ฒ•, @decorater๋ฅผ ์‚ฌ์šฉํ•œ ๋ฌธ๋ฒ•, ๋‹ค๋ฅธ ์‚ฌ๋žŒ ์ฝ”๋“œ์—์„œ ๋ณด๋˜ __init__.py์˜ ์˜๋ฏธ, python์—์„œ์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ๋“ฑ์„ ํŒŒ์•…ํ•˜๊ณ  ํ‰์†Œ ์• ๋งคํ•˜๊ฒŒ ์•Œ ์žˆ๋˜ ๋ถ€๋ถ„๋“ค๊นŒ์ง€ ๊ณต๋ถ€ํ•˜๊ฒŒ ๋œ ๊ฒƒ ๊ฐ™๋‹ค.

๐Ÿ—๏ธ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง

  • ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง์ด ์™œ ํ•„์š”ํ•ด?

    ์ปดํ“จํ„ฐ๊ณตํ•™์„ ์ „๊ณตํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•™๋ถ€๋•Œ DB์™€ ๊ด€๋ จ๋œ ์ด๋ก ์„ ๋ฐฐ์šด์ ์ด ์—†๋‹ค. ์กธ์—…์„ ํ•˜๊ณ  ๋‚˜์„œ ์ทจ๋“ํ•œ sqld์ž๊ฒฉ์ฆ์—์„œ ์–ป์€ ์ง€์‹์ด ์ „๋ถ€์˜€๋‹ค. ์‚ฌ์‹ค ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์ด์ „์—๋Š” ๋„๋Œ€์ฒด ์ด๊ฑธ ์™œ ํ•ด์•ผํ•˜๋Š”์ง€ ์ž˜ ์•Œ์ง€ ๋ชปํ–ˆ๊ณ , ํฌ๊ฒŒ ๋„์›€์ด ๋ ๊นŒ๋ผ๋Š” ์ƒ๊ฐ์ด ๋จธ๋ฆฟ์†์— ๋– ์˜ฌ๋ž๋‹ค.

    ๊ทธ๋ž˜์„œ ๋งจ๋•…์— ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ , ์ ๋‹นํžˆ ์ด๋Ÿฐ๊ฑฐ ์žˆ์œผ๋ฉด ๋˜๊ฒ ๋„ค~๋ผ๋Š” ์ƒ๊ฐ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ •์ œํ•˜๊ณ  ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค์—ˆ๋‹ค.
    ๋‹ค ๋งŒ๋“ค๊ณ  ๋‚œ ํ…Œ์ด๋ธ”์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์กด์žฌํ–ˆ๋‹ค.

    • 1) ์ค‘๋ณต๋˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์•˜๋‹ค. ( ๊ฐ์œผ๋กœ ํ•˜๋‹ค๋ณด๋‹ˆ 1๋ฒˆ ํ…Œ์ด๋ธ”์— ์กด์žฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ 2๋ฒˆ ํ…Œ์ด๋ธ”์—๋„ ์กด์žฌํ–ˆ๋‹ค.)
    • 2) ์œ„์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ •๊ทœํ™”๋ฅผ ํ•˜๋Š” ๊ณผ์ •์—์„œ spark๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ ๋ณด๋‹ค ๋” ๋งŽ์€ ๋…ธ๋ ฅ์ด ํ•„์š”ํ–ˆ๋‹ค.
    • 3) ์ •๋ง๋กœ ํ•„์š”ํ–ˆ๋˜ ์ปฌ๋Ÿผ์ด ๋‚˜์ค‘์— ์ƒ๊ฐ๋‚˜๊ณ , ํ•ด๋‹น ์ปฌ๋Ÿผ์„ ์ถ”๊ฐ€ํ•˜๋Š” ์—ฐ์‚ฐ์— ๋น„์šฉ์ด ๋งŽ์ด ๋“ค์–ด๊ฐ”๋‹ค.
    • 4) ํŠน์ • ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘๊ธฐ์œ„ํ•ด ์š”์ฒญํ•œ ์ฟผ๋ฆฌ์˜ ์„ฑ๋Šฅ์ด ๋งค์šฐ๋งค์šฐ ๋‚ฎ์•˜๋‹ค lost connectionํ•˜๋Š” ์ผ์ด ๋Œ€๊ฑฐ ๋ฐœ์ƒ
      (์ค‘๋ณต๋œ ๋ฐ์ดํ„ฐ, ๋ถˆํ•„์š”ํ•œ ์ปฌ๋Ÿผ๊นŒ์ง€ join ๋˜๋Š” ์ƒํ™ฉ)

    ๊ธฐํƒ€๋“ฑ๋“ฑ..
    ๊ฒฐ๊ณผ๋ฌผ์ด ๋„ˆ๋ฌด ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋ฐฉํ–ฅ์ด ์•„๋‹๊ฒƒ ๊ฐ™์•„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์‹คํ–‰ํ–ˆ๋‹ค.

  • ์š”๊ตฌ๋ถ„์„
    ๋‚ด๊ฐ€ ๋ฌด์—‡์„ ํ•˜๊ณ  ์‹ถ์€์ง€๋ฅผ ๋ช…ํ™•ํžˆ ์ •ํ•˜๋Š” ๊ณผ์ •์ด์—ˆ๋‹ค. ํ•ด๋‹น ๊ณผ์ •์„ ๊ฑฐ์น˜๋‹ˆ ๋‚ด๊ฐ€ ์ˆ˜์ง‘ํ•˜๊ณ  ์‹ถ์€ ์†์„ฑ์ด ๋ฌด์—‡์ธ์ง€ ๋ช…ํ™•ํ•ด์กŒ๋‹ค.

  • ERD ๋‹ค์ด์–ด๊ทธ๋žจ
    ์š”๊ตฌ ๋ถ„์„์„ ํ•˜๊ณ  ๋‚˜๋‹ˆ ๋‚ด๊ฐ€์›ํ•˜๋Š” ์†์„ฑ์ด ๋ฌด์—‡์ธ์ง€ ํ™•์‹คํ•ด์กŒ๊ณ , ํ•ด๋‹น ์†์„ฑ๋“ค์ด ์–ด๋–ค ์—”ํ„ฐํ‹ฐ์— ๋“ค์–ด๊ฐ€ ์žˆ์–ด์•ผ ํ•˜๋Š”์ง€๋Š” ์ง๊ฐ์ ์œผ๋กœ ์ฑ„์›Œ๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ ๋๋‹ค.
    ์ด ๊ณผ์ •์—์„œ ์ค‘๋ณต๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์—†๊ฒŒ ํ•˜๊ณ , ์ตœ์†Œํ•œ์˜ join์—ฐ์‚ฐ์„ ํ†ตํ•ด ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์„ ์ž‘์„ฑํ•ด๋ณผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๐Ÿ—๏ธ docker

  • Linux OS
    ํ‰์†Œ ๋ฐ์ดํ„ฐ ๋ถ„์„์„ ํ•˜๋Š”๋ฐ์— ์žˆ์–ด์„œ ๋‹จ์ˆœํžˆ windowํ™˜๊ฒฝ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•  ์ˆ˜ ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฆฌ๋ˆ…์Šค์— ๋Œ€ํ•ด์„œ ๊ณต๋ถ€ํ•  ํ•„์š”๋ฅผ ๋А๋ผ์ง€ ๋ชปํ–ˆ์—ˆ๋‹ค.

    ๊ทธ๋Ÿฌ๋‚˜ ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ์˜คํ”ˆ์†Œ์Šค๋Š” ๋ชจ๋‘ ํ•˜๋‚˜๊ฐ™์ด ๋ฆฌ๋ˆ…์Šค์—์„œ ๋™์ž‘ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด์˜€๊ณ , ๊ทธ์ค‘ docker๋งˆ์ €๋„ ๋ฆฌ๋ˆ…์Šค ์œ„์—์„œ ๋Œ์•„๊ฐ€๋Š” ์‹œ์Šคํ…œ์ด์—ˆ๋‹ค.

    docker์—์„œ docker-composeํŒŒ์ผ, dockerfile์„ ์ดํ•ดํ•˜๊ณ  ํ™œ์šฉํ•˜๋ฉฐ
    ๋‹ค๋ฅธ ์˜คํ”ˆ์†Œ์Šค๋ฅผ ์ดํ•ดํ•˜๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด
    ๋ฆฌ๋ˆ…์Šค์˜ ์šด์˜์ฒด์ œ์— ๋Œ€ํ•ด์„œ ๊ณต๋ถ€ํ•  ํ•„์š”๋ฅผ ๋А๊ผˆ๊ณ , ์šฐ๋ถ„ํˆฌ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฆฌ๋ˆ…์Šค ๊ณต๋ถ€๋ฅผ ์œ„ํ•œ ์ฑ…๋„ ํ•œ๊ถŒ์„ ๋‹ค๋ณด๋ฉฐ ๊ณต๋ถ€ํ–ˆ๋‹ค.

    ์ด ๊ณผ์ •์„ ํ†ตํ•ด docker ์ปจํ…Œ์ด๋„ˆ๋„ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋ผ๋Š” ๋‹จ์œ„๋กœ ์ธ์‹ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋๊ณ , Host์ปค๋„์—์„œ ๋™์ž‘ํ•˜๋Š” ๋„์ปค์—”์ง„๊ณผ ๊ทธ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์™œ virtual machine๋ณด๋‹ค ๊ฒฝ๋Ÿ‰ํ™”๋˜์–ด ์žˆ๋‹ค๋Š”๊ฒƒ์ธ์ง€, ๋˜ํ•œ docker๋กœ ์˜ฌ๋ผ๊ฐ„ container์˜ ํŒŒ์ผ์‹œ์Šคํ…œ๋„ linux์˜ ํŒŒ์ผ์‹œ์Šคํ…œ๊ณผ ๋น„์Šทํ•˜๋‹ค๋Š” ์  ๋“ฑ์„ ์ธ์‹ํ•˜๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ์ˆ˜์›”ํ•ด์ง€๋Š” ๊ฒฝํ—˜์„ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

    ํ•˜์ง€๋งŒ ๋ถ€์กฑํ•œ ์ ๊ณผ ๊ฒ‰ํ•ฅ๊ธฐ ์‹์œผ๋กœ ์•Œ๊ณ  ์žˆ๋Š” ๋ถ€๋ถ„์„ ์™„์ „ํžˆ ๋ฉ”๊พธ๊ณ , ์ปจํ…Œ์ด๋„ˆ๊ด€๋ฆฌ์™€ ๋ฐ์ดํ„ฐํŒŒ์ดํ”„๋ผ์ธ์˜ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด OS๋ผ๋Š” ๊ฒƒ์„ ์ง‘์ค‘์ ์œผ๋กœ ๊ณต๋ถ€ํ•ด์•ผํ•  ํ•„์š”์„ฑ์„ ๋А๊ผˆ๋‹ค.

๐Ÿ˜Š ๋งˆ๋ฌด๋ฆฌ~_~

๐Ÿ’ซ Next

AWS EC2

Airflow๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•˜๊ณ  ๋‚˜๋‹ˆ ๋‚˜์˜ ํ”„๋กœ์ ํŠธ์—์„œ ์•„์‰ฌ์šด์ ์ด ๋ณด์ด๊ฒŒ ๋๋‹ค.

  • ์šฐ์„ , ๋ฐ”๋กœ ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ํ”„๋กœ์ ํŠธ์˜ ๋ฐ์ดํ„ฐ๋Š” ๊ฒฐ๊ตญ ๋กœ์ปฌ์— ์ €์žฅ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๊ตฌ์ถ•ํ•œ ๋ฐ์ดํ„ฐํŒŒ์ดํ”„๋ผ์ธ์„ ํ†ตํ•ด์„œ ์ €์žฅํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํ˜‘์—…ํ•˜๋Š” ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ๋งŒ๋“ค์–ด๋‚ด๋Š” ์ˆ™์ œ๊ฐ€ ์ƒ๊ฒผ๋‹ค.

  • ๋‹ค์Œ์œผ๋กœ, ๋‚˜์˜ ํ˜ธ์ŠคํŠธ๋จธ์‹ ์ด ์ž‘๋™ํ•˜๊ณ  ์žˆ๋Š” ์‹œ๊ฐ„์—๋งŒ airflow๊ฐ€ dags๋ฅผ ํŒŒ์‹ฑํ•˜๊ณ  ์Šค์ผ€์ฅด๋ง ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ฆ‰ ์ปดํ“จํ„ฐ๋ฅผ ์ผœ๋†“์€ ์ƒํƒœ๊ฐ€ ๋˜์–ด์•ผ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•  ์ˆ˜ ์žˆ๊ณ , ์ €์žฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

  • ๋งˆ์ง€๋ง‰์œผ๋กœ, ํ•œ์ •๋œ ์ปดํ“จํ„ฐ ์ž์›์ด๋‹ค. ๊ฒฐ๊ตญ ๋ฐ์ดํ„ฐ๊ฐ€ ๋กœ์ปฌ์— ์ €์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ด๋ฅผ ์œ„ํ•œ ํ•ด๊ฒฐ์ฑ…์œผ๋กœ AWS EC2์™€ ๊ฐ™์€ ํด๋ผ์šฐ๋“œ ์ปดํ“จํŒ…์„œ๋น„์Šค๊ฐ€ ์žˆ๋‹ค.
์ด ๋ถ€๋ถ„์„ ๊ณต๋ถ€ํ•˜๊ณ  ์ ์šฉํ•œ๋‹ค๋ฉด ํ•ด๊ฒฐ๋  ๋ถ€๋ถ„์ด๋ผ๊ณ  ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

Apache Kafka

๋‚ด๊ฐ€ ์ˆ˜์ง‘ํ•œ ๋ฐ์ดํ„ฐ๋Š” ๋งค์ผ 06:00๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ดˆ๊ธฐํ™”๋˜๊ณ  ํ•ด๋‹น ์‹œ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณผ์ •์ด๋‹ค.

์ฆ‰batch์ผ ๊ธฐ์ค€์˜ ์ฒ˜๋ฆฌ์ธ ์…ˆ์ด๋‹ค.

์ด๊ฒƒ๊ณผ ์กฐ๊ธˆ ๋‹ค๋ฅธ ๊ฐœ๋…์ด ๋ฐ”๋กœ ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์ธ๋ฐ ์ด๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด apache kafka๋ผ๊ณ  ํ•œ๋‹ค.

ํ•ด๋‹น ๋ถ€๋ถ„์„ ๊ณต๋ถ€ํ•ด์„œ ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋„ ํ•ด๋‚ด๊ณ  ์‹ถ๋‹ค.

๐Ÿ’ซ Good Bye 2024

๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ๊ด€์‹ฌ์„ ๊ฐ€์ง€๊ณ , ์‚ฌํšŒ์กฐ์‚ฌ๋ถ„์„์‚ฌ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ๋น…๋ฐ์ดํ„ฐ๋ถ„์„๊ธฐ์‚ฌ, sqld์™€ ๊ฐ™์€ ์ž๊ฒฉ์ฆ์„ ์ทจ๋“ํ•˜๋ฉฐ ์ผ๋…„์„ ๋ณด๋ƒˆ๋‹ค.
7์›”๋ถ€ํ„ฐ ๋ชฉํ‘œ๋กœ ํ–ˆ๋˜ airflow์™€ ๊ด€๋ จ๋œ ํ”„๋กœ์ ํŠธ๋ฅผ 2024๋…„์˜ ๋๊ณผ ํ•จ๊ป˜ ํ•  ์ˆ˜ ์žˆ์–ด์„œ ํ•œํ•ด๋ฅผ ๊ทธ๋ž˜๋„ ๋‚˜๋ฆ„? ์ž˜ ๋๋‚ด๋Š” ๋А๋‚Œ์ด ๋“ค์—ˆ๋‹ค.

log๋ฅผ ๋ณด๋ฉฐ ๊ณ„์† ๊ณ ๋ฏผํ•˜๊ณ ํ•ด๋‹น ๋กœ๊ทธ๋ฅผ ์–ด๋–ป๊ฒŒํ•˜๋ฉด ์—†์•จ ์ˆ˜ ์žˆ์„๊นŒ ๋””๋ฒ„๊น…ํ•˜๊ณ , ๋์„๊ฑฐ๋ผ ์ƒ๊ฐํ•ด์„œ wsl์— pullํ•˜๋ฉฐ ํ™•์ธํ–ˆ์ง€๋งŒ airflow์˜ task๊ฐ€ failed๋œฐ๋•Œ๋ฉด ์ขŒ์ ˆํ•˜๊ณ , ๋‹ค์‹œ ๋กœ๊ทธํ™•์ธํ•˜๊ณ , ๋‹ค์‹œ commitํ•˜๊ณ  ,, ๊ทธ๋Ÿฌ๋‹ค๊ฐ€ ์˜์™ธ์— ๋ฐฉ๋ฒ•์—์„œ success๊ฐ€ ๋œจ๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ์„๋•Œ์˜ ํ—ˆ๋ฌดํ•จ๊ณผ ์งœ๋ฆฟํ•จ

docker์™€ ๊ด€๋ จ๋œ ์ฑ…๋„ ์žฌ๋ฐŒ๊ฒŒ ์ฝ๊ณ ,
๋น…๋ฐ์ดํ„ฐ ๋ถ„์„๊ธฐ์‚ฌ ํ•„๊ธฐ๋ฅผ ๊ณต๋ถ€ํ•˜๋ฉฐ ์ด๋ก ์œผ๋กœ๋งŒ ํ™•์ธํ–ˆ๋˜ ์—ฌ๋Ÿฌ ํˆด๋“ค์„ ๋‚ด๊ฐ€ ์ง์ ‘ ์จ๋ณด๊ฒŒ ๋œ๋‹ค๋Š” ์„ค๋ ˜์—์„œ ์‹œ์ž‘ํ–ˆ์„๊นŒ
์ž ์ด์˜ค์ง€ ์•Š์€ ์ƒˆ๋ฒฝ์—๋Š” sparkapi๊ณต๋ถ€ํ•˜๊ณ , ๋ชจ๋“  ๊ณผ์ •์„ ์ฆ๊ธธ ์ˆ˜ ์žˆ์—ˆ๋‹ค.


์ฆ๊ฑฐ์› ๋‹ค. ์•ž์œผ๋กœ๋„ ์ฆ๊ธฐ๋ฉฐ ๋ฌด์–ธ๊ฐ€๋ฅผ ๋ฐฐ์šฐ๋Š” ๋‚ด๊ฐ€ ๋˜๊ณ  ์‹ถ๋‹ค.
๋” ๋งŽ์ด ๊ณต๋ถ€ํ•˜๊ณ , ๋” ๋งŽ์ด ์•Œ๊ฒŒ ๋  ๋ฏธ๋ž˜์˜ ๋‚ด๊ฐ€ ์ง€๊ธˆ ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ๋ณธ๋‹ค๋ฉด ๋ถ€์กฑํ•œ ๋ถ€๋ถ„ ์•„์‰ฌ์šด ๋ถ€๋ถ„์ด ๋จผ์ € ๋ณด์ผ ์ˆ˜๋„ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค. ํ•˜์ง€๋งŒ, ๊ทธ๋•Œ๋„ ์—ฌ์ „ํžˆ ์ง€๊ธˆ์ฒ˜๋Ÿผ ๋ฐฐ์šฐ๋Š”๊ฑธ ์ฆ๊ธฐ๊ณ , ๊ณผ์ •์„ ์ฆ๊ธฐ๋Š” ๋‚ด๊ฐ€ ๋˜์–ด์žˆ๊ธธ ๋ฐ”๋ผ๋ฉฐ

0๊ฐœ์˜ ๋Œ“๊ธ€