홈 › 개발·웹 도구

SQL 정렬·한 줄 압축

로그에 찍힌 긴 쿼리나 ORM이 만든 SQL을 읽을 때 좋아요. 쿼리는 서버로 보내지 않고 이 기기에서만 정리해요.

입력한 내용은 서버로 보내지 않고 이 기기에서만 처리돼요

엉킨 SQL을 한눈에 읽히게

로그나 ORM(JPA·MyBatis·Prisma 등)이 찍어 주는 SQL은 보통 한 줄로 길게 이어져 있어 조건이 어디서 끝나는지 보기 어려워요. 쿼리를 붙여넣으면 SELECT, FROM, JOIN, WHERE, GROUP BY 같은 절마다 줄을 바꾸고, 괄호 안 하위 쿼리는 한 단계 더 들여써요. AND·OR는 줄 앞에 두어 조건을 하나씩 세어 보기 쉽게 했어요. 여러 문장이 ;로 이어져 있으면 문장 사이에 빈 줄을 넣어요.

옵션

한 줄로 압축

‘한 줄로 압축’은 --·/* */ 주석과 줄바꿈을 지우고 공백을 하나로 줄여요. 따옴표 안의 문자열과 식별자는 한 글자도 바꾸지 않고, MySQL의 /*! … */나 오라클 힌트 /*+ … */처럼 의미가 있는 주석은 남겨요. 코드 안에 쿼리 문자열로 넣을 때 편해요.

정리 엔진은 오픈소스 sql-formatter(MIT 라이선스)를 쓰고, 정리 전후 쿼리가 같은 결과를 내는지 SQLite로 실행해 확인했어요. 문법 검사기가 아니라서 틀린 SQL도 모양만 정리될 수 있으니 실행 전에는 DB에서 확인하세요.

참고한 자료

자주 묻는 질문

정리하면 쿼리 뜻이 바뀌지 않나요?

공백·줄바꿈과 키워드 대소문자만 바꿔요. 문자열·식별자는 그대로라 같은 쿼리예요. 다만 대소문자를 구분하는 DB에서 따옴표 없이 쓴 이름은 ‘키워드’ 옵션을 ‘그대로’로 두세요.

‘정리하지 못했어요’가 나와요.

고른 SQL 종류에 없는 문법이거나 따옴표·괄호가 짝이 안 맞는 경우예요. SQL 종류를 바꾸거나 끝부분이 잘리지 않았는지 확인하세요.

MyBatis의 #{변수}나 ? 자리표시자도 되나요?

?, :name, $1 같은 자리표시자는 그대로 둬요. MyBatis의 #{}·${}는 SQL 문법이 아니어서 결과가 어색할 수 있어요.

함께 쓰면 좋은 도구