전체 글 1150

[Airflow] weight_rule - Task 우선순위 결정

개요Airflow에서 많은 Dag, 많은 Task를 실행할 때 서로 다른 Dag 간의 Task 간의 실행 순서를 결정하기 위해 우선순위를 가질 수 있다. 이번 글에서는 Airflow가 Task의 실행 순서를 결정하는 규칙에 대해서 먼저 알아본다.  priority_weightAirflow는 Executor에서의 task 실행 순서를 결정하기 위해 priority_weight과 weight_rule이라는 두 가지 개념을 사용한다.그중 priority_weight은 Executor의 큐에서의 우선순위를 정의한다. 기본값은 1이며, 각 task는 weight_rule에 의해 계산된 유효한 priority_weight에 따라 실행 순서, 우선순위가 결정된다.Task의 priority_weight 값이 높을 수록..

Apache Airflow 2024.08.23

[Excel] 테이블 INNER JOIN하기

개요2024.02.08-[Excel] 파워 쿼리 - 테이블 교차 조인 수행하기에서 Excel을 이용해 Cross Join은 수행해 보았는데, 정작 Inner Join 수행 방법을 몰라서…… 이 글에서 정리해 둔다.   테스트 데이터아래와 같이 두 개 표가 존재한다고 하자. 두 개 테이블을 Logic 컬럼을 기준으로 Join 해보자.   표 생성ctrl + t를 눌러 두 개 테이블을 표로 생성한다.  Query 생성생성한 표의 데이터를 Power Query에서 다를 수 있도록 쿼리를 생성한다.생성한 표를 선택한 상태에서 상단 메뉴의 데이터 > 데이터 가져오기 및 변환 > '테이블/범위에서' 버튼을 클릭한다.쿼리를 구분할 수 있도록 적당한 이름을 지정하고 상단 메뉴에서 홈 > 닫기 및 로드 > 닫기 및 다음..

기타 2024.08.22

[Redis] Pub/Sub - 테스트

개요2024.07.30-[Redis] Pub/Sub 개념에서 Publish, Subscriber 개념에 대해 적어두었었다. 이 글에서는 redis-cli를 사용해 직접 테스트를 해보자. 테스트를 하기 위해서는 먼저 Redis가 있어야 한다. 2023.05.30-[Redis] 개념 및 설치/실행을 참고하여 설치한다.또한 Publisher, Subscriber가 필요하므로 redis-cli를 각각 다른 세션에서 실행하여 테스트한다.   관련 명령어Publish, Subscribe와 관련된 명령어는 다음과 같다. 명령어설명subscribe  채널을 구독하여 메시지를 수신받는다.한 번에 여러 채널을 구독할 수 있다.publish 메시지를 채널에 송신한다.pubsub서버에 등록된 채널이나 패턴을 조회한다.psu..

Database 2024.08.21

[Redis] Pub/Sub 개념

개요이전에 2023.05.30-[Redis] 개념 및 설치/실행, 2023.06.01-[Redis] redis-cli로 데이터 읽고 쓰기 등으로 Redis에 대한 간략한 개념이나 데이터를 읽고 쓰는 방법에 대해 적어두었었는데, 최근 다시 Redis를 사용한 개발을 수행하게 되었다.관련하여 Pub, Sub라는 개념을 접하게 되어 적어둔다.  Pub/SubPub, Sub란 Publish, Subscribe의 줄임말로 Message Queue를 통해 데이터를 교환하는 방법 중 하나이다.Publish, Subscribe는 특정 주제(Topic)에 대해 구독한 수신자 모두에게 메시지를 발행하는 통신 방법이다. 즉, 하나의 클라이언트가 특정 Topic에 메시지를 Publish 하면, 해당 Topic에 연결되어 있는..

Database 2024.08.20

[Python] 동적으로 변수에 접근하기

개요특정 변수의 값에 따라 변수를 동적으로 접근하고 싶다. 예로 들어, 아래와 같이 API를 호출할 때 사용하기 위한 APICaller라는 클래스가 있다고 하자.class APICaller(): def __init__(self): self.t10_url = "http://127.0.0.1:10000" self.t20_url = "http://127.0.0.1:20000"APICaller는 API 요청할 서버의 타입 별로 url 값을 갖고 있다. 즉, t10_url은 t10이라는 서버 타입의 url이고, t20_url은 t20이라는 서버 타입의 url이다. 이때, 조건문을 사용하지 않고 API를 보낼 서버 타입을 의미하는 server_type 변수 값에 따라 APICaller..

Python 2024.08.19

[Python] Logging - 중복 로깅 해결

현상Python 프로그램의 로깅을 위해 Logging 모듈을 사용하고 있는데, 테스트하다보니 아래와 같이 같은 로그가 두 번 출력되는 현상을 확인할 수 있었다.불필요한 중복 로그를 출력하지 않도록 문제를 해결해보자.  현상 재현먼저 Logger를 편하게 사용하기 위해 다음과 같이 생성 함수를 정의했다.import loggingdef getlogger(title): logger = logging.getLogger(title) logger.setLevel(logging.INFO) formatter = logging.Formatter('[%(asctime)s] [%(module)s.%(funcName)s :%(lineno)d] %(levelname)s:%(message)s') log_st..

Python 2024.08.16

[Python] Requests hooks - 매개변수 전달하기

개요2024.07.18-[Python] Requests hooks - 응답에 대한 콜백 구현하기에서 python requests를 사용하여 응답에 대한 콜백을 구현했는데, 이번 글에서는 콜백 함수에 매개변수를 함께 전달하는 방법을 몇 가지 살펴본다.   partial 활용2022.10.19-[Python] functools.partial - 함수 재활용에서 살펴봤던 partial 함수는 전달받은 함수에 전달받은 인자값을 채워 넣은 함수를 생성할 때 사용한다. 따라서 hooks에 함수를 전달할 때 partial로 인자값이 채워진 함수를 전달할 수 있다. 다만 kwargs로만 참조할 수 있다. 콜백으로 수행할 함수를 다음과 같이 정의했다고 하자.import requestsfrom functools impor..

Python 2024.08.15

[Airflow] 버전 다운그레이드

개요업무 환경에서 Airflow 2.5.1 버전을 사용하고 있었는데 보안적인 문제로 인해 2.8.2 버전으로 업그레이드를 진행하고 있다 그런데 막상 테스트로 업그레이드를 해보니 이슈가 조금 있어서…… 다시 Airflow 2.5.1 버전으로 다운그레이드하고 싶다.2023.03.28-[Airflow] 버전 업그레이드에서는 업그레이드 방법을 정리해 두었으니, 이번 글에서는 다운그레이드 진행 방법을 적어둔다.  방법1. Airflow 서비스 중지 작업을 수행하기 전에 Airflow 서비스를 전부 중지한다. Webserver, Scheduler와 CeleryExecutor를 사용하고 있다면 Flower와 Celery도 중지한다. 추가로 필요하다면 데이터베이스나 설정 파일도 백업해 두도록 한다. 2. Airflow..

Apache Airflow 2024.08.14

[디자인 패턴] Factory method pattern

개요최근 오랜만에 팩토리 패턴이라는 개념을 다시 듣게 되었는데, 어떤 개념이었는지 기억이 잘 나지 않아서 정리해 둔다.  Factory method pattern객체 지향 디자인 패턴, 그중에서도 생성 패턴 중 하나이다.객체를 생성하기 위한 인터페이스는 정의하되, 생성할 클래스는 서브 클래스가 결정하도록 한다. 다른 말로 인스턴스화를 서브 클래스에 연기하게 하는 방법이다.객체를 생성하기 위해서는 종종 포함하기에 적절하지 않은 복잡한 프로세스가 필요할 수 있다. 때문에 팩토리 메서드 패턴은  객체 생성을 위한 별도의 방법을 정의하여 이러한 문제를 처리한다.   구조Product : 최상위 제품 클래스ConcreteProduct : 제품 구현체Creator : 최상위 팩토리 클래스. 추상화된 팩토리 메서드를..

기타 2024.08.13

[Flower] FLOWER_UNAUTHENTICATED_API environment variable is required to enable API without authentication

현상최근 CeleryExecutor를 사용하는 Airflow 버전을 2.5.1에서 2.8.2로 업그레이드를 진행하면서 영향도를 확인하고 있는데, Flower의 업그레이드된 버전에 변경점이 있었는지(확인해 보니 1.2에서 2.0으로 업그레이드되어있었다) Flower를 통한 worker 조작 시 다음과 같은 에러가 발생하면서 설정 변경 등이 적용되지 않았다.문제를 해결해보자.   원인Flower 1.0과 다르게 2.0부터는 보안 상의 이유로 인증, 즉 로그인이 활성화되지 않은 경우에는 기본적으로 API의 사용이 비활성화된다. 따라서 가급적이면 로그인 인증 설정을 활성화하거나 별도의 설정을 통해 로그인 인증 없이 API 사용을 허용해야 한다.   해결이 글에서는 로그인 인증 없이도 API를 사용할 수 있도록 ..

Apache Airflow 2024.08.12