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

김동현님의 프로필 이미지
김동현

작성한 질문수

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

회원 웹 기능 - 등록

MemberForm 대신에 domain 내 Member가 있는데 이것을 사용하면 안되나요?

작성

·

484

·

수정됨

3

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예

[질문 내용]
위 질문에 대해 김영한님이 옛날에 답해주신 내용이,

create(Member member)처럼 사용이 가능은 하나, 다양한 정보를 필요로 하는 경우가 있어 MemberForm 클래스를 따로 만드는 게 낫다는 말씀이었습니다.

 

여기서 궁금한 점이,

  1. MemberForm 클래스가 controller 패키지에 있어도 되는건가요?, 매핑 시 스프링 컨테이너에서 controller 를 찾는다고 하던데 이 뜻이 @Controller가 붙은 클래스를 찾는다는 의미인거지 Controller 패키지를 조사한다는 의미는 아닌거죠?

그래서 MemberForm도 controller 패키지 내부에 있을 수 있는거고.. 제가 이해한게 맞나요?

 

  1. 1번 질문과 유사한 질문입니다만,

    Mapping 시 @Controller 가 붙은 클래스를 전부 조사하여 해당 주소에 Maaping된 메서드가 있으면 호출하는 방식이면 클래스명은 따로 @Controller 조사할때 상관은 없는거죠?

 

답변 1

1

안녕하세요, 김동현 님. 공식 서포터즈 y2gcoder 입니다.

제목을 보고 들어왔는데, 이미 제목에 대해서는 답변을 찾으신 것 같습니다 :) 좀 더 부연설명을 하자면 domain 객체는 도메인 역할만 갖고 있는 게 좋고, HTTP Form 요청을 받아 매핑하는 객체는 관련된 역할만 갖고 있는 것을 보통 좋은 설계라고 합니다. SRP에 대해 들어보셨을 것이라 생각합니다.

  1. 맞습니다. 애너테이션을 대상으로 찾고 있습니다.

  2. 보통은 그렇습니다. 다만 다음 링크와 같이 우선순위가 낮고 요즘 잘 사용하지 않기는 하나 컨트롤러 내 @RequestMapping이 붙은 메서드명으로 매핑하는 경우도 있으니 참고해주시면 감사하겠습니다!



감사합니다.

김동현님의 프로필 이미지
김동현
질문자

추가적인 설명까지 답변 감사합니다~~!!!!

김동현님의 프로필 이미지
김동현
질문자

혹시 아래 메서드에서 MemberForm 객체를 어떻게 찾아서 create 메서드로 불러오는지

메커니즘이 따로 있나요? Member 객체로도 사용이 가능은 하다고 영한님이 말씀하신 것에 비춰보면 그냥 hello.hellospring 패키지 내부의 전체 클래스탐색하는건가요?

과거 유사 질문들을 보니 mvc 1편에서 알 수 있다곤 하시더라고요.

@PostMapping("/members/new")
public String create(MemberForm form){
    Member member = new Member();
    member.setName(form.getName());

    System.out.println("member = " + member.getName());

    memberService.join(member);

    return "redirect:/";
}

맞습니다. 스프링 MVC 1편에 자세히 설명하고 있습니다.

DispatcherServlet -> RequestMappingHandlerAdapter를 지나오면서 컨트롤러의 파라미터 애노테이션 정보 등을 기반으로 하여 거기에 맞는 ArgumentResolver가 붙어 요청 파라미터를 객체로 가공해줍니다 ㅎㅎ

 

김동현님의 프로필 이미지
김동현
질문자

답변 감사합니다!

김동현님의 프로필 이미지
김동현

작성한 질문수

질문하기