안녕하세요.
데이터 & AI 분야에서 일하고 있는 15년차 현직자입니다.
정보관리기술사를 취득한 이후 지금까지 얻은 지식을 많은 사람들에게 공유하고자 컨텐츠 제작하고 있습니다.
반갑습니다. :)
Contact: hjkim_sun@naver.com
Courses
Reviews
- Airflow Master Class
- Airflow Master Class
- Realtime Datalake Using Kafka & Spark
- Realtime Datalake Using Kafka & Spark
Posts
Q&A
plugins 폴더 관련
안녕하세요 bbbangduk9 님 저 부분은 제가 수업 전에 미리 만들어 놓은 디렉토리입니다. 😀강의 중 plugins 디렉토리 만들고 select_fruit.sh 파일까지 만들어서 WSL 안에서 git commit & push 까지 진행한겁니다. 그래서 수업 보시면서 그리고 제 github 보시면서 따라오시면 되요.select_fruit.sh 파일은 https://github.com/hjkim-sun/airflow/blob/master/plugins/shell/select_fruit.sh여기 있습니다 화이팅이에요!
- 0
- 2
- 21
Q&A
bash operator 관련 문의입니다
안녕하세요 bbbangduk9님! Airflow가 버전 업그레이드가 많이 되면서 제가 촬영했던 버전과는 많이 달라졌습니다.그래도 3.0 업데이트 되었을 때 제가 수업 코드들을 전부 한번 renewal 했습니다. 그래서 샘플 코드랑 크게 다르지는 않을텐데요, 혹시 어떤 부분이 헷갈리는지 명확히 알려주시면 더 정확히 답변드릴 수 있을 것 같아요. 우선 스케줄 부분은 위 예시는 None으로 되어 있는데 이건 스케줄을 걸지 않겠다는 의미입니다. (수작업 또는 REST API 등을 이용해 명시적으로 수행할 때에만 수행됨) 실습하다보면 실습 파일에도 schedule=None으로 설정돼있는 실습 코드들이 종종 나옵니다. 그리고 import 하는 부분에서 from __future__ import annotations 이 부분은 파이썬에서 타입 힌팅주는 방법 중 하나인데 없어도 무방합니다. DAG 자체가 파이썬을 이용해 자유롭게 작성하도록 하고있다 보니 작성하는 사람마다 스타일이 다 다릅니다. example_complex 에서는 annotations를 이용해서 타입 힌팅을 줬구나 정도로 이해하셔도 됩니다. 혹시 또 궁금하신 점이 있을까요?
- 0
- 3
- 24
Q&A
스케쥴러 - DAG 파싱 부하 줄이는 과정 질문
안녕하세요 Joe님 네 맞습니다. 이 내용은 Airflow 공식 문서에도 잘 설명되어 있어서 한번 읽어보시면 좋을 것 같아요. https://airflow.apache.org/docs/apache-airflow/stable/best-practices.html airflow는 DAG_FOLDER에 저장되어 있는 파이썬 파일을 내부적으로 실행해나가면서 DAG 이 있으면 이를 인식해서 DB에 등록하는 과정을 거칩니다. 실습에서는 with DAG(): 이렇게 정적으로 DAG을 정의했지만 사실은 for문이나 while, if 문 같은 문법을 이용해서 dynamic 하게 dag을 생성하는 것이 가능합니다. 이게 가능하려면 DAG_FOLDER 에 저장되어 있는 파이썬 파일들을 읽어 파싱해나가는 과정이 필요한 거죠. 따라서 import 부터 파이썬 파일의 top-level 에 적혀 있는 로직들을 내부적으로 실행해나갑니다. (Operator의 execute() 함수는 실행하지 않기에 실제 DAG이 실행되어 파이프라인에 영향을 주진 않습니다) 그리고 아래 캡쳐는 위 링크 내용을 일부 캡쳐한 내용인데 요약하자면 Import 구문을 Dag의 top-level에 작성해두면 스케줄러의 성능에 영향을 준다는 내용입니다. (사진) 그래서 무거운(?) 라이브러리들은 가급적 task() 내부 함수에 작성하는게 좋다는 내용이에요.답변이 되었을까요?
- 0
- 2
- 29
Q&A
git action - code deploy단계
안녕하세요 nayun1945님 AWS code deploy가 실패했을 때 자세한 원인은 kafka broker서버의 /opt/codedeploy-agent/deployment-root/deployment-logs/codedeploy-agent-deployments.log 로그파일을 보시는게 가장 정확합니다. 서버 3대 모두 동일한 로그가 있을 가능성이 높습니다. 아무 서버나 들어가셔서 sudo -i 로 루트 권한으로 진입하시고 위 로그 파일을 vi 편집기로 열어서 ERROR라고 떠있는 부분을 복사해서 올려주시겠어요?
- 0
- 2
- 28
Q&A
템플릿 변수에 대한 오류
안녕하세요 덕인떡집님! 아이고 제가 이 질문글을 놓쳤네요. 죄송합니다. 이제서야 답글을 다네요. 결론부터 말씀드리자면 airflow 3.0 버전이 되면서 event 기반의 dag 스케줄링 기능을 강화하면서 이전까지 주요 컨셉이었던 스케줄 간격 기반의 dag 스케줄링 기능을 버렸습니다. 그래서 airflow 3.0 버전부터는 기본적으로 data_interval_start와 end 값이 동일하게 표현됩니다. 즉 2.x 버전에서는 data_interval_start 와 end 값은 dag 실행 주기만큼 벌어져 있었는데 3.0 부터는 동일한 값을 가진다는 의미이죠.정리하자면 Airflow 3.0이 되면서 스케줄 간격 기반의 고전적인 스케줄링 기능을 포기하고 Event 기반의 스케줄링에 더 힘을 주게 되었습니다. 그리고 Airflow 3.0 변화 중 아래 내용이 있습니다. (Airflow 3.0.0 Update 부분)(사진)https://airflow.apache.org/docs/apache-airflow/stable/release_notes.html?utm_source=chatgpt.com#airflow-3-1-0-2025-09-25 이 내용은 Asset (구 Dataset)을 이용해서 Dag 을 트리거링 했을 때나 REST API를 이용해서(CLI도 포함) dag 트리거링 했을 때는 더이상 logical_data가 제공되지 않는다는 말입니다. 그래서 3.0 부터는 data_interval_start와 end 값이 기본적으로 제공되지는 않고 REST API나 CLI를 이용해서 트리거링할 때 명시적으로 logical_date 옵션 값을 넣어야 합니다. airflow dags trigger {dag name} --logical-date '2025-10-10 00:00:00' 이런식으로 logical_date 값을 주면 에러나지 않고 돌기는 할겁니다.airflow 2.10 버전까지는 logical-date 값을 넣지 않아도 잘 돌거에요. airflow 3.0 부터 바뀐 부분이라고 보시면 되고 이 내용은 제가 airflow 3.0 버전 update 부분에서 다루고 있습니다.참고하세요 ^^
- 0
- 2
- 29
Q&A
Dags refresh 주기 관련 질문
안녕하세요 구기명님!airflow config parameter 중에서 dag refresh 주기가 있습니다.airflow 2.x 버전에서는 dag_dir_list_interval 이라는 파라미터였는데 3.0 버전이 되면서 파라미터명이 바꼈습니다. (refresh_interval) (사진)그래서 docker-compose.yaml 파일 내 변수 지정하는 부분에 AIRFLOW__DAG_PROCESSOR__REFRESH_INTERVAL 값을 줄여주시면 좀 더 빠르게 scan 해서 반영합니다.그런데 Airflow 2.10 버전부터는 Dag refresh 라는 기능이 생겼습니다. 그래서 dag을 수정했을 때는 기다릴 필요 없이 refresh 버튼 누르면 되요. DAG 들어가서 우측 상단에 보시면 Reparse Dag 버튼 누르시면 되요. (이 기능은 Airflow 2.10.5 Update 섹션에서 설명드립니다) (사진) 물론 Dag 수정만 바로 반영되는거고, 신규 Dag 같은 경우 어쩔 수 없이 기다려야 합니다. 이럴 때는 아까 설명드린 refresh_interval 주기가 짧을 수록 빨리 반영됩니다. 그런데 너무 짧으면 그만큼 스케줄러의 자원이 많이 잡아먹으므로 적당한 값을 줘야 해요. 실습하는 수준에서는 1분 정도로 설정해도 크게 무리는 없을 것 같습니다.참고하세요 ^^
- 0
- 2
- 28
Q&A
IDE - Pycharm / VSCode
안녕하세요 Idea님 vscode로 하셔도 상관없습니다. 요즘엔 cursor 같은 도구도 vscode 기반이라 vscode 익숙하시다면 쓰셔도 괜찮습니다. 저도 요즘 cursor 까지 3개를 혼용해서 써보는 중이라 편한거 쓰시면 될 것 같아요. 화이팅입니다 👍
- 0
- 1
- 19
Q&A
wsl 관련 질문입니다.!
안녕하세요 bbbangduk9님! 추석 잘 보내셨나요? 답글이 늦어 죄송합니다.우선 문제점을 하나씩 확인하면서 해결해보도록 해볼께요.OS 조건은 이상없는지 확인 부탁드려요. You must be running Windows 10 version 2004 and higher (Build 19041 and higher) or Windows 11 to use the commands below. If you are on earlier versions please see the manual install page.그 다음 BIOS에서 가상화가 활성화 되어있는지를 봐야하는데 부팅 중 BIOS 모드로 진입해서 Intel Virtualization Technology (VT-x)이 부분을 활성화해야 합니다. 제가 구글링으로 찾은 링크를 넣을께요. https://yscho03.tistory.com/134여기에 정리가 잘 되어있는것 같은데 참고하셔서 BIOS 설정 확인 부탁드리고, HYPER-V 활성화도 체크 부탁드릴께요.그리고 power shell을 관리자 권한으로 열어서 아래 3개 명령어를 쳐주세요. dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestartdism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestartdism.exe /online /enable-feature /featurename:Hyper-V /all /norestart여기까지 해보시고 결과 알려주시겠어요?
- 0
- 2
- 29
Q&A
UI For Apache Kafka 설치하기
안녕하세요. 신정환님 답글이 늦었습니다. 일단 컨트롤러는 브로커 서버 중 한대가 맡아서 하게 되고 특정 노드가 지정되진 않습니다. 우선 컨트롤러 노드가 선출되는 것은 kafka 버전에 따라 좀 다른데 실습에서와 같이 2버전대를 사용하게 되면 zookeeper를 이용해서 컨트롤러 노드를 선출하게 됩니다. 강의 뒷부분 "가용성 테스트" 부분에서 이 부분에 대한 개념을 다루게 될텐데, 미리 좀 언급드리자면 컨트롤러 노드는 Zookeeper의 /controller 라는 Znode에 가장 먼저 write 성공한 노드가 컨트롤러 노드가 됩니다. 그리고 컨트롤러 노드로 선출된 노드는 각 파티션의 리더 파티션 선출을 관리하고 전체적인 브로커의 상태 관리 등을 담당하게 됩니다. 참고로 2.x 버전 까지는 주키퍼라는 도구를 이용해서 클러스터를 관리하는 구조였다면 Kafka 3.0 부터는 Kraft라는 알고리즘을 이용해서 주키퍼 없이 자체적으로 클러스터를 관리하게 됩니다. 그리고 Kraft 알고리즘에서는 브로커들이 투표 과정을 통해 리더를 선출하는 방식으로 변경됩니다. (본 강의에서는 다루지는 않습니다)참고하세요 ^^
- 0
- 2
- 30
Q&A
kafka broker prompt 변경 확인
안녕하세요 nayun1945님!broker 서버들 리부팅했더니 연결되어있던 터미널이 public-nat로 되돌아갔다는 말씀이시죠?그건 원래 그렇습니다.broker 서버가 리부팅되면서 연결되어 있던 ssh 터미널 세션이 끊어졌기 때문이죠.그렇기 때문에 접속을 시도했던 위치인 public-nat 서버로 돌아온겁니다. 이 부분 궁금하신게 맞나요?
- 0
- 2
- 32