SQL 포매터

SQL을 방언별로 보기 좋게 정렬합니다.

로그에서 퍼온 쿼리나 코드에서 문자열로 이어붙인 쿼리는 대개 한 줄로 길게 늘어져 있습니다. WHERE 조건이 어디서 끝나고 서브쿼리가 어디서 시작하는지 눈으로 좇기 어렵죠.

이 도구는 그런 쿼리를 절 단위로 잘라 들여쓰기까지 맞춰줍니다. 리뷰 전에 한 번 돌려두면 읽는 사람의 시간이 크게 줄어듭니다.

어떻게 계산되나요

쓰는 법

쿼리를 붙여넣고 방언(dialect)을 고른 뒤 정렬을 누릅니다. 결과는 아래 칸에 나오고 복사 버튼으로 바로 가져갈 수 있습니다.

정렬 규칙

SELECT·FROM·WHERE 같은 예약어는 대문자로 통일하고, 절 단위로 줄을 나눈 뒤 들여쓰기는 스페이스 2칸으로 맞춥니다. AND·OR로 이어진 조건, JOIN, 서브쿼리는 각각 단을 나눠 어디까지가 한 덩어리인지 눈에 들어오게 합니다.

방언을 왜 고르나

같은 SQL이라도 제품마다 표기가 다릅니다. MySQL의 백틱 식별자, PostgreSQL의 :: 형변환처럼 표준에 없는 문법을 제대로 읽으려면 해당 방언을 선택해야 합니다. 잘못 고르면 정렬이 어긋나거나 오류 메시지가 나옵니다.

주의

문법 검사기가 아니라 서식 도구입니다. 정렬이 됐다고 해서 쿼리가 정상 동작한다는 뜻은 아닙니다.

용어 정리

방언(dialect)
같은 SQL이라도 DB 제품마다 갈리는 문법 갈래. MySQL, PostgreSQL 등 제품별 표기를 뜻합니다.
예약어
SELECT, FROM, WHERE처럼 SQL이 문법 요소로 쓰는 단어. 이 도구는 대문자로 통일해 출력합니다.
들여쓰기 폭
한 단계 안으로 밀 때 넣는 공백 수. 이 도구는 스페이스 2칸을 씁니다.
서브쿼리
괄호 안에 들어간 또 하나의 SELECT문. 정렬하면 바깥 쿼리와 단이 나뉘어 구분이 쉬워집니다.
CTE(WITH 절)
쿼리 앞부분에 이름을 붙여 정의해 두는 임시 결과 집합. 중첩 서브쿼리보다 읽기 좋습니다.

자주 묻는 질문

정렬하면 쿼리 성능도 좋아지나요?

아닙니다. 줄바꿈이나 대소문자는 실행 계획에 영향을 주지 않습니다. 성능은 인덱스, 조인 순서, 조건절 작성 방식에서 갈립니다.

오류가 뜨는데 실제로는 잘 도는 쿼리입니다

저장 프로시저 본문, 제품 전용 힌트, 템플릿 변수(`{{ }}`, `:param` 등)가 섞이면 파서가 멈출 수 있습니다. 방언을 실제 DB에 맞게 바꿔보고, 그래도 안 되면 문제 구간만 빼고 정렬한 뒤 다시 합치세요.

예약어를 소문자로 두고 싶어요

현재 예약어는 대문자로 고정 출력됩니다. 소문자 스타일을 쓰는 팀이라면 정렬한 뒤 에디터의 일괄 변경 기능을 쓰는 편이 빠릅니다.

붙여넣은 쿼리가 외부로 나가나요?

정렬은 브라우저 안에서 처리되며 쿼리는 서버로 전송되지 않습니다. 그래도 실제 고객 데이터가 값으로 박힌 쿼리는 지운 뒤 붙여넣는 습관이 안전합니다.