전체 글 1332

[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

[Pandas] itertuples - 컬럼 접근 방법(?)

개요Pandas에서 DataFrame.itertuples을 사용하면 DataFrame의 각 행을 namedtuples 형식으로 반환한다.이번 글에서는 이 namedtuples을 사용해 컬럼에 접근하는 예시를 하나 적어두려고 한다. + 다른 사람이 작성한 코드에서 봤는데, 낯선 방법이라 적어둔다. 방법itertuples 함수 결과로 변환된 row는 Pandas 객체이다. 이 부분은 namedtuples의 type을 확인해보면 알 수 있다.import pandas as pddata = {'col1':[1,2],'col2':[3,4]}idx = ['row1','row2']df = pd.DataFrame(data = data, index=idx)for row in df.itertuples(): print..

[Python] aiosqlite - sqlite 비동기 프로그래밍

개요2025.04.12-[Python] sqlite3 - SQLite 사용하기에서 Python으로 sqlite를 다루는 방법을 정리했었다. 추가로 sqlite를 비동기로 다룰 일이 생겨서 아래와 같이 코드를 짜봤는데,import sqlite3import asyncioasync def main(): sql = 'SELECT * FROM stocks WHERE symbol=:symbol' condition = {'symbol': 'RHAT'} async with sqlite3.connect('example.db') as con: cur = await con.cursor() await cur.execute(sql, condition) data = await..

Python 2025.04.29

[Helm] Chart와 values.yaml 결합 결과 확인

개요최근 쿠버네티스 환경을 다루면서 Helm으로 설치한 서비스를 재배포하는 등의 작업을 수행하게 됐다. 하지만 재배포 이후에도 수정한 설정값으로 리소스가 생성되지 않은 것 같아서 배포에 사용한 values.yaml과 Chart가 결합된 release 정보를 확인하고 싶다.방법을 알아보자. 릴리즈 정보 확인이미 배포한 릴리즈의 정보는 get manifest 명령어로 확인할 수 있다.매니페스트란 차트에서 생성된 쿠버네티스 리소스를 yaml 형식으로 표현한 것이다. helm get manifest RELEASE_NAME# 예시helm get manifest superset Chart + value.yaml 확인로컬 환경에서 Chart를 렌더링 하고 그 결과를 표시한다. 사용할 values.yaml을 지정하..

Kubernetes 2025.04.28

[Python] sqlite3 - SQLite 사용하기

개요이전에 2023.01.08-[SQLite] 설치 및 사용에서 간단한 파일 데이터베이스인 SQLite를 설치하고 실행해 보았다. 당시에는 CLI를 활용하여 SQLite를 다뤘는데, 이번에는 Python으로 SQLite를 다뤄보려고 한다.방법을 알아보자. sqlite3SQLite 데이터베이스용 라이브러리인 sqlite3는 Python 기본 내장 라이브러리로 별도로 설치하지 않고 바로 import 하여 사용할 수 있다.import sqlite3 데이터베이스 연결connect 함수를 사용하여 데이터베이스 연결을 생성한다. 기본적으로 connect 함수로 전달한 값이 파일 DB의 경로가 된다.import sqlite3con = sqlite3.connect('example.db')아무 테이블도 생성하지 않..

Python 2025.04.25

[Helm] Jenkins - coalesce.go:220: warning: cannot overwrite table with non table for

현상AWS EKS의 NodeGroup LT 업데이트로 인해 노드 재시작이 발생했는데, Jenkins 서비스가 시작하던 중 플러그인 버전 충돌이 발생해 Jenkins 버전 업그레이드를 진행하려고 한다.Jenkins Helm Chart(https://charts.jenkins.io)의 4.6.1 버전에서 5.1.0 버전으로 업그레이드를 진행하려고 했는데…… helm upgrade 중 아래와 같이 오류가 발생하면서 업그레이드가 되지 않았다.원인을 확인하고 문제를 해결해 보자. 원인확인해 보니 Chart Templete과 매핑하고자 하는 values.yaml의 데이터 형식 등이 맞지 않을 때, 매핑되지 않는 값을 전달하거나 list를 전달해야 하는데 dictionmary를 전달하는 등의 상황일 때 발생하는 ..

[Helm] jenkins - 플러그인 버전 충돌 디버깅하기

현상AWS EKS 환경에서 Jenkins를 Helm으로 설치해서 동작시키고 있는데, 서비스가 종료되었다가 재시작하면서 동작을 안 하고 있는 상태이다.대체로 단순 서비스 재시작 시 Jenkins가 정상적으로 올라오지 않는 상황은 Jenkins 버전과 플러그인 버전 충돌이 원인일 수 있다.관련해서 확인하고 해결할 수 있는 부분을 적어둔다. 참고로 구성은 다음과 같다.쿠버네티스 클러스터 / 버전 : AWS EKS / kubernetes 1.27.6Helm Chartrepository : https://charts.jenkins.iochart version : 4.6.1app version : 2.414.1 describe플러그인 버전 충돌이 발생하면 대체로 플러그인 설치가 진행되는 initContainer..