https://datarian.io/blog/good-sql-code
SQL 가독성을 높이는 다섯 가지 사소한 습관
지독하게 읽기 힘든 SQL문을 해석해 본 적 있으신가요?
datarian.io
<아티클 내용 요약>
- SQL은 띄어쓰기, 들여 쓰기에 거의 규칙이 없다시피 한 언어이다.
- 파이썬 같이 들여 쓰기, 띄어쓰기를 문법적으로 강제하는 언어를 써보면 SQL의 자유로움에 해방감을 느낄지도 모르지만 다른 사람이 작성한 SQL 문을 해독하면서 힘들 수 있다.
- SQL 문법에서는 강제하지 않지만, 가독성 있는 SQL 코드를 쓸 수 있는 다섯 가지 습관을 알려준다.
1. 예약어는 대문자로
- SELECT, FROM, GROUP BY와 같은 SQL 예약어들을 대문자로 쓰는 습관이다.
- SQL 언어를 지원하는 에디터를 사용하면 예약어들을 컬럼이나 테이블 이름과는 다른 색으로 하이라이팅을 해주기 때문에 굳이 대문자를 사용하지 않아도 잘 보인다.
- 하지만 에디터마다 하이라이팅 규칙이 다르고 DB 종류마다 함수들 이름도 약간씩 다르기 때문에 하이라이팅이 제대로 되지 않는 경우도 있으니 대문자로 써주는 습관이 있으면 좋다.
2. 행갈이를 자주 하자
- 한 라인에 코드를 쭉 쓰면 의미를 파악하기 위해 모든 코드를 다 읽어봐야 하지만 행갈이를 잘하면 각 라인의 첫 번째 예약어만 읽어도 작성자의 의도와 코드의 구조를 알 수 있다.
3. 행갈이를 더 자주 하자
- 행갈이를 잘하면 주석처리를 할 때 진가를 발휘한다.
- 쿼리를 작성할 때 어떤 로직을 제외했다가 포함시켜야 할 경우가 발생할 때는 행갈이를 더! 자주 하는 습관이 빛을 발한다.
- 어떤 사람들은 WHERE 절을 시작하자마자 '1 = 1'이라는 아무 의미 없는 조건을 넣어주고 행갈이를 한 다음 필터링 조건을 쓰기 시작하는 사람도 있다.
4. 주석을 쓰자
- 코드를 쓴 의도를 짤막하게라도 적어놓는 습관을 들이는 게 좋다.
- 서브쿼리가 많아지고 코드가 길어질수록 코드 단락이 어떤 의도로 작성되었는지 디테일을 적어놓아야 다음에 그 코드를 읽었을 때 이해할 수 있다.
- 주석으로 적어주면 좋은 것들
- 서브쿼리의 단위로 의미를 적어주기
- 조건에 적은 주석의 경우, 단순히 '이 조건은 이거다'라고 서술하는 것은 의미가 없다. 그러나 컬럼 이름만 보고 해석에 오해가 있을 수 있거나, 추가 설명이 필요한 경우에는 적어주기
- 조건이 왜 필요한지, 어떻게 동작하는지 같은 디테일을 적어놓으면 추후에 코드를 이해하는 데 도움을 주니 적어주기
5. Alias를 잘 쓰자
- 서브쿼리, 컬럼 이름을 대충 쓰면 나중에 어떤 쿼리의 이름인지 몰라서 그 이름을 사용한 서브쿼리까지 찾아가야 하는 경우가 생긴다.
- 데이터 분석용으로 쓰는 쿼리는 재활용할 일이 많지 않아 작명의 고통을 받아가며 이름을 작명해야 하나 싶지만 다음에 그 코드를 다시 보면 고통받을 수 있으니 애초에 잘 만드는 것이 좋다.
- 희소식은 구글에 '변수명 짓기 팁'을검색하면 수많은 선배 작명가들이 팁을 알려준다.
- 여러 규칙을 이야기했지만 가장 중요한 것은 같이 일하는 사람들과 합의된 규칙이다.
- 아무리 좋은 방법이라도 팀에서 사용하고 있는 컨벤션에 위배된다면, 기존 구성원들을 설득하고 레거시 코드들을 죄다 바꾸는 수고를 하지 않는 한 일단 기존 제도를 따라야 한다고 생각한다.
- 코드를 나 말고 누군가 볼 거라고 생각하면서 작성하고 정리하는 것이 중요하다.
<알게 된 개념>
- SQL을 작성하면서 신경 쓰지 않았던 부분들을 다시 돌아보게 되는 내용들이었다. 그리고 나도 행갈이랑 많은 것들의 습관을 고쳐야겠다는 생각이 들었다.
'데일리 미션 > Article' 카테고리의 다른 글
Article : A/B테스트 결과, 큰 숫자가 무조건 의미 있는 건 아니다 (1) | 2024.01.24 |
---|---|
Article : 데이터 분석가, 그게 뭐길래 (2) | 2024.01.23 |
Article : 데이터 분석 직무에 대한 기대와 현실 (1) | 2024.01.18 |
Article : A/B 테스팅이란 (0) | 2024.01.16 |
Article : 부트캠프 끝나면 뭐해야 되지? (0) | 2024.01.15 |