PostgreSQL Materialized View: 쿼리 결과 캐싱이 합리적인 경우
28초 걸리던 대시보드 쿼리를 Materialized View로 180ms로 줄이는 과정을 다룸. View/MV/Summary Table 비교, WITH NO DATA로 안전한 생성, 인덱스 설계, Full vs Concurrent refresh 전략, freshness contract 설정, cron/pg_cron/K8s CronJob 스케줄링, advisory lock으로 중복 refresh 방지, mv_refresh_log 테이블을 활용한 observability까지 운영 레벨의 전체 가이드임.
- 1
10M+ 행 조인 쿼리가 28초에서 180ms로 단축됨 (refresh 비용 4.2초)
- 2
WITH NO DATA로 구조만 먼저 만들고 인덱스 설정 후 populate하는 안전한 롤아웃 방법
- 3
CONCURRENTLY 키워드로 읽기 블로킹 없이 refresh 가능 (유니크 인덱스 필수)
- 4
pg_matviews에 last_refresh 컬럼이 없으므로 mv_refresh_log 테이블로 직접 추적해야 함
- 5
advisory lock 패턴으로 refresh 겹침 방지
반복되는 비싼 쿼리를 매번 실행하는 건 설계 선택이지 불가피한 제약이 아님. Materialized View는 '읽기 시점의 계산'을 '스케줄된 계산'으로 바꾸는 명시적 트레이드오프이고, freshness contract과 observability를 갖추면 운영 가능한 캐싱 레이어가 됨.
관련 기사
Go에서 Rust로 옮길 때 진짜로 바뀌는 것들
이 글은 Go 백엔드 서비스를 Rust로 옮길 때 속도보다 컴파일 타임 보장, 런타임 트레이드오프, 개발자 경험이 더 중요하다고 설명한다. nil 패닉, 데이터 레이스, 에러 처리, 제네릭, 비동기 모델, 마이그레이션 전략까지 실무 관점에서 Go와 Rust를 길게 비교한다.
Python 3.15에서 헤드라인은 못 탔지만 꽤 쓸만한 기능들
Python 3.15에는 lazy imports나 Tachyon profiler 같은 큰 기능 말고도 실무에서 바로 체감될 만한 작은 개선들이 들어가. TaskGroup 취소, 컨텍스트 매니저 데코레이터 개선, 스레드 안전 이터레이터처럼 평소 애매하게 불편했던 지점들이 꽤 깔끔해졌어.
심평원, DUR부터 의료영상 심사까지 클라우드로 갈아엎는다
심평원이 정보시스템 클라우드 전환과 함께 병·의원 업무에 직접 닿는 DUR, 의료영상 AI 심사, 요양급여내역 조회 시스템을 고도화한다. 핵심은 설치형 프로그램 중심이던 연계를 웹과 API 기반으로 넓히고, 진료·청구 과정에서 실시간 확인과 자동 판독을 강화하는 쪽이다.
윈도우 에러 코드 7번 ‘ERROR_ARENA_TRASHED’는 어디서 왔을까
ERROR_ARENA_TRASHED는 Win32에서 실제로 쓰이는 현대적 에러라기보다 MS-DOS 시절 메모리 관리 구조에서 넘어온 잔재야. MS-DOS가 메모리 블록 앞의 arena 시그니처를 훑다가 예상한 값이 아니면 ‘arena가 망가졌다’고 보고 이 에러를 냈다는 이야기야.
C/C++ 컴파일러의 느슨한 메모리 동시성 버그를 자동으로 잡는 박사논문
C와 C++ 컴파일러에서 relaxed memory 동시성 버그를 찾는 자동 테스트 프레임워크를 다룬 박사논문이 공개됐어. Téléchat, Atomic-mixer 같은 도구로 소스 수준 동작과 컴파일된 프로그램 동작을 비교하고, LLVM과 GCC 툴체인에서 실제 버그를 찾아낸 내용이 핵심이야.
댓글
댓글
댓글을 불러오는 중...