소스코드리뷰(XXIX) SQL 문을 데이터베이스에 넣어두라

[목차(도우미)]
SQL 문(Structured Query Language statement)을 자원화하는 것은 여러모로 잇점이 있다. 일전에 SQL은 문자열이라는 것을 리뷰했을 때는 문자열이라는 점을 강조했었다. 그런데 SQL문을 데이터베이스에 넣어두는 것에 관해서는 아직도 위화감이 있어 보인다. 데이터베이스에 SQL문을 넣어두는 것외에 INI파일에 넣어두거나 XML파일에 넣어 두는 것은 local database라 부르는 한대의 컴퓨터에서는 과히 나쁘지 않다. 파일 읽기에 걸리는 시간이 그다지 길지 않기 때문에 성능에 큰 영향을 주지 않는다.

서버측 데이터베이스에 접속하는 SQL문을 작성한다면 XML 형식은 적절하다고 볼수 없다. 파일입출력에 시간이 걸리기 때문이다. 그러면 어떤 사람들이 주장하듯이 "소스코드 상에 배열로 선언하거나 문자열 변수로 사용하면 가장 간단하지 않은가?"

한두개의 경우라면 그것도 방법이다. 그러나 시스템에서 필요한 SQL문이 많아지고 기능이 추가되는 경우를 고려한다면 SQL문은 자원(resource)로 취급하는 것이 훨씬 편리하다. 물론 소스코드에서 볼때 SQL문은 본질적으로 자원이다.

SQL문을 소스로 취급하는 코딩은 재사용이 어렵고 소스코드의 수정이 매우 번거롭게 된다. 그결과 성능을 무시하고 "SELECT * FROM table" 처럼 불필요한 필드(Field)를 모두 가져와서 처리하는 경향이 있다. SQL hacks책에서도 저자가 지적하고 있는 것과 같이 말이다.(SQL Hacks책에 관하여는 다음 기회에 논하기로 한다.)

어차피 데이터베이스에 접근하여 데이터를 취득하기 위해 필요한 SQL문을 취득해두는 것은 큰 성능적 차이가 생기지 않으며 최적화된 SQL을 튜닝하기도 번거롭지 않게 된다. 유지 보수가 용이하게 된다는 것을 말한다. 그리고 드문 일이겠지만 하나의 시스템을 다른 데이터베이스를 써서 변경하고자 한다면 소스 코드상에 기술된 SQL문을 모두 손봐야 한다. 만약에 한쪽은 MySQL이고 다른 시스템이 Oracle로 되어 있다면? 소스코드 상에서 SQL을 분기해서 호출처리해 주어야 한다.

결국 어떤 방식을 구현하는가에 대해서는 개발자의 취향에 맡기기로 한다.
by 금메달.아빠 on 2011. 2. 9. 00:04 주요 단어: , ,
  • BlogIcon MastmanBAN 2011.02.11 17:35 신고 주소 수정/삭제 답글

    음... 이거 새로운 발상인데요. 한번도 SQL문은 DB화 한다는 생각을 한적이 없었는데...
    유지 보수 차원에선 괜찮은 방법 같기도 합니다.
    저도 나중에 한번 써먹어 봐야 겠습니다. ^^

    • BlogIcon 금메달.아빠 2011.12.10 00:36 신고 주소 수정/삭제

      SQL을 자원화하고 배열처리를 조정하면 100줄 소스코드가 10줄로 압축됩니다. SQL을 실행하기 위해서 mysql_query($sql)을 불러들이기 까지 두세줄이면 가능합니다.
      행복한 하루되세요.

체크하면 비공개 댓글이 됩니다