본문 바로가기
CS 스터디

MVC 디자인 패턴

by 새싹감자 2022. 9. 20.

MVC 디자인 패턴


MVC란 Model View Controller의 약자로 에플리케이션을 세가지의 역할로 구분한 개발 방법론이다.

  • Model: B/L, D/L , Domain object(DTO, VO)
  • View: UI->HTML, JSP/Spring에서는 XML, JSON,,,
  • Controller:C/L

 

 

요청의 진입점에서 

1. 파라미터 추출

2. 요청 파라미터 유효성 검사

성공

실패: 실패용 view 이용

3. B/L호출->service

4. B/L처리결과를 받아서 저장(공유객체에 저장) request, session, application

5.결과에 따라서 dispatch

과정으로 진행이 된다.

 

예를 들자면

userservice

int login(id, pw)

1.id이용 사용자 조회, 조회된 사용자 x, 로그인 실패

2.조회된 비번, Id 비교판단

3.로그인 성공이면 비밀번호 변경 시점 조회

4.조회시점이  6개월 이상이면, 비밀번호 변경 필요 알림

5.로그인 결과 리턴

과 같은 과정에 활용할 수 있다.

 

 

주문조회 controller에서는 다음과 같은 일을 진행하고,

  • 로그인 상태 체크
  • 주문정보 조회 service호출
  • 캐싱금지 처리
  • 응답헤더 셋팅

 

회원정보 controller에서는 다음과 같은 일을 진행된다.

  • 로그인 상태 체크
  • 회원정보 service 호출
  • 캐싱금지 처리
  • 응답 헤더 셋팅

 

이때, 대표 controller servlet을 만든다.  FrontController에서  if조건분기를 사용해 주문조회 controller인지, 회원정보 controller인지 확인한 후 subcontroller로 나눠서 처리한다.

 

 

진행 순서

jsp -> controller -> serviceImpl -> daoImpl

 

코드를 예시로 들어보자면,

jsp에서 form태그를 사용해서  controller로 보내준다.

 

 

Controller


contoller에서 act=join으로 넘겨준 form을 받는다.

else if("join".equals(act)) {
join(request, response); //여기바꿈
path = "/index.jsp";
redirect(request, response, path);
}

 

join함수는 아래와 같이 구현한다.  MemberDto에 setter와 getter로 정보를 세팅할 수 있게 만들어주었다.

controller를 구현했다면 service로 memberDto를 넘겨준다.

private String join(HttpServletRequest request, HttpServletResponse response) {
MemberDto memberDto = new MemberDto();

String userName=request.getParameter("username");
String userId=request.getParameter("userid");
String userPwd=request.getParameter("userpwd");
String emailId=request.getParameter("emailid");
String emailDomain=request.getParameter("emaildomain");

memberDto.setUserId(userId);
memberDto.setUserName(userName);
memberDto.setUserPwd(userPwd);
memberDto.setEmailId(emailId);
memberDto.setEmailDomain(emailDomain);


try {
memberService.joinMember(memberDto);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "/index.jsp";

}

 

 

Service

이걸 서비스에서

memberDao.joinMember(memberDto);

해서 Dao로 보내준다.

 

 

Dao

 

DaoImpl에서 디비를 연결해주고 query문을 작성한다.

@Override
public void joinMember(MemberDto memberDto) throws SQLException {
// TODO Auto-generated method stub
//여기서 db에 날려주면됨.
//여기서 insert
int cnt = 1;
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
conn = dbUtil.getConnection();
StringBuilder sql = new StringBuilder();
sql.append("insert into members (user_id, user_name, user_password, email_id, email_domain)\n");
sql.append("values(?,?,?,?,?)");
pstmt = conn.prepareStatement(sql.toString());
pstmt.setString(1, memberDto.getUserId());
pstmt.setString(2, memberDto.getUserName());
pstmt.setString(3, memberDto.getUserPwd());
pstmt.setString(4, memberDto.getEmailId());
pstmt.setString(5, memberDto.getEmailDomain());
pstmt.executeUpdate();

} finally {
dbUtil.close(rs, pstmt, conn);
}

}

 

페이지 넘길 때


데이터 넘겨주면 forward
그냥 넘어가려면(새로고침) redirect

private void redirect(HttpServletRequest request, HttpServletResponse response, String path) throws IOException {
response.sendRedirect(request.getContextPath() + path);
}

private void forward(HttpServletRequest request, HttpServletResponse response, String path) throws IOException, ServletException {
RequestDispatcher dispatcher = request.getRequestDispatcher(path);
dispatcher.forward(request, response);
}

 

request, response 메세지 구조

'CS 스터디' 카테고리의 다른 글

데이터 모델링  (0) 2022.09.27
세션과 쿠키  (0) 2022.09.20
프로세스, 스레드  (1) 2022.09.16
Queue를 활용해서 Stack을 만들기  (0) 2022.09.15
Stack을 활용해서 Queue만들기  (0) 2022.09.15

댓글