ி MVC
Model
: DB 비즈니스 로직을 수행한다. View
: 이용자가 보게 될 화면을 출력한다. Controller
: 이용자의 입력 처리 및 흐름제어를 담당한다. 비즈니스 로직
: 데이터 처리를 수행하는 응용프로그램의 일부이다. MVC 모델 종류
- 이용자 요청을 모두 JSP가 처리한다.
- 쉽고 빠르게 개발 가능하지만 뷰와 컨트롤러가 섞이므로 유지보수가 어렵고 기능 재사용성이 떨어진다.
Model 2
- 이용자 요청을 컨트롤러(Servlet)가 처리하고 결과를 View나 Model로 전송한다.
- 처리 작업이 분리되므로 유지보수와 확장이 용이하지만 구조 설계 시간이 많이 소요된다.
Service
DAO는 DB 테이블 당 하나씩 연결되지만 Service는 비즈니스 또는 기능 당 하나씩 사용된다.
OOP에서는 클래스를 세부적으로 나누어 다른 클래스와의 의존 관계를 낮추어야한다.
예를들어 게시글 처리와 관련된 기능들중 게시글 조회, 수정, 삭제 등이 있는데
이는 서로 다른 기능이므로 아래 예시처럼 각각의 Service Interface를 만들어 관리하면 유지보수 측면에서 좋다.
BoardSelectService
BoardInsertService
그런데 Service 하나 당 하나의 ServiceImpl을 가지는 1:1 구조라면 굳이 Interface를 사용할 필요 없지만
앞으로 기능이 추가될 예정(1:N)이라면 사용하는게 좋다.
Service를 만들 때는 Service를 Interface 파일로, ServiceImpl은 클래스 파일로 작성한다.
ServiceImpl은 구현부로서 기능을 구현하는 역할을 한다.
ி MVC Model2
로그인 페이지 접근
Controller @RequestMapping(value = "/login.do", method = RequestMethod.GET) public String login() throws Exception { logger.info("로그인 페이지 접근"); return "login"; // Servlet-context에 의해 login.jsp로 이동된다. }
로그인 요청
@RequestMapping(value = "/login.do", method = RequestMethod.POST) public String login(MemberVO vo, HttpSession session, RedirectAttributes rttr) throws Exception{ logger.info("로그인 요청"); session.getAttribute("member"); // 로그인 세션 확인 MemberVO login = service.login(vo); // service 호출 // 로그인 확인 if(login != null) { session.setAttribute("member", login); } else { session.setAttribute("member", null); rttr.addFlashAttribute("msg", false); } return "redirect:/"; // 로그인 여부에 따라 다른 페이지로 이동 }
Service
// MemberService public interface MemberService { public MemberVO login(MemberVO vo) throws Exception; } // MemberServiceImpl @Service public class MemberServiceImpl implements MemberService { @Override @Inject MemberDAO dao; public MemberVO login(MemberVO vo) throws Exception { return dao.login(vo); } }
DAO
// MemberDAO public interface MemberDAO { public MemberVO login(MemberVO vo) throws Exception; } // MemberDAOImpl @Repository public class MemberDAOImpl implements MemberDAO { @Inject SqlSession sql; @Override public MemberVO login(MemberVO vo) throws Exception { return sql.selectOne("memberMapper.login", vo); } }
Mapper
Mapper로 DB에 접근하여 데이터를 조회한다.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="memberMapper"> <!-- 로그인 --> <select id="login" resultType="com.sec.secprj.vo.MemberVO"> SELECT userId, userPass, userName FROM MP_MEMBER WHERE USERID = #{userId} and #{userPass} </select> </mapper>
매퍼에서 로그인 결과 값을 MemberVO에 전달하고 DAO -> Service를 거쳐 Controller에 전달된다.
최종적으로 Controller에서 로그인 여부에 따라 세션을 설정하고 JSP 페이지로 Forward 한다.
'프로그래밍 > 웹' 카테고리의 다른 글
Content-TYPE 헤더와 MIME-TYPE (0) | 2021.02.13 |
---|---|
스프링 실행 과정 및 요청 처리 순서 (0) | 2021.02.06 |
JSTL과 EL 사용하기 (0) | 2021.01.30 |
Spring 정적 리소스 매핑 설정 (0) | 2021.01.30 |
스프링 STS 프로젝트 배포하기 (0) | 2021.01.11 |