<aside>
목차
</aside>
<aside> 🧐
Route Handler 이전에 전처리를 하기위한 middleware가 존재하는데, 왜 굳이 Interceptor 계층을 따로 만들어서 처리하는가?
</aside>
Interceptor 챕터 학습 도중 위와 같은 의문점이 들었다.
NestJS의 요청 처리 라이프사이클을 살펴보면, Middleware와 Interceptor 모두 Controller의 route handler 이전에 실행되는 전처리 계층이라는 점에서 동일한 역할을 수행하는 것처럼 보인다.
그렇다면 둘다 전처리를 담당하는 것인데, 왜 굳이 계층을 분리하여 설계했을까?
<aside> ✏️
**Middleware**와 **Interceptor**는 일견 비슷해 보이는 두 계층이지만, 각각의 설계 철학과 추상화 레벨은 근본적으로 다르다.
문제는 "언제 실행되는가"가 아니라 **"무엇을 위해 존재하는가"**에 있다.
</aside>
디자인 패턴을 학습하면서 발견한 흥미로운 사실은, 구조적으로 유사하거나 심지어 동일한 형태를 가진 패턴들이 별개의 패턴으로 분류되는 근본적인 이유가 **설계 의도(Design Intent)**에 있다는 점이다.
즉, 코드의 표면적 구조나 구현 방식이 아니라, 그 패턴이 해결하고자 하는 문제의 본질과 설계자의 의도가 패턴 분류의 핵심 기준이 된다는 것이다.
이는 소프트웨어 아키텍처에서 'What'보다 'Why'가 더 중요하다는 원칙을 보여주는 대표적인 사례라고 할 수 있다.