14. 라이브러리 통해 코드 분석하기



라이브러리 분석을 통해 코드를 바라보는 시각 기르기


1. 책 내용 요약

JUnit 들여다보기

세상에 완벽한 코드는 없다

  • 의도를 명확하게 표현하기 위해 조건문을 메서드로 분리
  • 전후 단계가 있는 변수들 사이 시간적인 결합(hidden temporal coupling)을 해결하기 위해 리팩터링
  • 더 적절한 의미로 네이밍 변경
  • 불필요한 연산을 하는 코드 제거


SerialDate 리팩터링

남의 코드를 비판하고, 내 코드의 비판을 듣는 건 편안하게 여겨야 할 활동이다.

Make it Work

  • 테스트 코드가 모든 경우를 테스트하지 않는다.
  • 주석 처리된 테스트 코드들을 모두 동작하도록 손본다.
  • 코드의 구조를 개선하기 전에 버그들을 수정한다. (경계 조건 오류, 늘 거짓인 조건문)


Make it Right

  • 옛날 스타일 코드 제거(MonthConstants를 상속하는 방식 > enum Month)
  • serialVersionUID를 컴파일러가 자동 생성하도록 함 (직접 변경하지 않아 생기는 버그보다 변경된 UID로 발생한 예외를 디버깅하는게 낫다.)
  • DayDate(SerialDate) Abstarct Factory를 통해 생성하도록 한다.
  • 캡슐화를 위해 접근제한자를 수정(public > private)
  • 사용되지 않는 변수 제거
  • 불필요한 주석 제거



2. 오픈 소스 접근법

오픈소스 코드 분석 어떻게 하나-김형준 프로그램을 망치는 가장 좋은 방법 중 하나는 개선이라는 이름 아래 구조를 크게 뒤집는 행위다.

  • 해당 솔루션에 대한 기본 지식을 먼저 익혀라
  • 본인 PC에 빌드 및 실행 환경을 구축하라
  • 수정, 실행, 확인 사이클을 짧게 만들어라
  • 자신에게 질문을 많이 하라
  • 분석하면서 문서로 정리하라
  • 디버거 활용하기
  • 코드의 일부를 통해 먼저 파악하기



3. Spring 프로젝트 접근법

  1. repository 이름과 README.md를 보고 프로젝트의 성격을 파악한다.
  2. 패키지 구조를 살펴본다 - 멀티 모듈 프로젝트?
  3. 빌드 설정 파일(build.gradle)을 보고, 어떤 디펜던시(모듈)을 쓰나 살펴본다.
  4. config 패키지 하위에 어떤 설정들이 되어있나 본다. (RedisConfig, KafkaProducerConfig, DataSourceConfing, CircuitBreakerConfig, ChcheConfig…)
  5. controller 패키지 하위 코드를 보고 어떤 요청들을 처리하는지 감을 잡는다.
  6. service 패키지 하위를 보고 비지니스 로직을 추축한다.
  7. 데이터 구조를 알기 위해 resource 하위의 db 설정 파일을 보고 db에 접근해본다. schema.sql 파일이 있으면 DDL을 읽어본다.
  8. 세부적인 비지니스 로직을 확인할 때는 test 코드와 비교하며 이해한다.