본문 바로가기

회고/Error Handling

Nest.js in Life Cycle

Nest.js 공식문서에서 발췌한 Life Cycle 관련 자료를 먼저 보자.

 

공식 Nest.js 문서 발췌

 

 

express 에서와는 다른 개념들이 튀어나와서 매우 당황스러운 부분들이 있었다.

어느때 가드가 호출이 되고 인터셉터가 발동하며 파이프가 있고 등등.. 

분명 미들웨어가 존재하는데 가드는 뭐지? 인터셉터는?

 

미들웨어의 세분화


미들웨어란 Request route 를 따라 가던중 중간중간 데이터 가공 ( 인증 및 데이터 전처리 ) 을 위한 모듈 이라고 생각하면 좋을것같다. express에선 그것을 통틀어 Middleware 라 불렀었다면, Nest.js 에선 그것을 좀더 기능적 관점에 따라 세분화 시켰다 라고 보면된다.

 

🔥 그래서 Guard 는 뭔데?

 

공식문서를 보고 이해한 바로 표현해보자면 "경비아저씨" 였다.

 

요즘 아파트 출입 하기전, 가드라인에서 동 호수 눌러 호출을 하거나 개인 ID카드를 통해 인가를 받거나 혹은 경비아저씨를 호출해 인증을 받는 형태 라고 봐도 무방할 것 같다.

 

  • 동 호수 호출 -> DB 내 Refresh Token 확인
  • 개인 ID 카드 -> HTTP Headers in Message 에서 Authorization 값 확인 ( Access Token )
  • 경비아저씨 호출 -> 경비아저씨가 신원 확인 ( ID , PW ) 후 DB에서 확인 뒤 출입 허가

즉 비즈니스 로직 실행 전에 HTTP Request 에 대해 인증/인가 에 대한 부분을 확인하는 기능이 바로 ' Guard ' 인것.

 

🔥 Interceptor 는?

 

" 비서 "

 

난 좀더 비즈니스 로직에 신경을 쓰고싶다. 그래서 내가 받아올 데이터들 혹은 보내줄 데이터들을 이쁘게 가공해서 처리해주는 역할을 해주는 친구가 있었으면 좋겠다 할때 사용할 수 있는 친구가 인터셉터다.

 

  • Pre-Interceptor 의 대표적 예 : Logger ( 로거 ) 

요청이 어떤 경로를 통해 들어왔는지, 요청 메서드는 무엇인지 언제 들어왔는지 등등 기록에 관련된 업무를 처리

 

  • 서비스 로직 이후의 Interceptor 의 대표적 예시

어떤 API는 응답코드와 isSuccessful 을, 어떤 API는 message 만 가지고 있고 등등 API 마다마다 응답 해주는 형태가 다 다르다면 프론트엔드 입장에선 데이터 받아 쓸때 굉장히 난감할 것이다. 일관된 데이터를 받아야 협업이 될텐데, API 별로 응답 형태가 다 다르다면 얼마나 골치 아픈가? 그래서 이럴때 또 사용 할수있는 친구가 인터셉터 이다. 로직이 성공적으로 수행 된 뒤,

" 난 그냥 return 시킬테니까 Interceptor야. 너가 이쁘게 응답코드랑 로직 수행이 성공적으로 됬는지에 대한 Boolean, 그리고 Message로 꾸며서 보내 " 를 할수있는것.

 

🔥 Pipe 는?

Request 를 타고 들어오는 데이터에 대해 그 데이터가 Numeric 해서 number 타입으로 활용하고 싶다면,

 

 

이런식으로 활용이 가능하다. 파라미터에 있는 값은 ' String ' 타입이었을 테지만 Pipe를 거치면서 number 타입으로 받아올수 있게 되는것. 그래서 실 비즈니스 로직에서는 편하게 사용이 가능하게 가공되어져서 들어오게끔 할수있다.

 

 

정리 & 생각

 

그다음 포스팅에선 Guard의 내부 전략 로직에 대해서 다루려 한다. 그 전에 이 라이프 사이클이 어떠한 형태로 돌아가게 되는지에 대해서 이해가 충분히 필요했고, Nest.js 가 어떠한 흐름을 타고 로직이 실행이 되는지에 대한 부분을 알게되는 소중한 시간이었다.

 

한가지 중요한 점을 더 언급해 보자면, 라이프 사이클을 통해 로직이 수행되던중 특정 부분에서 Error 가 발생해서

Exception 이 터졌다고 가정했을때, Filter를 걸어두면 가드에서든, 인터셉터든 어디서든 중간 로직을 건너뛰고 바로 응답을 보내줄 수 있다. 즉 불필요한 로직을 수행하지 않게 될수있다는것.

 

Nest.js 를 쓰면 쓸수록 프레임워크가 꽤나 직관적이다 라고 생각이 든다.

'회고 > Error Handling' 카테고리의 다른 글

TypeORM + Postgresql Connection Error  (0) 2023.08.17
Nest.js Project 생성 오류 해결  (0) 2023.08.03
Sequelize - Transaction Error  (0) 2023.07.31
2023-05-24 GIT - Reset, Pull  (2) 2023.05.25