최근 대기업에서 일하는 몇몇 친구들과 밥을 먹다가 코드 규범에 대한 이야기가 나왔다. 항저우의 한 전자상거래 대기업에서 백엔드 개발을 하는 한 친구는 그들의 팀이 최근 코드 리뷰를 진행했는데 결과가 놀라웠다고 한다——가장 많이 지적된 문제는 논리 오류도 성능 문제도 아니었고, SQL을 너무 아무렇게나 작성한 것이었다. 키워드 대소문자 혼용, 들여쓰기 엉망, 줄바꿈은 기분대로, 조금만 복잡한 쿼리 문장은 미로처럼 작성되었다. 팀장이 그 자리에서 말하기를: 앞으로 SQL은 반드시 포맷팅해야 하며, 통과하지 못하면 다시 작성하라고 했다.
이것은 사실 개별 사례가 아니다. 주변에 물어보니 베이징, 선전의 여러 인터넷 회사 친구들도 그쪽에서도 진짜로 시행하기 시작했다고 한다. 예전에는 SQL을 작성할 때 실행만 되고 결과만 맞으면 누가 모양을 신경 썼겠는가. 하지만 지금은 다르다. 코드 규범이 "권장"에서 "요구"로 바뀌었고, SQL 포맷팅은 특히 별도로 떼어내어硬性 지표로 삼았다.
왜 갑자기 이렇게 깐깐해졌을까? 말하자면 팀 협업의 대가가 너무 크기 때문이다. 생각해보라, 한 프로젝트에 십여 명이 있는데 오늘 누군가 3중 중첩 서브쿼리를 작성하고, 내일 또 누군가 전부 대문자 키워드로 된 유니온 쿼리를 작성하고, 모레는 주석조차 없는 복잡한 JOIN을 작성한다. 시간이 지나면 이 테이블은 아무도 건드리지 못하고, 코드 한 줄 수정하려면 반 시간을 들여 처음 작성한 사람이 도대체 뭘 하려 했는지 추측해야 한다. 더 말할 것도 없이 온라인에서 문제가 발생했을 때, 장애를排查하는 사람이 그 SQL 덩어리를 보면 혈압이 바로 치솟는다.
또 하나 매우 현실적인 이유——지금 많은 회사가 SQL 심사 플랫폼을 운영하고 있어서 코드 제출 시 자동으로 스캔한다. 형식이 규범에 맞지 않으면 병합 요청조차 통과할 수 없다. 일부 팀은 심지어 SQL 포맷팅을 성과 평가에 포함시켰는데, 듣기에는 좀 과장 같지만 실제로 일어나고 있다. 그 항저우 친구는 그들의 팀이 지금 매주 SQL 규범 통과율을 집계하고, 연속 꼴찌인 사람은 팀 전체에 밀크티를 사야 한다고 했다.
그러면 어떻게 해야 할까? 매번 SQL을 작성한 후 수동으로 공백과 줄바꿈을 조정할 수는 없다, 효율이 너무 낮다. 이때 SQL 포맷팅 도구가 유용하다. 문장을 작성한 후 도구에 붙여넣으면 원클릭으로 엉망인 SQL을 깔끔하게 정리할 수 있다. 키워드는 통일되게 대문자로, 들여쓰기 정렬, 줄바꿈할 곳은 줄바꿈, 공백을 넣을 곳은 공백을 넣는다. 복잡한 쿼리도 자동으로 절이 명확한 구조로 분해되어 논리를 한눈에 이해할 수 있다.
이 동작을 얕보지 마라. 형식이 통일되면 코드 리뷰 효율이 상당히 향상된다. 예전에는 SQL 한 줄을 리뷰하려면 먼저 5분을 들여 구조를 이해해야 했지만, 지금은 한눈에 스캔하면 문제가 있는지 알 수 있다. 신입이 오래된 코드를 인수할 때도 그 "천서" 같은 덩어리를 보고 걱정할 필요가 없다. 심지어 한 친구는 그들의 팀이 SQL 포맷팅 도구를 사용한 후 온라인 사고도 몇 번 줄었다고 했다. 왜냐하면 일부 논리 오류가 포맷팅 후에 특히 명확해져서 한눈에 보이기 때문이다.
물론 도구는 보조 수단일 뿐이고, 핵심은 습관을 들이는 것이다. 내 방법은 조금 복잡한 SQL을 작성한 후 먼저 포맷팅 도구에 넣어 한 번 돌려보고, 정리된 구조가 내가 생각한 것과 일치하는지 확인하는 것이다. 때로는 포맷팅 후에야 원래 불필요한 중첩을 작성했거나某个 JOIN 조건이 잘못된 위치에 있다는 것을 발견한다. 이런 자기 점검 효과는 단순히 눈으로 보는 것보다 훨씬 낫다.
결국 대기업이 SQL 규범을 검사하기 시작한 것은 형식 자체를 검사하는 것이 아니라, 그 뒤에 있는 엄격한 태도를 검사하는 것이다. SQL은 데이터와 가장 직접적으로打交道하는 도구이며, 잘 작성했는지 여부가 시스템의 안정성과 팀 협업 효율에 직접 영향을 미친다. 예전에는 실행만 되면 된다고 생각했지만, 지금은 안 된다. 예쁘게 실행되고, 남들도 이해할 수 있게 실행되어야 한다.
아직 SQL 포맷팅 도구를 사용해본 적이 없다면, 지금 바로 하나 찾아서 시도해보길 권한다. 온라인에 오픈소스, 온라인 도구 모두 있으니 손에 맞는 것을 고르면 된다. 몇 분도 걸리지 않지만, 습관을 들이면 자신의 SQL 수준이 어느새 한 단계 올라간 것을 발견할 것이다. 결국, 점점 더 치열해지는 환경에서 SQL 형식조차 제대로 관리하지 못한다면, 자신이 코드를 작성한다고 말하기还真不好意思.