-
TIL #33 - MVC 패턴프로그래밍/TIL(국비과정) 2020. 6. 16. 20:15
* 잘못된 부분이 있다면 댓글로 알려주시면 감사드리겠습니다.
MVC 패턴은 디자인패턴 중 하나로, Model, View, Controller 의 줄임말이다.
MVC 패턴은 로직(Java)과 html, javascript, css와 같은 프리젠테이션을 따로따로 분리해서 확장성이 좋게 만든 것이다.
출처 https://ko.wikipedia.org/wiki/%EB%AA%A8%EB%8D%B8-%EB%B7%B0-%EC%BB%A8%ED%8A%B8%EB%A1%A4%EB%9F%AC(위키백과) 아래는 실제 적용되는 방식에 대한 그림 설명이다.
먼저 클라이언트에 회원가입이나 로그인과 같은 요청을 한다.
그럼 제어 역할을 맡은 Servlet에서 그에 따른 응답을 한다.
Servlet은 받은 요청을 forward 방식으로 JSP에게 넘겨준다.
더보기Servlet은 JSP에게 forward, Redirect 형식으로 요청을 넘겨줄 수 있다.
forward는 직접 파라미터를 넘겨줄 수 있는 방식이고 상대방에게 페이지 주소를 숨길 때 사용할 수 있다.
보내는 쪽의 request, response로 통합되며 Data를 공유할 수 있는 방식이 된다.
Redirect는 직접 파라미터를 넘길 수 없고 보내는 쪽과 받는 쪽 각자 다른 response와 request를 가지고 있다.
그렇기 때문에 Data를 공유할 수 없다.
Servlet은 JSP에게 forward 방식으로 요청을 보내기 때문에 Servlet과 JSP는 하나로 합쳐지는 형식을 가진다.
즉, 같은 request, response를 가지는 셈이 되는 것이다. 그렇기 때문에 서로 Data 공유가 가능하다.
또 web.xml 에서 *.properties 라는 형식의 파일의 위치를 알려 주고
외부환경설정 파일인 properties에서 회원가입과 로그인을 수행할 곳의 위치에 따른 도메인을 Java 파일로 servlet에 보내준다.
(새로운 사실이 생기면 web.xml에다 명시를 해주면 된다. web.xml은 모든 웹이 거치는 파일이기 때문이다. )
이제 Servlet은 Java 파일로 가 요청에 따른 클래스를 찾아 받는다.
해당 Java 파일은 CommandProcess 인터페이스를 implements해 아래의 requestPro 메서드를 오버라이드한 추상메서드를 가지고 있다.
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public interface CommandProcess { // 이 인터페이스를 가지면 아래의 메서드를 반드시 가진다. public String requestPro(HttpServletRequest request, HttpServletResponse response) throws Throwable; }
가령 로그인 기능을 요청했다고 해보자.
먼저 loginForm.jsp에서 로그인을 수행한다.
사용자가 로그인을 진행하는 버튼을 누르면 Servlet으로 로그인을 해달라는 요청이 간다.
Servlet은 properties 확장자 파일로 가 URL 요청에 따른 클래스 위치를 찾아낸다.
여기서는 /member/writeForm.do가 URL 요청이다.
.do 는 임의의 명칭으로 아무거나 해도 상관없다.
위와 같은 URL을 설정하면 이제 JSP를 사용하던 때 처럼 http://localhost:8080/member/writeForm.jsp 와 같이 .jsp 로 끝나는 URL로 접근하면 안된다.
http://localhost:8080/member/writeForm.do 로 접근해야 접속이 가능하다.
Servlet은 로그인을 수행하는 LoginService.java에서 데이터를 가져오고 DB를 접속하고 그에 따른 응답을 한다.
이 때 DAO와 DB 와의 데이터 전달이 오가는 것이다.
만약 로그인이 성공한다면 loginOk.jsp, 로그인 실패면 loginFail.jsp로 return한다.
이 return 값이 사용자에게 최종적으로 보여질 페이지가 된다.
결론적으로 MVC는 사용자에게 로그인 페이지를 보여주는 View (loginForm.jsp)
제어 기능을 하는 Control(Control Servlet),
데이터베이스 등과 같은 정보의 가공을 수행하는 Model(LoginService)
이 3가지의 기능을 따로따로 분리해놓은 것이다.
만약 기능의 확장과 수정이 필요하다면 Control인 Servlet은 건들지 않고
Model과 View 만 수정하면 된다.
'프로그래밍 > TIL(국비과정)' 카테고리의 다른 글
TIL #34 - MyBatis시작 (0) 2020.06.22 TIL #33-1 MVC 패턴 예시 추가 (0) 2020.06.17 TIL #32 - Servlet, 톰캣을 이용한 회원가입 _ 회원가입 (0) 2020.05.28 TIL #31 - Servlet, 톰캣 (2) (0) 2020.05.26 TIL #30 - Servlet, 톰캣 (0) 2020.05.25