멀티캠퍼스

Servlet MVC 실습 코드 리뷰

isaacagent 2025. 9. 1. 23:34
728x90

약간 두서가 없는 글쓰기 복습이 될 거같다.

일단 기본적으로 시작하기 앞서 외부 데이터 베이스(MySQL)과 연결을 하기 위한 Gradle 설정이 필요하다. 추가로 mvc 형태로 구성을 할 텐데, 되도록이면 java 코드는 controller에서 사용하는 것을 지향하기 때문에 EL 및 JSTL 부류들은 jsp 쪽에서 사용이 가능은 하지만 지양하는 형태를 추천한다. 그래도 혹시 모르니 gradle 파일에 넣어보도록 한다.

 

시작은 웹서버를 돌리면 Login UI로 넘어갈 수 있는 링크를 하나 index.jsp를 수정해준다.

 

이후에 jsp 쪽에 사용자가 화면의 UI를 직접 볼 수 있는 공간인 view 폴더를 만들어 mvcLogin과 mvcList 파일을 만들어준다.

 

그림 1. mvcLogin 상황

기본적으로 mvcLogin의 형태는 아이디 비밀번호 입력, post 방식으로 contextPath 쪽으로 cmd가 loginProgress 보내는거, Cookie를 설정할 수 있는 checkbox 형태로 구성이 되어있다.

 

그림 2. JS 기능

추가적으로 자바 스크립트의 기능으로 클릭하면 form이 전송을 한다.

 

다음은 mvcList 파일이다. 해당 파일은 Login에 성공을 하면 나타나는 페이지로 데이터 베이스에 저장되어있는 내용들을 출력 및 검색, 추가 등이 되는 페이지이다. 현재까지는 검색 및 추가 기능은 구현을 하지 않았지만 출력이 되는 부분까지는 볼 것이다. 해당 출력이 되는 부분은 core 태그를 활용할 것이다.

 

그림 3. mvcList에서 core 태그 활용

다음은 데이터베이스들을 테이블에 배치하기 위해 사용된 <c:forEach > core 태그이다. 기본적으로 알고 있는 forEach 문과 동일한 역할을 한다. 'var = "i" ' 의 의미는 각 루프마다 현재 요소를 저장하는 변수 이름이다. 해당 루프에선 i가 담당을 하고 있고, i.속성을 통해서 각 요소의 필드에 접근이 가능하다. ex)i.empno, i.ename, i.sal 기타 등등 ( 물론 뒤에 있는 empno나 ename 같은 것은 데이터베이스의 속성명이다) items의 의미는 반복 대상으로 사용할 컬렉션이나 배열이다. list 값은 controller에서 설정을 한 setAtrribute에 의해서 request.getAtrribute로 상단에 미리 선언을 한 뒤 사용을 하였다. 그리고 마지막은 varStatus로 반복문의 상태정보를 가진 객체를 저장하는 변수(cnt로 표기)이다. 간단히 현재의 반복이 몇 번째인지 알려주는 역할이다. cnt.first나 cnt.last로 true/false 인지를 확인해서 현재 루프가 시작부분인지 끝 부분인지를 알 수 있다.

 

다음은 java 부분인데, 컨트롤러를 진행하기 전에 외부 데이터를 불러 올 수 있는 DBUtil에 대해서 먼저 알아 보도록 하자.

그림 4. DBUtil.java

 

기본적으로 MySQL에 입력을 할 수 있는 정보들과 추후에 Action에서 데이터베이스의 정보에 접속하기 위한 getConnection() 함수를 만들어준다. 그리고 데이터 관련 값을 객체로 담기 위한 EmpVO.java 파일을 만들어준다. getter(), setter(), Constructor, toString() 을 기본적으로 만들어준다.

 

이전 과정에서 만든 페이지가 진행되는 방식이 Dispatcher(Forward)로 나가는 것과 Redirect로 나가는 형태 두 가지로 나뉘었던 이전 코드에 더욱 기능을 추가할 예정이다. 

그림 5. ActionFactory 주요 기능

cmd의 인자를 받아서 관련된 객체를 생성하는 mapping 기능이다. 각 객체 생성은 Action이라는 인터페이스를 통하여 골자는 동일하지만 extends를 통하여 각 객체가 담당하는 기능들은 소폭 차이들이 존재한다. 소괄호 내부에 존재하는 파라미터의 의미는 (Path, isRedirect)이다. Path는 최종적으로 URL에 뜨는 위치고, isRedirect는 Forward형태로 할지, Redirect형태로 할 지를 결정하는 사항이다. isRedirect가 false면 forward 방식, true면 Redirect 방식이라고 보면 된다. 추가로 UI 로 나타나는 화면은 Path가 가리키는 최종 화면이 출력 되는 점을 참조 하면 된다.

그림 6. UIAction

 

Interface형태로 존재하는 Action.java를 상속 받아서 Override를 한 형태는 다음과 동일하다. 각 클래스에서 execute메소드 내부의 기능이 근소하게 나마 달라진다는 것을 알 수 있다. 

 

그림 7. LoginProcessAction.java

jsp에서 Login에 대한 기능이 필요할 것이다. 그걸 위한 파일이고, Path와 Redirect를 설정이 가능하다. 

 

그림 8. ListAction.java

이전에 작성했던 DBUtil을 통하여 데이터베이스에 있는 자료들과 연결하고 SQL Query문을 작성하여 각 속성들에 있는 값들을 empVO를 통하여 객체로 만들어 저장한다. 이는 while문을 통하여 모든 데이터가 뽑아낸다. 이후 finally 문으로 connection과 preparedState, 결과물을 담는 공간을 정리한다.

그림 9. list 선언

진짜 마무리로 mvcList에서 해당 List를 사용하기 위해서 setAttribute로 선언 해주면 getAttribute("list")를 통하여 저장된 데이터들을 불러올 수 있다.

 

 

이것으로 ListAction에서 외부 데이터베이스(MySQL)을 DBUtil을 통해서 불러온 이후 setAttribute를 통하여 list 객체를 생성하고, list페이지에서 해당 데이터를 열람이 가능하게 된다. 그리고 페이지 이동 관련은 ActionFactory.java에서 cmd의 인자 값을 통하여 Forward형태와 Redirect형태를 구분하여 페이지 이동방식이 달라진다. 그리고 interface를 통하여 다형성을 보장을 하였으며, list, ui, write 형태로 따로 나누어 유연성을 확장했음을 알 수 있다. 

'멀티캠퍼스' 카테고리의 다른 글

spring 코드 기초 복습  (1) 2025.09.15
Servlet Assignment 코드 리뷰  (0) 2025.09.08
서블릿 기초  (1) 2025.08.25
데이터베이스 Index  (1) 2025.08.19
데이터베이스 (DDL)  (2) 2025.08.12