← 블로그

왜 나는 Vertical Slice를 고집하는가

한 줄 결론

나는 Vertical Slice를 폴더 미학으로 쓰지 않는다. 기능의 응집도를 지키고, 변경 범위를 국소화하고, AI가 스파게티 코드를 만들지 못하게 하기 위한 구조적 선택으로 쓴다.

왜 문제인가

프로젝트가 조금만 커지면 보통 이런 구조가 생긴다.

  • models/
  • services/
  • serializers/
  • views/
  • utils/

처음엔 깔끔해 보인다. 하지만 기능 하나를 수정하려면 여러 폴더를 계속 왕복해야 한다.

예를 들어 “보충제 비교 기능”을 바꾸려면,

  • model 수정
  • service 수정
  • serializer 수정
  • api 수정
  • test 수정

이렇게 흩어진다.

문제는 파일 수가 아니라 기능이 수평으로 분해되어 응집력을 잃는 것이다.

Vertical Slice는 무엇을 바꾸나

Vertical Slice는 구조를 이렇게 본다.

  • 인증 기능
  • 결제 기능
  • 뉴스 수집 기능
  • 사건 그룹핑 기능
  • 보충제 비교 기능

즉 “레이어별로 묶지 말고, 기능별로 묶는다”는 것이다.

그 안에서 필요한 model, api, schema, service, test가 같이 붙어 있는 구조가 된다.

이렇게 하면 한 기능의 변경 범위가 훨씬 분명해진다.

내가 이 구조를 선호하는 이유

1. 변경 범위가 좁다

기능 하나를 수정할 때 같은 슬라이스 안에서 대부분 해결된다.

즉,

  • 어디를 봐야 하는지 빠르게 안다
  • 관련 코드가 가까이 있다
  • 사이드 이펙트가 줄어든다

2. 기능의 책임이 명확하다

수평 구조에서는 service 폴더가 점점 잡탕이 되기 쉽다.

Vertical Slice는 기능 단위 경계를 강하게 만들기 때문에 “이건 어디에 속하는가”가 명확해진다.

3. AI-assisted coding에 유리하다

이건 내가 특히 중요하게 보는 부분이다.

AI는 코드를 빨리 만들 수 있지만, 구조적 감각은 사람보다 쉽게 흐트러진다.

Vertical Slice는 AI에게도 좋은 제약을 준다.

  • 이 기능은 이 폴더 안에서 다룬다
  • 관련 로직은 여기 있다
  • 새 코드를 넣을 위치가 예측 가능하다

즉 AI가 여기저기 흩뿌리는 코드를 덜 만들게 된다.

Layered Architecture를 완전히 버리라는 뜻은 아니다

오해하면 안 되는 점이 있다.

Vertical Slice는 레이어 개념을 없애는 것이 아니다. 기능 안에서 레이어를 로컬하게 유지하는 것이다.

예를 들면 한 슬라이스 안에 이런 식으로 있을 수 있다.

  • api.py
  • service.py
  • schema.py
  • models.py
  • tests/

중요한 건 레이어를 전역으로 펼치지 않는 것이다.

언제 특히 강한가

내가 보기엔 다음 같은 프로젝트에서 매우 강하다.

  • 개인 제품
  • 작은 팀 제품
  • 빠른 반복 개발이 필요한 서비스
  • 도메인 로직이 기능별로 명확한 시스템
  • AI-assisted coding을 적극 활용하는 프로젝트

반대로 아주 강한 플랫폼 공통 계층이 먼저 필요한 조직에서는 전역 레이어 구조가 더 자연스러운 경우도 있다. 하지만 대부분의 초기 제품은 거기까지 가지 않는다.

DAEMON에서의 의미

내가 DAEMON 계열 구조에서 Vertical Slice를 중요하게 보는 이유는, 속도와 유지보수성을 같이 가져가고 싶기 때문이다.

빠르게 만들수록 구조가 더 중요하다.

느리게 만들면 망가질 기회가 적지만, 빠르게 만들면 구조가 없을 때 바로 무너진다. 그래서 빠른 개발일수록 오히려 슬라이스 단위의 응집이 더 필요하다.

마무리

Vertical Slice는 예쁜 구조가 아니다. 변경 비용을 줄이고, 기능 응집도를 지키고, AI 시대에도 사람이 통제권을 유지하기 위한 실용 구조다.

내가 이 구조를 고집하는 이유는 단순하다. 실제로 덜 망가지기 때문이다.