airflow 스케줄러Airflow 스케줄러의 역할Airflow 스케줄러는 모든 태스크와 DAG를 모니터링하며, 해당 DAG가 실행될 수 있는지 주기적으로 확인한다.주기적으로 (매분 또는 설정된 주기에 따라) 활성화된 태스크들을 검사하여 실행할 수 있는지 확인한다.스케줄링 간격에 따른 실행schedule_interval을 1일로 설정한 DAG이 있을 경우, 실행되는 실제 실행 시간은 그 기간이 끝난 후에 시작된다.예를 들어, 2023-01-01에 실행되도록 설정된 DAG은 2023-01-01 23:59가 지나야 실행되며, 실행된 시각은 2023-01-02로 찍힌다. 즉, Airflow는 주어진 기간이 끝난 후, 1번의 주기가 지난 후에 작업을 실행한다.실행 시간 (Execute Time)start_dat..
주요 포인트:ProviderProvider 정의Airflow Provider는 Apache Airflow 내에서 특정 기능이나 외부 시스템과의 통합을 의미한다.Providers는 Airflow가 다양한 외부 시스템, 서비스, 또는 기술과 상호작용하고 지원할 수 있도록 한다.Provider의 목적:Airflow의 Providers는 Airflow가 외부 시스템, 서비스, 기술과 상호작용할 수 있도록 하여 기본 기능을 넘어서는 작업을 처리할 수 있게 한다.모듈화된 아키텍처:Airflow는 모듈화된 아키텍처로 설계되어 있어 다양한 Providers를 쉽게 추가할 수 있다. 이로 인해 Airflow의 기능이 외부 시스템과 상호작용하거나 특정 시스템에 맞게 확장될 수 있다.Providers는 일반적으로 다음과 같..
파이썬 내장 딕셔너리 타입을 사용하면 객체의 생명 주기 동안 동적인 내부 상태를 잘 유지할 수 있다.여기서 동적이라는 말은 어떤 값이 들어올지 미리 알 수 없는 식별자를 유지해야한다는 뜻아래는 학생 별 성적을 리스트로 추가하는 코드 예시이다.class SimpleGradebook: def __init__(self): self._grades = {} def add_student(self, name): self._grades[name] = [] def report_grade(self, name, score): self._grades[name].append(score) def average_grade(self, name): grades =..
구성Airflow 주요 구성 요소웹 서버 (Web Server):사용자가 워크플로의 상태와 진행 상황을 모니터링하고 시각화할 수 있는 사용자 인터페이스(UI)를 제공한다.스케줄러 (Scheduler):DAG(Directed Acyclic Graph)에서 정의된 의존성과 일정에 따라 작업의 실행을 조정한다. 작업이 언제(when) 어디서(where) 실행될지 결정한다.메타데이터 데이터베이스 (Metadata Database):DAG, 작업 및 작업 상태와 관련된 메타데이터를 저장하여 영속성 및 장애 복구 기능을 제공한다.실행기 (Executor):작업이 어떻게 실행될지를 정의한다. Airflow는 LocalExecutor, CeleryExecutor, KubernetesExecutor 등 다양한 실행기를 ..
중첩 클래스중첩 클래스는 다른 클래스 내부에 정의된 클래스를 의미한다. 중첩 클래스를 사용하면 외부 클래스의 구현에 대한 세부 사항을 숨길 수 있어 캡슐화와 유지보수성을 향상시킬 수 있다. 하지만, 중첩 클래스의 사용에는 주의가 필요하며, 특히 정적 멤버 클래스는 성능과 메모리 관리 측면에서 더 유리한 경우가 많다.중첩 클래스의 종류중첩 클래스는 크게 다음과 네 가지로 나눌 수 있다:정적 멤버 클래스 (Static Nested Class)비정적 멤버 클래스 (Non-Static Nested Class)익명 클래스 (Anonymous Class)지역 클래스 (Local Class)1. 정적 멤버 클래스정적 멤버 클래스는 외부 클래스의 인스턴스에 종속되지 않으며, 독립적으로 인스턴스화될 수 있다. 이는 외부..
태그달린 클래스는 여러 가지 의미를 하나의 클래스에 결합시키고, 해당 의미를 태그로 구분하여 표현하는 방식이다. 그러나 이는 여러 단점이 있으며, 클래스 계층구조를 활용하는 것이 더 효과적인 방법이다. 아래에서는 태그달린 클래스의 문제점과 이를 개선하기 위한 클래스 계층구조를 활용한 방법을 설명한다.태그달린 클래스태그달린 클래스는 여러 가지 의미를 하나의 클래스에서 표현하고, 해당 의미를 enum이나 tag로 구분하여 사용한다. 이때 주로 switch 문이나 조건문을 사용하여 각기 다른 동작을 구현하게 된다.예시: 태그달린 클래스// 코드 23-1 태그 달린 클래스 - 클래스 계층구조보다 훨씬 나쁘다! (142-143쪽)class Figure { enum Shape { RECTANGLE, CIRCL..
Interface인터페이스는 자신을 구현한 클래스의 인스턴스를 참조할 수 있는 타입 역할을 한다. 즉, 인터페이스는 해당 클래스를 사용하는 클라이언트가 클래스의 구현이 아닌, 정의된 메서드를 통해서만 객체와 상호작용할 수 있게 만든다.클래스가 어떤 인터페이스를 구현한다는 것은 자신의 인스턴스로 무엇을 할 수 있는지를 클라이언트에게 알려주는 것이다. 인터페이스는 기능을 정의하는 것이 아니라 타입을 정의하는 용도로만 사용해야 한다. 즉, 인터페이스는 구현이 아닌 계약(contract)을 정의하는데 사용된다.상수 인터페이스상수 인터페이스는 메서드 없이, 오직 static final 필드만 포함된 인터페이스를 말한다. 이는 잘못된 사용 사례에 해당하며, Java에서는 상수를 정의할 때 인터페이스를 사용하는 것을..
토픽(topic)정의 및 특징데이터를 분류하고 저장하기 위한 기본 단위메시지를 pub/sub 할 수 있는 논리적 채널kafka 클러스터 안에 있는 데이터 스트림db의 테이블과 개념 유사topic은 Producer가 데이터를 전송하고, Conusumer가 데이터를 읽는 단위하나의 Kafka 클러스터에서 다수의 topic 을 생성할 수 있음.각 topic 은 partition 으로 분리되어 데이터를 분산 저장함파티션(partition)정의 및 특징Kafka 토픽을 물리적으로 나눈 단위병렬 처리 및 분산 처리 하기 위해 사용됨각 파티션은 하나의 순서를 가지고 데이터가 특정 순서대로 기록됨오프셋(offset)정의 및 특징Kafka 파티션 내에서 메시지가 저장된 위치를 나타내는 고유한정수 값각 파티션마다 오프셋은..
링커란?여러 개의 개별적인 오브젝트 파일과 라이브러리를 결합하여 하나의 실행 가능한 프로그램을 생성하는 도구컴파일러가 소스 코드를 컴파일 하여 생성한 오브젝트 파일은 독립적이며, 각 파일에는 해당 코드에 대한 심벌 정보, 코드 세그먼트, 데이터 세그먼트 등이 포함되있고, 각 오브젝트 파일을 연결하고 심벌 정보를 해석하여 전체 프로그램의 메모리 구조와 실행 흐름을 완성링커의 주요 역할심벌 해결(Symbol Resolution):프로그램 내에서 정의되거나 참조된 심벌(변수, 함수 등)의 실제 메모리 주소를 결정예를 들어, main 함수가 printf 함수와 같은 라이브러리 함수를 호출할 때, 링커는 printf의 정의를 표준 라이브러리에서 찾아 연결주소 할당(Address Binding):코드 세그먼트와 데..
Configmap정의애플리케이션의 설정 데이터를 관리하기 위해 사용하는 API 리소스이다. 애플리케이션의 설정 정보를 Key-Value 형태로 저장한다.예시Key-Value 형태의 ConfigmapapiVersion: v1kind: ConfigMapmetadata: name: example-configdata: key1: value1 key2: value2위의 configmap를 apply 한 이후 Pod에서 아래와 같이 사용할 수 있다.apiVersion: v1kind: Podmetadata: name: example-podspec: containers: - name: example-container image: nginx env: - name: EXAMPLE_KEY1 ..