저작권 안내: 저작권자표시 Yes 상업적이용 No 컨텐츠변경 No

스프링5 입문

JSP 2.3

JPA 입문

DDD Start

인프런 객체 지향 입문 강의

이클립스에서 톰캣 서버를 구동하다보면 아래 그림과 같이 "Server Tomcat Server at localhost was unable to start within 45 seconds" 메시지가 뜨면서 톰캣 서버 실행에 실패할 때가 있다.



이 경우 이클립스의 톰캣 서버 실행 제한 시간을 늘려주거나 실행 시간에 영향을 주는 원인을 제거하면 된다. 이 글에서는 실행 시간을 늘려주는 방법을 설명한다.


먼저 이클립스의 [Window] -> [Show View] -> [Other] 메뉴를 실행한 뒤에 Server/Servers 뷰를 선택하고 오픈한다. Servers 뷰에서 서버를 더블 클릭하면 아래와 같이 편집 영역에 서버 설정 정보가 보인다.



서버 설정 정보에서 Timeouts을 클릭하면 아래 그림과 같이 설정 시간을 변경할 수 있는데 여기서 Start 항목의 시간을 늘려준 뒤 저장(CTRL + S)하면 된다.



톰캣 구동 시간 자체를 줄이는 방법 중 하나로 jar 파일 스캔 제외처리가 있는데 이에 대한 내용은 "Jar 파일 스캔 제외로 톰캣 시작 시간 단축(http://javacan.tistory.com/475)" 글을 참고한다.



Posted by 최범균 madvirus

댓글을 달아 주세요

  1. sweet 2018.02.27 14:58 신고  댓글주소  수정/삭제  댓글쓰기

    저 같은경우엔 항상 999로 설정해 두는데 프로그램 마다 엄청 무거운것들이 있어서 구동되는데만 5분 이상 걸리니 여유롭게 쓸 수 있더라고요.
    근데 이 시간이 이렇게 999 길게 걸어두었을 때 문제가 되는 부분이 있을까요?
    단순히 시간제한에 대한 설정으로 timeout만 걸리지 않는걸까요?

    • 최범균 madvirus 2018.02.28 10:34 신고  댓글주소  수정/삭제

      999초면 15분 이상으로 잡은거네요. 다소 길게 느껴지긴 합니다. 근데 이 시간은 이클립스의 톰캣 구동 시간 타이아웃이니까 길게 잡는다고 문제가 될 건 없어 보입니다.
      실제 구동 시간이 5분 이상 걸리는 점이 문제가 될 순 있을 것 같아요.

Eclipse Luna for JavaEE Developver 버전을 다운로드 받으면 메이븐 연동을 위한 m2e 플러그인이 기본으로 설치되어 있다.


이클립스는 Subversion 연동 플러그인이 기본 포함되어 있지 않기 때문에, 이클립스 마켓플레이스 Help -> Eclipse Marketplace 메뉴에서 Subclipse 플러그인을 찾아서 설치했다. 글 쓰는 시점 기준으로 이 Subclipse 플러그인 버전은 1.10.5다.


Subclipse 플러그인을 설치하고, 이클립스를 재시작한 뒤에 Subclipse와 메이븐 연동을 위해 Window -> Preferences -> Maven ->Discovery -> [Open Catalog]를 실행해서 Subclipse 연동을 위한 m2e-subclipse 를 선택하고 [Finish] 버튼을 클릭했다. 그런데, 잠시 후에 다음과 같은 오류가 발생한다.




Operation details

Cannot complete the install because of a conflicting dependency.

Software being installed: Maven SCM handler for Subclipse 0.13.0.201303011221 (org.sonatype.m2e.subclipse.feature.feature.group 0.13.0.201303011221)

Software currently installed: Subclipse (Required) 1.10.5 (org.tigris.subversion.subclipse.feature.group 1.10.5)

Only one of the following can be installed at once: 

SVN Team Provider Core 1.8.22 (org.tigris.subversion.subclipse.core 1.8.22)

SVN Team Provider Core 1.10.5 (org.tigris.subversion.subclipse.core 1.10.5)

Cannot satisfy dependency:

From: Maven SCM Handler for Subclipse 0.13.0.201303011221 (org.sonatype.m2e.subclipse 0.13.0.201303011221)

To: bundle org.tigris.subversion.subclipse.core [1.6.0,1.9.0)

Cannot satisfy dependency:

From: Maven SCM handler for Subclipse 0.13.0.201303011221 (org.sonatype.m2e.subclipse.feature.feature.group 0.13.0.201303011221)

To: org.sonatype.m2e.subclipse [0.13.0.201303011221]

Cannot satisfy dependency:

From: Subclipse (Required) 1.10.5 (org.tigris.subversion.subclipse.feature.group 1.10.5)

To: org.tigris.subversion.subclipse.core [1.10.5]


이런 오류가 발생하는 이유는 m2e의 Subclipse Connector가 필요로 하는 Subclipse 버전과 실제 설치된 Subclipse 버전이 맞지 않기 때문이다.


이를 해결하려면 Marketplace에 설치한 Subclipse 1.10 버전을 제거하고, 1.8 버전을 설치하면 된다. Help -> Install New Software 를 이용해서 1.8 버전 설치를 진행한다. 업데이트 URL(work with...)은 다음 주소를 입력하면 된다.

  • http://subclipse.tigris.org/update_1.8.x

1.8 버전 Subclipse를 설치한 뒤에 다시 m2e Subclipse Connector를 설치하면 된다. 끝!



Posted by 최범균 madvirus

댓글을 달아 주세요

자바로 테스트 코드 만드는 게 좀 짜증이 나서 편하게 사용할만한 테스트 프레임워크를 뒤지다가 페이스북에서 Spock 이라는 놈을 줏어 들었다. 자바 기반의 프로젝트를 진행중인데, Spock가 그루비 기반이라서 궁합도 잘 맞을 것 같기에 일부 테스트 코드에서 넣어보기로 결심을 했다.


본격 사용하기에 앞서 개발 환경 구축은 필수! 아래의 순서로 진행을 했다.

  1. 이클립스에서 그루비 플러그인 설치
  2. pom.xml에 Spock 실행 위한 설정 추가
  3. src/test/groovy 폴더 생성
  4. Spock 테스트 코드 실행
그루비 플러그인 설치


http://groovy.codehaus.org/Eclipse+Plugin 사이트에 가면 이클립스 버전 별로 업데이트 사이트 주소를 확인할 수 있다. 필자는 이클립스 4.3 (Kepler) 버전을 사용중이서 http://dist.springsource.org/release/GRECLIPSE/e4.3/ 주소를 이용해서 플러그인을 설치했다. 메이븐 플러그인(m2e)와 연동을 해야 하므로, 메이븐 플러그인 커넥터도 함께 설치했다. (사실은 다 설치했다.)


그루비 플러그인을 설치한 다음에는 Windows > Preferences > Groovy > Compiler 에서 컴파일러 버전을 2.0 으로 변경한다. (변경하면 이클립스를 재시작한다.) 2.1이 아닌 2.0을 사용하는 이유는 Spock 0.7 버전이 현재 그루비 2.0 까지만 지원하기 때문이다.


pom.xml 파일 설정


메이븐 pom.xml 설정이 다소 복잡한데, 사용한 설정은 아래와 같다. Spock 0.7 버전은 현재 그루비 1.8 버전 또는 2.0 버전을 지원한다.


<project ...>

    <dependencies>

        ...

        <dependency>

            <groupId>org.spockframework</groupId>

            <artifactId>spock-core</artifactId>

            <version>0.7-groovy-2.0</version>

            <!-- 0.7-groovy-1.8 -->

            <scope>test</scope>

        </dependency>

        <dependency>

            <groupId>org.codehaus.groovy</groupId>

            <artifactId>groovy-all</artifactId>

            <version>2.0.5</version>

            <scope>test</scope>

        </dependency>

    </dependencies>


    <build>

        <plugins>

            <plugin>

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

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

                <version>3.1</version>

                <configuration>

                    <source>${java.version}</source>

                    <target>${java.version}</target>

                    <encoding>${project.build.sourceEncoding}</encoding>

                    <compilerId>groovy-eclipse-compiler</compilerId>

                </configuration>

                <dependencies>

                    <dependency>

                        <groupId>org.codehaus.groovy</groupId>

                        <artifactId>groovy-eclipse-compiler</artifactId>

                        <version>2.8.0-01</version>

                    </dependency>

                    <dependency>

                        <groupId>org.codehaus.groovy</groupId>

                        <artifactId>groovy-eclipse-batch</artifactId>

                        <version>2.0.7-03</version>

                        <!-- <version>1.8.6-01</version> -->

                    </dependency>

                </dependencies>

            </plugin>

        </plugins>

    </build>


</project>


테스트 목적으로만 쓸 거라서 groovy-all 의존의 범위를 test로 지정하였다.


주의사항:

  • spock 0.7 메이븐 의존은 Junit-dep 4.10 버전에 대한 의존을 갖는다. 따라서, Junit 4.11과 같이 다른 버전의 JUnit을 사용하고 있다면, JUnit 버전을 맞추기 위해 spock 의존 설정에 <exclustion>을 추가해서 junit-dep 의존을 제거한다.
  • groovy-all 용량이 커서, 최초 다운로드에 올래 걸리기도 한다. 메이븐 프로젝트 구성할 때에 인내심이 필요할 수 있다.

src/test/groovy 폴더 생성


그루비로 만든 테스트 코드를 넣기 위해 src/test 폴더 아래 groovy 폴더를 생성한다.


Spock 테스트 코드 실행


이제 남은 건 Spock 테스트 코드를 실행하는 것이다. src/test/groovy 폴더에 Spock 홈페이지에 있는 테스트 코드를 넣어본다. (HelloSpock.groovy)


import spock.lang.*


class HelloSpock extends spock.lang.Specification {

def "length of Spock's and his friends' names"() {

expect:

name.size() == length


where:

name     | length

"Spock"  | 5

"Kirk"   | 4

"Scotty" | 6

}

}


JUnit을 실행하는 것과 동일하게 "JUnit Run"으로 실행한다. 그러면, 아래와 같이 테스트가 통과하는 것을 확인할 수 있다.




Posted by 최범균 madvirus

댓글을 달아 주세요

  1. 미니양 2014.02.11 04:43 신고  댓글주소  수정/삭제  댓글쓰기

    Spock을 한번 따라해 보고 싶어서 작성해 주신 글대로 따라 해 봤습니다.
    Spock의 기본 샘플로 주신건 실행이 되는데,
    def MockSampleObj = Mock(SampleObj)
    이렇게 하면 MockSampleObj.someMethod를 하면 someMethod를 가져오지 못하고 밑줄이 그어지네요.

    혹시 원인을 알 수 있나요?

Mockito, Spring MVC Test 등 테스트 코드를 작성하다보면 static import를 사용해서 메서드 이름만 사용하는 경우가 자주 발생한다. 이 때 이클립스에서 메서드 이름만 입력한 뒤에 컨트롤+스페이스 또는 컨트롤+1 을 사용해서 static import를 자동으로 처리하고 싶지만, 아직 여기까진 지원해주지 않고 있다.


그렇다고 static import와 관련된 지원을 아주 받지 못하는 것은 아니다. 다음의 방법으로 지원 받을 수 있다.

  • Window --> Preferences 메뉴 실행
  • Java/Editor/Content Assist/Favorites 메뉴 실행
  • Net Type 또는 New Member 버튼을 클릭한 뒤, static import 코드 지원 대상이 될 타입이나 멤버 추가
내 경우는 아래 그림처럼 테스트 코드에서 주로 사용하는 클래스들을 등록해서 사용하고 있다.




Posted by 최범균 madvirus

댓글을 달아 주세요

  1. 나그네 2014.07.01 08:47 신고  댓글주소  수정/삭제  댓글쓰기

    진짜 이런걸 보면 인텔리J가 왜 좋은지 알것 같네요
    딱 개발에만 집중할 수 있도록 잘 되어있는거 같아요^^