01. 내용 요약
15장 JUnit 들여다보기
세상에 완벽한 코드는 없다
* 의도륵 명확하게 표현하기 위해 조건문을 메서드로 분리
* 전후 단계가 있는 변수들 사이 시간적인 결합 (hidden temporal coupling)을 해결하기 위해 리팩터링
* 더 적절한 의미로 네이밍 변경
* 불 필요한 연산을 하는 코드 제거
남의 코드를 비판하고, 내 코드의 비판을 듣는 건 편안하게 여겨야 할 활동이다.
02. 오픈 소스 접근법
해당 솔류션에 대한 기본 지식을 먼저 익혀라
하둡을 분석하려면 구글에서 발표한 논문을 읽어 봐여하고, HBase를 분석하기 위해서는 BigTable 논문을 읽어야 합니다.
분석하고자 하는 솔루션에 대한 이론적인 배경 지식이 없는 상태에서 소스 코드를 바로 보면 그냥 얽혀있는 코드를 보고 있는 느낌이 든다.
복잡한 분산 컴퓨팅 환경에서 운영되는 솔류션인 경우 더욱 더 그 시스템의 기본 개념과 아키텍처를 이해하고 있어야합니다.
본인 PC에 빌드 및 실행 환경을 구축하라
코드 분석을 빨리하기 위해서는 분석에 필요한 로그를 추가하여 재 컴파일한 후 실행하면서 로그를 확인하는 것이 좋다.
단순 코드만 보면 특정 연산의 흐름이 어떻게 진행되고 있는지를 파악하기 어려운 경우가 많기 때문이다.
최근의 오픈소스들을 분산 환경에서 운영되는 경우가 많은데 이 경우라 하더라도 개발자의 PC에 빌드와 실행 환경을 모두 구성하는 것이 좋다.
빌드 및 실행환경을 구성하는 것만으로도 코드 분석의 50%는 진행되었다고 할 수 있다.
수정, 실행, 확인 사이클을 짧게 만들어라
코드를 분석하기 위해서는 분석에 필요한 정보를 출력하는 코드나 확인을 위한 코드를 추가한 다음에 기능을 실행해서 확인해야 하는 경우가 많다.
이 경우 수정, 실행, 확인을 위한 시간이 길어지면 그 만큼 효율이 떨어지게 되고 많은 시간이 소요됨
몇 번 반복하다 보면 같은 작업 패턴을 찾게되는데 이 때에는 스크립트를 만들어서 반복 작업을 효율적으로 하는 것이 좋다.
분석하면서 문서로 정리하라
분석을 하면서 그림 또는 문서로 정리를 하면 분석하는 그 시점에도 도움이 되지만 나중에도 도움이 된다.
문서는 굳이 UML이 아니더라도 ppt 같은 도구로 정리하고, 이렇게 중간 중간에 정리하면 머리속에서만 빙빙 돌던 생각이 정리될 때가 많다.
디버거 활용
* LOG level을 DEBUG로 설정
* 디버거의 breakpoint 기능을 활용
* System.out.println 보다는 Thread.dumpStack() 활용
코드의 일부를 통해 먼저 파악하기
* 당장 관심있는 부분부터 집중적으로 파악하라
* 테스트 코드는 좋은 교본이 된다.
* 그래도 어려우면 초기 버전을 다운로드 받아 분석하라
03. Spring 프로젝트 접근법
- repository 이름과 README.ml를 보고 프로젝트의 성격 파악
- 패키지 구조를 살펴본다(멀티 모듈인지)
- build.gradle을 보고 어떤 디펜던시를 쓰는 지 살펴본다.
- config 패키지 하위에 어떤 설정들이 되어있나 본다.
- controller 패키지 하위 코드를 보고 어떤 요청들을 처리하는 지 감을 잡는다.
- service 패키지 하위를 보고 비즈니스 로직을 추측한다.
- 데이터 구조를 알기 위해 resource 하우의 db 설정 파일을 보고 db에 접근. schema.sql 파일이 있으면 DDL을 읽어본다.
- 세부적인 비즈니스 로직을 확인할 때는 test 코드와 비교하며 이해