inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

[보충] Pipe 패턴에 대하여

pipes

264

SJ

작성한 질문수 155

1

를 굳이 사용하지 않고 , 어차피 service 부분은 로직을 담당하는 부분이니 제외하고  컨트롤러 부분에서 pipe 가하는 필터링 부분 할수있지 않나요 ?? 

그렇게 치면.. service 필요없이 그럼 controller 만 해도 된다고 라고 하면 할말이 없긴한데.. 굳이 pipes 를 사용해야하는 이유를... 

다른분은 Pipe 를 사용하는 사례를 알겠다고 하겠지만 , 

저는 굳이 Pipe 를 사용하는 이유를 알고싶어여 ! 

mongodb express nodejs NestJS ssr

답변 1

13

윤상석

안녕하세요! 좋은 질문입니다.

사실 pipe의 기능을 모두 서비스에서 몰아 넣어도 됩니다. 또 서비스를 따로 분리하지 않고 모든 로직을 컨트롤러에 적어도 프로그램은 작동합니다.

하지만 하나의 함수나 클래스에 여러가니 기능이 얽혀있다면 특정 기능만 수정하고 재사용하려고 하기에 어려워지겠죠. 이는 유지보수가 힘들어지고 비용이 증가하는 현상을 초래합니다.

"좋은 코드"에 대해 생각해본다면, 각각의 함수와 클래스는 하나의 기능을 수행하는 것이 좋습니다.(단일 책임 원칙) 그리고 각각의 함수와 클래스는 DI나 인자값으로 데이터를 주고 받는 것입니다.

따라서 단순히 사용자의 요청과 응답을 처리하는 컨트롤러와 컨트롤러의 데이터를 받아서 특정 로직을 수행하는 역할인 서비스를 분리한 것입니다. 여기서 컨트롤러에서 서비스로 데이터를 인자값으로 넘기게 되는데 이 인자값을 가공하고 유효성 검사를 해주는 역할이 바로 pipe입니다. 물론 pipe를 쓰지 않고 하나의 서비스에 타입검사, 실수를 정수를 바꾸어주는 로직 등을 수행해도 됩니다. 그런데 다른 서비스 함수에서도 동일한 기능이 있다면 또 다시 해당 로직을 써야 합니다. 즉, 재사용성이 떨어지는 것이죠.

즉, 공통된 로직을 수행하는, 데이터 정재, 변환하는 로직을 모아서 pipe 로 처리하는 입니다.

즉, pipe를 사용하는 이유는 단일 책임 원칙을 지키며 요청받은 데이터를 잘 가공해서 service가 잘 사용할 수 있도록 돕는 것입니다. 

혹시 이해가 되지 않으시면 말씀해주세요. :)

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

2

101

1

DTO에 대한 질문

1

97

2

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

1

111

2

추가 업데이트 관련 건

0

105

2

nest js 버전문제

0

95

2

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

0

113

1

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

0

83

1

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

0

82

1

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

0

115

0

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

0

86

1

채팅 이슈

0

137

1

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

0

215

1

오류가 있습니다

0

114

1

import 에서 오류가 납니다

0

131

1

이런 오류가 나옵니다

0

106

1

에러가 발생합니다

0

117

1

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

0

166

1

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

0

107

1

서버연결이 안됩니다.

1

408

1

[PM2][ERROR] Command not found

0

528

1

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

0

254

1

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

0

607

1

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

0

330

2

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

0

345

1