SQL 가독성 좋게 작성하는 방법
문제점 😅
쿼리 수정을 하다 보면 앞서 지나간 수많은 개발자들이 자기 입맛대로 쿼리를 작성 및 수정했기 때문에 가독성이 정말 천차만별이다. 간단한 쿼리의 경우는 양이 적어서 그냥 쓱 보고 넘어가지만 핵심 기능과 연관된 쿼리의 경우 그 양이 상당히 방대하므로, 이걸 업무차 분석하고 있자니 열받지 않을 수가 없다. 나또한 열받게 하는 사람이 되진 말자는 뜻에서 가독성 좋게 작성하는 방법을 적어두기로 한다.
해결책 😏
여러 글들을 보고 내 입맛에 맞게 정리 좀 해보았다. 들여쓰기는 SQL 작성 기본 덕목 중 첫 번째다!
1. 예약어는 대문자로 작성
SELECT, FROM, WHERE, GROUP BY 등의 SQL 예약어는 소문자가 아닌 대문자로 작성한다.
-- GOOD
SELECT * FROM FRUIT_BASKET WHERE FRUIT_NAME = 'APPLE';
-- BAD
select * from FRUIT_BASKET where FRUIT_NAME = 'APPLE';
2. 예약어 첫 단어는 왼쪽 정렬
예약어 첫 단어는 왼쪽 정렬을 한다. 사실 이 부분은 BAD 유형처럼 했었는데… 바꿔야겠다.
-- GOOD
SELECT *
FROM FRUIT_BASKET
WHERE FRUIT_NAME = 'APPLE';
-- BAD
SELECT *
FROM FRUIT_BASKET
WHERE FRUIT_NAME = 'APPLE';
3. 별칭 AS(Alias)는 생략하지 말 것
별칭은 명시적으로 확실하게 표시해주는게 좋고, ‘a’,’xx’ 등 의미를 알 수 없는 변수명을 사용하지 말자.
-- GOOD
SELECT CONCAT(FRUIT_NAME, AMOUNT) AS INFO
FROM FRUIT_BASKET;
-- BAD
SELECT CONCAT(FRUIT_NAME, AMOUNT) INFO
FROM FRUIT_BASKET;
또한 테이블에 사용되는 별칭은 동등한 위치에서 작성한다.
-- GOOD
SELECT *
FROM TB_BOOK AS B
INNER JOIN TB_PRICE AS P
-- BAD
SELECT *
FROM TB_BOOK AS B
INNER JOIN TB_PRICE AS P
4. 콤마(,)는 컬럼명 앞으로, 세미콜론(;)은 마지막 줄에
콤마(,)를 컬럼명 앞에 두면 주석 용이 및 컬럼 누락 방지에 좋으며, 세미콜론(;)이 마지막 줄에 위치하면 쿼리 수정에 용이하다.
-- GOOD
SELECT FRUIT_NAME
, AMOUNT -- 콤마를 컬럼명 앞에 두는 방식(Leading Comma)
, PRICE
FROM FRUIT_BASKET
;
-- BAD
SELECT FRUIT_NAME,
AMOUNT, -- 콤마를 컬럼명 뒤에 두는 방식(Trailing Comma)
PRICE
FROM FRUIT_BASKET;
5. 주석을 잘 쓰자
SELECT 옆에 해당 쿼리가 어디서 호출 받고, 어떤 작업을 하는지 부가적인 정보와 함께 주석을 작성해 놓으면 좋다.
-- GOOD
SELECT /* [CommonDao.selectInfo][byeoom][과일명+갯수 Info 조회] */
CONCAT(FRUIT_NAME, AMOUNT) AS INFO
FROM FRUIT_BASKET;
-- BAD
SELECT CONCAT(FRUIT_NAME, AMOUNT) INFO
FROM FRUIT_BASKET;
가독성 좋게 정리한 쿼리
상기 내용들을 적용해보면 다음과 같다.
SELECT /* [CommonDao.selectAllInfo][byeoom][모든 Info 조회] */
FRUIT_NAME
, CONCAT(FRUIT_NAME, AMOUNT) AS INFO
, AMOUNT
, PRICE
FROM FRUIT_BASKET
WHERE FRUIT_NAME = 'APPLE'
AND AMOUNT > 5
;
마무리 😎
상기 내용을 작성하면서 든 가장 중요한 점은,
- 내가 속한 프로젝트의 SQL 작성 규칙을 우선으로 따를 것.
- 별도 규칙이 없다면, 특히 들여쓰기와 주석 작성을 잘할 것.
- 열받게 휘갈기며 작성하지 말 것.
SQL 작성에 있어서 특별한 규칙이 있는건 아니다. 가독성 좋게 작성하는게 어렵다면 DB툴이나 SQL 구문 정렬 사이트도 있으니 이용해보자. 유지보수에 용이하게 작성하는게 제일 중요한 것 같다.
참고문헌 📝
https://velog.io/@datarian/good-sql-code
https://www.goodsource.co.kr/71
https://hing9u.tistory.com/83