03.업/02.이클립스2023. 2. 28. 09:13

[출처] https://withpie.tistory.com/entry/JAVA-Build-Path-Problems 

 

에러메시지

 

Description Resource Path Location Type
The container 'Maven Dependencies' references non existing library ....\egovframework.rte.ptl.mvc-2.7.0.jar' Build path Build Path Problem

 

FAceted Project Problem(Java Version Mismatch)

 

등등..

 

잘 동작하던 이클립스가 갑자기 빌드가 안될때..

 

프로젝트의 자바버전과 이클립스프로젝트의 자바버전이 달라서 발생하는 에러이다.

해결방법)

 

프로젝트>마우스우클릭>properties project Facets에서 Java버전을 수정해주거나,

프로젝트>마우스우클릭>properties java Compiler Java버전을 수정해준다.

 

한마디로,

project Facets의 자바버전과,

Java Build Path의 자바버전이 동일해야 한다는 것*

'03.업 > 02.이클립스' 카테고리의 다른 글

git  (0) 2022.05.11
svn sharing error  (0) 2022.05.09
System.out.println() 단축키  (0) 2022.05.03
eclipse.ini설정  (0) 2014.08.08
HSQLDB(HyperSQLDataBase)  (0) 2014.07.18
Posted by 봄날의차
03.업/02.이클립스2022. 5. 11. 15:08

git

1.https://sin0824.tistory.com/8 참조

 

git clone 저장소

 

이클립스에서는 클론 저장소 지정해서 가져오기

 

2.이클립스에서 클론한 프로젝트의 프로젝트 가져오기가 안되는 경우

프로젝트를 생성해서 지정한 폴더로 프로젝트 가져오기를 한다.

'03.업 > 02.이클립스' 카테고리의 다른 글

Java Build Path Problems  (0) 2023.02.28
svn sharing error  (0) 2022.05.09
System.out.println() 단축키  (0) 2022.05.03
eclipse.ini설정  (0) 2014.08.08
HSQLDB(HyperSQLDataBase)  (0) 2014.07.18
Posted by 봄날의차
03.업/02.이클립스2022. 5. 9. 17:07

 => SVN sharing error 시에 SVN Interface : Client : javaHL(JNI) 로 변경해서 저장한다.

'03.업 > 02.이클립스' 카테고리의 다른 글

Java Build Path Problems  (0) 2023.02.28
git  (0) 2022.05.11
System.out.println() 단축키  (0) 2022.05.03
eclipse.ini설정  (0) 2014.08.08
HSQLDB(HyperSQLDataBase)  (0) 2014.07.18
Posted by 봄날의차
03.업/02.이클립스2022. 5. 3. 11:40

sysout , ctrl + space

'03.업 > 02.이클립스' 카테고리의 다른 글

git  (0) 2022.05.11
svn sharing error  (0) 2022.05.09
eclipse.ini설정  (0) 2014.08.08
HSQLDB(HyperSQLDataBase)  (0) 2014.07.18
[펌]Eclipse에서 Spring Maven 개발환경 설정하기  (0) 2014.07.17
Posted by 봄날의차
03.업/02.이클립스2014. 8. 8. 15:13

-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20130327-1440.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.200.v20140116-2212
-product
org.eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
256M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
-vm
D:/00.WORK/app/Java/jdk1.6.0_45/bin/javaw.exe
--launcher.appendVmargs
-vmargs
-Dfile.encoding=UTF-8
-Dosgi.requiredJavaVersion=1.6
-Xverify:none
-XX:+UseParallelGC
-XX:-UseConcMarkSweepGC
-XX:PermSize=64M
-XX:MaxPermSize=512M
-Xms256m
-Xmx1024m

Posted by 봄날의차
03.업/02.이클립스2014. 7. 18. 14:38

>> HSQLDB(HyperSQLDataBase) <<

출처 : http://iris2380.egloos.com/48714


1. jar파일 가져오기. (maven기반.)

pom.xml

<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<version>2.3.2</version>
</dependency>

2.perspective 열기 (Database Development)

3.Database Connections에서 New 클릭

Name : HSQLDB 입력

3.1.Driver 선택, 없으면 옆에 *모양 클릭해서 jar List tab에서 maven repository내에 jar파일을 지정해준다.

3.2.Database Connections

D:\00.WORK\app\hsqldbPlugin2\hsqldb.repository 디렉토리 생성

우클릭 New 

Drivers : HSQLDB JDBC Driver
Database : SAMPLE
Database location : D:\00.WORK\app\hsqldbPlugin2\hsqldb.repository
User name : sa
Password : sense
URL : jdbc:hsqldb:D:\00.WORK\app\hsqldbPlugin2\hsqldb.repository

Test Connection
확인


4.SQL Scrapbook
Data Source Explorer / DataBase 우클릭 : open SQL scrapbook


검색 : hsql 사용법

쿼리 오른쪽 클릭 
ctl + alt + X : 전체 실행
alt + X : 지정블럭 실행

http://soriwa.tistory.com/81


>>메모리DB 이므로 시작할 때 메모리에 올려줘야함. DB를 내리면 데이타도 같이 사라짐.

<jdbc:embedded-database id="dataSource" type="HSQL">
<jdbc:script location= "classpath:/db/sampledb.sql"/>
</jdbc:embedded-database>      

    <!--
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="net.sf.log4jdbc.DriverSpy"/>
        <property name="url" value="jdbc:log4jdbc:hsqldb:hsql://localhost/sampledb" />
        <property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
        <property name="url" value="jdbc:log4jdbc:hsqldb:hsql://192.168.0.44/SAMPLE" /> 
        <property name="url" value="jdbc:log4jdbc:hsqldb:hsql://localhost/SAMPLE" />
        <property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
        <property name="url" value="jdbc:log4jdbc:hsqldb:hsql://localhost/SAMPLE" />
        <property name="username" value="sa"/>
    </bean>
    -->

시작할때 classpath:/db/sampledb.sql 를 사용하지 않을 경우 소스상에서 테이블을 생성해서 데이타를 넣어주는 프로세스가 필요하다.

org.hsqldb.jdbcDriver
http://razorsql.com/docs/help_hsqldb.html



Posted by 봄날의차
03.업/02.이클립스2014. 7. 17. 10:16

출처 : http://bcho.tistory.com/729


Spring Maven 개발 환경 설정

 

※주 : Maven과 Eclipse Juno 버전 이상이 설치된 것을 가정으로 함


Pre-quest

이클립스 설치 : Juno  버전 이상 사용

Maven 플러그인 설치 : Help > Eclipse Market Place에서 Maven Integration for Eclipse 설치



1. 이클립스 설정

일반 기업의 경우 방화벽이 있는 경우가 많기 때문에 반드시 Proxy 설정 확인하고 시작할것

 

   eclipse에 proxy 설정

: Juno 버전 이상 Windows > Preference > Network 메뉴에서 Active Provider를 Mannual로 변경 한후, HTTP와 HTPS proxy entriy에 서버를 등록

   Maven에서도 해줘야 함

: Juno 버전 이상 Windows > Preference > Maven 메뉴에서 setting.xml의 위치를 찾아서 다음과 같이 proxy 설정 부분을 추가 작성

<proxies>

    <proxy>

      <id>optional</id>

      <active>true</active>

      <protocol>http</protocol>

      <username>proxyuser</username>

      <password>proxypass</password>

      <host>프록시 서버 주소</host>

      <port>포트</port>

    </proxy>

  </proxies>

         <proxy>

                  <id>samsung</id>

                  <active>true</active>

                  <protocol>http</protocol>

                  <host>프록시 서버 주소</host>

                  <port>포트</port>

         </proxy>

         <proxy>

                  <id>samsung-https</id>

                  <active>true</active>

                  <protocol>https</protocol>

                  <host>프록시 서버 주소</host>

                  <port>포트</port>

         </proxy>

  </proxies>

 

 

2. 프로젝트 생성

 

이클립스에서 New > Other > Maven > Maven Project 선택

Filter에서 maven-archetype-quickstart 를 선택

Ÿ   group id 에는 프로젝트명 (일반적으로 패키지명으로 맵핑됨)

Ÿ   artifact id에는 디렉토리명

Ÿ   Package에는 패키지 명을 정의

 

또는 아래와 같이 Command Line으로 생성후, 나중에 이클립스에서 Import

mvn archetype:generate -DarchetpeArtifacId=maven-archetype-quickstart -DarchetypeVersion=1.1  -DinteractiveMode=false  -DgroupId=spring-tutorial -DartifactId=ch1_simple -Dversion=1.0-SNAPSHOT -Dpackage=bcho.spring.tutorial.ch1

 

3. pom.xml 편집

pom.xml 수정 등록 후 우클릭.Run As.Maven Test 또는 Maven Install

spring-beans, spring-core, spring-context를 depdency에 추가

그리고, JUnit4로 테스트를 진행 예정이기 때문에 spring-test와 junit 4.11을 추가

 

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

  <modelVersion>4.0.0</modelVersion>


  <groupId>spring-tutorial</groupId>

  <artifactId>helloworld</artifactId>

  <version>0.0.1-SNAPSHOT</version>

  <packaging>jar</packaging>


  <name>helloworld</name>

  <url>http://maven.apache.org</url>


  <properties>

    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

  </properties>


  <dependencies>

 

   <dependency>

   <groupId>org.springframework</groupId>

   <artifactId>spring-beans</artifactId>

   <version>3.2.2.RELEASE</version>

   </dependency>

   <dependency>

   <groupId>org.springframework</groupId>

   <artifactId>spring-context</artifactId>

   <version>3.2.2.RELEASE</version>

   </dependency>

   <dependency>

   <groupId>org.springframework</groupId>

   <artifactId>spring-core</artifactId>

   <version>3.2.2.RELEASE</version>

   </dependency>

   <dependency>

   <groupId>junit</groupId>

   <artifactId>junit</artifactId>

   <version>4.11</version>

   </dependency>

   <dependency>

   <groupId>org.springframework</groupId>

   <artifactId>spring-test</artifactId>

   <version>3.2.2.RELEASE</version>

   </dependency>

  </dependencies>

</project>


4. context.xml 작성

/src/main/resources/spring-context.xml 을 작성하고, bean을 정의

 

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">



<bean id="hello" class="spring_tutorial.helloworld.HelloWorld">

<property name="name" value="Byungwook"></property>

</bean>

</beans>

 

5. Bean Class 작성

main/java/HelloWorld.java 작성

package spring_tutorial.helloworld;


public class HelloWorld {

    String hello;

    public void setName(String name){

           this.hello = name;

    }

    public String getName(){

     return hello;

    }

    public void sayHelloWorld(){

           System.out.println("hello :"+hello);

    }

}

 

6. 수행 클래스 작성

package spring_tutorial.helloworld;


import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;


/**

 * Hello world!

 *

 */

public class App 

{

    public static void main( String[] args )

    {

        ApplicationContext context = new ClassPathXmlApplicationContext("spring-context.xml");

           

           HelloWorld hw = (HelloWorld)context.getBean("hello");

           hw.sayHelloWorld();

    }

}


7. Run as 에서 Java Application으로 실행

8. 테스트 클래스 작성


package spring_tutorial.helloworld;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.test.context.ContextConfiguration;

import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;


@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration(locations="classpath:spring-context.xml")


public class AppTest 

{

  @Autowired HelloWorld hello;

  @Test public void helloTest(){

  assert( hello.getName().equals("Byungwook"));

  }

}

9. 테스트 실행
프로젝트에서 Run as > Maven test 를 선택
또는 프롬프트 상에서 mvn test를 수행

10. Goal에 대해서
Goal은 ant의 target과 같은 개념으로, mvn의 경우 pre-defined goal을 가지고 있다.
mvn compile : 컴파일 수행
mvn package : jar 파일로 패키징
mvn test : JUnit 테스트 수행
mvn install : local repository (PC내의 디렉토리)에 해당 jar 파일을 저장 
mvn deploy  : remote repository (Nexus)에 jar 파일 저장
mvn clean : 컴파일 내용 모두 삭제
mvn build : 위의 예제는 일반적은 spring-java 코드로 build goal을 제공하지 않는다. (Eclipse에서 run as하면 나와서 헷갈리게 만드는데) build goal을 지원하는 프로젝트를 만들거나 또는 pom.xml안에 인위적으로 build goal을 지정해줘야 한다.

install과 deploy에 의해서 repository에 저장된 jar파일들은 dependency 체크등에서 불려서 사용될 수 있다.




참고 사항

1. 가끔 Eclipse에서 Maven을 수행 시키면 아래와 같은 에러가 나는 경우가 있다.

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:testCompile (default-testCompile) on project helloworld: Compilation failure

[ERROR] Unable to locate the Javac Compiler in:

[ERROR] C:\Program Files\Java\jre7\..\lib\tools.jar


이는 Eclipse가 loading될때, JDK에 있는 java가 아니라 JRE에 있는 java를 가지고 수행되었을 경우 발생하는데, maven이 javac compiler를 찾을 수 없다는 메세지이다.

이를 해결하려면 eclipse.ini에 JDK의 경로를 아래와 같이 명시적으로 지정해줘야 한다.

-vm

C:\Program Files\Java\jdk1.7.0_07\bin\javaw.exe

2. 위의 설정을 했음에도 불구하고, eclipse에서 안될때가 있는데, 이 경우에는 Runs As에서 메이븐 설정에서 JRE 부분에 JDK 경로를 지정해주면 된다.



3. 디렉토리 구조 참고





http://www.mkyong.com/spring3/spring-3-hello-world-example/

http://androi.tistory.com/37 

'03.업 > 02.이클립스' 카테고리의 다른 글

System.out.println() 단축키  (0) 2022.05.03
eclipse.ini설정  (0) 2014.08.08
HSQLDB(HyperSQLDataBase)  (0) 2014.07.18
[펌]Java Spring Maven 기반 개발환경 만들기  (0) 2014.07.17
이클립스 자바스크립트 오류마크 tip  (0) 2011.12.15
Posted by 봄날의차
03.업/02.이클립스2014. 7. 17. 09:48

Java Spring Maven 기반 개발환경 만들기 - Part 4 Test Project 만들기

|

이번 포스팅에서는 준비된 개발 환경을 테스트 하기 위해
Maven + Spring MVC를 이용한 REST 서비스 프로젝트를 만들어 보도록 하겠습니다.

1. Maven Webapp 만들기

일단 Maven을 이용해서 Web Application을 만들어 보겠습니다.

Maven을 이용해서 Project를 만드는 일은 Console 창에서도 가능하지만

우리는 이미 만들어 놓은 개발환경(m2eclipse)을 이용해서 만들도록 하겠습니다.

아래와 같이 m2e를 활용하여 maven webapp을 만듭니다.

먼저 File - New - Others.. 메뉴를 선택하여 아래와 같이 Maven Project를 생성합니다.


Maven에서 제공하는 Archetype을 이용해서 만들 예정이므로 별다른 설정 없이 Next를 클릭합니다.


Maven에서는 Archetype이라는 Project Templating Toolkit을 제공하여 손쉽게 Maven Project를 구성 할 수 있게 해줍니다. 

Web Application을 만들기 위해 아래와 같이 Maven에서 제공하는 maven-archetype-webapp 을 선택해 줍니다.


그러면 아래와 같이 Group Id, Artifact Id 등을 설정할 수 있는 화면이 나옵니다. Group Id, Artifact Id, Version은 Maven Repository 내에서 각 Package를 구분하는 구분자로 사용됩니다.

여기서는 테스트 프로젝트로 사용할 것이기 아래와 같이 마음에 드는대로 생성해 줍니다.

(Real world 프로젝트에서는 주로 Group Id에는 com.company 등과 같이 해당 솔루션사 구분자를 넣어주고,

Artifact Id 에는 Eclipse Project 명을 넣어주며, Version은 개발 중 이므로 0.0.1-SNAPSHOT 형태로 사용합니다.

Package 명은 자동으로 {groupId}.{artifaceId}로 생성 됩니다.)


위의 조건대로 넣어주면 아래와 같이 Eclipse Maven Web Project가 생성되어 있음을 확인할 수 있습니다.



하지만 위의 구조에서는 src/main/java 등의 몇몇 Maven 기본 디렉토리는 아직 만들어 지지 않음을 알 수 있으며, 
프로젝트 또한 Dynamic Web Project로 인식되지 않아 WTP를 이용할 수 없습니다.

2. Dynamic Web Project로 변경

Maven Eclipse Project를 Dynamic Web Project로 인식 시키기 위해 아래와 같이 프로젝트를 선택하고 마우스 오른쪽 버튼 메뉴 Configure - Convert to Faceted Form.. 을 통해 Dynamic Web Project로 변경합니다.


Dynamic Web Project로 변경하기 위해 Dynamic Web Module을 선택하여 줍니다.

또한 Apache Tomcat v7.0에서 테스트 할 예정이기 때문에 Java Version은 1.6 이상으로

Dynamic Web Module Version은 3.0으로 선택하고 Runtimes에 Tomcat v7.0을 선택해 줍니다.



위와 같이 설정하고 나면 아래와 같이 Project가 Dynamic Web Project로 변경되어 디렉토리 구조가 변경되어 있는 것을 볼 수 있습니다.



Maven에서 Web Application Source 디렉토리는 src/main/webapp 이므로 위의 프로젝트에서 자동 생성 된 WebContent 디렉토리는 삭제해 줍니다.


Maven Webapp Project와 Dynamic Web Project의 각기 다른 설정들을 조정해 주기 위해 아래와 같이 프로젝트의 Properties 중 몇 가지를 조정해 줍니다. (프로젝트를 선택하고 마우스 오른쪽 버튼 메뉴에서 Properties 선택)


먼저 Deployment Assembly를 선택하여 Project에서 Tomcat에 Deployment 될 항목을 정리해 줍니다.

Tomcat에서 구동 될 필요가 없는 src/test/java 항목과 WebContent 항목을 선택하여 remove 해 주고,

src/main/webapp 디렉토리와 Maven Dependency를 아래와 같이 Add해 줍니다.



위와 같이 src/main/webapp를 추가해 주고



Maven Dependencies를 추가해 주면



위와 같이 Web Deployment Assembly가 정리되게 됩니다.


(Spring 관련 Library 등 Maven Dependency를 이용하여 추가한 Library들을 위의 Web Deployment Assembly에 Maven Dependencies를 통해 등록해 주지 않으면 Tomcat을 통해 테스트 할 때 관련 Library들이 함께 배포되지 않아 

java.lang.ClassNotFoundException 이 발생하게 됩니다.)


마찬가지로 라이브러리 배포와 관련하여 (Java Export 기능을 사용할 수도 있으므로) Java Build Path도 아래와 같이 Order and Export에 Maven Dependencies를 추가  설정해 줍니다.



(추가적으로 Spring Tool Suite가 설치되어 있다면 Project를 선택하고 마우스 오른쪽 버튼 메뉴 Spring Tools - Add Spring Project Natures 를 설정하여 Spring Framework 관련 기능을 활성화 시킵니다.)




이제 Maven Test  Project를 작업할 기본 환경이 아래와 같은 구조로 완성되었습니다.




3. Spring MVC REST 서비스 만들기


이제 본격적으로 Spring MVC 기반의 REST 서비스 프로그램을 작성해 보도록 하겠습니다.


Maven에서 Library 관리는 pom.xml 파일에서 관리됩니다. m2eclipse 플러그인을 설치하였기 때문에 현재 개발 환경에서 pom.xml 파일은 Maven Pom Editor를 통해 Dependency를 관리 할 수 있습니다.


아래와 같이 Maven Pom Editor를 통해 필요한 Dependency Library를 추가해 줍니다.

(Maven Pom Editor의 Dependencies 탭에서 Add.. 버튼을 이용하면 필요 Library를 검색하여 추가할 수 있습니다.)



위와 같이 spring-webmvc, spring-web, jackson-core-asl, jackson-mapper-asl 라이브러리를 추가해 줍니다.

더불어 Log4J 대신 logback을 사용하기 위해 logback-classic, jcl-over-slf4j를 추가해 주었습니다.

(과거 Log4J 개발자가 새롭게 만들고 있는 logback의 장점은 여러가지 이지만 개인적으로 Running 중인 Application을 중단하지 않고 Log Level을 조정할 수 있다는 게 가장 마음에 들었습니다.)



위와 같이 라이브러리들을 추가해 주면 pom.xml 파일은 아래와 같이 Dependency 들이 추가되어 있음을 알 수 있습니다. 

추가적으로 Java compile version을 1.6으로 설정해 주기 위해 pom.xml 파일에 아래와 같이 maven-compiler-plugin을 작성해 줍니다.


**pom.xml 

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

  <modelVersion>4.0.0</modelVersion>

  <groupId>my.odysseymoon</groupId>

  <artifactId>RestService</artifactId>

  <packaging>war</packaging>

  <version>0.0.1-SNAPSHOT</version>

  <name>RestService Maven Webapp</name>

  <url>http://maven.apache.org</url>

  <dependencies>

    <dependency>

      <groupId>junit</groupId>

      <artifactId>junit</artifactId>

      <version>3.8.1</version>

      <scope>test</scope>

    </dependency>

    <dependency>

        <groupId>org.springframework</groupId>

        <artifactId>spring-webmvc</artifactId>

        <version>3.2.1.RELEASE</version>

    </dependency>

    <dependency>

        <groupId>org.springframework</groupId>

        <artifactId>spring-web</artifactId>

        <version>3.2.1.RELEASE</version>

    </dependency>

    <dependency>

        <groupId>org.codehaus.jackson</groupId>

        <artifactId>jackson-core-asl</artifactId>

        <version>1.9.12</version>

    </dependency>

    <dependency>

        <groupId>org.codehaus.jackson</groupId>

        <artifactId>jackson-mapper-asl</artifactId>

        <version>1.9.12</version>

    </dependency>

    <dependency>

        <groupId>ch.qos.logback</groupId>

        <artifactId>logback-classic</artifactId>

        <version>1.0.9</version>

    </dependency>

    <dependency>

        <groupId>org.slf4j</groupId>

        <artifactId>jcl-over-slf4j</artifactId>

        <version>1.7.2</version>

    </dependency>

  </dependencies>

  <build>

    <finalName>RestService</finalName>

    <plugins>

        <plugin>

                <groupId>org.apache.maven.plugins</groupId>

                <artifactId>maven-compiler-plugin</artifactId>

                <version>2.3.2</version>

                <configuration>

                  <source>1.6</source>

                  <target>1.6</target>

                </configuration>

        </plugin>

    </plugins>

  </build>

</project>


최종적으로 생성된 pom.xml 파일은 위와 같이 이루어 져 있습니다.

WEB과 Spring-MVC를 위한 spring-web, spring-webmvc 라이브러리, 

REST 서비스를 위해 JSON 또는 XML과 Java Object의 Mapping을 위한 Jacson 라이브러리,

Logging 기능을 위한 Logback 관련 라이브러리를 위와 같이 추가해 주면

Maven에 의해 연관된 라이브러리들이 아래와 같이 추가되어 있음을 확인 할 수 있습니다.


다음은 src/main/webapp/WEB-INF/web.xml 파일을 아래와 같이 수정해 줍니다.


** web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="3.0"

         xmlns="http://java.sun.com/xml/ns/javaee"

         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

 

        <display-name>REST 샘플 어플리케이션</display-name>

        <servlet>

               <servlet-name>dispatcher</servlet-name>

               <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

               <load-on-startup>1</load-on-startup>

        </servlet>

 

        <servlet-mapping>

               <servlet-name>dispatcher</servlet-name>

               <url-pattern>/rest/*</url-pattern>

        </servlet-mapping>

 

</web-app> 


Maven에 의해 생성된 기본 web.xml은 Servlet 2.3 을 지원하는 DTD로 설정되어 있습니다. 

우리는 Java SE6, JEE6, Tomcat 7, Spring 3.2의 기준에 맞춰 Servlet 3.0 스키마로 변경하고, 

REST 서비스를 위해 URI가 /rest/ 아래인 모든 서비스를 spring DispatcherServlet으로 맵핑 했습니다.

(참고 : Java Servlet http://en.wikipedia.org/wiki/Java_Servlet )


web.xml에서 Servlet Name을  dispatcher로 설정해 주었기 때문에

src/main/webapp/WEB-INF/dispatcher-servlet.xml 파일을 아래와 같이 생성해 줍니다.


** dispatcher-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

        xmlns:context="http://www.springframework.org/schema/context"

        xmlns:mvc="http://www.springframework.org/schema/mvc"

        xmlns:p="http://www.springframework.org/schema/p"

        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd

               http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd

               http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">

 

 

        <context:component-scan base-package="my.odysseymoon" />

 

        <mvc:annotation-driven />

 

</beans> 


Annotation을 이용한 Spring MVC를 작성할 예정이므로 위와 같이 설정하여 my.odysseymoon 아래 패키지들을 자동으로 Scanning하여 Spring Bean을 설정하게 하였습니다.


다음으로 간단한 REST 서비스를 위해 DB를 사용하지 않은 controller, service, dto의 3가지만 이용하여 아래와 같은 구조로 각 파일을 생성해 줍니다.



위와 같은 위치에 아래의 파일들을 생성해 줍니다.


** RestServiceController.java

package my.odysseymoon.controller;

 

import my.odysseymoon.dto.RestDTO;

import my.odysseymoon.service.RestService;

 

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.PathVariable;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.ResponseBody;

 

@Controller

@RequestMapping("/restTest")

public class RestServiceController {

       

        final static Logger logger = LoggerFactory.getLogger(RestServiceController.class);

       

        @Autowired

        private RestService restService;

       

        @RequestMapping(value="/{id}", method=RequestMethod.GET)

        @ResponseBody

        public RestDTO getRest(@PathVariable("id") long id) {

               logger.debug("###get!!");

               return restService.findRest(id);

        }

       

        @RequestMapping(value="/{id}/{name}/{job}", method=RequestMethod.POST)

        @ResponseBody

        public RestDTO putRest(@PathVariable("id") long id, @PathVariable("name") String name,

                       @PathVariable("job") String job) {

               return restService.createRest(id, name, job);

        }

       

        @RequestMapping(value="/{id}/{name}/{job}", method=RequestMethod.PUT)

        @ResponseBody

        public RestDTO updateRest(@PathVariable("id") long id, @PathVariable("name") String name,

                       @PathVariable("job") String job) {

               return restService.updateRest(id, name, job);

        }

       

        @RequestMapping(value="/{id}", method=RequestMethod.DELETE)

        @ResponseBody

        public RestDTO deleteRest(@PathVariable("id") long id) {

               return restService.deleteRest(id);

        }

 

} 


/restTest 아래로 들어오는 요청을 처리하는 Controller로 @RequestMapping을 통해 REST서비스를 받아 @ResponseBody를 통해 JSON 또는 XML로 객체를 응답해주는 서비스 입니다.


@Controller : Spring MVC에서 Controller Bean으로 설정해 줍니다.

@RequestMapping : URI를 맵핑해 주며 HTTP Header / Method를 처리해 줍니다.

@PathVariable : REST URI를 파라미터로 맵핑해 줍니다.

@ResponseBody : return value를 HTTP response body로 변환해 줍니다.


위의 소스에서 만들어진 REST 서비스의 Request Mapping은 아래와 같습니다.



** RestService.java

package my.odysseymoon.service;

 

import java.util.concurrent.ConcurrentHashMap; 

import my.odysseymoon.dto.RestDTO; 

import org.springframework.stereotype.Service;

 

 

@Service("RestService")

public class RestService {

              

        private final ConcurrentHashMap<Long, RestDTO> dtoMap = new ConcurrentHashMap<Long, RestDTO>();

       

       

        public RestDTO findRest(long id) {

              

               return dtoMap.get(id);

        }

       

       

        public RestDTO createRest(long id, String name, String job) {

              

               return dtoMap.put(id, new RestDTO(id, name, job));

        }

       

       

        public RestDTO updateRest(long id, String name, String job) {

              

               return dtoMap.replace(id, new RestDTO(id, name, job));

        }

       

       

        public RestDTO deleteRest(long id) {

              

               return dtoMap.remove(id);

        }

 

} 


RestService에서는 테스트용으로 DB를 사용하지 않기 때문에 ConcurrentHashMap을 이용해 DTO 객체를 임시로 저장합니다. ConcurrentHashMap을 이용하면 Tread-safe하게 객체를 관리할 수 있습니다.


** RestDTO.java

package my.odysseymoon.dto;

 


public class RestDTO {

       

        private long id;

       

        private String name;

       

        private String job;

       

        public RestDTO() {

               this(0, "", "");

        }

       

        public RestDTO(long id, String name, String job) {

               this.id = id;

               this.name = name;

               this.job = job;

        }

 

        public long getId() {

               return id;

        }

 

        public void setId(long id) {

               this.id = id;

        }

 

        public String getName() {

               return name;

        }

 

        public void setName(String name) {

               this.name = name;

        }

 

        public String getJob() {

               return job;

        }

 

        public void setJob(String job) {

               this.job = job;

        }

} 


DTO 객체는 위와 같이 간단하게 id, name, job 3개의 filed로 구성되어 있습니다.


** ResponseBody를 XML로 전송하길 원한다면

현재 Test Project에서는 Jackson Mapper를 이용하여 ResponseBody를 JSON으로 마샬링하게 되었있습니다.

만약 XML로 마샬링 하기를 원한다면 아래와 같이 DTO 객체에 @XmlRootElement 어노테이션을 추가해 줍니다.

package my.odysseymoon.dto;

 

import javax.xml.bind.annotation.XmlRootElement;

 

 

@XmlRootElement

public class RestDTO {

       

        ......

} 



** Logback을 위한 logback.xml

logback을 이용한 logging을 위해 src/main/resource 아래에 logback.xml 파일을 아래와 같이 생성합니다.


<?xml version="1.0" encoding="UTF-8"?>

<configuration>

        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">

               <!-- encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder

                       by default -->

               <encoder>

                       <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n

                       </pattern>

               </encoder>

        </appender>

        <root level="debug">

               <appender-ref ref="STDOUT" />

        </root>

        <logger name="org.springframework">

               <level value="DEBUG"/>

        </logger>

        <logger name="my.odysseymoon">

               <level value="DEBUG"/>

        </logger>

</configuration>



4. REST 테스트 하기


이제 만들어진 REST 서비스를 테스트 해보겠습니다.

Unit 테스트를 먼저 해야 겠지만 TestCase는 생략하고 바로 Tomcat에 올려 REST Client Tool을 이용해 간단히 테스트 해보겠습니다.


* Test Tool

Test Tool을 간단히 소개하겠습니다.

개인적으로 Chrome을 사용하는데 Chrome Web Store에 아주 심플하고 강력한 HTTP Client 가 있습니다.

아래와 같이 Chrome Web Store에서 Dev HTTP Client를 찾아서 설치해 줍니다.




* Tomcat Deployment & 구동

아래와 같이 Eclipse에서 Tomcat Server에 Project를 추가하고 실행해 줍니다.



이제 Tomcat 서버를 실행시키고 에러 없이 정상적으로 실행되는 지 확인합니다.

(에러가 생긴다면 Project - Properties 창을 열어서 Deployment Assembly 등이 정상적으로 설정되어 있는지 확인해 봅니다.)


서버가 아래와 같이 문제 없이 실행되었다면 Dev HTTP Client를 통해 REST를 테스트 해봅니다.


* Dev HTTP Client를 통한 테스트

서비스 테스트 URL http://localhost:8080/RestService/rest/restTest/ 이 기본이 됩니다.


위에서 정의된 Request Method와 Resource URL을 이용해서 REST를 테스트 해 봅니다.


위와 같이 POST로 등록을 한 후 GET을 통해 JSON 객체가 조회되는 REST 서비스가 정상적으로 동작함을 볼 수 있습니다.

저작자 표시 비영리
트랙백0 And Comment 3
  1. 임성현 2013/04/04 18:01 address edit & del reply

    덕분에 큰도움 되었습니다.
    죄송한데 좀 퍼갔어요...감사합니다.

  2. 나그네 2013/05/01 14:49 address edit & del reply

    그다음 내용들은 언제 강의 만들어주시나요 ㅠㅠ

    손꼽아 기다려봅니다.

    감사합니다~^^

  3. 하피2 2013/09/30 13:58 address edit & del reply

    와 정말 깔끔하고 심플하고 핵심만 있어서 한번에 이해되는 설명입니다.

    자주 오겠습니다

Java Spring Maven 기반 개발환경 만들기 - Part 3 추가 Plugin 구성

|

지난 포스트에서는 가장 기본적이고 필수적인 Plugin들을 설치했었습니다.


이번 포스트에서는 꼭 필요하지는 않지만 

재미있고 유용한 몇가지 추가적인 Plugin들을 알아보도록 하겠습니다.


Color Theme


제가 좋아하는 Plugin 중 하나로 소스 코드를 컬러풀하게 만들어 주는 Plugin입니다.

이 Plugin을 몰랐을 때는 Eclipse내에서 Syntax Coloring을 일일이 설정해서 사용했었습니다.

(이 Plugin을 사용해 보시면 아시겠지만, Class / Interface / Method / Parameter / Variable 등의 색을 각각 달리하면 가독성이 엄청나게 좋아집니다)


Color Theme 플러그인은 이런 번거로움을 없애주고, Theme 기능을 이용하여 미리 설정된 Syntax Coloring을 사용할 수 있게 해 줍니다. (물론 설정 후 커스터마이징도 가능합니다.)


아래와 같이 Eclipse Marketplace에서 color theme를 찾아 설치해 줍니다.


위와 같이 설치하고 나면 Preferences 설정에서 General - Apprearance - Color Theme 항목이 생기면서 

Eclipse Editor들에 대한 Syntax Coloring을 설정 할 수 있게 됩니다.



마음에 드는 Theme를 선택하고 Apply를 클릭하면 아래와 같이 Editor의 Syntax Coloring 자체가 변경되어 있을을 알 수 있습니다.


**개인적인 Font 및 Sytax Coloring 설정 <클릭>



Grep Console


Log4J 등을 사용하여 Console 창에 Log를 뿌리다 보면 너무 많은 정보 때문에 때론 중요한 정보를 놓치고

정착 필요한 Log를 찾기위해 시간과 노력을 허비할 때가 많습니다.

Grep Console은 이런 번거로움을 덜어주기 위한 Plugin 입니다.

Regular Expression 기반으로 Console 창에 뿌려지는 Log를 패턴별로 인식하여 

색상을 다르게 보여주는 기능을 제공해 줍니다.


아래와 같이 간단히 설치 합니다.



설치하고 나면 아래와 같이 Console View에서 (?) 모양의 아이콘을 클릭하면 패턴을 설정할 수 있습니다.


Toad Extension for Eclipse


Toad Extension for Eclipse는 Eclipse 내에서 Oracle, PostgreSQL, MySQL DB에 접속 하여 데이터를 조회하고 관리 할 수 있도록 도와주는 Plugin 입니다.

현재 Eclipse Juno 4.2 Marketplace에는 등록되어 있지 않기 때문에 Update Site


http://community-downloads.quest.com/toadsoft/toadextensions/eclipse/freeware/


를 직접 등록하여 설치해야 합니다.



설치 후 Preference를 열어보면 아래와 같이 Toad Extension 관련 옵션을 설정할 수 있으며,

Database에 접속하기 위해서는 각 Database에 해당하는 JDBC Driver를 지정해 주어야 합니다.



Oracle Homepage에서 MySQL Connector를 다운받아 위치를 설정해 주면 아래와 같이 Toad Extension Perspective에서 MySQL에 접속하여 사용할 수 있습니다.



mybatiseditor


mybatiseditor는 MyBatis 작업에 도움을 주는 Plugin 입니다.

Java Mapper Interface와 연관된 XML을 바로 Link 시켜주기도 하고, 복잡한 XML 작업에도 도움을 줍니다.

아래와 같이 Marketplace에서 검색하여 설치하여 줍니다.


(mybatiseditor 사용 예 / 출처: Eclipse Marketplace)


JPA Diagram Editor


이 Plugin은 JPA를 사용하는 프로젝트에서 모델간의 Relationship을 Diagram으로 표현해주는 Plugin입니다.

JPA를 개발해 보신 분들이라면 모델이 늘어날 수록 모델간의 관계성 또한 파악하기 힘들다는 것을 잘 알 것입니다.

이 가려운 곳을 한 방에 긁어 주는 단비 같은 Plugin 입니다.


Marketplace에서 검색하여 아래와 같이 설치해 줍니다.



자세한 사용법은 JPA Diagram Editor Project Tutorial을 참고합니다.


(JPA Diagram 사용 예 / 출처: Eclipse Marketplace)


JVM Monitor


이 Plugin은 Eclipse 내에서 Java application을 Profiling할 수 있게 해주는 Plugin입니다. 

별도로 jconsole이나 jvisualvm을 사용하지 않더라고 간단하게 구동중인 JVM을 모니터링 할 수 있습니다.


아래와 같이 Marketplace에서 검색하여 설치해 줍니다.


설치 후 Perspective를 Java Monitor로 바꾸면 JVM 상태를 모니터링 할 수 있습니다.

localhost 뿐만 아니라 Remote Server에서 구동중인 JVM도 JMX를 통해 모니터링 할 수 있습니다.




지금까지 몇몇 재미있고 유용한 Plugin들을 알아보았습니다.


지나친 Plugin 설정은 오히려 Eclipse의 성능을 낮추기 때문에 꼭 필요한 Plugin들만 선별해서 설치하시는 것이 좋습니다.


다음 포스팅에서는 준비된 개발환경을 이용해서 간단한 Spring MVC REST 어플리케이션을 만들어 보도록 하겠습니다.

저작자 표시 비영리
트랙백0 And 댓글0

Java Spring Maven 기반 개발환경 만들기 - Part 2 기본 Plugin 구성

|

이번 시간에는 개발 시 도움이 되는 유용한 Plugin 들을 설치해 보도록 하겠습니다.


1. Eclipse Plugin 설치


Eclipse에는 많은 Plugin들이 제공되고 있어서 개발 시 번거로운 부분에 많은 도움을 주고 있습니다.

반면 너무 많은 Plugin들이 존재해서 꼭 필요한 Plugin만 선별하는 것도 부담되는 일입니다.

BeyondJ2ee님의 블로그 등에서 유용한 Plugin들에 대한 리스트를 제공하고 있으며,

Marketplace에서도 Plugin 인기 순위를 제공하고 있으니

프로젝트에서 필요한 Plugin을 찾는데 많은 도움이 될 것입니다.


우리는 몇가지 필요한 Plugin 들만 설치해 보도록 하겠습니다.


Plugin 설치 방법


과거 Eclipse Plugin들은 Help - Install New Software... 메뉴를 통해 기본 Plugin 싸이트 또는 특정 Plugin 싸이트를 추가하여 설치하였지만,

현재는 Eclipse Marketplace... 메뉴를 통해 해당 Eclipse 버전에 맞는 많은 Plugin들을 간단하게 설치 / 제거 할 수 있도록 제공하고 있습니다.

아래와 같이 Eclipse Marketplace 에서 필요한 Plugin을 찾아 설치하도록 하겠습니다.



그런데 만약 설치하는 도중 아래와 같은 Timeout 에러가 난다면



eclipse.ini 파일의 -vmargs 옵션에 아래와 같이 옵션을 추가해서 eclipse를 재구동하면 해결됩니다.


-Dorg.eclipse.ecf.provider.filetransfer.retrieve.closeTimeout=30000

-Dorg.eclipse.ecf.provider.filetransfer.retrieve.readTimeout=30000

-Dsun.net.client.defaultReadTimeout=30000



Spring Tool Suite (STS) 설치


우리는 Spring Framework을 기반으로 하는 Project를 만들기 때문에 아래와 같이 STS를 찾아 설치해 줍니다.


** 현재 STS Plugin은 Spring쪽 cloudfront의 이상으로 정상 접속 되지 않고 있습니다.

(m2e-sts가 추가되었는데 이 부분의 접속에 문제가 있는 것으로 보입니다) 


정상적인(?) 방법은 위와 같이 Marketplace를 통하는 것이지만, 설치를 안할수 없으니 

기존에 사용하던 "Install New Software.." 메뉴를 통해 아래와 같이 설치합니다.



Help - Install New Software... 팝업 창이 나타나면 Add.. 버튼을 클릭하여 STS를 설치할 update site를 아래와 같이 입력합니다.


http://download.springsource.com/release/TOOLS/update/3.1.0.RELEASE/e4.2/


Name은 적당히 넣어주신 후에 OK를 클릭하시면 아래와 같이 Plugin 리스트를 불러오는 것을 확인 할 수 있습니다.



필요한 Plugin들을 선택하여 설치하시면 문제 없이 설치되는 것을 확인 할 수 있습니다.



SVN Plugin 설치


Eclipse Marketplace에서 제공되는 SVN 관련 Plugin은 Subclipse와 Subversive 두 가지가 제공되고 있습니다.

어느 것이 더 나은 것인가에 대한 다양한 토론이 펼쳐지고 있으나, 마음에 드시는 한 가지를 설치하시면 됩니다.


Subversive는 SVN Connector를 추가 설치해야 하므로

여기에서는 SI에서 간단히 쓸 수 있도록 Subclipse를 설치하도록 하겠습니다.


아래와 같이 subclipse를 찾아 설치합니다.



Next를 누르고 라이센스에 동의 한 후 Finish를 클릭하면 설치가 진행되며

Eclipse를 재 시작하면 svn 관련 기능을 사용 할 수 있습니다.


아래와 같이 SVN Repository 뷰 (Window - Show View - Other.. - SVN - SVN Repositories)를 열어서 SVN 서버에 연결할 수 있습니다.



(Subclipse 사용 예 / 출처: Tigris.org)



Maven Plugin 설치


Eclipse에서 Maven을 편하게 사용할 수 있는 Plugin으로 Maven Integration for Eclipse (m2e)가 제공되고 있습니다.


아래와 같이 Plugin을 찾아 설치해 줍니다.


마찬가지로 라이센스에 동의 하고 설치 후 재시작하면 Maven Dependency를 m2e를 통해 관리 할 수 있습니다.

아래와 같이 Window - Preference 에서 Maven 관련 설정을 클릭하여 "Download Artifact Sources"를 체크하여 적용해 줍니다.



JAutodoc - Javadoc 관리


Eclipse에도 Javadoc 관리 시스템이 있지만 JAutodoc을 이용하면 더 강력한 Javadoc 관리가 가능합니다.

예를 들어 Javadoc을 자동 생성 후에 Method Parameter가 변경 되었을 때 Eclipse Javadoc에서는 이 부분이 수정되지 않지만, JAutodoc을 자동으로 인식하여 변경해 줍니다.

이러한 장점들을 위해 아래와 같이 JAutodoc을 찾아 설치해 줍니다.


이전 Plugin들과 마찬가지 절차로 설치 후 재실행 하면 아래와 같이 Window - Preferences 를 통해 JAutodoc 옵션을 수정 할 수 있습니다.




Properties Editor 설치


Properties Editor는 Properties 파일을 Unicode로 바로 작성하게 해주는 Plugin 입니다.

이미 Eclipse 내부의 Encoding을 UTF-8로 설정하였지만 Properties 파일을 편하게 작업하기 위해 아래와 같이 Plugin을 찾아 설치해 줍니다.



설치 후 Eclipse를 재실행하면 Window - Preferences에서 아래와 같이 Properties Editor 관련 옵션을 설정 할 수 있습니다.


(Properties Editor 사용 예 / 출처 : Eclipse Marketplace)


MoreUnit 설치


MoreUnit Plugin은 Unit 테스트와 관련된 기능을 제공하는 Plugin입니다.

해당 Class에서 UnitTest를 생성하거나, 생성된 JUnitTest Class로 바로 이동가능 하도록 기능을 제공해 줍니다.


아래와 같이 MoreUnit을 찾아 설치해 줍니다.


마찬가지로 설치 후 Preferences 에서 MoreUnit에 관련된 옵션을 수정해 줄 수 있습니다.


(MoreUnit 사용 예 / 출처 : moreunit.sourceforge.net/)



FindBug 설치


FindBug는 두말할 필요가 없는 필수 Plugin 중 하나입니다. 각종 버그를 유발시킬 수 있는 코드를 찾아주는 유용한 Plugin으로 아래와 같이 설치해 주면 됩니다.


위와 같이 설치 하고나서 Preference에서 FindBug 관련 옵션을 확인하거나 수정합니다.


(FindBug 사용 예 / 출처 : Eclipse Marketplace)


CheckStyle 설치


CheckStyle은 Eclipse에서 소스 코드 분석 및 코드 표준화를 도와주는 Plugin입니다.


아래와 같이 checkstyle을 검색하여 설치해 줍니다.


설치 후 아래와 같이 Preference에서 Checkstyle 관련 옵션을 수정할 수 있습니다.



(Checkstyle 사용 예 / 출처 : Eclipse Marketplace)



EclEmma 설치 - Code Coverage Tool 


EclEmma는 Code coverage를 도와주는 Plugin입니다. 

아래와 같이 Marketplace에서 찾아서 설치해 줍니다.


설치하고 나면 아래와 같이 Preferences 에서 옵션을 확인 할 수 있습니다.



(EclEmma 사용 예 / 출처 : Eclipse Marketplace)


PMD 설치 - 정적 분석 도구


PMD 또한 두말할 필요가 없이 매우 유용하고 유명한 정적분석 도구입니다.

하지만 현제 Eclipse 4.x Juno 버전의 Marketplace에서는 PMD가 존재하지 않기 때문에

필요하면 "Install New Software..." 메뉴를 통해 직접 Update 싸이트를 등록해 설치합니다.

(FindBug, CheckStyle, EclEmma 등으로도 충분하지만 PMD와 관련된 개발 프로세스를 가진 프로젝트라면 필수로 설치해야겠지요 ^^)

PMD 홈페이지에서 제공하는 설치 절차에 따라 아래와 같이 update 싸이트


http://sourceforge.net/projects/pmd/files/pmd-eclipse/update-site/

를 PMD로 등록하고 설치합니다.



설치 후 재실행 하면 아래와 같이 Preferences 에서 PMD 관련 옵션을 확인 / 수정 할 수 있습니다.



(PMD 사용 예)


작업하다보니 양이 많이져서 이번 포스트에서는 여기까지 설치하도록 하고


다음 포스트에서 나머지 필수적이지는 않지만 매우 유용한 몇몇 Plugin들을 추가 설치하는 방법을 알아보도록 하겠습니다.


** 남은 작업들 

    - 추가 Plugin 구성

    - Test Project 작성

    - SVN 설치 및 연동

    - Nexus / Jenkins 설치 및 연동

    - Build / Deployment 테스트


갈길이 멀군요 ..




저작자 표시 비영리
트랙백0 And 댓글0

Java Spring Maven 기반 개발환경 만들기 - Part 1 기본구성

|

SI 시장을 돌아다니다 보면 비슷하면서도 각각 다른 모양의 개발환경을 만나보게 됩니다만

근래의 거의 모든 JAVA 프로젝트 들은 


Framework : Spring

Version 관리 : SVN

CI : Maven + Nexus + Jenkins


로 귀결되는 분위기입니다. 

(물론 Git이나 Gradle과 같은 조금씩 솔루션의 차이를 두기도 합니다만 SI 시장은 거이 이 분위기인듯 합니다)


위와 같은 기본 환경을 쉽고 빠르게 구축하고 서로간의 Know-How를 공유하기 위해 한 번 정리해 볼까 합니다.

(다른 좋은 방법들이 있으면 Feedback 부탁드립니다)


1. 개괄

소규모의 솔루션 개발 집단이 아닌 SI 개발에서는 너무나 많은 사람들이 각각의 개발팀마다 서로 다른 이해관계에 따라 서로 다른 환경에서 개발을 하다보니 프로젝트 매 순간마다 많은 난관가 오해에 봉착하게 됩니다.

이런 문제점을 최소하 하기 위해서 경험적으로 보면 애초에 프로젝트 시작 시점에 AA에 의해 기본 개발환경을 구성하여

아예 이를 통째로 배포하는 것이 문제점을 줄이는데 일조하는 것 같았습니다.

해서 아래와 같이 아예 기본 환경을 구성하여 모든 사람이 동일한 조건에서 개발을 시작할 수 있도록 구성해 보겠습니다.

위와 같이 C 드라이브 아래에 EEProject라는 폴더에 필요한 내용들을 일괄 구성하여 이 폴더를 통째로 압축하여 배포합니다.

이렇게 하는 이유는 동일한 환경 구성을 통해

 - 동일한 환경변수 사용

 - 프로젝트내의 절대경로 변수에 의한 에러 방지

 - 동일 라이브러리 사용으로 예측 불가능한 오동작 사전 방지

 - 사전 구성된 개발 표준 배포로 코드 일관성 향상

등의 이점을 얻을 수 있습니다.


위와 같은 구성은 Windows 기반의 x86, 32bit를 기준으로 구성합니다.

(서버 시스템을 생각한다면 64bit를 기준으로 구성해야 겠지만, 아직까지 32bit 운영체제를 가진 개발자가 존재하며

 개발 시 32bit 구성에 따른 운영 시 64bit 구동엔 문제가 없으므로 32bit를 기준으로 구성합니다)


2. JDK 설치

JDK 구성은 크게 어려움이 없고 많이들 알고 있기 때문에 무리는 없을 거라 생각됩니다.

다만 SUN이 Oracle에 인수 된 이후로 JDK 7 부터는 OpenJDK를 기반으로 JVM이 구성되어 몇몇 문제점들이 발생되고 있고 많은 솔루션들이 JDK 7 에서는 동작하지 않는 기능들이 있으니

가장 안정적인 JDK6의 최신 버전을 아래와 같이 설치 하도록 합니다.


JDK 1.6 다운로드 및 설치


Oracle 싸이트에서 아래와 같이 JDK 1.6을 다운받습니다.


JDK 1.6 최신 버전에서 Windows x86 으로 다운받습니다.


이후 아래와 같이 JDK를 설치합니다.


JRE는 실행 환경만으로 구성되어 있는데 JDK 내에도 실행 환경이 포함되어 있기 때문에 추가 설치 않아도 무방합니다.

또한 우리는 설치 위치를 C:\EEProject 아래로 통일하기로 했으므로 "Install to" 위치도 위와 같이 변경해 줍니다.


Java 환경변수 설정


JDK를 설치한 후에는 Windows 시스템 내에 Java 환경 변수를 설정해 줍니다.


위와 같이 시스템 환경 변수에 JAVA_HOME으로 설치된 위치값을 입력하여 저장하고,

아래와 같이 환경 변수의 Path 값에 %JAVA_HOME%\bin 위치를 추가해 줍니다.


이렇게 환경변수를 추가해 주면 Windows 내에서 Java 관련 명령어를 바로 사용할 수 있으며, 

Maven과 같은 다른 솔루션에서도 사용하게 됩니다.


정상적으로 설정이 되었는지 아래와 같이 CommandLine Tool을 이용하여 확인해 봅니다.


3. Maven 설치

Maven을 이용하면 Library Dependency 뿐만 아니라 Bulid - Deployment 에서 부터 

전체 프로젝트 Architecture 관리 까지 가능하게 됩니다.

이러한 강점 때문에 근래의 SI 프로젝트들은 Maven을 통해 Project 생성하고 있습니다.


Maven 다운로드 및 설치


Maven 싸이트에서 아래와 같이 Maven 2 Stable 버전을 다운 받습니다.

(현재 Maven 3 버전이 있지만 아직 개발중이며, 현재까지 안정화 버전은 Maven 2.2대 입니다)


Maven 2.2.1 버전의 Binary zip 파일을 다운받습니다.

필요한 구성이 zip 파일로 묶여 있기 때문에 다운로드 받은 이후에 처음 구상했던 것처럼

C:\EEProject 아래에 압축을 풉니다.

Maven의 설치는 특별할 것 없이 이걸로 끝입니다만, Maven의 구성 및 특징에 대해서는 별로도 학습을 할 필요가 있습니다.

Maven 환경변수 설정


Maven 또한 설치 이후 Windows 환경변수에 아래와 같이 MAVEN_HOME으로 설치된 위치를 등록해 줍니다.


JDK와 마찬가지로 Windows에서 사용 가능하도록 Path에 %MAVEN_HOME%\bin 값을 아래와 같이 추가해 줍니다.


이제 CommandLine Tool에서 mvn --version 명령어를 이용하여 정상적으로 동작하는지 아래와 같이 확인해 봅니다.


4. Tomcat 설치

WEB 프로젝트라면 개발자 개인 PC에서 테스트해야 할 필요성이 있습니다. 

같은 방법으로 C:\EEProject에 Tomcat을 설치하고 Eclipse 내부에서 Server로 등록하여 이용합니다.


Tomcat 다운로드 및 설치


Tomcat 싸이트에서 아래와 같이 Tomcat 7 최신 안정화 버전을 다운받습니다.

(개인적으로 Tomcat 6는 사용 시 메모리 문제나 hang 현상 등 많은 문제가 있었으며

현재 최신 버전인 Tomcat 7 에서는 DBCP 등 많은 부분에서 성능향상 및 안정화가 되어 있어 Tomcat 7을 좀 더 추천합니다)


Eclipse와 연동하여 실행할 것이므로 Core - 32-bit Windows_zip으로 다운받아 

C:\EEProject 아래에 압축을 풀면 설치 완료!입니다.


5. Eclipse 설치


이제 마지막으로 Eclipse를 설치하도록 합니다.

(현재 Eclipse 4.2 Juno 까지 나와있으며, Juno 버전이 성능에 약간 문제가 있다는 말들이 있습니다. Juno 버전의 개선된 UI에 문제가 있는 것 같으며, 내부 설정에서 UI를 Classic으로 바꾸면 문제가 없다고 하며, 하위 버전을 설치하셔도 문제는 없습니다)


Eclipse 다운로드 및 설치


Eclipse 싸이트에서 Eclipse IDE for Java EE Developers Windows 32 Bit를 다운받습니다.



그리고 C:\EEProject 아래에 압축을 풀어주면 설치 완료입니다. 

(무척 간단하여 좋습니다^^)


eclipse.ini 수정


Eclipse를 실행하기 전에 기존에 설치한 공통 환경을 설정하고, 성능 향상을 위해 eclipse.ini 파일을 아래와 같이 수정합니다.

-vm

C:\EEProject\Java\jdk1.6.0_39\bin\javaw.exe

-startup

plugins/org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar

--launcher.library

plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.200.v20120522-1813

-product

org.eclipse.epp.package.jee.product

--launcher.defaultAction

openFile

--launcher.XXMaxPermSize

256M

-showsplash

org.eclipse.platform

--launcher.XXMaxPermSize

256m

--launcher.defaultAction

openFile

-vmargs

-Dosgi.requiredJavaVersion=1.6

-Dhelp.lucene.tokenizer=standard

-Xms512m

-Xmx1024m


-vm 옵션을 통해 Eclipse 구동 JVM을 설치한 JDK로 설정해 줍니다.

MaxPermSize를 늘려줘서 Class 파일이 많아져도 에러가 나지 않도록 해 줍니다.

(MaxPermSize값은 JVM에서 Class 파일이 저장되는 PermGen 영역을 늘려주는 옵션으로 대규모 Class 파일을 가진 Enterprise Project에서는 적당히 늘려줘야 OutOfMemoryError가 발생하지 않습니다)

구동 JVM이 1.6이므로 -Dosgi.requiredJavaVersion을 1.6으로 수정하고

Heap Memory 설정을 위해 -Xms -Xmx 값을 적당히 늘려줍니다.


Eclipse 실행 및 workspace 설정


이제 eclipse.exe를 이용하여 Eclipse를 실행해 봅니다.

아래와 같이 Workspace를 선택하라고 나오면 공통 환경을 위해

C:\EEProject\workspace 로 설정해 줍니다.


아래와 같이 초기 화면이 정상적으로 나온다면 문제없이 Eclipse가 실행되었다는 얘기입니다.



6. Eclipse 환경 설정

이제 프로젝트 공통 환경을 위해 Eclipse 환경을 설정해 줍니다.


Eclipse Juno Theme 수정


앞서 말씀드렸듯이 Eclipse Juno 버전에서는 UI가 바꾸었지만 속도 문제가 있는 듯 하여

Theme 를 아래와 같이 Classic으로 변경하면 약간의 속도 개선이 있습니다.



Encoding 설정 (UTF-8)


프로젝트의 Encoding 통일은 중요한 문제입니다. 단지 i18n 문제 뿐만 아니라 많은 프로젝트에서 한글 Encoding 때문에 괜한 시간을 낭비합니다. 프로젝트 초기 단계부터 개발환경 - 테스트환경 - 실행환경 - DB 에 이르기 까지 모든 시스템의 Encoding을 통일해서 뒤늦게 폭탄을 맞는 일이 없어야 합니다.

Windows 시스템은 기본적으로 MS949(MS 확장 한글 완성형)로 인코딩 되어 있기 때문에 

Eclipse 내에서 모든 리소스를 UTF-8로 수정하고, 각 시스템도 실행 환경을 UTF-8로 설정합니다.

아래와 같이 Eclipse에서 Window - Preferences 메뉴에서 "encod"로 검색하여 각 Encoding  설정을 UTF-8로 수정하여 줍니다.




Installed JRE 설정


아래와 같이 Eclipse 환경 내의 Installed JRE가 C:\EEProject 아래의 설치된 JDK로 되어 있지 않다면

JRE를 새로 설정해야 합니다.


위와 같이 EEProject 아래에 설치한 JDK가 기본으로 등록되어 있지 않다면 Add 버튼을 이용하여 JDK를 아래와 같이 새로 등록하여 줍니다.

(Error는 무시하시길..)


위와 같이 JDK를 등록하였다면, 이제 모든 프로젝트 팀원들이 동일한 JDK 환경을 사용할 수 있게 되었습니다.


Tomcat Server 설정


이제 Eclipse 내에서 사용할 Tomcat 서버를 설정하도록 합니다.

"Servers" View 에서 "new serve wizard..."를 클릭하거나

File - New - Other 메뉴에서 아래와 같이 Server를 선택하여 새 서버를 등록합니다.



서버 종류를 Tomcat v7.0으로 설정합니다.



Tomcat 디렉토리 위치를 C:\EEProject 아래에 설치된 위치로 지정해 주고

필요하면 JRE를 앞서 설정한 JDK로 설정해 주고 Finish를 클릭합니다.

(현재 생성된 Project가 없기 때문에 다음 단계에서 Publishing 할 프로젝트를 설정할 필요가 없습니다)


등록이 완료되면 아래와 같이 Eclipse에 Tomcat Server가 등록되고 Eclipse 내에서 컨트롤 할 수 있습니다.



마지막으로 전체 프로젝트의 Encoding을 UTF-8로 설정하기로 했기 때문에 로컬 서버 (Tomcat)도 UTF-8 설정을 해주어야 합니다.

아래와 같이 설치된 Tomcat 서버의 server.xml 파일내의 connector 부분에 URIEncoding="UTF-8" 을 추가해 줍니다.



저장 한 후 Eclipse를 재 실행 하면 로컬 Tomcat에서도 UTF-8 설정이 적용되게 됩니다.

지금까지 개발환경 설정을 위한 가장 기본적인 설치가 끝났습니다.

다음 시간에는 Eclipse Plugin 구성과 추가 솔루션을 설치하고 Test Project를 만들어 보도록 하겠습니다.


Posted by 봄날의차
03.업/02.이클립스2011. 12. 15. 15:07




1.프로젝트 프로퍼티
2.javascript
> Include Path
> source
>> Excluded Patterns
>>> edit
**/js/해당파일명.js
Posted by 봄날의차