RESTful 서비스를 위한 Eclipse + Tomcat 6 + jersey + myBatis(iBatis) 그리고 maven
| Knowledge/WebProgramming 2013. 8. 5. 22:01Java로 RESTful 서비스를 제공하기 위해, Tomcat과 jersey 2, 그리고 원격서버 배포를 위한 Maven 설정을 설명한다.
데이터베이스로의 접근은 myBatis를 사용한다. (구 iBatis. 이름이 바뀌었다.)
- Eclipse for Java EE 다운로드
이클립스를 쓰고 있다면 플러그인을 다운받아 사용해도 무방하지만, 웹 서비스 개발을 위한 플러그인이 설치된 패키지를 다운받는다.
괜히 플러그인 많이 깔리면 맛팅이 가잖아....
http://www.eclipse.org/downloads/
Eclipse IDE for Java EE Developers
한국 서버로 카이스트와 다음 미러 서버가 있는데, 내가 받을때만 그런건지는 모르겠지만, 카이스트 서버가 너무 느렸다 (예상시간 4시간)
그래서 다음 서버로 시도해봤더니 1분만에 다운 완료.
이클립스는 적당한곳에 압축을 풀어 실행하고.
- Maven을 통해 jersey 2 웹서비스 프로젝트 생성
이클립스가 실행되면 New Project에서 Maven - Maven Project를 선택한다. Maven 플러그인은 설치되어 있다.
"Create a simple project (skip archetype selection)"은 선택하지 말고 다음으로.
Archetype 창이 뜨면 jersey를 선택해야 하나, 목록에 없다. Add Archetype버튼을 선택하여,
Archetype Group Id = org.glassfish.jersey.archetypes
Archetype Artifact Id = jersey-quickstart-webapp
Archetype Version = 2.1
을 입력하고 OK. Repository URL은 비워둔다.
추가한 archetype을 선택하고 다음.
프로젝트의 정보를 입력할 차례이다.
GroupId와 ArtifactId가 조합되어 패키지명이 만들어진다. 적당히 입력.
Artifact Id는 톰캣에서의 Context 정도로 이해하면 될듯.
다른건 입력할 필요 없고, Finish.
여느 이클립스 프로젝트와 마찬가지로, 프로젝트에서 Run as를 선택하고 톰캣을 선택한다.
톰캣도 이클립스에 내장형으로 설치되어 있다. 편하네.
(톰캣 버전은 상관없을듯 하나, 이 포스팅의 설명은 6.0을 기준으로 함)
It works 라는 브라우저 화면이 뜨면 웹서비스는 만들어진거다.
- jersey에서 JSON 사용하기
프로젝트의 pom.xml 파일을 열어서 dependencies 쪽에 보면, 주석처리가 되어 uncomment this to get JSON support 라고 되어 있다.
JSON 지원을 위해 해당 부분 주석 제거
해당 부분을 적어보자면,
org.glassfish.jersey.media jersey-media-moxy
jersey 사용법이 목적이 아니므로 대략적으로만 설명을 붙여본다.
생성된 프로젝트에 보면, MyResource.java 파일이 있다.
이 파일을 열어보면 클래스 선언 앞에 @Path("myresource")라는 어노테이션이 있다.
Path annotation은 해당 path에 매핑이 된다는 뜻이며, Context 아래 path에 해당하게 된다.
그리고 클래스 내부에 @GET @Produces(MediaType.TEXT_PLAIN)의 뜻은,
GET 요청에 대해 text/plain 형태의 결과를 생성(produces)한다는 뜻이다.
JSON형태의 결과를 생성하려면 @Produces(MediaType.APPLICATION_JSON)을 사용하면 된다.
반대로, 입력을 받을때의 타입은 @Consumes 어노테이션을 사용한다.
자세한것은 jersey 문서 참고.
https://jersey.java.net/documentation/latest/index.html
- myBatis 설정
인터넷에 있는 대부분의 myBatis(iBatis) 설정은 spring framework를 기반으로 하는 환경이라 설정하는데 애를 좀 먹었다.
MySQL기준 설명.
일단, MySQL JDBC Connector와 myBatis 라이브러리를 추가한다.
maven을 사용하는 경우, 다운받아 복사하는 과정이 필요없이, pom.xml에 dependency만 추가해주면 환경은 완료된다.
다시 pom.xml 파일을 열어 depencencies 쪽에 두개의 dependency를 추가해준다.
org.mybatis mybatis 3.2.2 mysql mysql-connector-java 5.1.16
참고로, dependency에 사용되는 내용은 http://mvnrepository.com/ 이곳에서 검색이 가능하다.
수정 후 프로젝트 메뉴에서 Maven - Refresh 를 해보면, Maven dependency에 jar 파일이 추가된것을 확인할 수 있다.
mybatis에서 사용할 config 파일을 하나 만든다.
내 경우, com/example/mybatis/config.xml
그리고 myBatis의 핵심(?)인 쿼리를 작성할 xml도 하나 만들어 테스트 쿼리를 만들어둔다.
com/example/mybatis/sqlmapper.xml
소스에서는 다음과 같이 연결을 받아와 사용할 수 있다.
Properties props = new Properties(); props.put("driver", DRIVER); props.put("url", URL); props.put("username", USERNAME); props.put("password", PASSWORD); try { InputStream is = Resources.getResourceAsStream(CONFIG); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is, props); mSession = sqlSessionFactory.openSession(false); }catch(IOException e) { e.printStackTrace(); }
이후 mSession을 사용하여 쿼리를 사용하면 된다.
- 원격 서버로 maven을 사용하여 deploy 하기
일단 서버쪽 설정을 먼저 하자면, tomcat6와 tomcat6-admin 을 설치한다.
우분투의 경우 apt-get을 통해 손쉽게 설치가 가능하다.
tomcat6-admin 은 톰캣 서버를 관리하기 위한 관리툴이고, 접근은 http://주소:8080/manager/html 으로 접근이 가능하다.
접근시 로그인 정보가 필요한데, 이 정보는 /var/lib/tomcat6/conf/tomcat-users.xml 에 정의한다. (OS 따라 파일 위치는 다를 수 있음)
이 파일에 아래와 같이 role과 user를 추가해주면 된다.
role중, manager는 html 페이지 로그인을 위한 권한, manager-script는 maven deploy를 위한 권한이다.
maven deploy만 사용할거면 manager role은 없어도 되지만, 그래도 테스트 해보려면 웹페이지는 보는게....?
이렇게 하면 서버쪽 설정은 일단 끝.
다시 pom.xml 파일을 열어, maven build를 위한 설정을 한다.
이번엔 build 쪽 plugins 노드에 plugin 설정을 추가한다.
org.apache.maven.plugins maven-war-plugin 2.1.1 src/main/webapp src/main/webapp/WEB-INF/web.xml org.codehaus.mojo tomcat-maven-plugin 1.1 http://주소:포트/manager/html /server 로그인ID 비밀번호
url, username, password는 설명할 필요 없고,
path는 tomcat의 Context를 생각하면 된다. / 도 가능하다고 하는데, 이미 있는 context라며 deploy는 안된다.
(아마 서버 설정에서 관련 설정부분을 지워야 될 것 같다.)
실행방법은 프로젝트에서 Run As... - Build 를 선택하면,
Run configuration 창이 뜨는데 여기서 Goal쪽에 tomcat:redeploy를 입력하고 실행하면 된다.
Deploy 성공시 콘솔에
[INFO] OK - Undeployed application at context path /server
[INFO] OK - Deployed application at context path /server
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
이런식으로 로그가 찍힌다.
에러가 나면 원인을 찾아 수정....
이상으로 설정은 일단락.
항상 생각하는거지만, 자바를 사용하는 웹서버나 WAS는 설정과정이 참 지랄맞다.
연구 과제용 REST서버라 그냥 단순하게 APM 설치해서 RewriteModule써서 php로 하려고 했는데,
어쩌다보니 톰캣에 자바 환경으로 변경하게 되었다.
전부 설정하는데 수없이 삽질을.....
덧.
티스토리 글쓰기 편집기가 엉망인지는 모르겠는데,
위에서 사용한 xml 내용중에 태그를 닫기 위한 /> 처리가 제대로 되지 않고 닫기 태그가 엄한데 붙어있고 그른다......
아닌거 같으면 적당히 수정해서 적용해보시길....
[참고]
'Knowledge > WebProgramming' 카테고리의 다른 글
facebook API와 php로 새 글 등록하기 (9) | 2010.11.22 |
---|---|
euc-kr페이지에서 AJAX연동시 한글 깨짐 현상(php) (0) | 2010.04.05 |
Javascript의 unescape, ASP에서 사용하기 (0) | 2008.09.01 |
ASP API (0) | 2008.08.14 |
IE Developer Toolbar (0) | 2008.03.06 |