전체 글 1366

[Airflow] DagFileProcessorManager (PID=) last sent a heartbeat 51.22 seconds ago! Restarting it

현상업무를 하던 중, Dag 파싱이 정상적으로 이루어지지 않는 현상을 확인했다. Airflow Web UI에서 Dag의 코드를 확인하면 언제 파싱이 이루어졌는지 확인할 수 있는데, 확인 당시 기준 2일 전에 마지막으로 Dag 파싱이 이뤄지고 더 이상 파싱이 이뤄지지 않는 상태였다.원인을 파악하고 문제를 해결한 이력을 적어둔다. 원인먼저 Dag 파싱을 담당하는 DagFileProcessor의 로그가 존재하는지 확인했는데, 각 Dag 정의 파일의 파싱 이력 정도만 찾고 별도의 로그 파일은 확인하지 못했다.하지만 스케쥴러 로그 파일에서 아래와 같은 로그가 반복적으로 발생하고 있는 것을 확인했다.DagFileProcessorManager (PID=) last sent a heartbeat 51.22 seco..

Apache Airflow 2025.06.16

[GitLab] k8s Helm Chart 설치 시 runner 구성 방법

개요2025.06.04-[Gitlab] runner - PANIC: Failed to register this runner. Perhaps you are having network problems 에서 쿠버네티스 환경에서 Helm으로 설치한 gitlab-runner의 버전 업그레이드를 수행했는데, values.yaml 변경으로 별도로 설정해 두었던 일부 속성이 values.yaml에서 삭제되었다. 예로 들어 chart 0.15.0 버전에서는 runners.pollTimeout이라는 속성을 지원했는데,(https://artifacthub.io/packages/helm/gitlab/gitlab-runner/0.15.0?modal=values&path=runners.pollTimeout)현재는 지원하고 있지 ..

Kubernetes 2025.06.13

[Gitlab] runner - PANIC: Failed to register this runner. Perhaps you are having network problems

현상어느 날 갑자기, 잘 동작하고 있던 gitlab-runner가 아래와 같은 오류와 함께 동작하지 않는 상태가 되었다.문제가 되는 gitlab-runner는 아래의 방식으로 설치해여 사용 중이다.AWS EKS 1.27Helm Chart 배포chart repogitory : http://charts.gitlab.io/chart name : gitlab/gitlab-runnerchart version : 0.15.0원인을 파악하고 현상을 해소해보자. 원인1. 로그 확인 먼저 로그를 보면 http 410 오류 코드와 함께 네트워크에 문제가 있을 수도 있다는 출력을 확인할 수 있다.하지만 노드에 직접 접속하여 확인해봤더니, gitlab-runner가 동작하는 호스트와 gitlab 서버 간의 통신에는 이상이..

Git | GitLab 2025.06.12

[SOPS] 파일 일부 암호화

개요2025.05.30-SOPS(Secrets OPerationS)란에서 SOPS의 기본적인 사용방법에 대해서 알아보았다. SOPS는 기본적으로 파일 전체를 암호화하는데, 이럴 경우 내용을 파악할 수 없어 복호화를 항상 해야 한다는 번거로움이 발생한다. 때문에 yaml이나 json 등의 파일에서 필요한 속성, 항목만 암호화할 필요가 있다. 이번 글에서는 원하는 항목만 암호화하는 방법을 적어본다. yaml 암호화먼저 SOPS는 파일 확장자를 참조하여 파일을 암호화할 방법을 결정한다. yaml, json, env, ini와 같은 파일의 경우, 파일에서 키/값을 추출해 값만 암호화한다. 예로 들어 아래와 같은 yaml 형식의 데이터가 있다고 하자.foo: barhello: worldtest: test이 파일..

기타 2025.06.11

SOPS(Secrets OPerationS)란

개요k8s에서 서비스를 배포하고 관리하다보면 필연적으로 민감정보에 대한 관리를 고민하게 된다. k8s에서는 Secrets이라는 리소스를 사용해 민감정보를 관리하는데, Secrets을 정의하는 yaml 파일 내에서는 평문값을 노출하게 된다. 때문에 git과 같은 형상 관리 도구를 사용하기 꺼려졌었는데, 이번에 암호화 도구인 SOPS에 대해서 알게되어 내용을 정리해보고자 한다. SOPSSOPS(Secrets OPerationS)는 Mozilla에서 관리하는 오픈소스 프로젝트 중 하나로, 다양한 형식의 파일을 암호화하는 암호화된 파일 편집기이다. 설치https://github.com/getsops/sops/releases 에서 원하는 버전으로 설치하면 된다. window도 지원하는지 .exe 파일도 제공하..

기타 2025.06.10

[알고리즘] 최장 증가 수열(LIS) - 이분 탐색

개요2025.05.26-[알고리즘] 최장 증가 수열(LIS) - DP에서 최장 증가 수열을 동적 계획법으로 찾는 방법을 정리했었다. 다만 동적 계획법의 경우에는 O(n^2)의 시간 복잡도를 가진다. 때문에 배열의 길이가 아주 큰 경우에는 보다 효율적인 방법을 사용할 필요가 있다.이 글에서는 최장 증가 수열을 O(log n)의 시간 복잡도로 찾을 수 있는 이분 탐색을 사용한 방법을 정리해 본다. 최장 증가 부분 수열이분 탐색을 활용할 때는 LIS를 기록하는 배열을 하나 생성한 뒤, 주어진 배열을 하나씩 살펴보면서 각 숫자가 증가수열에 들어갈 위치를 찾는 방식이다. 상세한 과정은 다음과 같다. 구현1. 이분 탐색숫자가 들어갈 위치를 찾는 이분 탐색 함수는 아래와 같다.증가수열의 숫자가 들어갈 위치는 현재..

Algorithm 2025.06.09

[Python] Redis - 연결 재시도

개요2024.08.07-[Python] redis - pub/sub 구현하기에서 Python Redis 라이브러리를 사용해 pubsub를 구현했었는데, subcriber에서 서 예기치 않은 연결 종료로 인해 구독이 멈춘 이력이 있다. 구현 코드에 연결 재시도 로직이 따로 없어서 추가 구현이 필요할 것 같다.그보다 우선 Redis-py에서 제공하고 있는 재시도 기능부터 살펴보려고 한다. retryRedis-py는 실패 후 특정 횟수만큼 재시도를 수행하는 Retry 기능을 제공하고 있다.from redis.retry import RetryRetry(backoff, retries, supported_errors=(, , ))기본적으로 재시도 간격, 그리고 재시도 횟수를 지정해야 하는 것 같다. Retry 객..

Python 2025.06.05

[알고리즘] 최장 증가 수열(LIS) - DP

문제최근 알고리즘 문제를 풀던 중 증가수열과 관련된 문제를 발견했다. 완전 탐색으로도 구현할 수 있지만 비효율적으로 보여 좀 더 좋은 방법을 정리해 본다. 최장 증가 부분 수열최장 증가 부분 수열(Longest Increasing Subsequence) 문제는 주어진 수열에서 오름차순으로 정렬된 가장 긴 부분 수열을 찾는 문제이다. 부분 수열이 연속적이거나 유일할 필요는 없다. 예로 들어, 아래 그림과 같은 수열이 있다고 하자.이 수렬의 증가 부분 수열은 [1, 5], [1, 4], [2, 3, 8] 등 여럿 존재하지만, 그중 길이가 가장 긴 최장 증가수열을 찾으면 아래와 같다. 접근최장 증가 수열을 구현하는 대표적인 방법은 완전 탐색, DP를 이용하는 방법이다.수열의 한 원소 K에 대해, K에서 끝..

Algorithm 2025.06.04

[Git] reflog - HEAD 이력 확인하기

개요git reset으로 커밋을 취소하던 중 실수로 유지해야 하는 커밋도 함께 취소를 해버렸다. 방법을 찾던 중 reflog 명령여를 활용하는 방식이 있어 reflog라는 명령어 자체에 대해서 일단 알아보고자 한다. reflog로컬 저장소에서 HEAD 또는 브랜치가 업데이트된 시점을 기록한다. 이 이력은 로컬 저장소의 아래 경로에 기록된다..git/logs/ref/heads# 또는.git/logs/HEAD즉, 변경 이력을 확인하고 싶다면 reflog 명령어가 아니라 위의 파일을 확인해도 된다. reflog는 list, show, expire, delete 등 다양한 하위 명령어를 제공하고 있다. 이 글에서는 주로 show 명령어를 다루려고 한다. 사용법기본적으로 아래와 같이 하위 명령어를 생략하여..

Git | GitLab 2025.06.02

[MySQL] OPTIMIZE - 테이블 최적화

개요AWS RDS 사용 중 총 100GB의 스토리지 용량 중 95GB를 사용하고 있다는 알람을 받았다.문제를 해결하기 위해 데이터베이스 테이블에서 데이터를 삭제했는데 스토리지 용량을 줄어들지 않는 상태다.이번 글은 이 문제를 해결하는 방법 중 하나인 OPTIMIZE TABLE 구문에 대해서 정리한다. 원인데이터베이스는 데이터를 삭제하면 실제로 데이터를 삭제하는 것이 아니라 삭제 표시만 한 후 다른 데이터가 오면 그 위에 덮어쓰는 방식으로 동작한다.좀 더 간결하게 표현하면 데이터를 삭제해도 해당 공간을 바로 회수하지 않는다. 이후에 데이터를 삽입할 떼 보다 빠른 성능을 위해 할당한 공간을 재사용하기 위함인데, 용량 확보 필요시 OPTIMIZE TABLE 구문으로 삭제한 공간을 실제 디스크 공간으로 회수..

Database 2025.05.30