2025/08 11

데이터 공유

Python Operator with XcomXcom (Cross Communication)airflow DAG 안 Task 간 데이터 공유를 위해 사용되는 기술ex) task1의 수행 중 내용이나 결과를 task2에서 사용 또는 입력으로 주고 싶은 경우주로 작은 규모의 데이터 공유를 위해 사용Xcom 내용은 메타 DB의 xcom 테이블에 값이 저장됨1GB 이상의 대용량 데이터 공유를 위해서는 외부 솔루션이 필요함 (s3, HDFS 등...)xcom 사용 방법1. **kwargs에 존재하는 ti(task_instance) 객체 활용task_ids를 명시해주지 않으면 가장 최근에 push한게 불러와지기에, task_ids를 통해 id를 명시해줘야함 2. 파이썬 함수의 return 값 활용 실습을 해보자i..

데이터/Airflow 2025.08.27

Airflow Template Variable

Jinja Template문서(파일)에서 특정 양식으로 작성된 값을 런타임시 실제 값으로 치환해주는 처리 엔진여러 엔진이 존재하지만, 파이썬에서는 Jinja를 사용함ex) HTML 템플릿 저장 후 화면에 보여질 때 실제 값으로 변환해서 출력함SQL 작성시에도 활용 가능select * from tables where base_dt = {{ }}이 select 구문을 템플릿으로 만들고 매일 변경되는 날짜만 필터 조건으로 설정을 해주면 됨https://airflow.apache.org/docs/apache-airflow/stable/templates-ref.html Templates reference — Airflow 3.0.4 Documentation airflow.apache.orgdocs 보면서 제공되는..

데이터/Airflow 2025.08.27

Keystone

Keystone 기초 개념keystone 자체에는 openstack 전체와 관련하여 특정 모델 및 구현에 특화된 여러 개념이 있음이런 개념은 ID 및 권한 부여와 관련있지만, keystone이 권한 부여, 접근 관리 및 검색을 구현하는 방식에 중점을 둠프로젝트란?keystone에서 프로젝트는 다른 openstack 서비스가 서버, 이미지 등과 같은 리소스를 그룹화하고 격리하는 데 사용하는 추상화openstack 초기에는 keystone 프로젝트를 원래 테넌트라고 불렀지만, 요즘에는 프로젝트라고 부름keystone은 누가 해당 프로젝트에 접근 권한이 있는지 명확히 하는 것임프로젝트 자체는 사용자를 소유하지 않지만, 사용자 또는 사용자 그룹은 'Role assigments' 개념을 사용해 프로젝트에 대한 접..

Virtualization

컴퓨팅에서 하드웨어 플랫폼, OS, 저장 장치, 네트워크 자원 등과 같은 것을,실제 버전이 나닌 가상 버전을 만드는 것을 말함즉, 하드웨어 가상화는 하나의 하드웨어 자원을 여러 환경에서 공유함으로써,한 대의 컴퓨터가 여러 대의 컴퓨터 역할을 수행할 수 있게 해주는 기술Virtual Machine Architecture Style기존 시스템 위에 구축되어 가상의 추상화(속성 및 작업 세트)를 제공함대부분의 경우 프로그래밍 언어나 애플리케이션 환경을 실제 실행 플랫폼으로부터 분리하는 역할을 수행함시스템은 '기존 플랫폼', '가상 머신', '애플리케이션'의 세 부분으로 나누어짐ex)Unix 운영체제는 커널 위에 C 셸, Korn 셸 등 다양한 셸(명령어 해석기)을 제공하는데,이 셸들이 가상 머신처럼 동작하여 ..

Python 오퍼레이터

python 오퍼레이터정의된 파이썬 함수를 실행시키는 오퍼레이터라이브러리를 가져와서 사용하면 됨from airflow.operators.python import PythonOperator 즉, 파이썬 함수를 실행시키기 위한 오퍼레이터가 PythonOperator임BranchPythonOperator도 있는데파이썬 함수 실행 결과에 따라 task를 선택적으로 실행시킬때 사용되는 오퍼레이터임 외부 파이썬 함수 수행하기from airflow.operators.python import PythonOperatorairflow 폴더 아래 operators 폴더 아래 python 파일 아래에서 PythonOperator 클래스를 가져오라는거파이썬은 이 경로를 어떻게 찾을까?즉, dag에서 우리가 만든 외부 함수를 ..

데이터/Airflow 2025.08.15

오퍼레이터 기본/ mount 설정

실습자료는 아래 깃허브에서 받을 수 있음https://github.com/hjkim-sun/airflow GitHub - hjkim-sun/airflowContribute to hjkim-sun/airflow development by creating an account on GitHub.github.com operator특정 행위를 할 수 있는 기능을 모아 놓은 클래스(설계도)Taskoperator에서 객체화(인스턴스화)되어 DAG에서 실행 가능한 오브젝트Task의 수행 주체스케줄러DAG parsing 후 DB에 정보저장DAG 시작 시간 결정워커실제 작업 수행Bash Operator쉘 스크립트 명령을 수행하는 오퍼레이터기본 값을 설정할때 샘플 코드를 참고하면 되는데 airflow 웹에서 example_..

데이터/Airflow 2025.08.14

k8s-Deployment (AWS EKS)

k8s를 machine에 배포하는 방법에 대해 알아보자앞에서 했던 minikube는 로컬에서 작동을 했지만 이제는 직접 machine에서 동작을 시켜볼거임k8s를 배포하는 방법에는 크게 DC를 이용하든지 아니면 Cloud Provider를 사용하는 방법이 있음졸프때는 DC를 활용할거기에 이에 대해 스스로 설정을하고 할줄 알아야함이번 실습에서는 cloud provider를 활용할거임두 가지 방법이 있음low level에서 직접 구현하는 방법managed service를 사용하는 방법 (EKS...)k8s를 EKS를 이용해 클러스터에 배포하는 것을 해볼거임AWS EKSk8s 배포에 대한 서비스 관리형 시스템임 (ECS는 컨테이너에 대한거로, k8s에 대해서는 모름) 실습깃허브에 main 브랜치에 있는거 다운..

Managing Data & Volumes with k8s

State애플리케이션에서 손실되어서는 안되는 생성되고 사용되는 데이터임컨테이너가 종류 후, 재시작할때도 존재해야하는 데이터가 있기에 volumes이 필요함 k8s & volumesk8s는 컨테이너 안에 volumes를 mount할 수 있음다양한 종류의 볼륨 타입/드라이버를 지원함로컬(노드)에 있는 볼륨클라우드 공급자 전용 볼륨볼륨의 생명 주기는 Pod의 생명 주기에 따라 달라짐볼륨은 컨테이너가 재시작(또는 삭제)되어도 유지됨pod가 삭제될때 volume도 삭제됨k8s volumes vs docker volumesk8s volumes 다양한 종류의 드라이버와 타입을 지원함볼륨이 반드시 영구적인 것은 아님 (pod삭제시)볼륨은 컨테이너가 재시작되거나 삭제되어도 그대로 유지됨docker volumes사실상 드..

k8s core concepts & setup (2)

The Imperative vs The Declarative Approach앞에서 했던 배포 방법들은 매번 실행을 해줘야함프로젝트가 많으면 도커를 그만큼 많이 실행해줘야함docker compose yaml처럼 클러스터에 대한 정보를 담은 파일도 있음그 파일을 yaml 파일이라고 함Imperative (명령형 접근 방식)개별 명령을 실행하여 k8s 클러스터에서 다른 작업을 트리거해야 했음The Declarative Approach (선언형 접근 방식)apply 명령어를 사용해 yaml 파일을 실행함앞에서 했던 실습 파일에서 deployment.yaml 파일을 추가하자apiVersion: apps/v1kind: Deployment #k8s object를 정의함metadata: name: second-app..

k8s Core Concepts & setup

k8s가 하는 것과 하지 않는 것을 구분하는 것은 중요함k8s가 하는 것pods 같은 객체를 생성하고 관리할 수 있음pods를 모니터링하고 교체하고 scale등 ... 을 할 수 있음k8s는 우리가 만들어 놓은 자원을 활용하고, 우리가 설정한 목표에 적용할거임k8s가 자원을 생성하는 것은 아님 (우리가 설정해줘야함)우리가 설정해줘야하는 것 클러스터와 노드 인스턴스(worker + master nodes)를 만들어줘야함노드마다 API 서버를 세팅해야함 (kubelet, 또 다른 k8s services..)cloud provider에서 Load balancer, file system 같은게 필요하다면 이것들도 설정을 해줘야함Installationmaster node가 있는 클러스터는 여러 시스템에 분산되어있..