별빛의 낙하지 :: [리뷰] 버그 없는 안전한 소프트웨어를 위한 CERT 자바 프로그래밍



작년인가, 재작년에 행안부에서 자바 시큐어 코딩 가이드라인이라는 이름으로 문서를 배포한 적이 있다. 그 당시에 행안부 가이드라인을 읽었을 때는 구체적 사례 자체보다는 그냥 규정에 대한 모음집 같은 느낌이라서, 굳이 이렇게 코드를 작성해야 될 당위성이나 그 밑바탕에 깔려 있는 원리들에 대해서 알 수가 없어서 좀 아쉬웠다.
 
  이 책은 나름대로 위험성에 대해서 레벨을 정해서 기준을 세우고 있고, 규칙에 대해서 분류를 상당히 잘해놓은 편이다. 거기에 그 해당하는 규칙에 대한 필수 예제들을 도입하고 있고, 그 근본 방식에 대한 설명 자체도 나름 잘 되어 있는 편이다.
 
  나름 재미있게 기억나는 부분의 예를 들어보면, primitive type에서 객체 타입으로 자동으로 변환되는 오토 박싱(auto boxing)과 관련한 코드 지침이 있었는데,jvm마다 == 메서드에 대한 자동으로 기억하는 것이 다를 수 있어서 발생 될 수 있는 문제에 대해서 설명이 되어 있는 부분에 대해서 해당 규칙에 대한 당위성을 잘 설명했다고 생각한다. (이걸 설명하기 위해서 언어 명세뿐만 아니라 jvm의 명세에 대해서 이야기 하고 있다.)
 
 
 번역, 편집 상태도 괜찮은 편이다. 책이 꽤 두꺼움에도 현재 책을 절반이상 읽은 상태에서 평가했을 때, 눈에 띄는 오타가 잘 발견되지 않았고, 오타로 의심했던 단어들에 대해서는 검색결과 그것이 표준어라는 새로운 사실도 알게 되었다.(결괏값(O) 결과값(X))
 
 책의 구성은 비슷한 부류의 책인 C버전의 CERT 프로그래밍 책을잠깐 읽은 적이 있었는데, 분류방식이나 책의 구성 자체가 매우 비슷하다.  먼저 목차와 서문 부분을 읽고, 관심 있는 주제 쪽으로 펼쳐서 읽으면 된다.
각 챕터 별로 첫장에 규칙에 대한 목차가 있고, 목차의 제목, 그리고 해당 페이지가 있다.  그리고 바로 옆장에 위험 평가 요약이라고 우선수위에 따라 찾아볼 수 있게끔 하고 있다.  잠깐 예를 들자면 [ex) LCK10-J. 이중 검사 동기화의 잘못된 형태를 사용하지 않는다. - 415] 개인적으로 애매한 용어에 대한 원어 병어 표기와  원전 참조표기를 병기해 놓은것도 마음에 든다.

  책을 읽으면서 규칙과 사례, 지침, 그리고 설명을 읽으면서 이러한 규칙을 테크닉이라고 부를 수 있겠다고 생각을 했다. 그러한 측면에서 보자면 effective 시리즈나 exceptional 시리즈와 같은 느낌이다. (물론 effective 시리즈와는 다른 점이 있다. 내용 구성적인 측면에서책의 흐름 자체가 스캇 마이어스처럼 옆집 아저씨가 읽어주는 느낌은 아니라는 점이 다르다. )

 
  결론적으로 말하면 이 책에서 말하는 코딩 가이드 라인은 기존의 프로그램을 작성 시에 나중에 추후 다른 사용자가 오용하여 발생할 수 있는 문제들에 대해서 소스코드차원에서 예방하는 것을 말한다.  기본적으로 입력값 필터링과 같은 것에서부터 시작해서, injection 공격을 막기 위한 예방, 자바 언어, jvm의 특성에 관한 것이나, 평소에 좀더 간과하기 쉬운 부분들에서 공부를 하고자 한다면 좋은 지침서가 되리라 생각한다.