2024/05 12

[Python] 특수 메서드 (Magic Method)

개요Python으로 정의된 클래스를 보면 __init__, __str__ 등과 같이 메서드 이름 앞뒤에 밑줄(__)이 붙어있는 메서드가 존재한다. 이러한 메서드를 특수 메서드라고 하는데, 이 글에서는 관련 개념을 정리해두려고 한다.  특수 메서드특수 메서드 또는 매직 메서드 (Magic Method)란 객체 지향 프로그래밍을 할 때 사용하는 특별한 메서드이다. 클래스 객체가 생성될 때, 삭제될 때, 어떤 연산자를 만났을 때 등의 각각의 상황에서 동작하도록 정해진 메서드를 특수 메서드라고 일컫는다.2024.04.22-[Python] 클래스와 생성자에서 살펴봤던 __init__ 함수는 대표적인 특수 메서드로, 클래스 객체가 생성될 때 동작한다. __init__ 함수 외에도 문자열로 변환할 때..

Python 2024.05.16

[Airflow] 함수 내에서 다른 Operator 실행하기(?)

개요Airflow Dag 정의 파일에서 정의된 Dag 인스턴스는 전역 변수여야 하는 것으로 인지하고 있었다. 그런데 최근에 업무에서 사용하고 있는 Airflow Dag 정의 파일을 살펴보다가, PythonOperator로 실행하는 함수 내에서 Dag와 Task를 생성하는 부분을 발견했다.확인해 보니 기능 동작은 하고 있는데…… 함수 내에서 정의한 Dag와 Task 모두 Airflow 시스템 내에서 확인이 되지 않는 것 같다. 개발자에게 의도를 물어보고 싶지만 퇴사를 하셨으므로, 무엇을 의도한 결과인지 추측해보려고 한다.  예시 코드아래 코드는 운영 중인 코드를 간단한 형태로 정리한 것이다.from airflow import DAGfrom airflow.operators.python i..

Apache Airflow 2024.05.15

[Python] 상속과 오버라이딩

개요 2024.04.22-[Python] 클래스와 생성자에서 객체 지향 프로그래밍을 위한 클래스와 생성자에 대해 정리해 두었는데, 이번 글에서는 상속과 관련된 문법을 정리해두려고 한다. 상속 '재산을 상속받다.'라는 문장에서 사용된 의미와 동일하게, 객체 지향 프로그래밍에서도 상속은 물려받다는 의미로 사용된다. 다만 재산이 아닌 클래스를 정의할 때 다른 클래스의 기능을 물려받는 것을 상속이라고 한다. 달리 말해 이미 만들어진 클래스를 재사용하여 다른 클래스를 생성하는 것을 말한다. 상속을 사용하면 기존 클래스를 변경하지 않으면서 새로운 속성과 메서드를 추가할 수 있고, 기존 메서드를 다시 정의하여 기능을 변경할 수 있다. 상속받는 클래스를 자식 클래스(Child Class, Sub Class)라고 하고,..

Python 2024.05.14

[Python] 클래스와 생성자

개요 Python은 객체 지향 프로그래밍 언어이다. 다른 프로그래밍 언어와 비교하면, Python은 최소한의 문법과 개념을 사용해 클래스를 추가하고, 객체 지향형 프로그래밍의 표준 기능을 모두 제공한다. 즉, 클래스는 상속을 통해 부모 클래스를 가질 수 있고, 자식 클래스는 부모 클래스의 메서드를 재정의할 수 있다. 이 글에서는 객체 지향 프로그래밍에 대한 기본적인 개념을 알고 있다는 가정 하에, Python에서 클래스를 추가하고 사용하기 위한 문법 정도만을 정리한다. 객체 그래도 딱 문법만 정리하는 것도 적절하지 않은 것 같아 아주 기본적인 개념도 적어둔다. 객체(object, instance)란 서로 연관된 데이터와 그 데이터를 조작하기 위한 함수를 하나의 집합으로 모아놓은 것을 말한다. 집합의 원소..

Python 2024.05.13

[Airflow] PythonSensor 사용하기

개요 2024.04.05-[Airflow] ExternalTaskSensor - 다른 dag/task 작업 완료 대기에서 다른 Dag나 Task의 실행을 센서링했는데, 여러 Dag나 Task의 실행을 센서링하기엔 적합하지 않다는 생각이 들었다. 이유는 여러 가지가 있는데, ExternalTaskSensor는 한 번에 하나의 Task나 Dag만을 센터링할 수 있기 때문에 여러 Dag나 Task를 센서링하기 위해서는 여러 개의 Sensor를 생성해서 사용해야 한다. 또, Sensor 간 종속성을 설정하는 경우가 아니라면 여러 Dag나 Task 중 실패가 발생했을 때 센서링을 중단할 방법이 없어 보였다. 이런 이유로 2024.04.14-[Airflow] 센서(Sensor) 란에서 살펴본 여러 Sensor 중 ..

Apache Airflow 2024.05.10

[GitLab] API로 원격 저장소 파일 읽기

개요 GitLab 저장소에 저장되어 있는 파일을 클론하지 않고 내용을 확인하고 싶다. 웹 요청이나 API를 통해 확인할 수 있을 것 같은데, 이 글에서는 GitLab API를 이용해 레포지터리에 저장된 파일 정보를 확인해본다. 원격지 파일 정보 확인 원격 저장소에 저장된 파일에 대한 정보는 다음의 url로 요청할 수 있다. 요청 시 원격지 프로젝트의 아이디 값과 확인할 파일의 경로를 지정해주어야 하는데, 파일에 경로에는 branch 정보도 포함되어야 한다. branch 정보는 ref 속성으로 지정한다. GET /projects/:id/repository/files/:file_path # 예시 curl --header "PRIVATE-TOKEN: " "https://gitlab.example.com/api..

Git | GitLab 2024.05.09

[Python] 타입 어노테이션(type annotation)

개요 Python은 변수의 타입을 명시하지 않는 대표적인 동적 타입 언어 중 하나인데, Python으로 개발된 프로젝트의 코드를 보면 함수 매개변수 등에 변수의 타입을 지정하는 것처럼 보이는 구문이 존재하는 것을 확인할 수 있다. def greeting(name: str) -> str: return 'Hello ' + name 이 글에서는 해당 구문이 무엇을 의미하고, 어떻게 동작하는지 정리해두려고 한다. 타입 어노테이션(type annotation) 동적 타입 언어는 효율적으로 코드를 작성할 수 있어 일회성 스크립트나 작은 애플리케이션을 빨리 개발하기 좋다. 하지만 변수의 데이터 타입에 대한 동적인 면은 애플리케이션의 규모가 커질수록 프로그램의 안정성을 위협하기도 한다. 때문에 중규모 이상의 프로젝트에..

Python 2024.05.08

[프로그래밍] 정적 타입 언어와 동적 타입 언어

개요 업무에서 주로 Python을 많이 사용하고 있는데, 이전에 공부할 때는 C와 Java를 많이 사용했었다. Java로 프로그래밍을 하다가 Python을 하게 되었을 때 크게 느낀 차이 중 하나가 변수 선언 시 데이터 형에 대한 지정 유무였다. 최근에 관련 개념인 정적 타입 언어와 동적 타입 언어에 대해 되짚어보게 되어, 이 글에서 적어두려고 한다. 컴파일 (Compile) 프로그램 소스 코드를 작성하고 빌드하면 일반적으로 다음과 과정을 거쳐 컴퓨터가 실행할 수 있는 기계어로 번역된다. 이 과정을 컴파일이라고 한다. 이때 컴파일 과정에서 실행 가능한 파일이 만들어지는 순간까지를 컴파일 타임이라고 하고, 실행 가능한 파일이 실행된 이후를 런타임(Runtime)이라고 한다. 변수의 타입이 컴파일 타임과 런..

기타 2024.05.07

[Airflow] 센서(Sensor) 란

개요 2024.04.05-[Airflow] ExternalTaskSensor - 다른 dag/task 작업 완료 대기에서 다른 Dag나 Task의 실행을 대기하는 Sensor를 살펴보았는데, 확인해 보니 Airflow에서는 다양한 종류의 작업에 대한 Sensor를 구현할 수 있도록 Sensor 라이브러리를 제공하고 있었다. 이번 글에서는 Airflow에서의 Sensor 개념과 지원하고 있는 Sensor에 대해서 간단히 정리해두려고 한다. Sensor Airflow에서 Sensor란 현실 세계에서의 센서와 동일하게 어떠한 일이 발생할 떄까지 기다리도록 설계된 오퍼레이터이다. Sensor가 실행되면 특정 조건이 충족되는지 주기마다 확인하고, 조건이 충족되면 Task를 성공 상태로 표시하고 다음 작업을 실행되..

Apache Airflow 2024.05.06

[GitLab] API로 MR 업데이트하기

개요 2024.01.05-[GitLab] git cli로 Merge Request 생성에서 Git Push와 함께 MR 생성을 자동화할 수 있도록 CLI로 작업을 해봤는데, 이후 동작에서 이미 생성되어 있는 MR 정보를 갱신해야 할 필요가 생겼다. GitLab API를 이용해 특정 프로젝트의 MR을 찾아 업데이트하는 방법을 정리한다. 예시로 파이썬으로 구현해둔다. MR 업데이트 공식 문서에 의하면 MR을 업데이트할 때는 아래와 같은 URL에 Put 요청을 하면 된다. project의 id와 mr의 id는 필수값이고, 업데이트할 값에 해당하는 labels, assignee_id, title, description 등등의 여러 값은 필요에 맞게 전달하면 된다. PUT /projects/:id/merge_re..

Git | GitLab 2024.05.03
1 2