이번 게시글은 저도 처음 경험하는 'Docker' 및 'Apache Airflow DAG'에 대해서 설명을 합니다.
꽤 긴 글이 될 수 있으니 참고 바랍니다.
그리고, 이 게시글은 우리가 이전에 했던 'phase 2-2,2-3,2-4의 ETL 과정을 자동화하는 과정이라고 이해하시면 됩니다.
먼저 'Docker'의 개념부터 알아가봅시다.
https://velog.io/@pilmalion114/Docker%EB%9E%80
->제가 전에 'Docker'에 관해서 개념 정리를 한 것이 있으니 이것을 참고하셔도 좋습니다.


위 사진 글은 너무 길기 때문에, 간단하게 요약을 하겠습니다.
한 마디로 Docker는 'VM(Virtual Machine,가상머신)'같은 가상환경이라고 생각하면 편합니다.
가상환경은 우리가 흔히 독립적인 공간에서 독립적인 작업 단위를 하는 곳이라고 알고 있죠?
하지만, 일반적인 VM보다는 가벼운 느낌의 가상환경이 'Docker'라고 알고 계시면 됩니다.
'Docker'에는 '이미지'와 '컨테이너'라는 개념이 있는데, '이미지'는 청사진(blueprint)같은 '설계도'라고 이해하시면 되고, '컨테이너'는 독립적인 가상환경 공간(어플리케이션 단)이라고 이해하시면 됩니다.
또한 Docker에는 '포그라운드(foreground)' 및 '백그라운드(background)' 개념도 있습니다. 이는 터미널(cmd 같은)과 관련된 용어인데, '포그라운드'는 단어 자체로 '앞'을 의미하며, 앞에서 실제 터미널 로그를 직접적으로 확인할 수 있는 것이라고 이해하시면 되고, '백그라운드'는 단어 자체로 '뒤'를 의미하며, 터미널에서 돌아가지만 '뒤'에서 숨어서 돌아가는 느낌으로 이해하시면 됩니다.
위 Docker의 개념을 숙지했으면, 그 다음 단계로는 'Docker Desktop'을 설치하면 됩니다.

설치가 끝났으면, 윈도우라면 cmd/powershell에서 밑의 명령어를 입력하여 잘 설치되었는지 확인하면 됩니다.
(리눅스/Mac은 바로 터미널에서 리눅스 명령어로 입력하면 됩니다.->이는 구글링 혹은 AI의 도움을 받기.)
docker --version

->이렇게 나오면 잘 설치된 것입니다.
'Apache Airflow'는 'Apache Software Foundation'이 개발한 오픈소스 프로젝트 중 하나로,
데이터 파이프라인의 워크플로우를 관리하는 도구입니다.
※ 웹 개발에서 사용하는 'Apache HTTP Server'(웹 서버)와는
다른 프로젝트입니다!
Airflow는 웹 UI(localhost:8080)를 제공하여
DAG 실행 상태를 시각적으로 모니터링할 수 있습니다.
'apache airflow docker compose quick start'를 구글에 검색하시면, 맨 처음에 'apache airflow' 공식 문서가 나오는데, 여기서 설치 방법을 확인하실 수 있습니다.
https://airflow.apache.org/docs/apache-airflow/stable/howto/docker-compose/index.html
->'apache airflow' 공식 문서

curl -LfO 'https://airflow.apache.org/docs/apache-airflow/3.1.3/docker-compose.yaml'
※'curl' 및 '-LfO'에 대한 설명
즉, 'curl'은 클라이언트 측에서 url에 요청을 보내는데, 현재 이 url은 파일을 가리키고 있으므로 파일을 다운로드하는 것을 의미하는 것이다.
즉, 위의 명령어를 내가 설치하고 싶은 폴더로 이동해서 설치하면 됩니다.
게시글 뒷 부분에 올릴 제 github를 보면 알겠지만,
저는 'phase 2-5'/airflow를 폴더로 삼았습니다.

->cmd에 꼭 'cd(change directory)' 명령어로 내가 설치하기 원하는 폴더로 먼저 변경하셔야 합니다. 해당 폴더의 경로를 복사하셔서 cd 다음에 그대로 붙이시면 됩니다.



즉, 요약하자면
윈도우에서는 'dags/', 'logs/', 'plugins/', 'config/' 폴더 4개를 직접 만들어야하고,
메모장을 열어서 저걸 작성하고 .env 파일로 저장해야한다는 의미입니다.
맨 처음 사진의 명령어는 '리눅스/Mac'용입니다.

Q.
A.
한 마디로, 권한 설정인데 airflow는 기본이 50000이다라는 소리이다.

-> Airflow 데이터베이스 초기화 및 관리자 계정 생성하는 단계이다.

->성공하면, 'exit code 0'이라고 뜬다.

->cmd에서 실행하면 된다.



->이 기본계정으로 로그인하면

이렇게 대시보드(관리자 페이지) 형식으로 나온다.
Q.
A.
게시글 뒷 부분보면 알겠지만,
'docker compose up -d', 'docker compose down', 'docker compose ps' 이 3개의 명령어는 정말 자주 쓰인다.여기서 실행/종료의 대상은 'docker-compose.yaml' 파일에 정의된 컨테이너들을 실행하고 종료한다는 의미이다.
현재 나는 airflow 컨테이너가 있다.

<요약하자면>
*DAG(Directed Acyclic Graph, 직접적인 비순환적 그래프): 워크플로우 전체를 의미함.
*Task: 그 DAG를 구성하는 개별적인 작업 단위(가장 작은 실행 단위)
*Operator: task를 생성하기 위한 템플릿 또는 설계도.(마치 Docker의 이미지 같은 개념.)
※개념 설명: Yaml이란?





위 사진 첨부한 내용들을 자세히 읽어보시기 바랍니다.



깃허브 주석에도 자세하게 설명되어 있고, 첨부한 사진에도 자세하게 한번 더 설명되어 있으니 참고하시기 바랍니다.

.py 파일에 라이브러리 설치하라는 듯한 노란줄이 나오는데, 라이브러리를 따로 설치 안하셔도 됩니다.


재생 버튼을 눌러서 trigger 시켜주면

이렇게 실행이 성공했음을 볼 수 있습니다.


-> 해당 DAG의 작업 탭에 들어가서

->개별 작업을 선택해서 작업 인스턴스 탭에 들어가서 DAG 실행 부분을 클릭하면(파란색 날짜/시간 표시)


->이렇게 로그가 보이는데, 12번째 줄을 보면 'INFO-Hello World'라고 출력됨을 볼 수 있습니다.
https://github.com/pilmalion114/data_engineer_portfolio/tree/main/phase%202/phase%202-5/airflow
글이 너무 길어져서 먼저 제 최종 github 링크를 먼저 첨부하고 설명하도록 하겠습니다.
이 게시글에 없는 설명들은 깃허브에서 주석을 보시고 참고하시면 좋을 거 같습니다.
modules 폴더에는 우리가 전에 작성한 삼성전자 ETL 파이프라인을 DAG에 맞게끔 살짝 구조를 변형했습니다.
변형 부분은 주로 '폴더 경로 변경' 및 '함수화'입니다.
일부 '함수에 매개변수 추가'도 있습니다.
data 폴더에는
제가 원래는 'FinanceDataReader' 라이브러리로 연동해서 하려했으나, Airflow에서 이 라이브러리의 의존성이 충돌하여, 'samsung_2024-11-28_2025_11-27.csv' 부분만 따로 복사해서 저장해서 진행했습니다.
나머지 두 파일(csv,txt)는 ETL 및 DAG 과정으로 생긴 데이터 파일임을 알립니다.
DAG 폴더는 우리가 앞에서 예시로 한 'hello_world_dag.py'와 거의 같습니다.
※cf.) 앞에서 "'docker compose up -d', 'docker compose down', 'docker compose ps' 이 3개의 명령어는 정말 자주 쓰인다."라고 말했는데,
이유는 우리가 DAG 파일이나 이 과정에 포함된 파일들을 수정하고 반영하는(commit) 과정을 가질 때, docker compose down(종료)하고 docker compose up -d로 업데이트하는 과정을 거쳐야합니다.



->DAG가 잘 작동했음을 볼 수 있습니다.


->데이터가 잘 생성됨을 볼 수 있습니다.


-> DB에도 데이터가 잘 들어갔음을 알 수 있습니다.
이렇게 해서 'DAG' 과정까지 알아보았습니다.
뭔가 설명하고 싶은 건 많고... 그렇다고 해서 글이 너무 긴 거 같기도 하고... 갑작스레 글이 마무리 된 거 같은 느낌이 드는데요..
그럼에도 제 긴 글을 봐주셔서 감사합니다 ㅠㅠ bb
다음에는 phase 2-6으로 찾아뵙도록 하겠습니다.
감사합니다 :) bb