포맷터 · 2026년 7월 7일 · 읽는 시간 4분

쿼리 로그 해석하려고 SQL 포맷터 만들었음

👉 SQL 포맷터 바로 가기

ORM이 생성한 쿼리 로그는 한 줄로 뭉쳐 있어서 어디서 문제가 생겼는지 파악하기 힘들다.

SQL 포맷팅이 필요한 상황

꽤 자주 마주침:

  • ORM 쿼리 로그 디버깅 → JPA/Hibernate, Django ORM 생성 쿼리
  • DB 마이그레이션 파일 → 한 줄로 된 긴 쿼리 정리
  • 레거시 쿼리 파악 → 유지보수 시 기존 쿼리 읽기
  • 코드 리뷰 → SQL이 인라인으로 박혀 있어서 읽기 힘들 때
  • 느린 쿼리 분석 → slow query log에서 가져온 쿼리 정리
  • DBA와 협업 → 정리된 형태로 공유

Hibernate show_sql=true로 켜놓으면 나오는 쿼리들 진짜 읽기 힘들다. 들여쓰기도 없고 키워드도 대소문자 섞여있고.


포맷팅 전후 비교

포맷팅 전:

select u.id, u.name, u.email, o.order_date, o.total_amount, p.product_name from users u inner join orders o on u.id = o.user_id inner join order_items oi on o.id = oi.order_id inner join products p on oi.product_id = p.id where u.created_at >= '2026-01-01' and o.status = 'completed' order by o.order_date desc limit 100

포맷팅 후:

SELECT
  u.id,
  u.name,
  u.email,
  o.order_date,
  o.total_amount,
  p.product_name
FROM
  users u
  INNER JOIN orders o ON u.id = o.user_id
  INNER JOIN order_items oi ON o.id = oi.order_id
  INNER JOIN products p ON oi.product_id = p.id
WHERE
  u.created_at >= '2026-01-01'
  AND o.status = 'completed'
ORDER BY
  o.order_date DESC
LIMIT 100

조인이 3개인지 4개인지, WHERE 조건이 뭔지 한눈에 들어온다.


기존 방법의 문제

  • DataGrip / DBeaver → 쿼리 툴 켜서 붙여넣고 포맷팅, 매번 귀찮음
  • 온라인 SQL 포맷터 → 광고 넘치고 데이터가 서버로 가는 느낌
  • VS Code SQL 확장 → 설치 필요, 가볍게 쓰기엔 무거움
  • 수동 정리 → 시간도 걸리고 실수도 생김

그래서 만들었음

주요 기능:

  • SQL 자동 들여쓰기 포맷팅
  • 키워드 대문자 자동 변환 (SELECT, FROM, WHERE 등)
  • SQL 방언 선택 (MySQL, PostgreSQL, SQLite, Oracle, T-SQL)
  • SQL 압축 (공백 제거)
  • 결과 복사 버튼

추가 기능:

  • 서브쿼리 들여쓰기 처리
  • CTE (WITH 절) 포맷팅
  • 주석 유지
  • 여러 쿼리 구분 처리 (세미콜론 기준)

자주 쓰는 SQL 패턴들

-- CTE 사용 예시
WITH monthly_sales AS (
  SELECT
    DATE_FORMAT(order_date, '%Y-%m') AS month,
    SUM(total_amount) AS revenue
  FROM orders
  WHERE status = 'completed'
  GROUP BY month
)
SELECT
  month,
  revenue,
  LAG(revenue) OVER (ORDER BY month) AS prev_revenue
FROM monthly_sales;

CTE나 윈도우 함수 쓴 복잡한 쿼리도 포맷팅하면 구조 파악이 훨씬 쉽다.


실제로 써보니

좋은 점:

  • ORM 로그 복붙하면 바로 읽기 좋게 정리됨
  • 키워드 대문자 변환 → 컨벤션 맞추기 편함
  • MySQL, PostgreSQL 방언 구분 → DB에 맞는 포맷

한계:

  • 실행 계획 분석은 안 됨
  • 쿼리 성능 최적화 제안은 없음
  • 매우 복잡한 쿼리는 포맷팅이 완벽하지 않을 수 있음

사용법

  1. SQL 쿼리 붙여넣기
  2. DB 방언 선택 (필요시)
  3. 자동으로 포맷팅됨
  4. 복사 버튼으로 가져가기

써보기

👉 SQL 포맷터 바로 가기

ORM 로그 디버깅할 때 옆에 띄워두면 편함.


#SQL포맷터 #쿼리정리 #ORM디버깅 #데이터베이스 #개발도구

광고