전체 글 270

NGINX ingress controller 생성 실패 시 전부 삭제하기

Kubernetes 가지고 놀다 보면 nginx를 서비스나 ingress로 자주 사용하게 되는데, 이 ingress-nginx 관련 pod나 서비스를 모두 삭제해야 하는 경우가 발생할 때가 있다.이런 상황에서 그냥 편하게 긁어다 실행시키기 위해 (까먹기 전에 관련 커멘드를 기록해 놓기) 간단히 작성해본다.kubectl delete namespace ingress-nginxkubectl delete serviceaccount ingress-nginxkubectl delete configmap ingress-nginx-controllerkubectl delete clusterrole ingress-nginxkubectl delete clusterrolebinding ingress-nginxkubectl de..

벡터 검색 알고리즘 살펴보기 - HNSW, SPANN

Introduction어떤 벡터 q가 들어왔을 때, 현재 데이터베이스가 가지고 있는 벡터들 중 가장 가까운 벡터 k개를 반환하는 알고리즘들을 K-NN(K-nearest neighbor search)이라고 한다. 가장 가까운 벡터 k개를 반환하려면 q와 모든 벡터의 거리를 계산해야 하기 때문에 K-NN 알고리즘은 시간이 오래 걸리는 단점이 있다.그래서 널리 사용되는 벡터 검색 알고리즘은 ANN(approximate nearest neighbor search)이다. ANN은 가장 가까운 벡터 k개를 반환하는 것은 보장하지 못하지만 최대한 반환하려고 노력하는 알고리즘이다. ANN의 정확도는 반환한 k개 중 정말 가장 가까운 벡터들은 몇 개 들어있는지(recall)로 평가할 수 있다.벡터 검색 알고리즘은 메모리..

DB/Vector DB 2025.05.01

NASA의 소프트웨어 개발 10가지 규칙

NASA의 소프트웨어 개발 10가지 규칙원문NASA의 10가지 소프트웨어 개발 규칙에 대한 비판적 분석이 규칙들은 극도로 중요한 임베디드 시스템(예: 우주선 소프트웨어)을 위한 것하지만 이러한 규칙이 다른 개발 환경에서도 적절한지, 또는 다른 언어(C가 아닌 언어)에서도 적용 가능한지에 대해 논의가 필요함기본적으로 '하드웨어적 에러'가 흔하게 벌어질 수 있는 '우주'라는 환경에서도 안정적으로 동작하는 시스템을 개발하기 위한 방법론이라는 점을 기억에 두어야 할 것이며, 이러한 규칙들이 일반적인 개발팀에서는 어떤 비판을 받을 수 있는지를 생각해볼 수 있다.1. 단순한 제어 흐름 유지 (goto, setjmp/longjmp, 재귀 금지)이 규칙은 예외 처리(setjmp()/longjmp())와 재귀를 금지함...

IoT 2025.04.30

Postgres 메모리 설정을 최대한 활용하는 방법

Postgres 메모리 설정을 최대한 활용하는 방법Postgres 데이터베이스는 많은 양의 RAM을 사용함. 결과 집합을 만들 때 인덱스 매칭, 테이블에서 관련 행 검색, 튜플 병합/필터링/집계/정렬 등의 단계를 거치며, 이 모든 단계에서 메모리에 의존Postgres의 메모리 사용량을 최적화하기 위해서는 사용 가능한 RAM을 최대한 활용하면서도, 다양한 유형의 메모리 할당을 효율적으로 조정하고, OS가 과도한 메모리 사용으로 프로세스를 종료시키는 것을 방지해야 함Sharing is CaringPostgres와 관련된 RAM의 가장 큰 부분은 shared_buffers라고 불리며, 가장 자주 검색되는 모든 테이블과 인덱스의 행을 나타냄. 사용 빈도에 따라 점수를 매기는 휴리스틱에 의해 지원됨shared_b..

DB/PostgreSQL 2025.04.27

쿠버네티스의 CoreDNS

DNS란?DNS는 Domain Name System의 약자이다. DNS는 사람이 쉽게 해석할 수 있는 도메인명(ex, www.bluewhale.com)을 IP 주소(179.10.2.10)로 변환하는 기능을 의미한다. DNS는 /etc/hosts 파일에 저장된 도메인-IP 맵핑 정보를 읽거나, 이를 갖고 있는 네임 서버와의 통신을 통해 이루어진다.DNS in LinuxLinux 환경에서 DNS를 사용하는 방법은 크게 2가지가 있다./etc/hosts/etc/hosts 파일은 컴퓨터가 도메인명으로 IP를 찾을 때 가장 먼저 열어보는 파일이다. 윈도우에서는 C:\Windows\System32\drivers\etc\hosts 경로에 파일이 위치한다.파일을 열어보면 아래와 같이 localhost가 이미 추가되어 ..

Spegel: 클러스터 로컬 OCI 레지스트리 미러

쿠버네티스 클러스터에 20개의 파드 복제본이 있는 StatefulSet이 있다고 가정해 보자.파드의 컨테이너에 사용되는 이미지가 상당히 큰 경우, 워커 노드에서 이미지를 가져오는 데 시간이 걸린다.따라서 StatefulSet의 모든 파드가 하나씩 실행되는 데 많은 시간이 걸립니다. 다른 시나리오에서는 워커 노드 중 하나가 비정상 상태가 되어 그 노드에서 실행 중인 파드가 퇴거되었다고 가정해 보자.따라서 다른 노드에서 파드가 다시 스케줄되지만, 인터넷을 통해 컨테이너 레지스트리에서 이미지를 다시 가져와야 하므로 중단 시간이 길어지게 된다. 이 때 Spegel이 도움이 된다.Spegel은 상태 비저장 클러스터 로컬 OCI 레지스트리 미러이다.Spegel은 쿠버네티스 클러스터의 각 노드가 로컬 레지스트리 미러..

Python의 새로운 `t-strings`

t-문자열(t-strings) 은 Python 3.14에서 새롭게 도입될 안전하고 유연한 문자열 처리 기능임기존 f-string과 달리, t-string은 문자열이 아닌 Template 객체로 반환되어 자동 출력 없이 안전한 처리 가능t-string은 HTML, SQL 등 동적 입력을 안전하게 이스케이프할 수 있는 구조를 갖고 있음JavaScript의 **태그 템플릿(tagged templates)**과 유사한 개념으로, 다양한 변환 및 처리 확장이 가능함Python 개발 도구 생태계가 이 기능을 잘 지원한다면, 웹/보안 중심의 문자열 처리 방식에 큰 변화를 줄 수 있음Python의 새 기능: t-문자열(Template Strings)Python 3.14부터 t"..." 문법으로 사용하는 Template..

Python 2025.04.22

PostgreSQL hstore 타입이란?

1. hstore 타입의 내부 저장 구조PostgreSQL의 hstore 타입은 Key-Value 쌍을 저장하는 자료형이다.내부적으로는 바이너리 형태로 저장되게 된다.초기 입력은 문자열 형태로 입력되지만, 실제 데이터는 바이너리로 압축하여 저장됨각 Key-Value 쌍은 내부적으로 바이너리로 인코딩되며, 데이터 접근 시 이를 파싱하여 처리한다.따라서 일반적으로 저장공간 효율성이 뛰어난 편이며, JSON 타입과 비교할 때 좀 더 간결하게 저장될 수 있다. 2. hstore 타입의 인덱스 사용법PostgreSQL의 hstore는 다음과 같은 인덱스들을 지원한다.(1) GIN 인덱스가장 자주 쓰이며 권장되는 방법이다hstore 필드에서 특정 key의 존재 여부나 특정 key-value 쌍이 존재하는지(@> 연..

DB/PostgreSQL 2025.04.22

PostgreSQL에서 BloomFilter 사용하기

1. PostgreSQL에서 Bloom Filter란?PostgreSQL에서 제공하는 bloom 확장(extension)은 여러 컬럼을 조합한 검색에서 효율적인 검색을 돕기 위해 블룸 필터 방식을 이용하는 비트맵 기반의 확률적 인덱스이다.기본적으로 Index Access Method를 통해 bloom filter를 인덱스로서 add-on하는 것이다.장점: 여러 컬럼을 조합한 쿼리에 대해 공간을 절약하면서 빠른 검색 속도를 지원한다.단점: False Positive(거짓 긍정, 존재하지 않는 데이터가 있다고 판단하는 오류)가 발생할 수 있다.일반적으로 정확한 결과를 얻으려면 블룸필터 인덱스를 통해 후보를 좁힌 후, 최종적으로 일반적인 방법으로 필터링을 수행한다. 2. Bloom Extension 설치하기기..

DB/PostgreSQL 2025.04.22

Transpose 뒤에 contiguous()를 사용하는 이유

파이토치 코드를 보면 transpose()를 호출하고 바로 contiguous()를 호출하는 경우가 종종 목격된다.그 이유는 transpose()가 실제로는 스토리지 내의 데이터의 배열을 바꾸지 않고 stride만 바꾸기 때문이다. PyTorch Storage가 뭔가?텐서란 쉽게 말해 N차원 행렬이다.이 고차원의 데이터는 Storage API를 통해서 메모리 상에 연속적으로 배치되게 된다.파이썬 리스트의 경우, 배열 내의 항목들이 불연속적으로 할당되어 있으며, 이를 포인터만 가지고 PyObject를 통해 관리하는 방식으로 접근되게 된다.그러나 딥러닝에서는 GPU 등의 가속기를 사용하게 되며, 이러한 가속기들은 사용하는 텐서를 메모리 상에 연속적으로 배치하기 때문에 이를 위해 PyTorch 등의 딥러닝 라..

AI/PyTorch 2025.04.19