100. 실력 향상 훈련 (6)
7. 메뉴의 추가
이제 회원 관리 외에 프로젝트 관리가 추가되었다. 이 기능들 사이로 자유롭게 이동할 수 있도록 화면 상단에 메뉴를 추가한다.
webapp/Header.jsp 파일을 열고 다음과 같이 변경한다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="spms.vo.Member"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<div style="background-color:#00008b; color:#ffffff; height:20px; padding:5px;">
SPMS(Simple Project Management System)
<%-- 메뉴 추가 --%>
<span style="float:right;">
<a style="color:white;" href="<%=request.getContextPath()%>/project/list.do">프로젝트</a>
<a style="color:white;" href="<%=request.getContextPath()%>/member/list.do">회원</a>
<c:if test="${empty sessionScope.member or empty sessionScope.member.email}">
<a style="color:white;" href="<%=request.getContextPath()%>/auth/login.do">로그인</a>
</c:if>
<c:if test="${!empty sessionScope.member and !empty sessionScope.member.email}">
<span style="float:right;">
${sessionScope.member.name}
(<a style="color:white;" href="<%=request.getContextPath()%>/auth/logout.do">로그아웃</a>)
</span>
</c:if>
</span>
</div>
'프로젝트', '회원' 메뉴 외에 '로그인' 메뉴도 추가하였다. 웹 브라우저에서 http://localhost:9999/web06/member/list.do를 요청한다(그림 1).
다른 메뉴를 클릭하여 동작되는 여부를 확인하면 다 잘 된다. 다음부터는 프로젝트 관리 기능도 포함하여 실습을 진행할 것이다.
★ 미니 MVC 프레임워크 만들기 총정리
이번 장에서는 다양한 기술과 기법을 도입하여 미니 MVC 프레임워크를 만들어 보았다. 특히 컨트롤러를 역할에 따라 두 부분으루 나누었다. 프런트 컨트롤러와 페이지 컨트롤러이다. 프런트 컨트롤러는 이름에서 알 수 있듯이 제일 앞에서 클라이언트의 요청을 받는 서블릿이다. 프런트 컨트롤러는 이름에서 알 수 있듯이 제일 앞에서 클라이언트의 요청을 받는 서블릿이다. 기존에 컨트롤러들이 하던 일 중에서 공통 작업을 처리한다. 페이지 컨트롤러는 특정 요청을 위한 작업을 수행한다. 즉 JSP가 사용할 데이터를 준비한다거나 데이터 처리가 끝났을 때 어떤 JSP를 실행해야 하는지 프런트 컨트롤러에게 알려주는 일이다.
기존에는 페이지 컨트롤러를 서블릿으로 만들었기 때문에, 페이지 컨트롤러를 추가할 때마다 배치기술서 파일(web.xml)에 등록해야 했다. 매우 번거로운 일이었다. 이를 해소하기 위해 인터페이스 문법을 활용하였다. 즉 프런트 컨트롤러와 페이지 컨트롤러 사이의 호출 규칙을 인터페이스로 정의해 놓고, 이를 구현하는 방식으로 페이지 컨트롤러를 생성하였다. 이렇게 하면 페이지 컨트롤러를 만들더라도 더 이상 web.xml 파일에 등록할 필요가 없다. 이것이 인터페이스를 활용하는 좋은 예이다.
사실 이 방식에도 문제가 있었다. 페이지 컨트롤러를 추가할 때마다 매번 프런트 컨트롤러에 이에 대한 내용을 추가해야 했기 때문이다. 이를 자동화하기 위해 ContextLoaderListener 클래스에서 페이지 컨트롤러를 준비하는 방식으로 변경하였다. 더 나아가 객체 관리에 프로퍼티를 도입함으로써 ContextLoaderListener 클래스를 변경할 필요가 없게 하였다. 이를 위해 리플렉션 API를 사용하였다.
객체 관리 기법으로 프로퍼티보다 더 편리한 어노테이션을 도입하였다. 어노테이션을 정의해놓고, 이를 DAO나 페이지 컨트롤러에 적용하고, 웹 애플리케이션이 시작될 때 이들 클래스로부터 어노테이션 값을 추출하여 객체를 자동 생성하는 방법이다.
이번 장의 목적은 단순히 MVC 구조를 개선하는 차원을 넘어서, 직접 미니 프레임워크를 만들어 봄으로써 인터페이스나 리플렉션 API, 프로퍼티 파일, 어노테이션 등 실무에 필요한 핵심 기술을 경험하게 하는 것이다.
다음 장부터는 실무 프로젝트에 사용되는 프레임워크들을 본격적으로 배워본다.
참고도서 : https://freelec.co.kr/book/1674/
[열혈강의] 자바 웹 개발 워크북
[열혈강의] 자바 웹 개발 워크북
freelec.co.kr