콘텐츠로 건너뛰기

🗄️ SQL 포매터

SQL 쿼리를 깔끔하게 정렬 / 압축. SELECT / INSERT / UPDATE / DELETE / JOIN / WITH 지원.

완전 무료 가입 불필요 브라우저 완결 5 개 언어 다크 모드

🔗 관련 도구

📖 자주 걸리는 지점

SQL 을 읽기 쉽게 정형합니다(반대로 미니파이도 가능합니다). 처리는 브라우저 안에서 끝나며 쿼리는 어디에도 전송되지 않습니다. 정형하는 것은 겉모습뿐이고 구문의 타당성은 검증하지 않습니다 — 동작하지 않는 쿼리도 정형되고, 방언(MySQL / PostgreSQL / SQL Server 등)의 독자 구문은 정형 결과가 부자연스러워질 수 있습니다. 실행해 확인하는 것까지가 한 세트라고 생각하세요.

사례 무슨 일이 일어나는가 어떻게 하면 되는가
정형했더니 결과가 바뀌었다 원인은 대개 주석과 문자열 리터럴의 취급입니다. -- 형식의 주석은 행 끝까지가 대상이므로 줄바꿈 위치가 바뀌면 주석 처리되는 범위가 바뀝니다. 정형으로 한 줄이 여러 줄로 나뉘는 순간, 그때까지 살아 있던 조건이 통째로 주석에 들어가거나 반대로 빠지는 사고가 일어납니다. 문자열 안의 줄바꿈이나 공백이 줄어든 경우도 당연히 LIKE 의 일치가 바뀝니다. 주석은 -- 가 아니라 /* … */ 로 쓰세요. 범위가 명시되어 있으므로 줄바꿈 위치가 바뀌어도 의미가 바뀌지 않습니다. 정형 전과 정형 후로 EXPLAIN 의 실행 계획을 비교하면 의도치 않은 변화를 확실히 검출할 수 있습니다. 실행 계획이 같다면 적어도 옵티마이저에서 볼 때 같은 쿼리입니다.
정형한 쿼리를 그대로 코드에 넣는다 보기 좋아진 SQL 을 문자열로 코드에 붙일 때 값을 문자열 연결로 심으면 SQL 인젝션이 됩니다. 정형 작업 중에는 리터럴 값이 들어간 상태의 쿼리를 다루므로 그대로 "WHERE id = " + id 형태로 만들어 버리는 흐름이 자연스럽게 생깁니다. 정형 도구를 거치는 작업은 이 사고가 일어나기 쉬운 국면입니다. 값은 반드시 플레이스홀더로 하세요WHERE id = ?WHERE id = :id 로 하고 실제 값은 드라이버에 넘깁니다. 플레이스홀더를 쓸 수 없는 것은 테이블명 · 컬럼명 · ORDER BY 의 방향이며, 이들은 허용 목록과의 대조로 해결합니다(ASCDESC 중 하나만 통과시키기 등). 정형해 읽기 쉬워진 단계에서 리터럴이 남아 있지 않은지 눈으로 확인하는 것을 습관으로 삼으세요.
느린 쿼리를 정형해도 빨라지지 않는다 당연하지만 정형은 실행 계획에 전혀 영향을 주지 않습니다. 읽기 쉬워져 원인이 보이게 되는 일은 있지만 그것은 사람 쪽의 효과입니다. SQL 이 느린 원인의 대부분은 인덱스가 쓰이지 않는 것이며 쓰는 방식의 깔끔함과는 무관합니다. EXPLAIN ANALYZE 를 실행해 실제로 읽은 행 수를 보세요. 돌아오는 행이 10건인데 100만 행을 스캔하고 있다면 거기가 원인입니다. 흔한 것은 WHERE 절에서 컬럼에 함수를 씌우는(WHERE DATE(created_at) = ...) 패턴으로 이는 인덱스를 무효화합니다. WHERE created_at >= ... AND created_at < ... 처럼 범위로 바꿔 쓰기만 해도 쓰이게 됩니다. SELECT * 를 그만두고 필요한 컬럼만으로 하면 커버링 인덱스가 듣는 경우도 있습니다.

팀에서 서식을 맞추고 싶다면 이 화면에서 매번 정형하지 말고 린터를 리포지터리에 넣으세요. sqlfluff 같은 도구라면 서식뿐 아니라 명명 규칙이나 위험한 표기(SELECT *, WHERE 없는 UPDATE 등)도 검출할 수 있습니다. 마이그레이션 파일에 대해 CI 에서 돌려 두면 리뷰에서의 지적이 읽기 쉬움에서 설계로 옮겨 갑니다. 이 화면이 어울리는 것은 남에게 건네받은 읽기 어려운 쿼리를 그 자리에서 한 번만 읽을 수 있는 형태로 만드는 용도입니다.

📖 사용법

  1. 1
    동작과 옵션 설정
    정렬 또는 압축을 선택하고 들여쓰기와 키워드 대소문자 설정을 지정하세요.
  2. 2
    SQL 입력
    왼쪽 입력란에 SQL 쿼리를 붙여넣으세요. 샘플 버튼으로 복잡한 쿼리 예시를 확인할 수 있습니다.
  3. 3
    결과 복사
    정렬되거나 압축된 SQL이 오른쪽에 표시됩니다. 복사 버튼으로 클립보드에 복사하세요.

❓ 자주 묻는 질문

어떤 SQL 방언을 지원하나요?
표준 SQL 및 SELECT, INSERT, UPDATE, DELETE, WITH, JOIN 주요 구문을 지원합니다.
주석이 유지되나요?
정렬 모드에서는 주석(--, /* */)이 유지됩니다. 압축 모드에서는 주석이 제거됩니다.
문자열 리터럴 내용이 변경되나요?
아니요. 문자열 리터럴(작은따옴표로 묶인 값)은 키워드 변환 대상이 아닙니다.
🐛 이 도구에서 문제가 발생했나요?

무료 · 가입 불필요. 재현 절차만이라도 도움이 됩니다. 보고는 운영자에게 직접 전달되어 개선에 사용됩니다.

※ 재현을 위해 브라우저 정보 (UA / 화면 / 언어 / URL) 가 자동 전송됩니다