하고재비
PI 업무 준비 본문
코드 품질 메트릭스
순환 복잡도(Cyclomatic Complexity)
코드 내 가능한 실행 경로의 수를 측정하는 지표입니다
if, for, while, case 등 조건문과 반복문이 많을수록 높아집니다
일반적으로 10 이하가 권장되며, 높을수록 버그 발생 가능성과 유지보수 어려움이 증가합니다
메소드를 작게 분리하여 복잡도를 낮출 수 있습니다
결합도(Coupling)와 응집도(Cohesion) 수준
결합도: 한 모듈이 다른 모듈에 의존하는 정도입니다. 낮을수록 좋습니다
응집도: 한 모듈 내 요소들이 얼마나 관련성 있게 묶여있는지 측정합니다. 높을수록 좋습니다
의존성 주입, 인터페이스 활용 등으로 결합도를 줄이고, 단일 책임 원칙을 통해 응집도를 높일 수 있습니다
중복 코드(Code duplication) 비율
동일하거나 유사한 코드가 여러 곳에 반복되는 정도입니다
일반적으로 전체 코드의 5% 미만이 권장됩니다
중복은 유지보수 비용 증가, 버그 전파 위험을 높입니다
추상화, 상속, 공통 유틸리티 클래스 등으로 해결할 수 있습니다
기술 부채(Technical debt) 정도
빠른 개발을 위해 최적이 아닌 해결책을 선택했을 때 발생하는 미래 비용입니다
코드 문제의 수정 비용을 시간으로 환산하여 측정합니다
SonarQube 같은 도구로 측정 가능합니다
정기적인 리팩토링으로 관리해야 합니다
객체지향 설계 원칙 준수 여부
SOLID 원칙 적용 상태
Single Responsibility(단일 책임): 클래스는 한 가지 책임만 가져야 함
Open/Closed(개방/폐쇄): 확장에는 열려있고 수정에는 닫혀있어야 함
Liskov Substitution(리스코프 치환): 자식 클래스는 부모 클래스를 대체할 수 있어야 함
Interface Segregation(인터페이스 분리): 클라이언트가 사용하지 않는 인터페이스에 의존하면 안 됨
Dependency Inversion(의존성 역전): 추상화에 의존해야 하며 구현체에 의존하면 안 됨
디자인 패턴 활용도
생성 패턴(Factory, Singleton 등), 구조 패턴(Adapter, Composite 등), 행위 패턴(Observer, Strategy 등)의 적절한 활용 여부
과도한 패턴 남용은 오히려 복잡성을 증가시킬 수 있음
상황에 맞는 패턴 선택이 중요함
캡슐화, 상속, 다형성의 적절한 활용
캡슐화: 데이터와 그 데이터를 처리하는 메소드를 하나로 묶고 외부 접근을 제한
상속: 코드 재사용을 위한 계층 구조, 과도한 상속은 복잡성 증가 (합성 고려)
다형성: 같은 인터페이스로 다양한 구현체를 다룰 수 있는 능력
개발 프로세스 효율성
코드 리뷰 프로세스의 효과성
리뷰 주기, 포괄성, 피드백 품질 등을 평가
자동화된 정적 분석과 수동 리뷰의 균형
리뷰 문화와 건설적인 피드백 교환 방식
CI/CD 파이프라인 최적화 상태
빌드, 테스트, 배포 자동화 수준
파이프라인 실행 시간과 안정성
품질 게이트와 자동 롤백 메커니즘
테스트 자동화 수준과 테스트 커버리지
단위, 통합, 기능 테스트의 커버리지 비율
테스트 품질과 실행 속도
테스트 코드의 유지보수성
병목 현상 및 성능 이슈
실행 시간이 긴 메소드/클래스 식별
프로파일링 도구를 통한 느린 메소드 식별
알고리즘 복잡도 분석 (O(n²) vs O(n log n) 등)
캐싱, 비동기 처리 등 최적화 기회 발견
메모리 사용량이 높은 부분 파악
메모리 누수, 과도한 객체 생성 패턴 식별
대용량 컬렉션 처리 방식 검토
메모리 프로파일링 도구 활용
확장성 제한 요소 발견
단일 스레드 처리, 동기 블로킹 코드 파악
확장 시 병목이 될 수 있는 공유 자원 식별
수평적/수직적 확장성 제약 요소 분석
코드 유지보수성
문서화 수준 및 품질
클래스, 메소드, 매개변수 등의 명확한 설명 여부
API 문서, 아키텍처 다이어그램 등의 현행화 상태
복잡한 비즈니스 로직에 대한 설명 존재 여부
네이밍 컨벤션의 일관성
변수, 메소드, 클래스 등의 명명 규칙 준수 여부
이름이 목적과 역할을 명확히 표현하는지 여부
약어 사용과 일관성 있는 용어 사용
클래스 및 메소드의 크기와 복잡성
한 클래스의 적정 크기 (일반적으로 500줄 이하 권장)
메소드의 적정 크기 (일반적으로 30줄 이하 권장)
단일 책임 원칙에 맞게 기능 분리가 잘 되었는지 여부