SQL 포매터
SQL 문자열에 들여쓰기와 줄 바꿈을 추가하여 가독성을 높입니다.
변환 전
변환 후
SQL 포매터란
긴 SQL은 한 줄에 몰아 넣으면 구조를 읽어 낼 수 없습니다. 이 도구는 SELECT·FROM·WHERE·JOIN 같은 키워드를 기준으로 줄바꿈을 넣고, 중첩된 서브쿼리를 단계별로 들여써서 문장의 구조를 눈으로 따라갈 수 있는 형태로 다듬습니다. 정형해도 의미는 달라지지 않습니다.
방언의 선택이 결과에 영향을 줍니다. MySQL·PostgreSQL·Oracle·SQL Server에는 각각 고유한 구문이 있으므로, 쓰고 있는 데이터베이스에 맞추어 골라 주세요. 또한 구문 오류가 있는 SQL은 올바르게 해석되지 않아 정형되지 않을 수 있습니다. 그 경우에는 먼저 SQL 자체의 타당성을 확인해 주세요.
SQL의 정형 순서
- SQL을 붙여 넣습니다 정형하고 싶은 SQL을 입력란에 붙여 넣습니다. 세미콜론으로 구분하면 여러 문장을 한꺼번에 처리할 수 있습니다.
- 방언을 고릅니다 사용 중인 데이터베이스에 맞추어 선택합니다. 모를 경우에는 표준 SQL 그대로도 대부분의 구문은 정형할 수 있습니다.
- 들여쓰기와 대문자 변환을 설정합니다 들여쓰기 폭은 팀의 규약에 맞추어 조정합니다. 대문자 변환을 켜면 키워드가 가지런해져 읽기 쉬워집니다.
- 정형해 결과를 확인합니다 「정형」을 누르면 결과가 표시됩니다. 그대로 코드 리뷰나 사양서에 붙여 넣을 수 있습니다.
더 잘 활용하기 위한 팁
- SELECT·FROM·WHERE·JOIN 등의 SQL 키워드가 자동으로 줄 바꿈·정렬되며, 중첩된 서브쿼리도 적절하게 들여쓰기 됩니다.
- "키워드 대문자 변환"을 활성화하면 키워드가 자동으로 대문자로 변환되어 가독성이 향상됩니다.
- 들여쓰기 크기를 조정하여 팀의 코딩 컨벤션에 맞는 서식을 적용할 수 있습니다.
- 서식 지정 후 SQL을 코드 리뷰나 문서에 붙여넣으면 읽기 쉬워집니다.
- MySQL·PostgreSQL·Oracle 등 주요 SQL 방언을 지원합니다.
SQL 포매터의 활용 상황
받은 SQL을 읽어 내기
로그나 앱의 소스에서 뽑아낸 한 줄짜리 SQL을 정형하면, 결합 조건이나 필터 조건의 구조가 한눈에 보입니다.
코드 리뷰에 내기 전에 다듬기
들여쓰기를 맞춘 뒤 제출하면 리뷰어는 서식이 아니라 로직에 집중할 수 있습니다. 차이도 읽기 쉬워집니다.
사양서나 문서에 싣기
정형된 SQL을 자료에 붙이면 읽는 사람이 구조를 따라갈 수 있습니다. 대문자 변환과 함께 쓰면 인쇄물에서도 보기 좋습니다.
느린 쿼리의 구조를 분석하기
서브쿼리의 깊이나 결합의 수를 눈으로 확인할 수 있으므로, 실행 계획을 읽기 전에 짐작을 세울 수 있습니다.
SQL에 관한 용어
- SQL 방언
- 데이터베이스 제품마다 다른 구문의 차이입니다. 표준 SQL에 각 제품이 독자적인 확장을 더하고 있기 때문에, 정형 시 지정이 필요해집니다.
- 서브쿼리
- 다른 SQL 문 안에 중첩되어 쓰인 질의입니다. 깊어질수록 읽기 어려워지므로, 들여쓰기의 효과가 큰 부분입니다.
- JOIN
- 여러 테이블을 결합해 가져오는 구문입니다. 결합 조건이 길어지기 쉬워, 줄바꿈 위치가 가독성을 좌우합니다.
- 프리페어드 스테이트먼트
- 값을 나중에 끼워 넣는 형태로 질의를 조립하는 방식입니다. SQL 인젝션 대책의 기본이 됩니다.
- SQL 인젝션
- 입력값에 SQL의 조각을 섞어 의도하지 않은 질의를 실행시키는 공격입니다. 문자열 연결로 SQL을 조립하면 일어나기 쉬워집니다.
- 스토어드 프로시저
- 데이터베이스 쪽에 저장해 두는 일련의 처리입니다. 제어 구문을 포함하기 때문에 정형의 대응 범위 밖이 될 수 있습니다.
자주 묻는 질문
여담 ― SQL 50년 ― 관계형 데이터베이스의 역사
SQL은 1970년 EF Codd(IBM)가 논문에서 제창한 관계 모델을 기반으로 IBM이 "SEQUEL"로 개발한 것이 기원입니다(상표 문제로 SQL로 개칭). 1986년에 ANSI 표준화되어 오늘날까지 많은 데이터베이스에서 사용되고 있는 유서 깊은 언어입니다.
가장 유명한 보안 사고 중 하나가 SQL 인젝션 공격입니다. 2011년 소니 PSN(PlayStation Network) 사건에서는 1억 건 이상의 개인정보가 유출되어 손해액이 1억 7,100만 달러로 추산되었습니다. 현재도 OWASP Top 10(웹 앱 주요 취약점 순위)의 단골 항목으로 꼽히며, "준비된 구문(Prepared Statement)" 사용이 기본 대책으로 알려져 있습니다.
"WHERE 1=1"은 동적 SQL 구성의 편리한 기법이지만, SQL 인젝션의 대표적인 예이기도 합니다. 로그인 폼에 ' OR '1'='1을 입력하는 것만으로 비밀번호 없이 로그인할 수 있다는 고전적인 취약점은 지금도 보안 교육의 단골 교재로 활용되고 있습니다.