전체 글 1331

[PostgreSQL] MVCC - XMIN/XMAX

개요MVCC는 예전에 회사에서 데이터베이스 관련 교육을 할 때 접했던 개념이었는데, 최근 PostgreSQL 쿼리에서 관련 키워드를 보게 되어 다시 들쳐보게 되었다. PostgreSQL의 주요 동작 방식과 연관이 있으니 잘 정리해 보자. MVCCMVCC란 다중 버전 동시서 제어(Multi Version Concurrency Control)의 줄임말로, 과거부터 현재까지의 다양하 버전 데이터에 대한 관리와 제공이 가능하지를 나타내는 DBMS의 필수 기능 중 하나이다. 시시각각 변경되고 있는 데이터 중에서 사용자가 데이터를 조회한 시점의 데이터를 정확하게 제공하는지를 나타내는 것으로, DBMS 마다 다르게 구현하고 있다. PostgreSQL - MVCC 구현과 XMAX/XMINPostgreSQL은 아래와..

Database 2025.09.05

[Kafka] 설치 및 실행

개요2025.08.21-[Apache Kafka] 개념에서 아주 간단하게 kafka에 대해서 알아보았는데, 한 마디로 정리하면 이벤트 기반 아키텍처를 구성하기 위한 도구 중 하나라고 보인다. 저번 글에서는 개요 정도만 확인했으니 이번 글에서는 공식 페이지의 QuickStart 문서를 참고해서 간단하게 설치하고 사용해보자. 설치kafka는 여러 가지 설치 방법을 제공하고 있는데, 가장 기본적으로는 릴리즈 파일을 다운로드하는 방식이다. 하지만 자바를 설치하기가 번거롭고 테스트 환경이기 때문에 간단하게 도커로 진행하고자 한다. 참고로 실행 환경은 Killercoda Ubuntu 24.04이다. 도커를 활용하기 때문에 이미지를 pull 받는 것으로 설치는 완료되었다고 할 수 있다.docker pull apac..

기타 2025.09.04

[PostgreSQL] INSERT ~ ON CONFLICT (UPSERT)

개요이 블로그에서 UPSERT에 대해서 적게나마 다뤘는데, PostgreSQL도 MySQL처럼 UPSERT를 지원한다. 다만 문법에 조금 차이가 있는데, 이번 글에서는 PostgreSQL에서 UPSERT를 수행하는 방법을 적어둔다. INSERT ~ ON CONFLICTON CONFLICT 절은 UNIQUE 또는 EXCLUSION 제약 위배를 해소하기 위한 대체 동작을 지정한다.INSERT INTO table_name (column1, column2, ...)VALUES (value1, value2, ...)ON CONFLICT (conflict_target)conflict_actionINSERT 하는 행에 대해 conflict_target에 지정한 제약 조건이나 인덱스가 위배되었을 때 conflict_..

Database 2025.09.03

[Apache Kafka] 개념

개요업무 중 Apache Kafka를 사용하게 되어 Kafka란 대체 무엇인지 정리해 본다. 이벤트 스트리밍Kafka를 논하기 전에 먼저 이벤트 스트리밍에 대해서 적어둔다. 데이터베이스, 센서, 모바일 기기, 클라우드 서비스, 소프트웨어 애플리케이션과 같은 이벤트 소스에서 실시간으로 데이터를 이벤트 스트림 형태로 수집하고, 수집한 이벤트 스트립을 검색할 수 있도록 저장하며, 실시간 및 소급적으로 조작, 처리 및 대응하고, 필요에 따라 다양한 목적지 기술로 라우팅 하는 방식을 말한다.데이터의 지속적인 흐름과 해석을 보장하며 적절한 정보가 직절한 시간과 장소에 제공되도록 한다. 이벤트 스트리밍은 아래와 같이 다양한 분야에서 사용되고 있다.- 증권 거래소, 은행, 보험 등에서의 실시간 결제 및 금융 거래 처..

기타 2025.09.02

[Python] psycopg2 - PostgreSQL 실행 SQL 출력

개요여러 데이터베이스 엔진과 연동하는 라이브러리는 대체로 여러 매개변수를 매핑할 수 있게 하는 placeholder를 지원한다. 이는 쿼리를 반복해서 실행할 때 유용하지만 실제 실행되는 쿼리를 한눈에 확인할 수 없다는 불편함이 있는데, 알아보니 execute 함수로 실행되는 SQL문을 확인할 수 있는 방법이 있다고 해서 적어둔다. psycopg2.cursor.mogrifymogrify 함수는 값을 자리대체자에 바인딩하여 SQL 쿼리 문자열을 포매팅하는 방법으로, 이는 cursor.execute 또는 유사한 메서드가 데이터베이스로 전송하는 문자열과 일치한다. 반환 문자열은 항상 바이트 문자열이다. 사용 예시import psycopg2sql = f"""\SELECT *FROM employeesWHERE S..

Python 2025.09.01

[PostgreSQL] RETURNING - 변경된 데이터 반환

개요업무에서 PostgreSQL을 사용하게 되었는데, 쿼리문에서 RETURNING이라는 모르는 키워드를 확인해서 글을 작성한다. RETURNINGPostgreSQL의 RETURNING 절은 INSERT, UPDATE, DELETE와 같은 연산을 실행한 후 데이터를 가져올 수 있도록 한다. RETURNING을 사용하면 수정된 데이터를 수집하기 위해 추가적인 쿼리를 수행할 필요가 없고, 수정된 행을 안정적으로 식별할 수 있다. 때문에 성능 최적화, 코드 정리, 효율적인 데이터베이스 상호작용을 달성할 수 있다.일반적으로는 대상 테이블의 모든 열을 순서대로 선택하는 RETURINTG *을 사용한다.INSERT INTO users (firstname, lastname) VALUES ('Joe', 'Cool'..

Database 2025.08.29

[Airflow] Connections이란

개요새로운 Airflow 환경을 사용하게 되었는데, 이번 환경에서는 Connections라는 기능을 사용하고 있어 어떤 기능인지 정리해보려고 한다. ConnectionsAirflow는 다른 시스템과 통신하기 위한 자격 증명 등을 저장하는 Connections라는 개념을 사용한다. 다른 시스템에서 데이터를 가져오거나 내보내기 위해 사용하며, 기본적으로 사용자 이름, 비밀번호, 호스트, 연결 시스템 유형, conn_id 등의 속성으로 구성되어 있다.Connection은 Web UI 또는 CLI를 통해 관리할 수 있고, Hooks나 jinja templetes을 통해 사용할 수 있다. Connections 생성이번 글에서는 Web UI를 통해 신규 Connection을 생성해본다. 연결할 시스템은 Post..

Apache Airflow 2025.08.25

[AWS] EventBridge 란

개요블로그 내에서 AWS EventBridge를 사용해 S3와 SQS를 연동하는 방법 자체는 다뤘는데, 정작 EventBridge가 어떤 서비스인지에 대해서는 다루지 못했다. 때문에 이번 글에서 AWS EventBridge와 관련 개념에 대해서 정리한다. AWS EventBridge이벤트를 사용해 애플리케이션 구성 요소를 연결하는 서버리스 서비스이벤트를 내보내고 응답함으로써 함께 동작하는, 느슨하게 결합된 소프트웨어 시스템인 이벤트 기반 아키텍쳐를 구축하는 데 사용한다. 이벤트가 발생할 때마다 또는 스케줄 설정에 따라 작업을 수행한다. 전송 방식EventBridge는 크게 이벤트 버스와 파이프라인 전송 방법을 사용한다. 이벤트 버스이벤트를 수신해 0개 이상의 대상에 전달하는 라우터자체 개발 애플리케..

AWS 2025.08.19

[AWS] S3에 EventBridge/Event Notification 중복 구성

개요이 블로그에서 S3와 SQS를 연동하는 방법으로 S3의 Event Notification을 사용하는 방법과 AWS EventBridge를 사용하는 방법을 다뤄보았다. S3 Event Notification의 제한 사항으로 인해 연동 방식을 EventBridge로 변경하고자 하는데, S3에 두 연동 방법을 동시에 사용할 수 있는지 확인해 본다. SQS 액세스 정책 변경기존에 EventBridge 연동 테스트를 위해 생성했던 SQS의 액세스 정책은 아래와 같은 기본값이었다.{ "Version": "2012-10-17", "Id": "__default_policy_ID", "Statement": [ { "Sid": "__owner_statement", "Effect": "Al..

AWS 2025.08.13

[k8s] Helm Release 원복 현상

개요이전에 EKS 버전 업그레이드를 수행하면서 보안 이슈가 존재하던 nginx-ingress-controller 버전 업그레이드도 함께 진행했다. nginx-ingress-controller는 helm으로 설치를 했는데, 최근 확인해 보니 버전이 업그레이드 이전으로 돌아가있었다. 버전을 업그레이드하면 기존 버전으로 재배포가 이뤄지고 심지어는 Helm Release를 삭제해도 기존 버전으로 자동 배포가 이뤄지고 있었다. 원인을 파악하고 해결한 이력을 적어둔다. 원인 - HelmRelease 리소스 존재쿠버네티스 이벤트를 확인해보니 아래와 같은 이력이 존재하는 것을 확인했다.Normal ReleaseSynced helmrelease/nginx-ingress managed release 'nginx-..