๊น์ฐฝ๋ฏผ : ๋ฐ์ดํฐ GCS ์ ์ฌ ๋ฐ ์๋ํ (airflow -dag ํ์ฉ)
๋ฐ๊ฒฝ๋ชจ : ๋ฐ์ดํฐ GCS ์ ์ฌ ๋ฐ ์๋ํ (airflow -dag ํ์ฉ)
๋ฐ์ ์ฐ : ๋ฐ์ดํฐ GCS ์ ์ฌ ๋ฐ ์๋ํ (airflow -dag ํ์ฉ)
๊นํ์ค : GCP ํ๊ฒฝ ๊ตฌ์ถ ๋ฐ ์๋ํ (GCS, workflow, Bigquery) (airflow -dag ํ์ฉ)
์ํ์ฐ : DB ๋ชจ๋ธ๋ง, ๋ฐ์ดํฐ ๋ถ์, ๋์๋ณด๋ ๊ตฌ์ถ ๋ฐ ์๋ํ (airflow -dag ํ์ฉ)
| ๋ถ์ผ | ๊ธฐ์ |
|---|---|
| ์ธ์ด | Python |
| ํด๋ผ์ฐ๋ | docker, airflow, GCP |
| ๋ผ์ด๋ธ๋ฌ๋ฆฌ | apache-airflow, pandas |
| ํ์ ํด | slack, JIRA, Github |
| ๋ฐ์ดํฐ API | Saramin API, Google trend API |
| ๋์๋ณด๋ | Looker |
์ฌ๋์ธ์์ ์ฌ๊ณตํ๋ API์ ๋ค๋ฅธ ์ฑ์ฉ ์ ๋ณด๋ค์ ์ด์ฉํ์ฌ ํ์ฌ ๋ฐ๋ธ์ฝ์ค ์์ฒด์ ์๋ฏธ์ ๋ชฉํ์ธ ์ทจ์ ๋๋ ์ผ์๋ฆฌ์ ๋ง, ์ ๋ง์ง์ข ์ฌ๋ถ ๋ฑ์ ์ ๋ณด์ ์ถ๊ฐ๋ก ๊ฒ์๋, ์๊ฒฉ์ฆ ์ทจ๋ ํํฉ ๋ฑ์ ์ฐ๊ด๊ด๊ณ๋ฅผ ํ์ ํ ์ ์๋๋ก ์๊ฐํํ์ฌ ์ ๊ณตํ๋ค.
- ์ ์ฒด ์ฑ์ฉ ์์ฅ์์ ๋ฐ์ดํฐ ์์ง๋์ด, ๋ฐ์ดํฐ ๋ถ์๊ฐ, ๋ฐ์ดํฐ ์ฌ์ด์ธํฐ์คํธ์ ๋ํ ์ฑ์ฉ๋์ ๋ณํ๋ฅผ ์๊ฐํ
- ๊ฐ ์ ์ ์ฑ์ฉ, ์ฑ์ฉํ๋ ์ฐ์ ๋ถ์ผ, ์ฑ์ฉ ์ง์ญ ๋ฑ์ ๊ด์ ์ผ๋ก ์ฑ์ฉ๋์ ๋ณํ ํ์ ์ด ์ฝ๋๋ก ์๊ฐํ
- ์ฑ์ฉ์ ๋ณด ์ธ์๋ ๋ฐ์ดํฐ ๋๋ IT๋ถ์ผ์ ๊ด๋ จ๋ ๊ตฌ๊ธ ๊ฒ์๋, ๊ด๋ จ ์๊ฒฉ์ฆ ์์/์ทจ๋ ์ฌ๋ถ ๋ฐ์ดํฐ๋ฅผ ์๊ฐ์ ๋ฐ๋ฅธ ์๊ฐํ
- ์๊ฐ์ ๋ฐ๋ฅธ ๋ฐ์ดํฐ ์ธ๋ ฅ ์์ ๋ณํ๋ฅผ ์ด์ฉํด ํด๋น ์ง์ข ์ ๋ํ ๋ํฅ๊ณผ ์ดํ ์ ๋ง์ ํ์ ํ ์ ์์ ๊ฒ.
- ์ํ๋ ์ฐ์ ๋ถ์ผ๋ ์ง์ญ์ ๋ํด ์ผ์๋ฆฌ ๊ณต๊ธ์ด ์ด๋์ ๋์ธ์ง ํ์ ํ์ฌ ๊ฐ์ธ์ ์ทจ์ ๊ณํ์ ๋ํด ๊ตฌ์ฒด์ ์ธ ๊ณํ์ ์ธ์ฐ๋๋ฐ ๋์์ ์ค ์ ์์ ๊ฒ.
- ๊ฒ์๋์ ๋ํ ๋ณํ๋ ๊ฐ๋ฐ์๊ฐ ์๋ ์ผ๋ฐ์ธ๋ค ์ ์ฒด์ ๊ด์ฌ๋๋ฅผ ๋ํ๋ผ ์ ์์ ๊ฒ.
- ์๊ฒฉ์ฆ ๋ฐ์ดํฐ๋ ํด๋น ๋ถ์ผ์ ๋ํด์ ์ง์ ์ ์ผ๋ก ๊ณต๋ถ๋ฅผ ์์ํ๊ณ , ์ ๋ฌธ ์ธ๋ ฅ์ ์์ ๋ํด์ ํ์ ํ ์ ์์ ๊ฒ.
- ์ด๋ฐ [๊ฒ์๋, ์๊ฒฉ์ฆ, ์ฑ์ฉ]. ์ธ ๊ฐ์ง ์งํ๋ฅผ ์ด์ฉํด ์ฐ๊ด์ฑ์ ํ์ ํ๊ณ ์ข ๋ ์ ์๋ฏธํ ๋ถ์์ด ๊ฐ๋ฅ ํ ๊ฒ์ผ๋ก ์์ํจ.
- ์ฌ๋์ธ API๋ฅผ ์ ์ธํ ๋ค๋ฅธ API๋ ๊ฐ์ธ์๊ฒ ์คํํ์ง ์๊ฑฐ๋, ์์ ์ ๊ณต๋์ง ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ ์ฌ๋์ธ ํ๋์ ๋ฐ์ดํฐ๋ก๋ง ์งํ
- ์ฌ๋์ธ ์ฑ์ฉ ๋ฐ์ดํฐ์ ๋ถํฌ๊ฐ 17000๊ฐ ์ ๋์ ๋ฐ์ดํฐ์์ ์๋ ํ
์ด๋ธ๊ณผ ๊ฐ์์ผ๋ฉฐ, ์๋ณ๋ก๋ 23๋
5์์ ๋ฐ์ดํฐ๋ง 12000๊ฐ๋ก ์ ์ฒด์ 70%๋ฅผ ์ฐจ์งํ์ฌ ์๊ฐ์ ๋ฐ๋ฅธ ๋ณํ๋ฅผ ๋ํ๋ด๊ธฐ์๋ ๋ถ์ ์ ํ ๋ฐ์ดํฐ๋ผ๊ณ ํ๋จ
- 2023๋ ๋ฐ์ดํฐ๋ก๋ง ํ์ ํ์ฌ, ๋ชจ๋ ํ์ฌ์ํ์ ์งํ๋ฅผ ๋ํ๋ด๋ ๊ฒ์ผ๋ก ์ค์ ํจ.
- ์ด๋ก ์ธํด์ ์๊ฐ์ ๋ฐ๋ฅธ ๊ฒ์๋, ์๊ฒฉ์ฆ ๋ฑ์ ์ธ๋ถ ์์ธ๊ณผ์ ์ฐ๊ด์ฑ์ ๋์ถํ ์ ์์.
| ์ฐ๋ | ๋ฐ์ดํฐ ์ |
|---|---|
| 2023 | 16136 |
| 2022 | 937 |
| 2021 | 152 |
| 2020 | 1 |
| 2018 | 1 |
Setting
- e2-medium
- debian-11-bullseye-v20230509 ์ฌ์ฉ
- linux ํ๊ฒฝ์์ ์งํ
- linux ์์คํ ์ธ Cronjob์ ํ์ฉํด์ 30๋ถ / 1์๊ฐ๋ง๋ค ETL ํ์ด์ฌ ์คํฌ๋ฆฝํธ ์งํ
- ์๋ฌ ๋ฐ์ ์์ ๋ก๊ทธ๋ฅผ ๋ก์ปฌ์ ์ ์ฅํ๋ ์(์ธ๋ถ์ DB๋ก ๋๊ธธ ์ ์๋๋ก ๋ณ๊ฒฝํ๋ฉด ์ข์๋ฏ)
- ์คํฌ๋ฆฝํธ ์คํจ / ๋ฐ์ดํฐ ์ ์ฌ ์คํจ / ์ธ์คํด์ค ๋ค์ด ์ ๋ํด์ ํฌ๊ฒ 3๊ฐ์ง๋ก ๋ถ๋ฅํ๊ณ ํด๋น ์ค๋ฅ์ ๋ํ ์์ธ์ฒ๋ฆฌ ๋ฐ SLACK์ผ๋ก ์๋ฆผ ๊ธฐ๋ฅ ๊ตฌํ
- ์ธ์คํด์ค ๋ค์ด(์๋ฒ ์ธก๋ฉด)์์๋ ์ธ๋ถ์ ์ผ๋ก CPU ์ฌ์ฉ๋ / ๋จ์ ๋์คํฌ ์ฉ๋ / ๋คํธ์ํฌ ์ฐ๊ฒฐ ์ฌ๋ถ(ํฌ์ค์ฒดํฌ) / ํ์ฑ ํ๋ก์ธ์ค ์ ์ ํฌ๊ฒ 4๊ฐ์ง ์งํ๋ฅผ ํ์ธ
- Airflow ๋ก๊ทธ๊ฐ ์์ฌ์ ์๋ฒ๊ฐ ๋ค์ด๋ ์ด๋ ฅ์ด ์์๊ณ , ๋คํธ์ํฌ๊ฐ ๋ฉ์ถ๋ฉด์ ๋คํธ์ํฌ์ ์ฐ๊ฒฐ๋ ์๋ฆผ ๊ธฐ๋ฅ๋ค์ด ๋ฉ์ถ๋ ๊ฒ์ ํ์ธํ๊ณ ์ข ๋ ๋ค์ํ ์ ๋ต์ด ํ์ํ๋ค๊ณ ํ๋จํจ.
- API to Cloud, Cloud to Cloud DAG ๊ตฌํ
- ์ด์ ์ ์ด์ํ๋ ํด๋ผ์ฐ๋ ์๋ฒ๊ฐ ์์ ๋ฌธ์ ๋ก ์ธ์คํด์ค ์ข
๋ฃ๋๋ ์ํฉ ๋ฐ์
- ์๋ฒ์ ๊ธฐ๋ก๋ ๋ฐ์ดํฐ, ์ฝ๋ ๋ฑ ๋ณด์กด์ ์ํด Storage์ ๋ชจ๋ ๋ด์ฉ์ ์ ์ฌํ๋๋ก ํจ
- ์ด์ ์ API๋ฅผ ๋ถ๋ฌ์จ ์์ ๋ถํฐ ์ดํ์ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ๊ฐ์ ธ์ฌ ์ ์๋ ๊ตฌ์กฐ์ DAG ์์ฑ
- ์๋ฒ์ ๋ถํ๊ฐ ๊ฑธ๋ฆฌ์ง ์๊ฒ ์์ ํ ๋ด์ฉ์ ์๋ฒ ์ธ์คํด์ค์ ๋จ๊ธฐ์ง ์๊ณ API์์ ๋ฐ์์จ ์ ๋ณด๋ฅผ ๋ฐ๋ก Cloud๋ก, Cloud์ ์ ๋ณด๋ฅผ ๊ฐ๊ณตํ ํ Cloud๋ก ์ ์ฌํ๋ DAG ์์ฑ
- ๋ฐ์ดํฐ ๊ตฌ์กฐ ๋ณ๊ฒฝ์ ๋ฐ์ํ๊ธฐ ์ํ ๋ฐ์ดํฐ ์ถ์ถ ์ฝ๋ ์์
- API๋ฅผ ์ฌ์ฉํ๊ณ ์๋ ๋ฐ์ดํฐ ์์ค์์ ์ ๊ณตํ๋ ๋ฐ์ดํฐ์ ํํ๊ฐ ๋ณํ๋ ๊ฒฝ์ฐ๋ฅผ ๋๋น
- API์์ ์ถ์ถํ ์์๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ก ์คํ ๋ฆฌ์ง์ ์ ์ฌํ๋ DAG, ํด๋น DAG์ ์๋ฃ task๋ก๋ถํฐ trigger๋ฅผ ๋ฐ์ BigQuery์ ์ ์ฌํ๊ธฐ ๋ช ํํ CSVํํ๋ก ๋ณํํ๋ DAG 2๊ฐ๋ก ๋๋์ด ETL ๊ณผ์ ๊ตฌํ
- ์ด์ ์ ์ด์ํ๋ ํด๋ผ์ฐ๋ ์๋ฒ๊ฐ ์์ ๋ฌธ์ ๋ก ์ธ์คํด์ค ์ข
๋ฃ๋๋ ์ํฉ ๋ฐ์
- ํ๋ฌ๊ฐ ์ค์ผ์ค๋ง ๊ฒฐ๊ณผ ํ ์๊ฐ ๋์ ์ฑ์ฉ๊ณต๊ณ ๊ฐ ์ฌ๋ผ์ค์ง ์๋ ์๊ฐ ๋ค์ ํ์ธ
- API ํธ์ถ ์ ๋ฐ์ดํฐ๊ฐ ์๋์ง ์ฌ๋ถ๋ฅผ ์ฐ์ ํ์ธ
- ์๋ ๊ฒฝ์ฐ slack์ผ๋ก ๋ฐ๋ก ์๋ฆผ์ ๋ณด๋ด๊ณ ์ข ๋ฃ
- ์๋ ๊ฒฝ์ฐ json ํํ๋ก ์ ์ฌ
- ์ ์ฌ ํ json์ csv๋ก ๋ณํํ๋ DAG๋ฅผ trigger
- ํผ์ ๋์ํ์ง ์๊ณ API to Cloud DAG์ trigger๋ฅผ ๋ฐ์ ๋์
- json ๋ฐ์ดํฐ๋ฅผ csv๋ก ๋ณํํด์ GCS์์ ์ ์ฌ
- ์ ์ฌ ์๋ฃ ์๋์ด ๊ตฌํ๋ ๋ถ๋ถ
- Slack web hook์ ์ด์ฉํด ์๋ฆผ๊ธฐ๋ฅ ๊ตฌํ
- callback์ ํตํด ์คํ ๊ฒฐ๊ณผ๋ฅผ ํ์ธ
- success callback : ์ถ์ถํ ๊ณต๊ณ ๊ฐ ์๋์ง, ๋ช๊ฐ์ ๊ณต๊ณ ๊ฐ ์ ์ฌ๋์๋์ง ์๋ฆผ
- failure callback : ๊ฐ task๋ง๋ค ์คํ ๊ณผ์ ์์ ์๋ฌ๊ฐ ๋ฐ์ํ์ ๋ ์ด๋ค ๋ถ๋ถ์ ๋ฌธ์ ๊ฐ ์๊ฒผ๋์ง ์๋ฆผ
- API์์ ์ถ์ถํ ์์๋ฐ์ดํฐ๋ฅผ Xcom push ํ, ์๋ฃ task๋ก๋ถํฐ trigger,
- Xcom pullํ์ฌ tempfile์ ์ ์ฅ ํ CSVํํ๋ก ๋ณํ ํ GCS์ ์ ์ฌํ๋ 2๊ฐ์ task๋ก ๋๋์ด ETL ๊ตฌํ
- ์ ์ฌ ์๋ฃ ์๋์ด ๊ตฌํ๋ ๋ถ๋ถ
- Slack web hook์ ์ด์ฉํด ์๋ฆผ๊ธฐ๋ฅ ๊ตฌํ
- ์์ง์ ์คํจํ ํค์๋ ์๋
-
staging : ๊ฒ์ฆ ๋ฐ ์คํค๋ง ๋ณ๊ฒฝ ์ฌํญ ๋ฑ ๋ฐ์ํ ์ธ๋ถ ํ ์ด๋ธ ์คํค๋ง (csvํ์ผ)
- recruit : csv๋ก ์ ์ฅ๋ API ์๋ต (์ผ์ ์ฃผ๊ธฐ๋ก ์ค์ผ์ค๋ง ๋์ด์์.)
- google_trend : csv๋ก ์ ์ฅ๋ ๊ตฌ๊ธ ํธ๋ ๋ API ์๋ต (์ผ์ ์ฃผ๊ธฐ๋ก ์ค์ผ์ค๋ง ๋์ด์๊ณ schema ๋ณ๊ฒฝ์ด ์์ฃผ ์ผ์ด๋จ)
-
external : ์๋ฌ ์ฌํญ ์์ ํ ์ธ๋ถ ํ ์ด๋ธ ์คํค๋ง
(csvํ์ผ)- recruit_table : csv๋ก ์ ์ฅ๋ API์๋ต
- google_trend : csv๋ก ์ ์ฅ๋ ๊ตฌ๊ธ ํธ๋ ๋ API์๋ต
- certification : csv๋ก ์ ์ฅ๋ ์๊ฒฉ์ฆ
-
meta : ์ธ๋ถํ ์ด๋ธ ๊ฐ์ ๋ํ ๋ฉํ๋ฐ์ดํฐ
(API๋ช ์ธ ๋ด์ฉ)- experiences : ์ฑ์ฉ ๊ฒฝ๋ ฅ์ฝ๋ ์์ธ
- industries : ์ฑ์ฉ ์ฐ์ ์ฝ๋ ์์ธ (์๋ถ๋ฅ)
- industry_categories : ์ฑ์ฉ ์ฐ์ ์ฝ๋ ์์ธ (๋๋ถ๋ฅ)
- job_codes : ์ฑ์ฉ ํค์๋
- location : ์ฑ์ฉ ์ง์ญ ์์ธ
-
core : externalํ ์ด๋ธ์์ Looker์ฉ ํ ์ด๋ธ๋ก ์ฒ๋ฆฌ๋ ํ ์ด๋ธ
- recruit : ์ ์ฒด ์ฑ์ฉ ์ ๋ณด
- datajob : ๋ฐ์ดํฐ์ง์ข ์ฑ์ฉ ์ ๋ณด
- google_trend : ๊ตฌ๊ธ ํธ๋ ๋ ๊ฒ์๋ ํ ์ด๋ธ
- certification : ์๊ฒฉ์ฆ ์ทจ๋ ํํฉ ํ ์ด๋ธ
- GCS ๋ด ์ ์ฌ๋๋ ๋ฐ์ดํฐ ์ค ์ผ๋ถ๋ ์ค์ผ์ค๋ง ๋์ด ๋งค๋ฒ ์ ์ฌ๋๊ณ ์ผ๋ถ๋ ๋ฐ์ดํฐ์ ์ ์ฒด๋ก ์ ์ฌ
- GCS -> Bigquery ๊ณผ์ ์์ staging ํ
์ด๋ธ์ ์์ฑํด ๋ค์๊ณผ ๊ฐ์ task grid ์์ฑ

- ํด๋น task (check_table๋ช )์ ํตํด query๋ก 2์ฐจ ๊ฒ์ฆ์ ๊ฑฐ์ณ Bigquery-external๋ก ์ ์ฌ๋๋ ๋ฐ์ดํฐ ์ฒดํฌ
- ๊ธฐ์กด cloud function ํ์ฉํ schedule -> schedule_interval ์ฒ๋ฆฌ
- GCSToBigQueryOperator, BigQueryOperator, BigQueryCheckOperator ๋ฑ ํ์ฉํด data flow ์์ฑ ๋ฐ validation ์งํ
- create, check task ์คํ ์ sql๋ฌธ์ผ๋ก validation
- slack webhook token, email ํ์ฉํด ๊ฐ ํ์คํฌ ๋ณ ์ฑ๊ณต/์คํจ ์ฌ๋ถ ํ์ธ
- ๋งค 3์๊ฐ ๋ง๋ค checking ํ์ฌ ์์ ํ์ธ




