Archives
All the articles I've archived.
터미널에서 노트하고 블로그까지 — 내 글쓰기 워크플로우
Obsidian 볼트를 단일 소스로, 터미널 별칭으로 캡처하고 gpub 한 방으로 발행하는 흐름
사내 DB 운영 포털을 만들며 — 기능과 설계
콘솔·스크립트·수작업에 흩어진 DBA 업무를 한 곳으로. 스키마 탐색부터 승인 워크플로우·알림·멀티계정 관리까지 만들며 정리한 것들
실무에서 부딪히는 MySQL 잠금(Lock) 정리
레코드/갭/넥스트키 락부터 메타데이터 락, GET_LOCK, AUTO_INC 락까지 — 흩어진 노트를 한 편으로
블로그를 시작하며
nvim + Obsidian 노트를 Astro로 발행하는 psql 콘솔 블로그
이 블로그를 만든 방법 — Astro + Cloudflare Pages
Obsidian 볼트의 글을 골라 Astro로 빌드하고 Cloudflare Pages에 무료로 배포하기
MariaDB MaxScale 운영 정리 — 자동 failover와 읽기/쓰기 분리
mariadbmon 자동 failover, readwritesplit, maxctrl 운영 명령, 그리고 클라이언트 IP 보존(proxy protocol)까지
MariaDB/MySQL 백업·복구 실전 정리 — mariabackup와 mysqldump
mariabackup 물리 백업 전체 흐름, mysqldump 핵심 옵션(OOM 회피), 덤프에서 특정 테이블만 추출, 복구 후 복제 연결까지
MySQL 모니터링 스택 구축 — Prometheus/exporter와 PMM
pull vs push 개념부터 node/mysqld exporter + Prometheus + Grafana, Percona PMM, 그리고 꼭 봐야 할 지표까지
AI로 데이터베이스에 안전하게 접근하기
LLM·MCP로 DB를 다룰 때 지켜야 할 원칙 — 최소 권한, 읽기 전용, PII 마스킹, 쿼리 가드레일, 감사
just로 DBA 반복 작업 자동화하기
justfile로 mysqlsh 덤프·유저/grants 백업 같은 반복 작업을 파라미터화해 팀 표준으로
테스트 데이터 생성과 PII 마스킹 전략
운영 데이터를 그대로 복사하지 않고, 참조 무결성과 포맷을 지키면서 안전한 비운영 데이터셋 만들기
DynamoDB 보안 점검 체크리스트
암호화, IAM 최소 권한, 네트워크, 백업/삭제 방지, 감사까지 — DynamoDB를 운영에 올리기 전 확인할 것들
Office Script로 엑셀 리포트 자동화하기
연결된 데이터 소스 새로고침부터 가공·정리까지, Office Script + Power Automate로 반복 리포팅 없애기
개발자를 위한 스키마 탐색 UX — ERD를 넘어서
정적 ERD는 왜 잘 안 쓰이나. 검색·컨텍스트 중심의 스키마 탐색 도구를 설계하며 정리한 원칙
Dynamo 논문 읽고 정리 — 항상 쓸 수 있는 키-값 저장소
Amazon Dynamo(2007) 논문의 핵심 — 일관된 해싱, 벡터 클록, 정족수(N/R/W), hinted handoff, Merkle 트리, 가십
NoSQL Workbench로 DynamoDB 데이터 모델링하기
AWS 공식 무료 GUI로 DynamoDB 테이블 설계·쿼리 시각화·샘플 데이터까지
DB 접근 거버넌스 — 상용 솔루션 vs 자체 구축
DB 접근 제어에 필요한 것들(SSO·최소권한·감사·마스킹·승인)과, 상용 도입과 자체 구축 사이의 트레이드오프
Neovim을 노트 작성 도구로 쓰기
obsidian.nvim + render-markdown + 터미널 캡처로 만든 마크다운 노트 워크플로우
MySQL 쿼리를 Redshift로 옮길 때 걸리는 것들
MySQL에 익숙한 사람이 Redshift(PostgreSQL 계열)로 넘어갈 때 자주 막히는 지점 정리
CSV를 Parquet으로 한 방에 (duckdb)
duckdb 한 줄로 CSV를 Parquet으로 변환하는 작은 셸 스크립트
MySQL Online DDL 정리
MySQL을 운영하다 보면 결국 ALTER TABLE 을 해야 하는 순간이 온다. 컬럼을 추가하거나, 인덱스를 만들거나, 컬럼 타입을 바꾸거나, PK를 바꿔야 할 때가 있다. 문제는 DDL은 자주 하지 않지만 한…
Aurora MySQL Architecture를 다시 정리해보기
Aurora MySQL을 쓰다 보면 겉으로는 MySQL처럼 보이는데, 운영 관점에서는 일반 MySQL과 다른 지점이 꽤 많다. 처음에는 “MySQL 호환 managed database” 정도로 생각하기 쉽다.…
DynamoDB로 AI Chat 이력 모델링하기
DynamoDB로 콜센터 상담 이력이 저장되고 있었지만, 내가 입사하기 전에 이미 구축된 영역이라 직접 만질 기회가 많지는 않았다. RDBMS처럼 매일 slow query를 보고 index를 조정하는 식의…
airflow.cfg에서 나중에 다시 보게 되는 옵션들
Airflow를 설치형으로 쓰면 결국 airflow.cfg 를 다시 열어보게 된다. 처음 설치할 때는 기본값으로도 잘 떠서 넘어가게 되는데, API를 호출하거나 task를 병렬로 돌리거나 metadata…
AWS DMS 테스트하면서 실제로 막혔던 지점들
AWS DMS를 테스트하면서 생각보다 여러 지점에서 막혔다. 처음에는 source와 target endpoint를 만들고, replication instance를 하나 띄운 다음, migration task만 잘…
MySQL Collation
MySQL에서 character set은 이제 utf8mb4 를 사용하는 것이 거의 기본처럼 되었다. 문제는 character set만 맞췄다고 끝나는 게 아니라는 점이다. 운영하다 보면 실제로는 collation…
Karabiner에서 kanata로 전환하기
Karabiner-Elements를 걷어내고 kanata로 완전히 옮기기 — 제거·설치·launchd 자동실행과 자동 업데이트로 인한 재발 트러블슈팅까지
Mac 초기 세팅 flow
1. chezmoi init javascript chezmoi init https://github.com/ggiho/dotfiles.git chezmoi update v chezmoi installed,…
MongoDB.local 2025
처음으로 MongoDB conference에 참여하게 되었다. 나같은 몽린이에게 MongoDB와 더 친숙해지는 시간이었다. 가장 기억에 남는 부분은 hybrid search와 8.0 feature 였다.
Aurora DSQL
제약사항 FK 사용 불가능 pg extension 사용 불가능 trigger, procedure 사용 불가능 user별 password 생성이 아닌 토큰으로 인증(영구 패스워드 불가능) Conclusion
PyCon Korea 2025 후기
PyCon Korea 오프라인 행사에 처음으로 참여했다. 개인적으로 참여하려면 티켓을 6만원에 구매해야 하지만 후원사 티켓을 받아서 다녀올 수 있었다. 한 가지 깨달은 점은 커뮤니티 후원사로 참여하면 저렴하게…
MySQL adaptive hash index
몇년 전 MySQL 8.0 버전을 스터디할 때 Adaptive hash index(AHI)에 대한 주제로 토론을 했던 적이 있다. 당시에는 8.0 버전뿐 아니라 MySQL에 대한 이해도가 전반적으로 떨어졌을 때라서…
Aurora 3.10 (MySQL 8.0.42) jmalloc
2025년 7월 30일부터 모든 리전에서 Aurora MySQL 3.10 버전으로 업그레이드 가능하다. 3.10 버전에서는 최대 스토리지 용량이 128TiB에서 256TiB로 증가한다. 또한 인 메모리 릴레이 로그…
Schema Diff Pro
기존에 사용하던 데이터베이스 스키마 비교 도구를 claude와 함께 개선하며 pro라는 이름을 덧붙여서 Schema Diff Pro 라는 거창한 이름으로 탄생하게 되었다. 최초에 만들었던 목적은 여러 환경의 스키마…
CAP 이론 — 파티션이 나면 뭘 포기할 것인가
CAP을 외우는 대신 "네트워크가 끊겼을 때 내 시스템이 뭘 하는가"로 이해한 정리. CP/AP, CA의 함정, PACELC까지
How to compile C & C++ in Mac OS
Mac에는 기본적으로 gcc(clang)가 설치되어 있다. shell gcc version Apple clang version 15.0.0 (clang 1500.1.0.2.5) Target: arm64 apple…
RDS start export task
스냅샷 생성 aws rds create db cluster snapshot \ db cluster snapshot identifier dev cluster snapshot 2024 09 24 \ db cluster…
Airflow Tutorial
이미 안 쓰이는 곳이 없을 정도로 유명한 Apache top level 오픈소스이기 때문에 설명은 생략해도 될 것 같다. 이전 회사에서 cron을 airflow로 변경했던 적이 있었는데 시간이 꽤나 지나서 기억이…
DuckDB
요즘 핫하다는 나만 모르던 DuckDB를 사용해 봤다. tip DuckDB는 SQLite의 직관성 및 접근성과 전문 열 데이터베이스의 고성능 기능을 조화롭게 결합한 데이터베이스입니다 Install shell…
MySQL 5.7 Orphan table
Aurora 3 업그레이드 중 좀비 테이블 조치 회고 MySQL upgrade precheck log에서 에러가 발생했다. (/notion/mysql 5 7 orphan table/img 1.png) MySQL…
Dolphie for MySQL monitoring
Dolphie Dolphie is real time monitoring tool for MySQL. install shell pip pip install dolphie brew brew install dolphie…
minikube + podman
mongodb replica set을 테스트하기 위해서 docker compose를 이용해서 3개의 mongodb 인스턴스를 만들었다. 회사 pc에서도 테스트를 하기 위해서 동일한 과정을 진행했는데 무의식적으로…
Retrieval of the RSA public key is not enabled for insecure connections
(/notion/mysql rsa public key error/img 1.png) MySQL: Retrieval of the RSA public key is not enabled for insecure…
MySQL 계정 정보 모를 때
/ Introduction 쓸 일이 잘 없는 것 같다가도 종종 사용할 일이 생기곤 한다. sql stop mysqld systemctl stop mysqld mysqld safe replacement…
UUID
(/notion/mysql uuid/img 1.png) sql select CHARGE ORDER ID,uuid(), replace(uuid(),' ',''),unhex(replace(uuid(),' ','')),…
[MySQL 성능 최적화] 02. 신뢰성 엔지니어링 환경에서의 모니터링
시작하며 스터디의 교재는 Real MySQL을 사용하지만 책을 한 권만 읽은 사람이 제일 무섭다는 말이 있듯이 다른 책도 읽을 필요성을 느껴서 O’relly의 High Performance MySQL 4th를…
MySQL replication 동작 원리
슬레이브에서 어떤 빈로그 포지션을 보고 데이터를 동기화 해야 하는가에 대한 질문에 대해서 ???? xtrabackup info에서 binlog position으로 동기화 하는거 아닌가라고 했었는데 스터디 멤버에게…
SQL Server 트랜잭션 격리수준
시작하며 SQL Server에서는 오라클과 마찬가지로 default isolation level이 Read Committed 로 설정 되어 있다. 그리고 ANSI 표준과는 다른 격리 수준을 제공하는데 같이…
SQL Sever(mssql) 시작하기
SQL Sever를 설치하고 사용해보자 (/notion/sql server getting started/img 1.png) CentOS 8 SQL Server 2022 Install 설치 가이드를 참고해서…
데이터 파일로 내보내기
shell SELECT FROM table WHERE condition INTO OUTFILE '/tmp/filename.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES…
MySQL 시스템 변수 정리 — 연결·버퍼·InnoDB 핵심
자주 만지는 MySQL 시스템 변수를 연결·스레드·세션 버퍼·InnoDB 메모리·내구성으로 묶어 정리
MySQL 백업 복구 정리
시작하며 MySQL(MariaDB)에서 많이 쓰이는 backup 도구는 mysqldump와 xtrabackup(mariabackup)이 있다. 간단한 사용 방식들을 정리해 본다. mysqldump MySQL을…
selenium 크롤링 팁 몇 가지
Overview 웹페이지 마다 구성이 다르기 때문에 크롤링을 하다가 간혹 브레이크가 걸릴 때가 있습니다. 몇 가지 사항에 대해서 해결 방법을 공유하려고 합니다. selenium: 3.141.0 버전 정보는 pip…
이기종 디비 링크 기능 파이썬으로 구현하기
시작하며 oracle to mariadb 전환 프로젝트를 하면서 기존에 oracle 끼리 db link를 통한 데이터 공유를 사용할 수 없게 되었습니다. db link도 이기종 데이터베이스 간의 연결을 지원하지만…
using rowid filter
시작하며 실행계획을 확인하다가 extra 컬럼에 처음 보는 문구가 있어서 조사해 봤습니다. MySQL에는 존재하지 않고 MariaDB 단독으로 쓰이는 조건인 것 같습니다. (/notion/rowid…
MySQL Monitoring
시작하며 PMM tip Alerting Contact points + New contact point Integration 항목을 Slack으로 선택 Webhook URL 입력 후 Test…
JSON column type
Overview MySQL 5.7.8 버전부터 JSON 컬럼 타입을 지원하기 시작했다. 사용할 기회가 없었는데 마침 기회가 생겨서 정리해 본다. sql insert into json test set class…
MySQL 인덱스 스캔 과정 — B-Tree 탐색부터 커버링 인덱스까지
MySQL 엔진과 InnoDB가 인덱스를 타고 데이터를 찾는 흐름, EXPLAIN 접근 타입, 커버링 인덱스까지 정리