> For the complete documentation index, see [llms.txt](https://ssosso.gitbook.io/study/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ssosso.gitbook.io/study/dev-build-up/undefined/9..md).

# 9. 코드베이스를 작게하라

## 가이드라인

* 목표 : 코드베이스를 가능한 작게한다
* 실천 : 코드베이스가 커지는걸 막고 시스템 크기를 적극적으로 줄인다
* 효과 : 제품, 프로젝트, 팀을 작게 하는것이 성공의 지름길이니 유지보수성이 향상 됨

> 프로그램은 그것을 유지보수하는 프로그래머의 능력을 뛰어넘을 정도로 계속 복잡해진다.
>
> -컴퓨터 프로그래밍의 7번째 법칙

### 1. 필요성

#### 대규모 코드베이스 구축을 목표로 시작한 프로젝트는 실패할 가능성이 높다

#### 대규모 코드베이스는 유지보수하기 힘들다

#### 대규모 시스템은 결함밀도가 높다

### 2. 적용가이드

#### 기능적 조치

* **범위추가에 맞서라** : 요구사항에 없는 기능 추가는 프로젝트 기간을 늘리고, 지속적인 버그를 만들어 내므로 적절한 협의가 필요
* **기능을 표준화하라** : 일관성 유지. 여러곳에서 방법만 조금씩 바꾸어 구현하는 불상사를 막기 위함. 코드의 재사용성을 높임

#### 기술적 조치

* **코드를 복사후 붙여넣기 하지 않는다**
  * 참조하여 구성하기
  * 복사한 코드가 여기저기 흩어지면 유지보수 힘듬
  * 테스트에도 용이하지 않음. 군데군데 동일한 테스트가 진행될 우려
* **기존코드를 리팩토링한다**
  * 코드베이스를 줄이기
  * 가독성을 높이기
  * 단순화 및 구조적으로&#x20;
  * 리팩토링 책 참고
* **서드파티 라이브러리/프레임워크를 사용한다**
  * 이미 구현된 내용 활용 (**바퀴를 재발명하지 말라**)
  * 유용한 or 필요한 서드파티의 라이브러리 활용하여 코드베이스를 줄임
  * 중복개발 줄임&#x20;
* **대규모 시스템을 분리한다**
  * 작은 시스템 여러개로 분리하는 것이 유지보수에 좋&#xC74C;**(모듈화, MSA)**
