반응형

1장. 사용자 관리 프로젝트로 알아본 스트럿츠 탄생 배경

Summary : 스트럿츠 프레임워크 워크북의 1장 원고를 통하여 스트럿츠 탄생 배경에 대하여 총 5번의 강좌를 통하여 알아본다. 이번 강좌에서는 사용자 관리 프로젝트에 대한 간단한 요구분석을 진행해 보도록 하겠다. 프로젝트라는 용어를 사용해서 사용자 관리 프로젝트가 상당히 거창하게 들릴지도 모른다. 그렇지만 독자들이 생각하는 것만큼 거창한 프로젝트는 아니다. 오히려 너무 간단해서 "이게 무슨 프로젝트야?"라고 실망감이 클지도 모르겠다.

예제 실행 방법

스트럿츠의 세부 항목을 살펴보기에 앞서 사용자 관리프로젝트 예제를 먼저 실행해보는 것이 이 장을 이해하는데 많은 도움이 될 것이다. 따라서 사용자 관리프로젝트 예제를 실행하는 방법에 대하여 살펴보도록 하겠다. 1장 예제의 디렉토리 구조를 살펴보면 다음과 같다.

[그림 1-1]은 이 장에서 개발하게 될 사용자 관리프로젝트의 디렉토리 구조이다. 1장 예제를 실행하기 위한 과정을 살펴보면 다음과 같다. MySQL, Tomcat, ANT의 설치에 관한 자세한 내용은 부록 1을 참조하기 바란다. 다음 설명은 MySQL, Tomcat, ANT가 설치되어 있다는 가정하에 설명을 진행하도록 하겠다.

사용자 관리 프로젝트를 위한 테이블 생성

1) chapter1/src 디렉토리를 보면 dbpool.properties파일이 존재한다. 이 파일은 MySQL데이터베이스에 대한 정보를 담고 있다. 이 파일을 자신의 데이터베이스 환경에 맞도록 수정해준다. dbpool.properties파일의 내용은 다음과 같다.

#JDBC Driver 등록한다.
drivers=org.gjt.mm.mysql.Driver

#사용할 데이터베이스의 URL
mysql.url=jdbc:mysql://localhost:3306/struts?useUnicode=true&characterEncoding=KSC5601

#사용할 데이터베이스의 사용자 아이디
mysql.user=javajigi

#사용할 데이터베이스의 비밀번호
mysql.password=javajigi

#초기 Connection pooling 사이즈를 입력한다.
mysql.initsize=5#Connection pooling 

최대 사이즈를 입력한다.
Mysql.maxpool=10

2) MySQL데이터베이스를 시작한 후 프롬프트 상에서chapter1 디렉토리로 이동하여 "ant db"를 실행하면 사용자 관리 프로젝트 예제에 필요한 테이블이 생성된다. 자료실 게시판을 위한 SQL스크립트는 chapter1/resources 디렉토리 아래의 chapter1.sql파일을 보면 된다.

[그림 1-2]와 같은 결과화면을 볼 수 있다면 데이터베이스 설정 및 테이블 생성이 제대로 된 것이다.

3) "ant db"를 실행할 때 빌드가 실패하면 두가지 원인이 있다. 첫번째는 dbpool.properties파일의 설정정보가 맞지 않을 경우이다. dbpool.properties파일에서 잘못된 부분을 수정한 다음 다시 실행한다. 두번째는 테이블을 drop할 때 테이블이 존재하지 않거나, 테이블을 생성할 때 테이블이 이미 존재할 때 발생한다. 이때는 에러 메시지에 따라 drop SQL의 주석을 추가하거나 제거해주면 된다.

사용자 관리 프로젝트 예제를 빌드.

사용자 관리 프로젝트 예제를 빌드하는 방법은 간단하다. 이 장에서 개발한 사용자 관리 프로젝트 예제는 모델1, 모델2, 스트럿츠 3가지 개발 방식으로 개발되었다. 따라서 3가지 예제를 각각 실행해 보기 위하여 빌드 또한 3가지 방법으로 할 수 있도록 구현하였다. 따라서 빌드하는 과정을 3가지 방법으로 살펴보도록 하겠다.

모델 1

1) 모델 1 개발 방식으로 개발한 예제를 보기 위해서는 프롬프트에서 chapter1로 이동한 다음 "ant model1" 명령어를 실행하여 사용자 관리 프로젝트 예제를 빌드한다.

2) 빌드가 정상적으로 진행되면 chapter1 디렉토리 하위에 dist라는 디렉토리가 생성되면서 chapter1.war파일이 생성된다.

3) 만약 시스템 환경 변수에 CATALINA_HOME 이 설정되어 있다면 CATALINA_HOME/webapps 디렉토리에 chapter1.war파일이 자동으로 디플로이 된다. 시스템 환경 변수에 CATALINA_HOME이 설정되어 있지 않다면 chapter1/dist디렉토리 아래의 chapter1.war파일을 CATALINA_HOME/webapps 에 복사한다.

4)
Tomcat서버를 시작한 다음 http://localhost:8080/chapter1/model1/login.jsp URL로 접근하여 모델1 방식으로 개발한 사용자 관리 프로젝트 예제를 테스트 할 수 있다. 자세한 테스트 방법 및 설명은 3절의 본문을 참조하기 바란다.

모델 2

1) 모델 2 개발 방식으로 개발한 예제를 보기 위해서는 프롬프트에서 chapter1로 이동한 다음 "ant model2" 명령어를 실행하여 사용자 관리 프로젝트 예제를 빌드한다.

2) 빌드가 정상적으로 진행되면 chapter1 디렉토리 하위에 dist라는 디렉토리가 생성되면서 chapter1.war파일이 생성된다.

3) 만약 시스템 환경 변수에 CATALINA_HOME 이 설정되어 있다면 CATALINA_HOME/webapps 디렉토리에 chapter1.war파일이 자동으로 디플로이 된다. 시스템 환경 변수에 CATALINA_HOME이 설정되어 있지 않다면 chapter1/dist디렉토리 아래의 chapter1.war파일을 CATALINA_HOME/webapps 에 복사한다.

4) Tomcat서버를 시작한 다음 http://localhost:8080/chapter1/model2/user_list.m2?command=list URL로 접근하여 모델2방식으로 개발한 사용자 관리 프로젝트 예제를 테스트 할 수 있다. 자세한 테스트 방법 및 설명은 4절의 본문을 참조하기 바란다.

스트럿츠

1) 스트럿츠 개발 방식으로 개발한 예제를 보기 위해서는 프롬프트에서 chapter1로 이동한 다음 "ant struts" 명령어를 실행하여 사용자 관리 프로젝트 예제를 빌드한다.

2) 빌드가 정상적으로 진행되면 chapter1 디렉토리 하위에 dist라는 디렉토리가 생성되면서 chapter1.war파일이 생성된다.

3) 만약 시스템 환경 변수에 CATALINA_HOME 이 설정되어 있다면 CATALINA_HOME/webapps 디렉토리에 chapter1.war파일이 자동으로 디플로이 된다. 시스템 환경 변수에 CATALINA_HOME이 설정되어 있지 않다면 chapter1/dist디렉토리 아래의 chapter1.war파일을 CATALINA_HOME/webapps 에 복사한다.

4) Tomcat서버를 시작한 다음 http://localhost:8080/chapter1/user_list.do URL로 접근하여 스트럿츠로 개발한 사용자 관리 프로젝트 예제를 테스트 할 수 있다. 자세한 테스트 방법 및 설명은 5절의 본문을 참조하기 바란다.

기타

1) 웹 애플리케이션 기본 디렉토리 구조로 생성된 예제는 chapter1/build 디렉토리에 생성된다. 따라서 [그림 1-1]의 디렉토리 구조가 생소한 독자들은 빌드를 실행한 다음 chapter1/build 디렉토리를 참조하면 쉽게 이해할 수 있다.

2) 각각의 개발 방법으로 새로 빌드하면 이전에 빌드한 디렉토리 내용은 삭제된다. 따라서 모델 1방식으로 개발된 사용자 관리 프로젝트의 예제 소스만을 보고 싶다면 "ant model1"으로 빌드한 다음 chapter1/build 디렉토리를 보면 된다. 모델2, 스트럿츠 또한 동일한 방법으로 확인할 수 있다.

빌드시 주의할 점과 궁금한 점.

1) 처음 빌드할 때는 상관없지만 한번 빌드한 예제의 소스를 수정한 다음 다시 빌드하고자 할 때는 Tomcat서버를 멈춘 상태에서 해야한다. 이유는 Tomcat서버가 시작된 상태일 경우 이전에 디플로이했던 디렉토리가 삭제되지 않는 문제가 발생해 빌드가 실패하는 경우가 발생하기 때문이다. 따라서 빌드는 항상 Tomcat서버가 멈춘 상태에서 실시해야 한다.

2) [그림
1-1]을 보면 WEB-INF디렉토리와 컴파일된 class파일이 없는 것을 볼 수 있다. 또한 독자들이 첨부된 CD의 예제소스를 보면 web.xml, struts-config.xml 파일들이 보이지 않는다. 이 파일들은 ANT로 빌드하면 자동생성되기 때문에 빌드를 실행한 다음 chapter1/build/WEB-INF 디렉토리에서 찾을 수 있다. 따라서 예제 소스에 보면 web.xml, struts-config.xml파일들이 없다고 의아해할 필요는 없다.

3) 모델 2나 스트럿츠를 기반으로한 애플리케이션을 개발하기 위해서는 기존의 모델1에 추가적으로 설정해야하는 정보가 있다. 그러나 이 장의 예제는 ANT로 빌드시 자동적으로 설정되기 때문에 추가적인 설정이 필요없다.

4) 예제 소스를 독자들이 수정해보고 싶다면 src디렉토리의 예제 소스나 JSP파일을 수정한 다음 새로 빌드하면 자동 컴파일 및 war로 압축되기 때문에 독자들이 수정한 예제를 테스트해볼 수 있다.

예제 테스트시 고려할 사항.

1) 이 장에서 개발한 예제는 사용자 관리 프로젝트를 위한 최소한의 기능을 포함하고 있다. 사용자 추가와 같이 새로운 내용을 추가, 수정하는 부분에서 자바스크립트를 이용한 데이터 검증과 같이 세세한 부분의 구현은 빠져있다. 예제를 테스트하는 사람이 개발자로 생각했기 때문에 비정상적으로 발생하는 부분까지 고려하지 않았다.

2) 실제 사용자 관리 프로젝트라면 권한에 따라 기존의 사용자를 수정, 삭제할 수 있겠지만 권한 기능이 빠져 있기 때문에 로그인이 가능한 상태에서는 모든 사용자들의 정보를 수정, 삭제할 수 있도록 구현하였다.

서두

초기 웹은 하이퍼 텍스트로 대표되는 HTML로 작성된 문서를 통하여 급속하게 발전하였다. 초창기 웹은 정적인 문서를 다루도록 설계되었으나, 웹이 점차 발전하면서 사용자들의 요구수준 또한 높아지면서 동적인 서비스를 요구하게 되었다.

이와 같은 동적인 페이지의 생성을 위하여 CGI, PHP, ASP, JSP등 다양한 언어가 등장하게 되었다. 이 같은 기술은 웹 환경을 획기적으로 변화시켰으며, 더 나은 웹 환경을 만들어내기 위한 기틀을 마련할 수 있었다. 그러나 웹 환경이 지속적으로 발전하면서 사용자들의 요구수준 또한 한층 높아지게 되었으며, 기존에 클라이언트/서버 환경으로 존재하던 수많은 애플리케이션이 웹 기반으로 전환하는 과정까지 진행되었다.

동적인 페이지들이 등장하기 시작했을 때는 웹 애플리케이션을 얼마나 빨리 만들어내느냐가 최대의 관심사였다. 따라서 고객이 원하는 결과물을 최대한 빨리 만들어 내는 기업들이 IT업계에서 인정받을 수 있었으며, 급성장하는 결과를 가져올 수 있었다. 그러나 시간이 지나면서 많은 기업들은 배보다 배꼽이 더 크다는 것을 느낄 수 있었다. 즉, 초기 웹 애플리케이션을 구축하는 비용보다 유지보수하는 비용이 몇배 더 발생하게 되었다. 또한 급속히 변하는 웹 환경에 기존의 개발 방법으로는 신속히 대응하기 힘들다는 것을 느끼기 시작했다.

이 같은 이유로 기존의 모델1개발 방식의 한계를 느끼게 된 개발자들은 MVC(Model, View, Controller)모델에 기반한 모델2라는 개발 방법론을 웹에 적용하게 된다. 하지만 모델2방식으로 전환하려고 했던 많은 개발자들은 너무도 복잡한 개발 방법과 재사용성에 한계를 느끼고, 이전의 개발 방법인 모델 1방식으로 되돌아가게 되었다. 모델2 방식으로 개발하기 위해서는 코드의 재사용성이 가능해야했으며, 웹 애플리케이션을 쉽게 만들 수 있도록 지원하는 기반이 마련되어야 했다. 이러한 필요성으로 인해 스트럿츠
프레임워크가 탄생하게 되었다. 모델1, 모델2, 스트럿츠에 대한 자세한 내용은 앞으로 자세하게 다룰 것이기 때문에 각각의 개발 방법을 모른다고 너무 걱정하지 말기 바란다.

스트럿츠 프레임워크의 기본 골격은 모델2와 같이 MVC 모델에 기반하고 있다. 모델2에서 부족했던 많은 부분들을 프레임워크 형태로 만들어 많은 부분의 재사용성을 높일 수 있도록 하였다. 따라서 아무런 기반도 없는 환경에서 모델2방식으로 개발을 시도했던 많은 개발자들이 더 쉽게 웹 애플리케이션을 만들 수 있는 기반을 제공하고 있는 것이다. 개발자들은 웹 애플리케이션의 하부에 대한 고민은 최소화하고, 애플리케이션의 비즈니스 로직에 집중할 수 있게 된 것이다.

책을 시작하는 이 장에서는 대부분의 웹 애플리케이션에 등장하는 사용자 관리 프로젝트를 모델1, 모델2, 스트럿츠 프레임워크 3가지 방법으로 개발해본다. 먼저 지금까지 가장 많은 개발자들이 이용하고 있는 모델1 방식에 대하여 살펴보겠다. 모델 1 개발방식의 장,단점을 살펴본 다음, 모델2 개발방식으로 변화되어 가는 과정을 예제를 통하여 이해할 수 있도록 하겠다. 모델 1에서 모델2로 바뀐다는 것은 기존의 웹 개발방식에 대한 사고의 전환을 필요로한다. 모델2로의 사고전환에 가장 핵심적인 부분에 대해서도 알아볼 것이다. 마지막으로 모델2의 한계점에 대하여 알아본 다음, 스트러츠와 같은 프레임워크가 등장할 수 밖에 없었던 배경에 대하여 살펴보겠다.

이 책은 스트러츠의 실전 활용 예제들을 중심으로 다루고 있는 책이다. 하지만 스트러츠에 대하여 바로 들어가지 않는 이유는 모델1, 모델2개발방식을 거쳐 스트러츠가 만들어지게된 배경이 무엇보다도 중요하기 때문이다. 또한, 모델 1 개발 방법에서 모델2 개발 방법으로 옮겨가기 위해서는 기존의 개발 방법에 대한 생각을 완전히 깰 필요가 있다. 기존에 가지고 있던 생각을 깨기에 복잡한 구조로 구성되어 있는 스트러츠
프레임워크를 바로 다루기 보다는 모델2를 통하여 사고의 전환을 꾀하고자 했다. 마지막 이유는 간단한 모델2 예제를 통하여 MVC모델에 대하여 깊이 있게 이해하려는 의도이다. 필자가 처음 MVC개념을 이해하기 위하여 스트럿츠 프레임워크를 접했을 때, 스트럿츠의 복잡한 구조와 세팅 등으로 인해 MVC에 대한 개념을 이해하기 전에 지쳐버렸던 기억이 있기 때문이다.

1. 사용자 관리 프로젝트 요구분석

프로젝트라는 용어를 사용해서 사용자 관리 프로젝트가 상당히 거창하게 들릴지도 모른다. 그렇지만 독자들이 생각하는 것만큼 거창한 프로젝트는 아니다. 오히려 너무 간단해서 "이게 무슨 프로젝트야?"라고 실망감이 클지도 모르겠다.

이 같이 작은 프로젝트를 선택하게 된 이유는 이 장에서 독자들이 이해해야하는 부분이 새로운 프로젝트를 이해하는 것이 주가 아니기 때문이다. 이 장에서 독자들이 꼭 이해해야 하는 부분은 모델 1 개발 방식과 모델 2개발방식, 스트럿츠 프레임워크를 이용한 개발 방법의 차이점을 이해하고 점진적으로 변화해가는 과정을 이해하는 것이 더욱 중요하다. 따라서 가능한 작은 규모로 프로젝트를 진행하면서 각각의 개발방식을 이해하는 데 중점을 둘 수 있도록 했다.

실전 프로젝트에서는 회원관리 같은 경우 무수히 많은 정보들을 요구한다. 하지만 이 장에서 살펴볼 사용자 관리 프로젝트는 사용자 아이디, 비밀번호, 사용자 이름, 사용자 이메일 주소만을 관리하도록 구현하겠다.

사용자 관리 프로젝트를 위하여 필요한 기능들을 사용자 관리 화면과 더불어 살펴보도록 하겠다.

로그인 기능을 제공해야 한다. 사용자가 입력한 아이디와 비밀번호가 같을 경우 로그인이 가능하며, 세션에 사용자 정보를 저장한다. 회원가입하지 않은 상태일 경우 회원가입 후에 로그인이 가능하다. 로그인이 된 상태에서 로그아웃을 할 수 있는 기능을 제공해야한다.

회원가입을 하지 않은 상태이면 회원가입을 통해 사용자 관리 프로젝트에 로그인이 가능하도록 해야한다.

사용자가 로그인 하면 사용자 리스트를 볼 수 있는 화면으로 이동한다. 사용자 리스트 화면은 현재 사용자 관리 프로젝트에 접근할 수 있는 모든 사용자들을 볼 수 있어야한다.

사용자 관리 프로젝트는 사용자별 정보를 볼 수 있는 기능을 제공해야한다. 사용자 정보화면에서 수정, 삭제화면으로 이동하여 수정, 삭제가 가능하도록 해야한다.

지금까지 살펴본 기능들을 제공한다면 사용자 관리를 위해 필요한 모든 기능들을 제공하는 것이다. 이상의 기능들을 바탕으로 유즈케이스 다이어그램을 그려보면 다음과 같다.[그림1-7 참조]

지금까지 살펴본 사용자 관리 프로젝트의 기능은 실제 사용자 관리 시스템을 구축하기 위한 최소한의 기능이다. 실제로 현업에서 개발되는 사용자 관리 시스템은 더 많은 사용자 정보를 요구하며, 사용자변 권한 관리까지 추가되기 때문에 이 절에서 분석한 기능보다 훨씬 더 복잡하고 많은 기능들을 요구하게 된다.

계속되는 절에서는 지금까지 살펴본 사용자 관리 기능을 구현해 보도록 하겠다. 먼저 모델1, 모델2, 스트럿츠에서 공통적으로 사용할 모델(비즈니스 로직과 데이터베이스 접근 로직을 말한다.)을 먼저 개발한다. 모델 1방식으로 개발할 경우 모델을 따로 만들지 않고 모델파트에서 할 모든 작업을 JSP에서 처리하는 경우도 있다. 이 장의 예제는 모델 1방식에 필요한 모델을 따로 분리하여 개발하는 것으로 한다.

그 다음 모델1, 모델2, 스트럿츠 개발방식으로 페이지의 흐름을 처리하는 방법과 모델 데이터를 사용자에게 보여주는 과정을 살펴보도록 하겠다.

강좌에 대하여

작성자 : 박재성
작성일 : 2005년 2월 20일

문서이력 :

  • 2005년 2월 20일 박재성 문서 최초 생성

참고 자료

Posted by 1010