인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

maui2005님의 프로필 이미지
maui2005

작성한 질문수

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

MemberForm 과 웹 어플리케이션 계층구조에 대해서 질문이요..!

작성

·

231

0

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

[질문 내용]
여기에 질문 내용을 남겨주세요.
 
 
안녕하세요! MVC 1편 강의를 다 듣고 입문편을 나중에 듣게 되었습니다.
 
그런데 MemberForm 부분에서 이해가 안가서 질문드립니다.
 
1번)
createMemberForm.HTML (회원 등록 폼 HMTL) 을 보면
어디에도 MemberForm 을 호출하지 않는데 MemberForm 은 어떻게 호출되는 것인가요??
 
2번)
그리고 MemberForm 은 name 에 대한 get,set 함수 밖에 없는데 그냥 domain 의 Member을 호출해서 쓸수는 없는건가요?? 굳이 왜 만들어주는건지 이해가 가지 않습니다
 
3번)
MemberController에서 public String create(MemberForm memberForm)
으로 쓰여져있는데 이것은 함수 이름도 create 로 지정하였기 때문에 spring 이 처리 할 수 있는건가요?? 쌩뚱맞게 public String memberform (MemberForm memberForm) 이러면 처리가 안되는건가요??
 
4번)
GetMapping 시 value= 를 적어주는 것과 아닌 것의 차이가 궁금합니다..!
GetMapping("/member") vs
GetMapping(value = "/member")
 
5번)
웹 어플리케이션 계층구조 에 대해서 Service 에 들어가는 로직과 Repository에 들어가는 로직의 차이가 이해가 조금 안갑니다ㅜㅜ db 에 직접 접근하는 것들만 Repository 에 들어가고 Service에서는 Repository를 통해서만 동작하는건가요??
그렇다면 만약 db를 접근해야하는 서비스의 경우는 리포지토리에 못쓰는건가요...??
 
 
많은 질문 답변 감사합니다..!!
답변 주시면 감사드리겠습니다:)
좋은 하루 되세요
 
 
 

답변 1

0

안녕하세요, maui2005 님. 공식 서포터즈 codesweaver 입니다.
.
1번) 사용자가 폼을 입력한 후 submit 하면, 스프링이 호출된 컨트롤러의 매개변수를 먼저 살펴봅니다. 그리고 객체를 인수로 받을경우, 이 객체의 필드변수명과 폼 이름이 일치하는 것들을 매핑한 뒤 다음 컨트롤러에 전달해 줍니다. 즉, 스프링 컨테이너가 데이터를 채워준 객체입니다.

 

2번) 엔티티를 DTO처럼 쓰는것은 좋지는 않습니다. HTML 폼과 엔티티가 정확히 일치 하지 않을수도 있으며, 이런 불일치를 해결하기 위해 엔티티에 쓸데없는 필드를 추가하게 될 우려가 있습니다. 이는 일반적으로도 좋지 않은 결과이며 후에 JPA 연결까지 고려한다면 더더욱 나쁜 결과입니다. (물론 DB와 애핑하지 않을 필드라고 명시할 수는 있지만, 추천하지 않습니다)

 

3번) create는 메서드 이름입니다. 메서드 이름은 임의로 지으셔도 상관은 없습니다. 다만 기능과 부합하는 이름이기만 하면 됩니다. (가령 회원을 생성하는 메서드 이름이 addMember() 라면 이상합니다. add는 무언갈 생성한다기 보다는 List나 Map, 배열등에 새로운 요소를 넣는것처럼 보이기 때문입니다)

 

4번) GetMapping, PostMapping, RequestMapping 등은 소괄호 안에 여러개의 옵션을 제공할 수 있습니다. url 정보 단 하나만 있을떄는 value= 를 생략할 수 있으나, url 정보 외에 별도의 옵션을 주려면 반드시 value=Xxx, anotherOption=Xxx 형태로 명시해야 합니다.

 

5번) 서비스는 로직에 대한 처리라고 보시면 되며, 리포지터리는 DB에 대한 처리를 전담한다고 생각하시면 됩니다. 컨트롤러에서 전달받은 데이터 등을 서비스에서 가공하며 이 가공된 데이터를 리포지터리를 이용해 DB에 입력하는 등의 행위를 합니다. 이런 논리상의 분리는 현대는 거의 의무적으로 따르고 있습니다.경우에 따라서는 컨트롤러에서 서비스를 거치지 않고 리포지터리를 바로 호출하기도 합니다.
.
감사합니다.

maui2005님의 프로필 이미지
maui2005

작성한 질문수

질문하기