정지용
기술스택 목록
도구

SQLC

프로젝트 1에서 사용했습니다. 각 프로젝트에서 어떤 역할로 썼는지 아래에 정리했습니다.

이 기술은 무엇인가요?

SQL 쿼리 파일로부터 타입 안전한 데이터베이스 접근 코드를 자동 생성하는 도구

SQLC는 개발자가 작성한 SQL 쿼리 파일을 분석해 타입 안전한 Go 코드를 자동으로 생성하는 컴파일러입니다. ORM을 사용하지 않고도 SQL을 직접 작성하면서 컴파일 타임에 타입 체크를 받을 수 있어, SQL의 성능과 명확성을 유지하면서도 런타임 오류를 줄일 수 있습니다. 데이터베이스 스키마와 쿼리를 분석해 필요한 구조체와 함수를 자동 생성하므로 보일러플레이트 코드 작성 부담이 줄어듭니다.

이럴 때 사용합니다

  • ORM 추상화 없이 직접 SQL을 작성하면서도 타입 안전성이 필요할 때
  • 복잡한 쿼리나 성능 최적화가 중요해 raw SQL 제어가 필요한 경우
  • Go 언어로 데이터베이스 레이어를 구축하며 보일러플레이트를 줄이고 싶을 때
  • 데이터베이스 스키마 변경 시 컴파일 타임에 쿼리 오류를 미리 잡고 싶을 때

핵심 개념

Query File
개발자가 작성하는 .sql 파일로, 실제 실행할 SQL 쿼리와 함께 SQLC 전용 주석(annotation)을 포함합니다. 이 주석으로 생성할 함수 이름과 동작 방식을 지정합니다.
Schema File
데이터베이스 테이블 구조를 정의한 DDL 파일입니다. SQLC는 이 스키마를 분석해 각 테이블에 대응하는 Go 구조체를 생성합니다.
Code Generation
SQLC가 SQL 파일과 스키마를 분석해 Go 코드를 자동 생성하는 과정입니다. 쿼리 파라미터와 결과를 타입 안전하게 다룰 수 있는 함수와 구조체가 만들어집니다.
sqlc.yaml
SQLC 설정 파일로, 어떤 SQL 파일을 읽을지, 어느 디렉토리에 코드를 생성할지, 어떤 데이터베이스 엔진을 사용할지 등을 명시합니다.
Query Annotation
SQL 주석으로 작성하는 SQLC 메타데이터입니다. -- name: GetUser :one 같은 형태로 생성할 함수 이름과 반환 타입(one, many, exec 등)을 지정합니다.

SQLC 기본 설정 및 쿼리 예시

설정 파일과 스키마, 쿼리를 작성한 뒤 sqlc generate 명령을 실행하면 GetUser, ListUsers 함수와 User 구조체가 Go 코드로 생성됩니다.

YAML
# sqlc.yaml
version: "2"
sql:
  - schema: "schema.sql"
    queries: "query.sql"
    engine: "postgresql"
    gen:
      go:
        out: "db"

# schema.sql
CREATE TABLE users (
  id SERIAL PRIMARY KEY,
  name TEXT NOT NULL
);

# query.sql
-- name: GetUser :one
SELECT * FROM users WHERE id = $1;

-- name: ListUsers :many
SELECT * FROM users;

처음 쓸 때 흔한 함정

  • 쿼리 주석 형식을 정확히 지키지 않으면 코드 생성이 실패하거나 의도와 다른 함수가 만들어집니다
  • 스키마 파일과 실제 DB 스키마가 불일치하면 런타임에 오류가 발생할 수 있습니다
  • 생성된 코드를 직접 수정하면 다음 generate 시 덮어씌워지므로 커스텀 로직은 별도 레이어에 작성해야 합니다

위 개요는 기술 학습을 돕기 위해 자동 생성된 일반 설명입니다. 정확한 사양과 최신 정보는 공식 문서를 확인하세요.

프로젝트별 활용 방식

위 개념이 실제 프로젝트에서 어떻게 쓰였는지 보여줍니다.

  1. 01백엔드
    2026년 7월

    KYB 기업심사 REST API

    Go + Echo 기반 멀티테넌트 KYB(Know Your Business) 심사 플랫폼. 기업 등록부터 3단계 심사, WLF 스크리닝, 재제출 워크플로까지 지원.

    이 프로젝트에서의 SQLC 활용

    타입 안전 SQL 쿼리 코드 생성

함께 사용한 기술

위 프로젝트들에서 같이 쓰인 다른 기술입니다.