PostgreSQL 해시 파티셔닝 20배 속도 향상: 카탈로그 조회 회피

2025-08-27
PostgreSQL 해시 파티셔닝 20배 속도 향상: 카탈로그 조회 회피

PostgreSQL의 해시 파티셔닝은 고처리량 애플리케이션에서 카탈로그 조회 오버헤드가 발생합니다. 이 글에서는 애플리케이션 계층에서 파티션 인덱스를 미리 계산하여 PostgreSQL의 카탈로그 조회를 회피하는 최적화 기법을 소개합니다. Ruby gem `pg_hash_func`를 사용하거나 PostgreSQL의 해시 함수를 직접 호출하면 쿼리 속도를 20배 이상 향상시켜 대기 시간을 크게 줄일 수 있습니다. 이 방법은 성능이 중요한 시나리오에 적합하며, 단순성과 성능 간의 균형을 맞추는 데 더 많은 선택지를 제공합니다.

더 보기

AI 코드 어시스턴트: 축복인가 저주인가?

2025-06-17
AI 코드 어시스턴트: 축복인가 저주인가?

AI 코딩 어시스턴트는 점점 더 정교해지면서 깔끔하고 효율적인 코드를 생성합니다. 그러나 이로 인해 개발자들이 겉보기에 완벽한 솔루션에 매료되어 더 깊은 문제를 간과하는 '성급한 결론'이라는 문제가 발생할 수 있습니다. 이 글에서는 의학적 비유를 사용하여 AI를 경험이 많은 의사에 비유합니다. 경험이 많은 의사조차도 경험 때문에 드문 질병을 간과할 수 있기 때문입니다. 저자는 개발자들이 AI의 제안을 비판적으로 평가하고, 여러 가지 해결책을 적극적으로 모색하며, 빠른 수정이라는 함정에 빠지지 않도록 조언합니다. 이를 통해 코드 품질을 향상시키고 기술 부채의 축적을 방지할 수 있습니다.

더 보기
개발

PostgreSQL의 놀라움: CTE, DELETE, LIMIT의 예상치 못한 동작

2025-05-04
PostgreSQL의 놀라움: CTE, DELETE, LIMIT의 예상치 못한 동작

일괄 처리를 위해 Common Table Expression(CTE)과 DELETE...RETURNING, LIMIT을 결합하여 PostgreSQL을 사용했을 때 예상치 못한 동작이 발생했습니다. 한 행만 삭제하려고 했는데 여러 행이 삭제되었습니다. `EXPLAIN ANALYZE`를 통해 중첩 루프 반조인 최적화가 이루어지고 LIMIT 1 절이 여러 번 실행된다는 것을 알게 되었습니다. 해결책은 쿼리를 재구성하고 CTE를 피하며 DELETE의 WHERE 절에 직접 하위 쿼리를 사용하는 것이었습니다. 이는 CTE가 항상 쿼리 계획 최적화를 방지하는 것은 아니며, 중요한 작업에서는 계획을 신중하게 검토해야 함을 보여줍니다.

더 보기
개발

PostgreSQL 동기 커밋: 성능과 내구성 간의 절충

2025-03-19
PostgreSQL 동기 커밋: 성능과 내구성 간의 절충

이 글에서는 PostgreSQL의 `synchronous_commit` 설정이 성능에 미치는 영향을 살펴봅니다. 이 설정을 끄면 트랜잭션 처리량이 크게 증가하고 I/O 및 CPU 부하가 줄어들지만, 데이터 손실 위험이 발생할 수 있습니다. 저자는 I/O 제약이 있는 시스템에서 TPS가 30% 향상되었음을 보여줍니다. 이 글에서는 세션, 트랜잭션 또는 작업별로 `synchronous_commit`을 조정하는 세밀한 접근 방식을 제안하고 Ruby on Rails 예제를 제공합니다. 또한 Aurora PostgreSQL에서는 `synchronous_commit`을 `off`로 설정하면 성능이 가장 크게 향상된다는 점을 지적합니다.

더 보기
개발 동기 커밋

PostgreSQL 확장: 고성장 스타트업의 이상한 문제와 해결책

2025-02-09
PostgreSQL 확장: 고성장 스타트업의 이상한 문제와 해결책

이 글에서는 고성장 스타트업이 직면하는 일반적인 PostgreSQL 확장 과제를 다룹니다. 락 경합, 인덱스 팽창, TOAST 스토리지 비효율성, 수직 확장 대 수평 확장의 복잡성, 추가 전용 테이블 대 업데이트가 많은 테이블, 멀티테넌시 등의 문제를 다룹니다. 각 문제에 대해 데이터베이스 매개변수 조정 및 동시성 도구부터 데이터 액세스 패턴 재고려 및 자문 잠금과 같은 기능 사용에 이르기까지 실용적인 해결책을 제공합니다. 또한 부하 상태에서의 스키마 변경, 제로 다운타임 업그레이드, 효율적인 COUNT 쿼리 전략 등의 고급 주제도 탐구합니다. 까다로운 환경에서 PostgreSQL 성능을 최적화하려는 엔지니어에게 귀중한 자료입니다.

더 보기

데이터베이스 모킹: 장점보다 단점이 더 많다?

2024-12-30
데이터베이스 모킹: 장점보다 단점이 더 많다?

속도와 간편함 때문에 매력적이지만, 저자는 데이터베이스 모킹을 사용한 테스트가 결국 해결하는 문제보다 더 많은 문제를 야기한다고 주장합니다. 사용자 생성 예시는 모킹과 실제 데이터베이스 테스트의 차이점을 보여줍니다. 실제 데이터베이스 테스트는 고유 제약 조건 위반, 기본값 처리, 성능 병목 현상 등 잠재적 문제를 조기에 발견하여 디버깅 시간을 절약하고 운영 환경의 위험을 줄입니다. 애플리케이션과 스키마가 발전함에 따라 실제 데이터베이스 테스트는 새로운 검증, 데이터 유형 수정, 타임스탬프 정밀도 변경을 더 잘 처리하여 코드가 실제 데이터베이스와 일치하도록 보장합니다. 저자는 데이터 액세스 계층의 경우 실제 데이터베이스 테스트를 우선시하고, 서비스 계층에서는 비즈니스 로직과 데이터의 상호 작용을 명확히 하기 위해 사용하는 것을 제안합니다. 반면 컨트롤러 계층은 서비스 호출을 효과적으로 모킹할 수 있습니다. 실제 데이터베이스 테스트와 모킹의 균형이 견고한 애플리케이션 구축의 열쇠입니다.

더 보기