🗄️ 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 의 방향이며, 이들은 허용 목록과의 대조로 해결합니다(ASC 와 DESC 중 하나만 통과시키기 등). 정형해 읽기 쉬워진 단계에서 리터럴이 남아 있지 않은지 눈으로 확인하는 것을 습관으로 삼으세요. |
| 느린 쿼리를 정형해도 빨라지지 않는다 | 당연하지만 정형은 실행 계획에 전혀 영향을 주지 않습니다. 읽기 쉬워져 원인이 보이게 되는 일은 있지만 그것은 사람 쪽의 효과입니다. SQL 이 느린 원인의 대부분은 인덱스가 쓰이지 않는 것이며 쓰는 방식의 깔끔함과는 무관합니다. | EXPLAIN ANALYZE 를 실행해 실제로 읽은 행 수를 보세요. 돌아오는 행이 10건인데 100만 행을 스캔하고 있다면 거기가 원인입니다. 흔한 것은 WHERE 절에서 컬럼에 함수를 씌우는(WHERE DATE(created_at) = ...) 패턴으로 이는 인덱스를 무효화합니다. WHERE created_at >= ... AND created_at < ... 처럼 범위로 바꿔 쓰기만 해도 쓰이게 됩니다. SELECT * 를 그만두고 필요한 컬럼만으로 하면 커버링 인덱스가 듣는 경우도 있습니다. |
팀에서 서식을 맞추고 싶다면 이 화면에서 매번 정형하지 말고 린터를 리포지터리에 넣으세요. sqlfluff 같은 도구라면 서식뿐 아니라 명명 규칙이나 위험한 표기(SELECT *, WHERE 없는 UPDATE 등)도 검출할 수 있습니다. 마이그레이션 파일에 대해 CI 에서 돌려 두면 리뷰에서의 지적이 읽기 쉬움에서 설계로 옮겨 갑니다. 이 화면이 어울리는 것은 남에게 건네받은 읽기 어려운 쿼리를 그 자리에서 한 번만 읽을 수 있는 형태로 만드는 용도입니다.
📖 사용법
-
1
동작과 옵션 설정정렬 또는 압축을 선택하고 들여쓰기와 키워드 대소문자 설정을 지정하세요.
-
2
SQL 입력왼쪽 입력란에 SQL 쿼리를 붙여넣으세요. 샘플 버튼으로 복잡한 쿼리 예시를 확인할 수 있습니다.
-
3
결과 복사정렬되거나 압축된 SQL이 오른쪽에 표시됩니다. 복사 버튼으로 클립보드에 복사하세요.
❓ 자주 묻는 질문
어떤 SQL 방언을 지원하나요?
표준 SQL 및 SELECT, INSERT, UPDATE, DELETE, WITH, JOIN 주요 구문을 지원합니다.
주석이 유지되나요?
정렬 모드에서는 주석(--, /* */)이 유지됩니다. 압축 모드에서는 주석이 제거됩니다.
문자열 리터럴 내용이 변경되나요?
아니요. 문자열 리터럴(작은따옴표로 묶인 값)은 키워드 변환 대상이 아닙니다.
🐛 이 도구에서 문제가 발생했나요?
무료 · 가입 불필요. 재현 절차만이라도 도움이 됩니다. 보고는 운영자에게 직접 전달되어 개선에 사용됩니다.
✅
보고 감사합니다!
운영자에게 전달되었습니다. 개선에 사용됩니다.