피드로 돌아가기
Less boilerplate than raw SQL, less magic than ORM: generating PostgreSQL queries from Go structs
Dev.toDev.to
Database

ORM의 추상화 비용과 Raw SQL의 반복 작업을 제거한 Go Struct 기반 SQL Generator 설계

Less boilerplate than raw SQL, less magic than ORM: generating PostgreSQL queries from Go structs

Ara Israelyan2026년 6월 4일4intermediate

Context

Raw SQL 사용 시 발생하는 Column 리스트 및 Placeholder 매핑의 반복적 Boilerplate 코드 작성 문제 발생. ORM 도입 시 발생하는 Hidden Query와 Entity Tracking으로 인한 제어권 상실 및 성능 예측 불가능성이라는 Trade-off 직면.

Technical Solution

  • Database Access Layer의 소유권을 갖지 않는 Pure SQL Generation 전략 채택
  • Go Struct Tag를 활용한 Schema 메타데이터 정의 및 PostgreSQL 전용 SQL 자동 생성 로직 구현
  • Query Execution과 Generation을 완전히 분리하여 pgx 및 database/sql과의 유연한 결합 구조 설계
  • Runtime 시점에 Struct 필드를 분석하여 Dynamic WHERE 절 및 Scan Pointer를 자동 생성하는 메커니즘 적용
  • sqlc와 같은 전처리 Code Generation 단계 없이 Runtime 기반의 유연한 쿼리 조각 생성 방식 지향
  • Query Builder(Squirrel, Goqu) 대비 Struct-to-Column 매핑 자동화에 집중한 경량화 설계

- 단순 CRUD 반복 작업이 많은 내부 서비스 구축 시 ORM 대신 Lightweight SQL Generator 검토 - SQL 실행 제어권 유지를 위해 Execution Layer와 SQL Generation Layer를 분리하여 설계 - 런타임 동적 쿼리 생성 필요성과 타입 안정성을 위한 정적 생성 방식 중 프로젝트 요구사항에 맞는 도구 선택

원문 읽기