flow of control 이라는 말을 nestjs 생태계에서 한 적이 있어?

생각하는 과정 표시

아니요, 직접적으로 “flow of control”이라는 용어를 NestJS 생태계와 관련하여 언급한 적은 없습니다.

하지만 **AOP(관점 지향 프로그래밍)**와 인터셉터에 대해 설명하면서, NestJS가 어떻게 코드의 실행 흐름을 제어하고 공통 관심사를 분리하는지에 대해 논의한 적은 있습니다. 이는 “flow of control”과 간접적으로 관련된 개념이라고 볼 수 있습니다.

예를 들어, NestJS의 인터셉터는 특정 라우트 핸들러의 실행 전후를 가로채서 추가적인 로직을 실행하게 함으로써 코드의 실행 흐름을 제어하는 역할을 합니다.

aop 랑 관련있는 개념인건가?

네, 맞습니다. “flow of control” (제어 흐름)은 AOP (관점 지향 프로그래밍)와 매우 밀접한 관련이 있는 핵심 개념입니다.

AOP의 근본적인 아이디어 자체가 핵심 비즈니스 로직의 제어 흐름 중간에 다른 코드를 삽입하여 공통 관심사를 처리하는 것이기 때문입니다.


AOP와 제어 흐름(Flow of Control)의 관계

  • AOP의 목적: 로깅, 트랜잭션, 보안과 같은 **공통 관심사(cross-cutting concerns)**를 핵심 로직에서 분리하는 것입니다.

  • AOP의 작동 방식: AOP는 메서드 호출과 같은 특정 지점(Join Point)에서 원래의 제어 흐름을 가로채고(intercept), 그 앞이나 뒤, 또는 양쪽 모두에서 부가적인 코드(Advice)를 실행합니다. 이 과정 전체를 **위빙(Weaving)**이라고 합니다.

결국 AOP는 **‘제어 흐름을 어떻게 가로채고 조작할 것인가’**에 대한 패러다임이라고 볼 수 있습니다.


NestJS 인터셉터와 제어 흐름

NestJS의 인터셉터는 이러한 AOP의 제어 흐름 조작을 구체적으로 구현한 기능입니다.

TypeScript

// LoggingInterceptor.ts

intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
  console.log('Before...'); // 1. 원래 제어 흐름을 가로채서 먼저 실행

  return next
    .handle() // 2. next.handle()을 통해 원래 제어 흐름(컨트롤러 메서드)을 실행
    .pipe(
      tap(() => console.log(`After...`)), // 3. 원래 흐름이 끝난 후 추가 로직 실행
    );
}

위 코드에서 볼 수 있듯이, 인터셉터는 next.handle() 호출을 중심으로 원래의 제어 흐름을 명시적으로 제어합니다. next.handle()을 호출하기 전, 후에 코드를 추가하거나, 심지어 특정 조건에서는 next.handle()을 호출하지 않고 흐름을 완전히 중단시키는 것도 가능합니다.

따라서 NestJS에서 AOP를 이야기할 때, “flow of control”이라는 용어를 직접 사용하지는 않았지만, 그 개념은 인터셉터의 작동 원리 깊숙이 내재되어 있다고 이해하시면 정확합니다.