곧 있을 발표에 사용할 목적으로, 그레들Gradle과 JavaConfig를 적용한 프로젝트를 만들었다.

발표를 빙자해서 나도 JavaConfig 사용법을 익혀볼 요량으로 만들었다. 이번에 토.스.3.1을 읽으면서 JavaConfig를 통해서 XML설정을 대체했을 때의 강점들에 대해 전해 들은 바가 있어 시도해본다. 더욱 강점을 가지려면 @Profile을 통해서 사용환경별로 지정해서 사용하는 것이 좋을 것으로 보인다. 과연?

자바의 웹 애플리케이션에는 관례적으로 web.xml이 포함되어 있어야 했다. 그런데 서블릿3.0 스펙이 나오면서 web.xml 대신ServletContext를 스프링에서 확장한 WebApplicationInitializer를 구현하여 초기화 작업이 가능하다. 자세한 내용은 'web.xml 없는 스프링 개발'을 참조하기 바란다.

이번 예제 프로젝트에는 애플리케이션 설정과 관련된 XML들을 모두 @Configuration 애노테이션을 선언한 클래스들로 대체했다.

Github repository: https://github.com/ihoneymon/rocking-the-rest-api

▣ 선행작업

$ git clone git@github.com:ihoneymon/rocking-the-rest-api.git
$ cd rocking-the-rest-api
$ ./gradlew generateQueryDsl

▣ Import project

▣ Spring tools - Add Spring project nature

Spring Project Nature를 추가하고 프로젝트의 아이콘이 변경되면, 프로젝트의 속성창을 띄워서 [Spring-Beans Support]를 가면 아직 설정파일이 추가되어 있지 않다. [Scan...] 버튼을 누른다.

 @Configuration 이 붙은 JavaConfig 용 클래스들이 검색된다. 모두 선택하고 [OK]를 누른다.

Config 파일들 목록이 모두 추가되어 있다.

▣ Spring Beans 확인

'Spring Explorer' 창을 보면 아래 그림과 같이 스프링 빈과 관련된 클래스와 목록을 확인할 수 있다.

밑에 'Config Detection'에 설정을 변경하지는 않았지만, 혹시나 검색되지 않는다면 아래 그림에서 보는 것처럼 'Auto detection for annotated Java Spring configuration files'를 체크하자.



이후에는 간단하게 Controller들을 구현해주면 발표하려는 수순까지 발표에 사용가능하다.

오늘은 열심히 발표자료들 수집하고, 대략적으로 내용을 정리해야지.


아래 그림에서 보는 것처럼 '@RequestMapping' 뷰에서 컨트롤러에 있는 @RequestMapping 을 스캔하지 못하는 경우가 있다. 이런 증상이 나타나는 이유는 STS 플러그인에서 빈설정과 관련된 파일을 읽지 못하면서 발생한 것이다. 간단하게 스프링빈 설정과 관련된 파일을 추가하는 것으로 해결가능하다.

프로젝트를 선택하고 마우스 우클릭 후 'Properties'를 선택하거나 'Alt+Enter' 단축키를 통해서 프로젝트 속성창을 호출한다.


프로젝트 속성창에서 'Spring - Beans Support' 를 선택했을 때, 아래그림고 같이 'Maintain Spring bean configuraton files' 항목이 비어있는 경우에 'RequestMapping' 뷰에 목록이 노출되지 않는다. 그림에서 보는 것처럼 XML 빈설정과 자바클래스를 통한 빈설정 두가지를 추가할 수 있다.

xml로 빈설정을 했다는 가정을 하고,  [Scan..] 버튼을 누른다.



그럼 자동으로 프로젝트 내에서 <beans> 태그를 가진 xml 파일들을 스캔하여 팝업창에 목록을 노출한다. 적용하려고 하는 빈설정파일을 선택하고 [OK] 버튼을 누른다. 웹 애플리케이션 설정을 하는 xml 파일만 선택해도 된다. 그러면 아래 그림과 같이 Config Files에 선택한 파일이 추가된다. [OK] 버튼을 눌러 프로젝트 속성창을 닫고 'Spring Tools - Show RequestMapping'을 선택한다.




아래 그림에서 보는 것과 같이 @RequestMapping 목록이 추가 된 것을 확인할 수 있다.



그레들 지원 플러그인을 설치했었다.

이클립스에는 그레들 에디터gradle editor가 설치되어 있지 않기 때문에, 아래 그림에서 보는 것처럼 '*.gradle'  파일을 열면 아래 텍스트로 열려서 어떤 형태로 구성되어 있는지 파악하기가 어렵다. 천성이 게으르다. 

이걸 어떻게 하면 색상을 적용해서 손쉽게 볼 수 있을까? 자동완성을 지원하게 할 수 있을까? 

하는 궁리를 하다가 문득 gradle editor를 본 기억이 났다.


아래 그림에서 보는 것처럼 Eclipse에서 'File Associations''*.gradle'이 적용되어 있지 않기에, build.gradle 등의 .gradle 확장자를 가진 파일을 열어도 일반 텍스트 에디터로 연결된다. 

이클립스에서 [Help -> Eclipse Marketplace...]를 선택한다. 'Find' 항목에 'gradle'이라고 입력하면, 아래 그림에서 보는 것처럼 'Minimalist Gradle Editor 0.10.0' 을 찾아볼 수 있을 것이다. [Install] 버튼을 누르고 설치를 진행한다.

설치 후에 다시 이클립스의 'File Associations'를 살펴보면 '*.gradle' 확장자와 그에 해당하는 'Associate Editors:' 항목에 추가된 것을 볼 수 있다.

다시 build.gradle을 열어보면 editor에 의해서 문법강조가 적용되어 있는 것을 볼 수 있다. 그리고 자동완성 기능도 지원된다. +_+)b 이클립스에서도 편하게 그레들 파일을 수정하자. 굿럭.


예전에는 IDE(개발툴)의 그레들Gradle에 대한 지원이 불안정해서 터미널창에서

./gradlew eclipse  // 이클립스

of

./gradlew idea // 인텔리제이

등의 명령어를 실행한 후에, IDE에서 프로젝트를 import하여 사용했었다. 그렇지만 gradle1.8인가 부터 개발툴들에 대한 API가 정리가 되고 IDE의 그레들 플러그인이 안정화되면서 위의 작업들은 불필요해졌다. 굳이 터미널창에서 초기화 작업을 진행하지 않아도 그레들 플러그인을 통해서 build.gradle, settings.gradle을 분석하여 필요한 작업을 진행해준다.


이클립스에서 그레들 프로젝트를 불러오는 방법은 간단하다. 우선 그레들 플러그인이 설치되어 있어야 한다.

[File - Import]를 선택하면 다음 창이 뜬다. 여기서 'Gradle Project'를 선택하고 [Next]를 선택한다.

다음 'Import Gradle Project' 창에서 [Browse...] 버튼을 눌러 불러올 그레들 프로젝트를 선택한다. 프로젝트를 불러오고 나면 아래 그림에서 보는 것처럼 'Import 하기 전에 [Build Model] 버튼을 눌러야 한다.' 라는 경고가 뜬다. 그대로 진행해주자. 

그러면 아래의 그림처럼 진행률이 나타난다. 짐작으로는 build.gradle과 settings.gradle을 분석하는 과정이라 생각된다.

분석이 끝나고 나면, 다음 그림과 같이 프로젝트 항목이 나타나고, 이 프로젝트를 체크하고 [Finish] 버튼을 누르면 그레들 프로젝트 불러오는 과정은 완료된다.

그레들 프로젝트를 불러오면서 'build.gradle'에 따라서 다시한번 프로젝트 초기화과정이 진행된다. 

위의 태스크들이 실행된 이유는,  아래 그림에서 보는 것처럼 build.gradle 내에

apply plugin: 'eclipse-wtp' 

라고 그레들에서 eclipse-wtp 플러그인을 사용한다고 정의되어 있기 때문에, 프로젝트를 불러오는 과정에서, 이클립스에서 자동으로 실행가능한 태스크들을 실행한 것이다.


제 14회 한국자바개발자 컨퍼런스(http://www.jcoconference.co.kr/)에서 발표예제 프로젝트(https://github.com/ihoneymon/rocking-the-rest-api)를 작성하고 있다. 이 프로젝트는 빌드툴로 메이븐Maven대신 그레들Gradle을 사용하고, 프로젝트에 대한 xml 설정 대신에 JavaConfig를 적용해보고 있다(이와 관련해서 상당한 삽질이 예상된다, 나는 아직 그레들과 JavaConfig를 실제로 운영해본 적이 없으니까).

Intellij12에서는 web.xml을 기준으로 웹애플리케이션 여부를 판단한다. 그래서 JavaConfig로 프로젝트 설정을 해놓으면 자동으로 인식하지 못하는 문제가 있다. 어쨌든, 최소한의 web.xml 설정파일이 있어야 웹 애플리케이션으로 판단하고 설정을 진행한다.웹 애플리케이션으로 만들려면 Facet에서 'Web'에 대한 설정을 수동으로 해주어야 한다. 귀찮다.

최근에 나온 STS(Spring Tool Suite)가 상당히 깔끔하게 잘 나왔고, 혹시나 하는 마음에 그레들 지원을 제대로 해주지 않을까하는 마음을 가지고 STS를 실행한다. 아직 http://spring.io/tools/sts 에서 내려받은 STS에는 그레들이 기본설치 되어 있지 않기 때문에 'Gradle Support(혹은 Gradle Intergration plugin)'을 설치해주어야 한다. 화면에서 보는 것처럼 Dashboard에서 [extension]탭을 선택하고 'Find'에서 'gradle'만 입력하면 바로 찾아서 설치 가능하다. 

혹은 EclipseEE를 사용하는 사람은 밑에 그림에서 보는 것처럼 Eclipse Marketplace를 실행([Help -> Eclipse Marketplace...] 선택)하여 'gradle 혹은 gradle support'라고 검색하여 나온 'Gradle Integration for Eclipse'를 선택하고 [Install] 버튼을 눌러 설치를 진행한다.





플러그인의 설치가 완료되고 STS를 재시작하고 나서, [File -> Import]를 선택해보면 'Select an import source' 항목에 'Gradle Project'가 추가되어 있는 것을 확인할 수 있다. 

이렇게 간단하게 'Gradle support plugin'의 설치를 마쳤다.

+ Recent posts