inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

탄탄한 백엔드 NestJS, 기초부터 심화까지

Exception filter & Pipes

Filter도 결국 middleware에서 처리할 수 있을거 같은데 나누는 이유가 있을까요?

689

Frridle

작성한 질문수 5

4

Filter도 결국 middleware에서 처리할 수 있을거 같은데 나누는 이유가 있을까요?

express nodejs mongodb NestJS ssr

답변 1

13

윤상석

안녕하세요 규섭님 :)

우선, 사용자의 요청이 들어올 때 네스트에서는 아래 단계를 거쳐 로직이 수행됩니다.

0. 요청

1. middleware (미들웨어) 

2. guards (가드)

    - 주로 permission (인증) 처리를 할 때 사용합니다.

3. pre-interceptors (인터셉터) 

    - 주로 post-interceptor를 위한 변수 선언, 함수 실행을 합니다. (선택)

4. Pipes (파이프)

    - 변환(요청 바디를 원하는 형식으로 변환), 유효성 검사를 합니다.

5. Controller (컨트롤러)

    - 라우터 역할을 수행합니다. (서비스 로직의 결과를 응답합니다.)

6. Service (서비스 ; 컨트롤러 안에 정의되어 있다면)

    - 해당 요청에 대한 핵심 로직이 수행됩니다.

7. post-interceptor (인터셉터) 

    - 주로 pre-interceptor 로직을 가지고 응답한 데이터를 가공하거나 전체 로직의 속도를 측정합니다. 최종적으로 성공적인 응답 데이터를 보냅니다.

8. exception filters (필터)

    - 예외 처리를 담당합니다. 에러 메세지를 원하는 형태로 가공해서 응답합니다.

9. 응답

이렇게 공통된 역할이 있는 레이어를 나눔으로써 로직을 레고처럼 맞춰서 사용할 수 있습니다. (AOP)

물론 미들웨어에서 res.on("finish", ... )처럼 post-interceptor의 역할을 대신하거나 특정 로직으로 exception filter 대신에 사용할 수 있지만 네스트가 제공해준 역할에 맞게 각 레이어를 사용하면 책임을 분리하고 가독성 높고 확장성 있게 개발할 수 있습니다. 따라서 각각의 목적에 맞게 레이어를 사용하는 것을 추천드립니다.

https://docs.nestjs.com/faq/request-lifecycle

감사합니다.

프로젝트 환경 세팅할 때 최신 노드 버젼을 사용하시는 분들은 참고하셔도 좋을 것 같아요~

2

80

1

DTO에 대한 질문

1

87

2

백엔드 MVC에서 View의 역할은 무엇인가요?

1

93

2

추가 업데이트 관련 건

0

90

2

nest js 버전문제

0

79

2

mongdb 스키마 공식 문서와 형태가 다른 이유 궁금합니다.

0

103

1

라인 끝에 에러 표시(eslint) 때문에 구글 찾아 보니.

0

74

1

전체 고양이 조회 라우터 중 error.message 오류

0

67

1

캡슐화 추가 설명 중 단일책임원칙 관련 질문

0

104

0

42강 고양이끼리 소통 댓글 구현 중 Schema hasn't been registered for model 'comments' 에러 해결

0

81

1

채팅 이슈

0

133

1

모듈이 더 이상 지원하지 않는답니다

0

206

1

오류가 있습니다

0

106

1

import 에서 오류가 납니다

0

127

1

이런 오류가 나옵니다

0

100

1

에러가 발생합니다

0

109

1

프론트 에러 뜨는데 수정 안해주시나요

0

156

1

emit() broadcast.emit() 질문있습니다

0

101

1

서버연결이 안됩니다.

1

403

1

[PM2][ERROR] Command not found

0

519

1

S3에 업로드까지는 성공했는데 사진이 나오지 않습니다.

0

248

1

error_code : Property 'user' does not exist on type 'Request<ParamsDictionary, any, any, ParsedQs, Record<string, any>>'.ts(2339)

0

601

1

jwt를 따로 연습하고 있는데 env를 못읽는 것 같습니다.

0

322

2

Ec2로 안하시는 이유가 있을까요?

0

343

1