인프런 커뮤니티 질문&답변

SHYU님의 프로필 이미지

작성한 질문수

쥬쥬와 함께 하루만에 시작하는 백엔드 - 스프링, 도커, AWS

4-3 [맛집] 맛집 생성 API 개발하기

RestaurantApi 컨트롤러 개발 질문

작성

·

148

·

수정됨

0

안녕하세요 쥬쥬님

 

RestaurantApi 컨트롤러 개발 시
프론트로부터 파라미터를 받고 서비스로 바로 넘겨주셨는데

 

현업이나 일반적으로 보통 컨트롤러에서 파라미터를 받으면
그대로 서비스 단으로 넘겨주는지 궁금합니다!

답변 2

0

쥬쥬님의 프로필 이미지
쥬쥬
지식공유자

안녕하세요. 지식공유자 쥬쥬입니다.

 

현업에서는 일반적으로 Scalar 값으로 넘기거나 객체 컨버팅을 한번 더 하여 메소드를 호출합니다.

 

예를 들어서, Request 객체가 있다고 가정했을 때 아래처럼 한번 컨버팅 하거나, 인자값을 풀어 사용하는 형태입니다 !

 

FooBarReqeust -> method(FooBarCommand/Query)

FooBarRequest -> method(propert1, proeprty2)

 

일반적으로 Request객체에서 아래처럼 바꾸어줍니다.

 

class FooBarRequest {
  String proeprty1;
  String property2;

  public FooBarCommand toCommand() {
    return new FooBarCommand(property1, property2); // builder가 있다면 builder 사용
  }
}

 

감사합니다 !

SHYU님의 프로필 이미지
SHYU
질문자

스칼라 값이라는게 예를 들어 Article이라는 객체의 필드가 id, title, content가 있으면 해당 필드 값이 스칼라 값이 맞을까요??

컨트롤러에서 Article로 파라미터를 받았을때 서비스로 article.getId(), article.getTitle 해서 서비스로 넘기는게 인자값을 풀어 사용하는 형태로 이해 했는데 맞게 이해했는지 궁금합니다!

객체로 컨버팅 한다는 것은 Request의 인자로 새로운 객체를 만들어 서비스단으로 넘기는 것으로 이해했습니다!

추가적으로 궁금한 것이 보통은 스칼라 값으로 넘기는지 아니면 객체로 컨버팅해서 넘기는지
판단하는 기준 및 더 자주 사용하는 방법이 뭔지 알 수 있을까요?

쥬쥬님의 프로필 이미지
쥬쥬
지식공유자

SHYU님이 이해하신바가 맞습니다 !

 

책 Clean Code에서는 일반적으로 인자가 3개 이상이 될 때 객체로 컨버팅하라고 권장합니다.

 

하지만 최근 Kotlin과 같은 언어에서는 named arugment 등의 문법을 지원하므로 이 또한 개발자분들의 성향에 따라 지키는 경우도 있고 지키지 않는 경우도 있습니다.

 

감사합니다.

SHYU님의 프로필 이미지
SHYU
질문자

답변 감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다.

현업이나 일반적인 상황에서 컨트롤러에서 받은 파라미터를 서비스 단으로 넘겨주는 것은 매우 흔하게 발생하는 패턴입니다. 이렇게 하는 이유는, 각 계층(레이어)의 책임을 명확하게 분리하기 위해서입니다. 컨트롤러의 주된 책임은 HTTP 요청을 받아서 그 요청에 맞는 처리를 서비스 계층에 위임하고, 결과를 HTTP 응답으로 매핑하는 것입니다. 반면, 서비스 계층의 책임은 주로 비즈니스 로직의 실행 및 데이터의 처리입니다. 파라미터 검증이 필요한 경우 또는 입력 데이터에 대한 변환 작업이 필요한 경우가 아니라면, 컨트롤러에서 받은 파라미터를 그대로 서비스 단으로 전달하는 것이 보통입니다.

또한, 파라미터 입력 후 서비스 계층으로의 정확한 데이터 전달을 위해 Spring Boot에서는 입력 데이터를 요구하는 타입으로 자동 변환하는 기능도 제공합니다. 예를 들어, @EndpointConverter 어노테이션이 붙은 ConverterGenericConverter를 통해 입력 데이터를 적절한 타입으로 변환할 수 있습니다. 이는 컨트롤러로부터 받은 파라미터를 서비스 단으로 넘겨줄 때 타입 변환을 자동으로 처리해줌으로써 개발자가 수행해야 할 작업을 줄여줍니다.

따라서, 컨트롤러에서 서비스 단으로 파라미터를 바로 전달하는 것은 일반적인 MVC 패턴에서의 분리된 책임을 따르는 정상적인 프로세스입니다.

SHYU님의 프로필 이미지

작성한 질문수

질문하기