인프런 커뮤니티 질문&답변
pipes
작성
·
260
답변 1
13
안녕하세요! 좋은 질문입니다.
사실 pipe의 기능을 모두 서비스에서 몰아 넣어도 됩니다. 또 서비스를 따로 분리하지 않고 모든 로직을 컨트롤러에 적어도 프로그램은 작동합니다.
하지만 하나의 함수나 클래스에 여러가니 기능이 얽혀있다면 특정 기능만 수정하고 재사용하려고 하기에 어려워지겠죠. 이는 유지보수가 힘들어지고 비용이 증가하는 현상을 초래합니다.
"좋은 코드"에 대해 생각해본다면, 각각의 함수와 클래스는 하나의 기능을 수행하는 것이 좋습니다.(단일 책임 원칙) 그리고 각각의 함수와 클래스는 DI나 인자값으로 데이터를 주고 받는 것입니다.
따라서 단순히 사용자의 요청과 응답을 처리하는 컨트롤러와 컨트롤러의 데이터를 받아서 특정 로직을 수행하는 역할인 서비스를 분리한 것입니다. 여기서 컨트롤러에서 서비스로 데이터를 인자값으로 넘기게 되는데 이 인자값을 가공하고 유효성 검사를 해주는 역할이 바로 pipe입니다. 물론 pipe를 쓰지 않고 하나의 서비스에 타입검사, 실수를 정수를 바꾸어주는 로직 등을 수행해도 됩니다. 그런데 다른 서비스 함수에서도 동일한 기능이 있다면 또 다시 해당 로직을 써야 합니다. 즉, 재사용성이 떨어지는 것이죠.
즉, 공통된 로직을 수행하는, 데이터 정재, 변환하는 로직을 모아서 pipe 로 처리하는 입니다.
즉, pipe를 사용하는 이유는 단일 책임 원칙을 지키며 요청받은 데이터를 잘 가공해서 service가 잘 사용할 수 있도록 돕는 것입니다.
혹시 이해가 되지 않으시면 말씀해주세요. :)





.png?w=112)