전체 글 1003

[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

[GitLab] CLI로 fork 저장소 MR 생성 시 업스트림 저장소에 생성되는 문제

개요 2024.01.05-[GitLab] git cli로 Merge Request 생성에서 CLI를 이용해 MR을 생성하는 방법을 정리했다. 해당 부분을 프로그램 상에서 테스트하기 위해 공통 저장소를 Fork한 뒤, Fork 저장소로 MR 생성을 시도해보았는데……Fork 저장소가 아니라 원본(업스트림) 저장소를 대상으로 MR이 생성되는 현상을 확인했다. 원인을 파악하고 해결해본다. 원인 사실 달리 원인이 있던 것은 아니고…… push_option을 사용해 MR을 생성할 프로젝트를 지정할 수 있는 기능이 비교적 최근에 개발되었다. 아무래도 처음 merge_request 관련 옵션을 개발할 때 Fork 저장소에서 업스트림 저장소를 대상으로 MR이 생성된다는 사용자 시나리오를 생각하고 개발한 것 같다. 그 이..

Git | GitLab 2024.05.02

[Airflow] airflow-code-editor - 웹 서버 내 코드 편집기 사용

개요 Airflow는 Python으로 작성된 Dag 정의 파일을 파싱 하여 TaskFlow를 생성한다. 다만 Dag 정의 파일을 편집하기 위해서는 Airflow 서버에 직접 접속해야 하는데, 이로 인해 dag 테스트하기가 번거로운 부분이 있었다. 그러나 최근 웹 서버에 코드 편집기 기능을 추가해주는 airflow-code-editor라는 플러그인이 존재한다는 것을 확인했다. 설치하고 사용하는 방법을 간단히 적어두려고 한다. 참고로 airflow >=1.10.3 , 그리고 git >=2.0을 요구한다. airflow-code-editor 웹 서버에서 Dag 정의 파일을 편집할 수 있는 Airflow 플러그인이다. 지정된 디렉터리 내 파일 관리 인터페이스를 제공하고, 파일을 편집하거나 업로드, 다운로드할 수..

Apache Airflow 2024.05.01

[Airflow] ExternalTaskSensor - 다른 dag/task 작업 완료 대기

개요 Airflow에서는 여러 작업 간의 종속성을 설정하여 Task Flow을 구성할 수 있는데, 종속성을 설정할 작업이 서로 다른 Dag에 속해있는 경우가 있을 수 있다. 이런 경우 Airflow에서 제공하는 Sensor Operator인 ExternalTaskSensor의 사용을 고려해 볼 수 있다. 이 글에서는 ExternalTaskSensor의 사용법 정도를 간단히 적어둔다. ExternalTaskSensor ExternalTaskSensor는 특정 logical_date(execution_date)에 대한 다른 dag, task group, task가 완료되기를 기다리는 Operator이다. airflow.sensors.external_task.ExternalTaskSensor(*, extern..

Apache Airflow 2024.04.30

[기록] 데이터 재처리/복구용 Airflow Dag 개발

개요Airflow에는 데이터를 재처리할 수 있는 방법으로 clear, backfill 등의 기능을 제공하고 있다. 다만 단순 clear로 재처리하는 경우에는 이전 시점의 데이터를 처리하기 어렵고, backfill은 forground로 실행되며 로그로 모니터링을 하기 위해서는 리다이렉션 등을 통해 별도로 출력을 저장해야 한다. 또 업무에서 사용하고 있는 airflow 환경에서 backfill 명령이 동작하지 않는다는 치명적인 문제도 있었다…….이런저런 이유로 업무에서 사용하고 있는 airflow 환경에서는 recovery_dag(데이터 재처리를 위한 dag)를 생성하는 dag 정의 파일을 개발하여 사용하고 있었는데 몇 가지 문제점이 발견되었다.어떤 문제점이 있는지, 그리고 어떻게 개선했는지를 정리해 둔다...

[Pandas] update - 다른 데이터프레임 값으로 수정

개요두 개의 다른 데이터프레임이 있을 때, 한 데이터프레임의 컬럼의 데이터프레임의 컬럼 값으로 수정하고 싶다. 확인해 보니 Pandas에서 제공하는 update 함수를 이용할 수 있는 것 같다.사용 방법을 적어둔다.  DataFrame.updateupdate는 데이터프레임의 컬럼을 다른 DataFrame의 컬럼으로 덮어씌운다. 단 결측치가 아닌 값만 사용하며. 반환값 없이 원본이 변경된다.인덱스와 컬럼이 동일한 셀의 값으로 데이터프레임을 수정하기 때문에, 두 데이터프레임 간에는 같은 이름의 인덱스와 컬럼이 존재해야 한다. 만약 시리즈를 사용한다면 name 속성을 사용해 컬럼 이름을 동일하게 맞추어야 한다.DataFrame.update(other, join='left', overwrite=True, fil..