PostgreSQL 'read-only 트랜잭션에서 CREATE TABLE 실행할 수 없음' 오류 해결 방법
(dev.to)PostgreSQL 마이그레이션 중 발생하는 'read-only 트랜잭션' 오류의 원인과 해결책을 분석하며, 특히 복제본(Replica)으로의 잘못된 연결이나 권한 설정 오류가 서비스 장애와 데이터 불일치를 초래할 수 있음을 경고하고 인프라 수준의 방어 전략을 제시합니다.
이 글의 핵심 포인트
- 1PostgreSQL의 read-only 트랜잭션 내에서는 CREATE TABLE과 같은 DDL 실행이 불가능함
- 2주요 원인으로 PgBouncer/RDS Proxy를 통한 리플리카 노드 라우팅, 또는 Role에 설정된 읽기 전용 기본값 등이 있음
- 3마이그레이션 실패 시 Liquibase/Flyway 등의 락 테이블(Lock table)에 잠금이 남아 후속 작업이 차단될 수 있음
- 4해결을 위해 SET LOCAL default_transaction_read_only = off를 통한 명시적 오버라이드나 전용 마기레이션 역할을 사용하는 것이 권장됨
- 5CI/CD 파이프라인 내에서 pg_is_in_recovery()를 통해 실행 전 노드 상태를 검증하는 가드레일 구축이 필요함
이 글에 대한 공공지능 분석
왜 중요한가?
스키마 마이그레이션 실패는 단순한 오류를 넘어 데이터베이스의 일관성을 파괴하고, 서비스 전체의 배포 파이프라인을 중단시키는 치명적인 장애로 이어질 수 있기 때문입니다.
어떤 배경과 맥락이 있나?
클라우드 네이티브 환경에서 RDS나 Aurora 같은 분산 데이터베이스를 사용하며 읽기/쓰기 엔드포인트를 분리하는 것이 일반화됨에 따라, 마이그레이션 도구가 의도치 않게 읽기 전용 노드를 타겟팅할 위험이 커졌습니다.
업계에 어떤 영향을 주나?
인프라 자동화(IaC)와 CI/CD가 고도화될수록 개발자의 실수보다는 설정 오류에 의한 장애가 늘어나며, 이를 방지하기 위한 정책 기반의 가드레일(OPA 등) 도입이 중요해지고 있습니다.
한국 시장에 어떤 시사점이 있나?
빠른 배포를 지향하는 국내 스타트업들은 마이그레이션 도구의 자동화에만 의존할 것이 아니라, 인프라 엔드포인트 관리와 권한 분리(Role Hygiene)라는 운영적 기본기를 갖추어야 합니다.
이 글에 대한 큐레이터 의견
데이터베이스 스키마 변경은 서비스 생명주기에서 가장 위험도가 높은 작업 중 하나입니다. 많은 스타트업이 개발 생산성을 위해 Flyway나 Alembic 같은 자동화 도구를 도입하지만, 정작 이 도구가 실행되는 '환경의 안정성'에 대해서는 간과하는 경우가 많습니다. 특히 AWS RDS/Aurora 환경에서 엔드기포인트 설정 오류로 인해 마이그레이션이 실패하면, 데이터베이스 락(Lock)이 남게 되어 후속 배포가 모두 막히는 '데드락 상황'을 초래할 수 있습니다.
물론, 모든 연결에 대해 엄격한 권한 분리와 검증 로직을 넣는 것은 운영 복잡도를 높이고 초기 구축 비용을 증가시키는 트레이드오프를 발생시킵니다. 하지만 인프라가 자동화될수록 '실수할 수 없는 구조'를 만드는 것이 훨씬 경제적입니다. 따라서 개발자는 단순히 쿼리를 실행하는 것을 넘어, Terraform이나 OPA 같은 도구를 활용해 마이그레이션 작업이 반드시 Primary 노드를 타겟팅하도록 강제하는 엔지니어링적 접근을 취해야 합니다.
관련 뉴스
댓글
아직 댓글이 없습니다. 첫 댓글을 남겨보세요.