2025/05 19

[Linux] diff -rq - 디렉터리 비교

개요GitLab 브랜치 관리를 하고 있는데, 실수가 있어 두 브랜치 간 동일해야 하는 내용도 다른 내용을 가지고 있는 것을 확인했다. 이 때 어느 파일, 어느 디렉터리에서 차이가 있는지 확인해보려고 한다.방법을 알아보자. diffdiff 명령어는 기본적으로 두 파일 간의 차이를 확인할 때 사용한다. 만약 하위 디렉터리 비교가 필요하다면 -r, --recursive 명령을 사용해 확인할 수 있다.diff -r /path_1 /path_2diff --recursive /path_1 /path_2차이가 있는 파일의 이름과 그 내용을 확인할 수 있다. 만약 상세 내용이 아니라 차이가 있는 파일의 목록을 확인하고 싶다면 -q 옵션을 주면 된다.diff -rq /path_1 /path_2diff --recursi..

Linux 2025.05.16

[Python] async for - 비동기 반복

개요Python 비동기 프로그래밍을 공부하다가 async with와 함께 async for이라는 구문을 발견했다. async with은 비동기 콘텍스트 관리자인데 async for는 어떤 역할인지 공부하지 않아 이번 기회에 공부해보려고 한다. 비동기 반복async for은 비동기 이터레이터를 탐색하는 데 사용한다. 여기서 비동기 이터레이터란 __aiter__, __anext__ 메서드를 구현한 객체에 해당한다.__aiter__ : self, 객체 자신을 반환해야 한다.__anext__ : 이터레이터의 다음 항목을 반환하는 코루틴 메서드여야 한다.즉, async for은 StopAsyncIteration이 발생할 때까지 비동기 이터레이터의 __anext__ 메서드가 반환하는 객체를 탐색한다.async ..

Python 2025.05.15

[Python] HTTPX - Client

개요2025.05.05-[Python] HTTPX - 비동기/동기 http 라이브러리에서 최상위 API(get, post 등)을 사용하는 기본적인 요청 방법을 확인해 보았다. 이번 글에서는 동일한 호스트로의 반복적인 요청이 있을 때 성능 향상을 가질 수 있는 Client라는 개념에 대해서 알아보고자 한다. ClientHTTPX는 기본적으로 호스트로 요청을 보낼 때 매번 새로운 연결을 설정한다. 하지만 이 방식은 매번 새 연결을 설정해야 하기 때문에 호스트에 대한 요청 수가 증가할수록 비효율적이다.이러한 비효율성을 개선하기 위해 Client는 HTTP 연결 풀링을 사용해, 동일한 호스트에 여러 요청을 하는 경우 TCP 연결을 재사용하도록 지원한다. 연결을 재사용함으로써 요청 간 지연 시간을 줄이고, C..

Python 2025.05.14

[Python] HTTPX - 비동기/동기 http 라이브러리

개요2025.04.13-[Python] requests Transport Adapters - 요청 재시도에서 Python requests 모듈로 http 요청 재시도를 수행하는 멋진 방법을 살펴보았는데, 이 과정을 비동기 방식으로 수행하고 싶다. 하지만 requests 모듈은 비동기 프로그래밍을 지원하지 않는 것 같다.관련해서 동기식, 비동기식 프로그래밍을 모두 지원하는 HTTPX라는 라이브러리가 있다는 것을 알게 되었다. 아주 기본적인 사용 방법을 적어둔다. HTTPXPython3용으로 설계된 HTTP 클라이언트로, 동기 및 비동기 API, 그리고 HTTP/1.1과 HTTP/2를 모두 지원한다.공식 문서에 따르면 requests 라이브러리의 표준 기능 모두 지원하며, WSGI 또는 ASGI에 직접 요..

Python 2025.05.13

[Shell] JOIN 함수 구현 - 배열 요소를 구분 기호로 결합

개요최근 쉘 스크립트를 만들고 있는데, 배열의 요소를 구분 기호로 결합한 문자열을 만드는 join 함수가 필요해졌다.이 글에서는 구글링 해서 찾은 join 함수를 기록해 둔다. 스크립트join_ws() { local d=$1 s=$2; shift 2 && printf %s "$s${@/#/$d}"; } 사용법arr=("apple" "banana" "cherry")echo -e $(join_ws ',' "${arr[@]}")echo -e $(join_ws ' || ' "${arr[@]}")echo -e $(join_ws '\n' "${arr[@]}")실행시켜 보면 스크립트 대로 쉼표, 문자열, 줄 바꿈을 기준으로 잘 연결된 문자열을 확인할 수 있다. 동작 방식동작 방식을 분석하면 다음과 같다. 1...

Linux/Shell Script 2025.05.12

[Shell] 매개변수 배열 슬라이싱

개요쉘 스크립트를 하나 개발하고 있다. 실행 시 매개변수를 몇 가지 전달해야 하는데, 전달한 매개변수 배열의 슬라이싱이 필요하다.방법을 적어둔다. $@$@은 모든 매개변수를 접근하되, 별개의 구분된 문자열로 취급한다. 즉, 배열로 취급한다. (흔히 $@와 혼용되는 $*는 모든 매개변수를 공백으로 구분된 하나의 문자열로 취급한다.)때문에 배열 슬라이싱을 하기 위해서는 $@을 사용해야 한다. 슬라이싱쉘 스크립트에서 배열 슬라이싱 방법은 다음과 같다.${변수:인덱스:길이}인덱스와 길이는 음수를 허용하며, 음수를 사용하면 뒤에서부터의 인덱스에 해당한다. 아래는 케이스별 예시이다.$ string=01234567890abcdefgh$ echo ${string:7}7890abcdefgh$ echo ${string..

Linux/Shell Script 2025.05.09

[Superset] API 사용하기

개요최근 Superset 데이터 백업을 수행하고자 하는데, 데이터베이스 백업 외에 다른 백업도 만들어두고자 한다. 하지만 어떤 이유에선지 기존에 수행했뎐 Web UI에서의 export 기능은 잘 되지 않아서 API를 사용해 데이터를 확보해보려고 한다.이를 위해 Superset API를 호출하는 방법을 알아보자. Swagger UI 접근Superset은 OpenAPI 사양을 따르며, API 문서는 Swagger를 사용해 자동으로 생성하고 있다.Swagger UI는 Superset URL에 /swagger/v1를 붙여서 접근할 수 있다.http://example.superset.com/swagger/v1 인증API 요청을 하기 위해서는 인증 작업이 필요하다. API 요청을 위한 token은 api/v1/..

Apache Superset 2025.05.08

[k8s] 중단과 PodDisruptionBudget

개요최근 오랜만에 쿠버네티스 관련 작업을 담당하게 되었는데, pdb라는 리소스를 새로 알게 되었다. 확인해보니 가용성, pod 중단 등과 관련이 있는 개념인 것 같다. 관련해서 알아두는 게 좋을 것 같아 정리해둔다. 중단Pod는 사람 또는 컨트롤러가 파괴하거나 불가피한 하드웨어/시스템 소프트웨어 오류가 발생한 경우가 아니라면 사라지지 않는다. 이 때 사람 또는 컨트롤러가 파괴한 경우를 자발적 중단이라고 하고, 오류로 인한 불가피한 중단을 비자발적 중단이라고 한다.각 중단이 발생할 수 있는 상황의 예시는 다음과 같다.자발적 중단비자발적 중단Deployment 제거물리 머신 하드웨어 오류다른 Pod를 관리하는 컨트롤러 제거클러스터 관리자 실수에 의한 VM 삭제Deployment 템플릿 업데이트클라우드 공..

Kubernetes 2025.05.07

[Algorithm] 이차원 배열 나선 순회

개요최근 이차원 배열을 나선 순환하는 알고리즘 문제를 풀었다. 방법은 알았는데, 그걸 실제로 구현하는 것에서 약간 어려움이 있었어서 적절한 구현 방법을 정리해두려고 한다. 이 글에서 구현하고자 하는 것은 n 행, m 열로 이루어진 이차원 배열을 나선 순회하는 코드이다. 출발 시 이동 방향은 오른쪽이다. 방법아이디어는 다음과 같다.각 방향 별 끝 갑을 초기화한다.끝에 다다랐을 때 끝 값을 갱신한다.구현해 보자. 1. 배열 및 끝 값 초기화# n행 m열 배열 초기화spiral_list = [[0 for _ in range(m)] for _ in range(n)]# 방향 별 끝 값lp_left_side = 0lp_right_side = m - 1lp_up_side = 1 # i == 0 부터 순회 하므로..

Algorithm 2025.05.02
1 2