소프트웨어 기능을 효과적으로 분할하는 방법은 크게 두 가지로 나뉩니다.
1. 수평적 분할 (Horizontal Cut)
- 정의: 기술 스택의 계층(모델, 컨트롤러, UI)별로 작업을 나누는 방식입니다.
- 특징: 특정 기술 영역 전문가가 집중할 수 있는 장점이 있으나, 기능 완성 전 사용자 상호작용이 불가능하고 통합 시 충돌 및 재작업 위험이 있습니다. 팀원 간 병렬 작업 시 소통 부재는 효율성 저하로 이어질 수 있습니다.
2. 수직적 분할 (Vertical Cut)
- 정의: 사용자에게 가치를 제공하는 특정 기능 단위로 작업을 나누는 방식입니다. 이는 모델, 컨트롤러, UI 등 모든 계층을 아우르는 ‘슬라이스’를 만듭니다.
- 특징: 작은 단위라도 사용자에게 즉각적인 가치를 제공하며, 피드백 반영이 빠릅니다. 레스토랑 보고서 예시에서 ‘판매량 그래프 표시’ 기능을 구현할 때, 필요한 모든 계층의 작업을 한 번에 완료하는 방식입니다.
기능 분할 시 고려사항
- 가치 우선(Value First): 고객에게 가장 중요한 핵심 기능을 먼저 식별하여 수직적 슬라이스 형태로 빠르게 제공해야 합니다. 고객의 진정한 요구를 파악하는 것이 중요합니다.
- 오버헤드 관리: 너무 큰 조각은 인지 부하를, 너무 작은 조각은 프로세스 오버헤드(PR, 리뷰 등)를 증가시킵니다. 적절한 크기 조절이 필수적입니다.
- 대체(Substitution): 복잡한 기능(예: 고급 그래프)은 간단한 대체(예: HTML 테이블)로 먼저 구현하여 빠르게 가치를 전달하고 인지 부하를 줄일 수 있습니다.
“나눌 수 없다”는 생각에 대한 반박
강연자는 기능을 나눌 수 없다고 생각하는 것은 종종 경험과 창의성 부족에서 비롯된다고 강조합니다. 아무리 복잡한 기능이라도 끊임없이 노력하면 분해 지점을 찾아낼 수 있으며, 이는 결국 더 나은 결과를 가져온다고 역설합니다.