개인적으로 2003년부터 철저히 외면했던 기술이었습니다. 허나 옥션의 openapi를 하다보니 지나칠 수 없는 기술이었습니다. 웹서비스가 어려웠던 이유 중 하나는 xml 봉투를 만드는 일과 이렇게 만들어진 봉투를 post방식으로 요청하는 것이 쉽지 않아서였습니다.

이클립스에는 이런 복잡 다단한 작업을 WTP에서 편하게 할 수 있는 기능을 제공합니다.
http://www.eclipse.org/webtools/jst/components/ws/1.5/tutorials/BottomUpWebService/BottomUpWebService.html
문서를 기본으로 웹서비스를 쉽게 이용하는 방법을 알아보겠습니다. webtools 플러그인이 장착된 이클립스에서 가능합니다. JEE 패키지나 WTP all-in-one 이클립스를 받아서 사용하시면 됩니다.


새로운 프로젝트를 만듭니다. web으로 필터링해서 보이는 Dynamic Web Project 를 선택합니다. 자바를 사용하기 때문에 Dynamic Web Project 를 이용합니다.
사용자 삽입 이미지


프로젝트 이름은 simplews 로 정했습니다. Apache Tomcat 5.5를 기준으로 했습니다. Target Runtime으로 설치된 톰캣을 지정해줍니다.
사용자 삽입 이미지


Axis2 Web Services는 선택하지 않습니다.
사용자 삽입 이미지


프로젝트가 만들어지면 src 아래 wtp 폴더를 만들고 Converter.java 파일을 복사해 넣습니다. 섭씨, 화씨 온도 변환 프로그램입니다. 아주 간단하죠. 이러면 일단 웹서비스를 만들 준비가 끝난 것입니다.


사용자 삽입 이미지


이제 웹서비스 서비스를 만드는 작업을 해보겠습니다. 웹서비스의 프로바이더와 클라이언트를 동시에 만들게 됩니다. File > New 에서 web으로 필터링하면 아까와 다르게 Web Service 항목이 보입니다. 이것을 선택합니다.
사용자 삽입 이미지


wtp.Converter 서비스 구현체를 선택합니다. 그리고 아래에 눈금게이지를 Test client까지 올립니다. 그리고 아래에 Monitor the Web service 항목을 체크합니다. Finish 버튼을 클릭하면 1분 정도의 작업이 진행될 것입니다.
사용자 삽입 이미지


관련된 프로젝트가 3개가 더 생겼습니다. 웹서비스를 지원하는 Servers, simplews client 프로젝트 그리고 JSR-109 Web Services 라는 듣보잡 프로젝트가 생성됩니다. 톰캣이 기동되고 서비스를 테스트할 수 있는 클라이언트 페이지가 에디터 영역에 뜹니다.
사용자 삽입 이미지


celsiusToFarenheit(float)를 클릭해서 값을 넣어 테스트해봅니다. 36.5 를 입력하면 화씨온도가 Result영역에 보이게 됩니다.
사용자 삽입 이미지


하단의 뷰에 TCP/IP Monitor 가 뜹니다. 보는 옵션을 Byte에서 XML로 바꿔주면 조금 더 가독성이 높일 수 있습니다. 왼쪽이 Envelope이고 오른쪽이 응답된 서비스 데이터입니다.
사용자 삽입 이미지


생성된 파일에 대해서 다음 글로 분석해보겠습니다.

이클립스를 사용해서 개발을 하는 것은 기존 텍스트 에디터를 이용해서 작업하는 것과 많은 차이를 갖고 있다. 특히 웹 애플리케이션 개발에서는 더 많은 차이가 있게 되는데, 우선 언급해 볼 것이 서비스에 구성된 디렉토리와 개발에 사용되는 디렉토리의 차이점이다.

웹 애플리케이션은 서블릿 스펙에 따라서 디렉토리가 정해진 규칙을 갖고 있다.

/WEB-INF/ 브라우저를 통해서 접근이 불가능한 웹 애플리케이션 핵심정보들을 포함하고 있는 디렉토리
/WEB-INF/classes/ 패키지에 따른 디렉토리별 class파일과 properties 파일이 위치하는 곳
/WEB-INF/lib/ 웹 애플리케이션에서 사용되는 jar 파일이 존재하는 곳
/META-INF/context.xml 톰캣에서 사용되는 manager를 통한 배포용 웹 애플리케이션 Context정보 파일
브라우저를 통해서 접근 가능한 리소스들은 그 외의 디렉토리에 놓으면 된다.
특히 브라우저의 JVM 위에서 돌아가는 애플릿 class와 관련 jar 들은 /WEB-INF/ 밖에 위치해야 한다.
이 디렉토리들을 묶어서 Context 라고 얘기한다.

서비스와 관련된 디렉토리 구조가 위와 같고, 개발용 디렉토리 구조는 java 파일이라는 특징 때문에 다음과 같이 구성한다.

/src 패키지에 따른 디렉토리별 java 파일과 properties 파일이 존재하는 곳
/WebContent/ 앞에 언급한 브라우저를 통해서 접근 가능한 리소스들. 웹 애플리케이션의 컨텍스트 루트 디렉토리에 해당.
/WebContent/WEB-INF/ 앞에 언급했던 /WEB-INF/ 디렉토리와 같은 성격
/build/classes  /src 하위 자바파일의 컴파일된 class 들이 놓이는 곳. properties 파일은 자동 복사되는 곳.


개발 디렉토리와 WAS의 서비스되는 디렉토리의 매핑 즉 자연스런 연결은 빌드 툴인 ant를 통하거나 Eclipse같은 IDE에서 자동으로 해준다.

이클립스의 경우 Servers 라는 프로젝트가 웹 프로젝트와 별개로 생성이 된다. 여기에서 설정되는 서버의 세팅은 기본적으로 설치된 세팅과 별도로 운영된다. 즉 톰캣이 설치된 디렉토리의 conf 에 있는 설정과는 별개로 Servers하위의 서버별 server.xml 의 파일에 설정된 내용으로 동작이 된다는 뜻이다.
<%= request.getRealPath("/") %> 를 통해서 확인해 보면 이클립스에서 운영하는 디렉토리가 완전히 엉뚱한 곳에 존재함을 알 수 있다. 웹 프로젝트에서 파일을 변경하면 자동으로 파일이 해당 위치로 복사된다.


관련자료:
http://tomcat.apache.org/tomcat-4.1-doc/appdev/index.html 영문
http://www.apache-korea.org/tomcat/tomcat-4.1-doc/appdev/index.html 번역문

처음으로 JSP를 만들어보겠습니다. WebConent 디렉토리를 마우스 오른버튼으로 클릭해서 New > JSP 항목을 선택합니다.

JSP는 WebContent 아래 만듭니다.

JSP는 WebContent 아래 만듭니다.


New JavaServer Page 창이 뜹니다. Java하고 Server하고 찰싹 붙어있네요. 자바서버의 페이지라는 뜻이겠죠. 그래서 확장자는 자동으로 붙여줍니다. simple이라고 입력하면 .jsp는 자동으로 붙여서 파일이 생깁니다. Next 버튼을 클릭해서 다음으로 이동합니다.

확장자는 알아서 만들어 줍니다.

확장자는 알아서 만들어 줍니다.


한국어를 사용하는 우리에게 불필요한 기능 하나가 있습니다. 대표적인 것이 스펠링(spellig) 체크하는 기능이죠. 이것 외에도 이클립스 WTP를 설치하고 기본적으로 설정을 바꿔주는 것이 좋은 것들이 있는데 소개하려 합니다. 이클립스 유로파(3.3) WTP 버전을 기준으로 합니다.

1. 스펠링 체크 안하기

2. 문법검사 파일 범위 줄이기

3. 공백 비교 안하기

4. 이클립스 최대 메모리 확보하기

5. 패키지 익스플로러 트리계층으로 보기

6. Problems 뷰에서 하위 항목만 보기


일단 이 정도를 뽑아봤습니다. 성능에 관련된 것도 있고, 편한 UI 때문에 적어놓은 것도 있습니다.

제가 이클립스를 설치하고 손대는 설정들입니다.

WAR (Web application ARchive)
TAR와 비슷하죠. 묶는 겁니다. 무엇을? 위에 있잖아요. Web application을.

dwr 이라는 것을 샘플로 해보겠습니다.
http://getahead.org/dwr/download 에서 구할 수 있습니다.
dwr.jar 는 class로 구성된 java archive 파일이고, 그래서 jar입니다.
dwr.war 는 웹애플리케이션 묶여있는 것입니다.

jar 파일과 zip 파일의 압축 알고리즘은 같다고 알고 있습니다.
war 파일 안에는 WEB-INF/web.xml 파일을 포함해서 하나의 온전한 웹애플리케이션이 디렉토리를 갖추어서 들어가 있습니다.

이클립스에서 이 파일을 통해서 다이나믹 웹 프로젝트를 만들 수 있게 되어있습니다.
패키지 익스플로러에서도 가능하지만 WTP에 포함된 프로젝트 익스플로러(Project Explorer)에서 시작하겠습니다.

빈 여백에서 오른버튼을 클릭하면 컨텍스트 메뉴에 Import 가 있고 WAR file을 선택합니다.

사용자 삽입 이미지

dwr.war 파일이 있는 곳을 찾아서 지정하면 Web project 도 자동으로 채워집니다. Target runtime이 없다면 우측의 New... 버튼을 클릭해서 지정하시면 됩니다.
사용자 삽입 이미지

Next 버튼 말고 Finish 버튼을 클릭하면 dwr 프로젝트가 생성됩니다.
일단 여기까지 가져온 프로젝트의 디렉토리 구조를 확인해 보시면 됩니다.

에러 메시지가 보일 수 있는데 정리는 다음 글에서 다루도록 하겠습니다.
검사(validation)이라는 녀석은 말이죠, 아무 때나 들이대면 피곤합니다. 3.3에서 추가된 spelling check도 마찬가지죠. 지난 번에는 이 기능을 잠재우는 방법을 소개했었습니다. 이번에도 비슷한 경우를 얘기해봅니다. 툴의 기본 성격은 자동화입니다. 문법 자동 체크, 형식 자동 체크 등이죠. 하지만 느슨한 검사를 하는 HTML 같은 경우, 신경쓰고 싶지 않은 때가 많습니다. 더군다나 기존의 html코드가 저주받은 경우는 더 하죠.
사용자 삽입 이미지

index.jsp 파일에 경고도 아니고, 빨간 딱지가 붙었습니다. 굉장히 신경쓰이죠.
사용자 삽입 이미지

파일을 열어봤습니다. 도대체 무엇을 잘 못 했길래... 쯔업. 주석처리한다는 것이 >/tr<를 낙오시켜 버렸군요.
잘못한 것 많네요. 하지만, 이런 류의 미스는 신경쓰기 싫다 하시는 분들, 언제 저주받은 html을 다 정리하냐 현실적으로 불가능하다 하시는 분들, 그래서 준비했습니다. 음주단속 피하는 방법처럼 이것도 피하는 방법이 있습니다. 음주단속이야 술 안마시면 걸리지 않죠. 양조장에서 일하기 때문에 몸에서 기본적으로 알코올 도수가 나온다면... 음... 지금 삼천포로 가고 있습니다. 일단 Preferences 를 열어서 validation이라고 칩니다. Validation 메뉴 선택하고 세팅을 다음과 같이 맞춰줍니다.
사용자 삽입 이미지


xml 문법체크는 중요하기 때문에, 어긋나면 웹 애플리케이션이 죽어버리니까 체크했습니다.
그리고 프로젝트 다시 빌드하시면 깨끗하게 나옵니다. 그래도 찜찜하죠. 앞으로 짜는 코드는 말끔하게 짜 주세요. 특히나 table 태그 안에서 tr 사이에 있는 기생하는 form 태그, table 밖으로 나오시거나 td 안으로 들어가세요.
한 줄이 붕 뜬다고요? form 태그 속성에 style="margin:0" 주시면 그런 거 없습니다.
웹표준, 그리 나쁘지 않습니다.
두 개의 프로젝트의 차이점은 일반 자바 애플리케이션이냐 웹 애플리케이션이냐 입니다. 그에 따라서 개발하는 소스의 디렉토리 구조가 달라집니다. 이클립스에서 프로젝트 아이콘의 모양도 차이가 있습니다. J 글자는 Java라는 의미이고, 웹프로젝트는 동그란 지구 이미지가 하나 더 붙어있습니다.
Java Project and Dynamic Web Project

Java Project and Dynamic Web Project


일단 eclipse 3.3 wtp에서 옵션 조정없이 Java 프로젝트와 Dynamic Web Project를 만들어서 설정파일을 비교해 보았습니다. 퍼스펙티브는 모든 파일이 다 보이는 Resource Perspective로 정했습니다.
compare with each other

compare with each other


만들어진 두 개의 프로젝트를 선택하고 Compare With > each other를 선택합니다. 두 프로젝트의 디렉토리, 파일이 비교됩니다.

directory, file diff

directory, file diff

.classpath 파일은 프로젝트의 클래스패스가 지정되는 파일입니다. 이 파일 덕분에 환경변수에 클래스패스를 지정하는 고전적인 자바 개발법에서 벗어날 수 있죠. 하단의 파일 비교를 보면 웹 프로젝트 쪽에 2줄이 더 추가된 것을 알 수 있습니다.
일반 자바 프로젝트에서 자바 웹 프로젝트로 변하면서 추가된 디렉토리는 .settings , build, WebContent 디렉토리 셋입니다. build/classes 디렉토리는 bin 디렉토리의 대체입니다.
.project를 더블클릭해서 비교해 보시면 프로젝트 속성이 어떻게 변경이 되었는지 확인할 수 있습니다.

kenu
매주 토요일 회사에서 플렉스 세미나가 있는 관계로 개인적으로 추진하는 세미나를 하지 못했었습니다. 마지막 한 주를 남기고 강사님이 입원하였기 때문에 토요일에 시간을 낼 수 있었습니다. 강사님 빨리 완쾌하길 바랍니다.

언제 완성될지도 모르는 책을 쓴답시고 떠들고 다니는데, 책 쓰고 있는 내용을 정리하는 겸 해서 오늘 세미나를 합니다. 2시간이라는 시간은 아주 짧은 시간입니다. 다룰 수 있는 내용도 한정적입니다. 적어도 오늘 전달하고 싶은 내용은 eclipse WTP 환경을 설정하는 방법과, 디버깅하는 방법, 그리고 이클립스에서 재미있게 노는 방법들 입니다.

20명 넘게 신청을 하셨는데, 이미 만난 적이 있는 분이 반, 그리고 새로운 만남이 반입니다. 지식전달보다 가치 있는 것은 정신적인 교감입니다. 마음이 맞아야 일이 진행이 되는데, 또 한 번 노력을 해야겠습니다.

매번 책을 협찬해주시는 에이콘 분들에게도 고맙다고 써야 되겠지요. ^^

오늘 오신 분들 잘 오셨습니다. ^^

context path 변경하는 곳입니다.
Dynamic Web Project 프로퍼티에서 Web Content Settings 를 보면 Context Path를 변경할 수 있습니다.
context path

context path


항목에 아무 것도 없으면 / 를 입력하면 default context 입니다. okjsp 라고 넣으면 주소줄에 자동으로 /okjsp 가 들어갑니다.
단 eclipse 3.3 , WTP2.0 만 됩니다. eclipse 3.2 에서 wtp1.5는 defaultContext가 안 됩니다.
어제 계약을 했습니다.
계약 후 뒷풀이에서 너무 오버를 한 탓에 미안한 감이 많이 듭니다.
좋은 책을 쓰도록 심혈을 기울이겠습니다.

어려운 책은 아니니까 너무 기대하지는 마세요.
^^ 아마도 okjsp 사이트 총정리가 아닐까 싶네요.

+ Recent posts