분류 전체보기 1186

[Python] Pickle - 객체 직렬화/역직렬화

개요2023.10.11-[Airflow] Dag 직렬화 (Serialization)에서 살펴보았는데, 직렬화(Serialization)란 데이터 구조나 객체 상태를 나중에 재구성할 수 있는 형식으로 변환하는 과정을 말한다. 다르게 말하면 객체를 바이트 스트림으로 인코딩하는 과정으로, 직렬화된 데이터는 동일하거나 다른 환경에 저장될 수 있다. 반대로 직렬화된 데이터를 개체나 데이터 구조로 다시 재구성하는 과정, 또는 인코딩 되어있는 바이트 스트림으로부터 객체를 복원하는 과정을 역직렬화(Deserialization)라고 한다. Python에서는 Pickle 라이브러리를 사용하여 데이터 직렬화/역직렬화를 수행한다. 이 글에서는 Pickle 라이브러리 사용법을 간단히 적어둔다.  PicklePickle은 Pyt..

Python 2024.05.28

[Windows 10] 원격 데스크톱의 비밀번호 변경

개요원격 데스크톱을 사용해 원격 컴퓨터 계정의 비밀번호를 변경해야하는데, 자주 수행하지 않다보니 매번 단축키를 까먹어서 적어둔다.   로컬 컴퓨터 비밀번호 변경로컬 컴퓨터의 비밀번호를 변경할 때는 키보드의 ctrl + alt + del을 눌러 작업 관리자나 윈도우 보안을 불러온다.위의 화면에서 암호 변경을 클릭하면 아래와 같이 암호를 변경할 수 있다.   원격 데스크톱 비밀번호 변경원격 데스크롭에 진입한 상태에서 ctrl + alt + del을 입력하면 원격 컴퓨터의 윈도우 보안을 불러올 것 같지만 실제로는 로컬 컴퓨터의 윈도우 보안을 불러온다.원격 컴퓨터의 윈도우 보안을 불러오기 위해서는 ctrl + alt + end를 입력하면 된다. 이후로는 로컬 컴퓨터와 동일한 방식으로 비밀번호를 변경할 수 있다...

Windows 2024.05.27

[Jenkins] Build 히스토리 삭제 - 3

개요Jenkins Job 별로 빌드 히스토리를 관리하는 것에 대해서는 2021.05.23-[Jenkins] Build 히스토리 삭제 - 1, 2021.12.01-[Jenkins] Build 히스토리 삭제 - 2 글에서 살펴본 적이 있었다. 그런데 최근 주변에서 Jenkins 빌드 히스토리로 인한 디스크 부족으로 대응하는 모습을 보면서 Job 별로 설정할 수 있는 Discard Old Builds에 대한 기본값을 설정해두면 좋을 것 같다는 생각을 하게 되었다. 관련해서 찾아보니 Jenkins 전체 대상으로 빌드 삭제 기능을 제공하는 플러그인 Build Discarder가 존재하는 것을 확인할 수 있었다. 이 글에서는 좀 더 효율적으로 Jenkins를 관리할 수 있도록 Build Discarder를 설정하는..

Jenkins 2024.05.24

[프로그래머스] 가장 많이 받은 선물

문제문제 : https://school.programmers.co.kr/learn/courses/30/lessons/258712친구들끼리 카카오톡 선물하기 기능을 사용해 선물을 주고받은 이번 달까지의 기록을 바탕으로 다음 달에 누가 선물을 많이 받을지 예측하고 싶다.두 사람이 선물을 주고받은 기록이 있으면, 두 사람 사이에 더 많은 선물을 준 사람이 다음 달에 선물 하나를 받는다.두 사람이 선물을 주고받은 기록이 없거나 그 수가 같으면, 선물 지수가 큰 사람이 작은 사람에게 선물 하나를 받는다.선물 지수는 이번 달까지 자신이 친구들에게 준 선물의 수에서 받은 선물의 수를 뺀 값이다.두 사람의 선물 지수가 같으면 다음 달에 선물을 주고받지 않는다.위의 규칙대로 선물을 주고받을 때, 다음 달에 선물을 가장 ..

Algorithm 2024.05.23

[Airflow] TriggerDagRunOperator - 다른 Dag 트리거 하기

개요운영 중인 Airflow 환경에 아래와 같은 2개의 Dag가 동작 중이다.log_git_importer : 서버의 Git Working Directory 내 로그 파일을 원격 저장소로 Push 한다. 매 시 7분에 동작한다.inf_monitor : 운영 시스템 내 환경에서 모니터링이 필요한 지표를 파일로 생성한다. 매 시 10분에 동작한다.그런데 어느 순간부터 inf_monitor가 [Errno 116] Stale file handle 오류와 함께 간헐적으로 실패하는 경우가 생기기 시작했다. 확인해 보니 log_git_importer가 동작하는 도중에 inf_monitor가 동작하는 것이 오류가 발생하는 원인으로 보였다. 동시에 두 Dag가 동작하는 상황을 피하기 위해 실행 주기를 조정해보려고 했는데..

Apache Airflow 2024.05.22

[Istio] Ingress Gateway - Gateway/VirtualService

개요쿠버네티스 환경에서 동작하는 서비스를 외부에 노출하고 싶다. 보통 서비스를 외부에 노출할 때는 Nginx Ingress Controller를 배포한 뒤 kubernetes Ingress 리소스를 생성해 왔는데, 현재 구성 중인 환경에서는 Istio를 사용 중이다. 그리고 Istio와 Nginx Ingress Controller는 포트 충돌 등의 이유로 함께 사용하지 않는 것 같다. Istio를 사용할 때는 Nginx Ingress Controller 대신 Istio Ingress Gateway를 사용하여 Ingress를 구성하거나 Gateway와 VirtualService를 이용해 서비스를 외부에 노출하는 것으로 보인다. 그림으로 표현하면 아래와 같은 구조가 되는 것 같다. 이 글에서는 ..

Kubernetes 2024.05.20

[Airflow] 사용자 정의 오퍼레이터 (Custom Operator)

개요Airflow에서는 오퍼레이터를 통해 여러 기능을 제공하고 있다. 만약 원하는 기능을 제공하는 오퍼레이터가 없다면 개발자가 직접 구현하여 사용할 수 있다.이 글에서는 사용자 정의 오퍼레이터를 구현하여 테스트해보려고 한다. 구현할 기능은 문자열을 입력받고, 문자열을 반환하는 정도로 한다.   사용자 정의 오퍼레이터사용자 정의 오퍼레이터를 만들기 위해서는 아래 조건을 만족해야 한다.BaseOperator 상속생성자 작성 : 오퍼레이터에 필요한 매개변수를 정의한다. execute 함수 작성 : Executor가 오퍼레이터를 호출할 때 실행할 코드를 작성한다.순서대로 차근차근 작성해 보도록 하겠다.  BaseOperator 상속상속받을 BaseOperator가 정의된 라..

Apache Airflow 2024.05.17

[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