STS에서 'Spring Starter Project'를 생성하고 나면 프로젝트에는 두 개의 'JRE System Library' 가 추가되는 증상이 나타난다. ㅡ_-);;



이 때는 당황하지 말고 침착하게 다음과 같이 대처한다.

  • 프로젝트의 속성창을 띄운다: 프로젝트 선택하고 Alt + Enter 를 치거나 마우스 우클릭하여 Properties 를 선택

  • Java Build Path 를 선택하고 [Libraries] 를 선택한다.
  • 하나를 선택하고 [Remove] 버튼을 눌러 두 개를 모두 삭제한다.
  • [Add Library] 를 선택하고 'JRE System Library' 를 선택한다.

  • 'Workspace default JRE' 를 선택하고 [Finish] 를 누른다.

  • [Apply] 를 누르면 정상적으로 변한 프로젝트를 확인할 수 있다.



STS의 스프링부트 대시보드: 1부 - 로컬 부트앱

스프링 커뮤니티 유저 여러분.

이 글은 STS에 추가된 스프링부트 대시보드에 관한 소식을 전하기 위한 세 개의 글 중에서 처음으로 작성된 글이다. IDE에서 스프링부트 대시보드를 어떻게 사용하는지를 살펴보고, 그것이 제공하는 다양한 기능들, 스프링부트 기반의 애플리케이션을 개발할 때,을 어떻게 사용할지를 배운다. 스프링부트 대시보드는 얼마전 출시된 STS 3.7.1에서 소개되었으며, 이 연재 블로그를 따라하기 위해서는 해당버전 이상을 필요하다. 만약 설치하지 않았다면,http://spring.io/tools/ 으로 가셔서 내려받아 설치하기 바란다.

1. 소개

현재 스프링부트는 엔터프라이즈 환경을 위한 애플리케이션 구현을 간단하게 해주는 범용적인 기술이 되었다. 마이크로서비스 기반 애플리케이션을 만들어내는데 적합하며, 스프링 애플리케이션 설정을 쉽고 작게 생각하도록 극적인 변화를 이끌었다. 진정으로 클라우드 친화적인 애플리케이션으로 문을 열고 스프링 클라우드와 더불어 아마 많은 마이크로서비스로 구성될 것이다.

이 극적인 이동은 아키텍처에 대한 우리의 생각들이 IDE에도 반영되길 원하게 되었다. 전통적인 자바 통합개발도구IDE 대부분이 클라우드 친화적인 혹은, 클라우드 이전 그리고 분산 프로그래밍 시대 이전에 만들어졌다. 이는 이클립스 IDE가 그러하고 그것을 기반으로 하는 Spring Tool Suite(STS) 또한 그러하다. 이 IDE들은 클라우드 친화적인 시대에 들어섰다. 이는 스프링부트 대시보드의 시작점이 되었다. 스프링부트 대시보드는 수많은 스프링부트 기반의 마이크로서비스 애플리케이션을 관리하고 IDE 내 프로젝트들을 동작시키는 개발자들의 삶을 윤택하게 만들기 위해 만들어졌다.

2. 스프링부트 대시보드

작게 점진적으로 시작하자면, 스프링부트 대시보드는 STS/Eclipse의 추가적인 뷰로 구성됬다. 기본 툴바의 스프링부트 버튼을 누르면 열어볼 수 있다. 간단한 뷰가 열리고 작업공간의 (스프링부로 구성된)프로젝트들이 동기화되며 나타난다.

01-dashboard.png

스프링부트 대시보드의 주요목적은 매일, 매시간, 매번 빈번하게 살펴보는 것들에 대해서 빠르게 접근할 수 있도록 하는데 있다. 대시보드에 있는 부트앱을 선택하고 툴바에서"run" 혹은 "debug"를 눌러 빠르게 시작할 있다. 부트앱을 실행할 수 있는 이보다 빠른 방법이 있을까? 이미 실행중인 앱의 코드가 변경되어 재시작하고 싶다면 그렇게 하면 된다. 코드가 변경되었을 때, 대시보드의 "run" 버튼을 눌러, 앱을 정지 또는 재시작시킬 수 있다. 다시말하지만, 한번 클릭으로 간단하게 할 수 있게 되었다.

02-start-single.png

부트 대시보드의 이런 동작들은 단일 혹은 다중 프로젝트에서도 동일하게 수행된다. 만약 동시에 다수의 부트 앱, 협업을 위해 필요한 서비스의 묶음,을 시작하거나 정지하길 원한다면, 대시보드에서 그것들을 모두 선택하고 "run"을 누르면 된다. 그것만 하면 된다.

03-start-multiple.png

프로젝트들을 스프링부트 1.3 적용하면, 부트 대시보드는 보다 환상적인 것들을 보여줄 것이다. 부트 앱이 구동되고 나면, 부트 대시보드에는 앱이 시동 단계(VM은 실행중이지만, 앱은 아직 초기화중)와 다른 시각적 표현이 나타나며 이는 실행 중인지 완료된 것인지를 명확하게 알려준다. 진행중 아이콘은 앱이 시동주이라는 것을 표시하고, 녹색 "업up" 아이콘은 앱의 초기화 및 실행이 완료되었다는 것을 알려준다. 로그 출력으로 "server started" 메시지가 출력되길 기다리며 살펴보는 등의 행동을 할 필요가 없다. 부트 대시보드 아이콘들을 살펴보자.

04-starting.png

앱이 실행되면, 대시보드에는 사용자의 편의를 위해 동작중인 앱이 사용하는 포트가 표시된다. 앱이 사용하고 있는 포트가 몇번인지 찾기 위해서 로그 출력물을 탐색할 필요가 없다. 대시보드에 그 정보가 자동적으로 표시된다. 그리고 실행중인 부트앱의 콘솔로 빠르게 이동이 가능하며, 그 동작은 매우 신속하고 간단하다.

더이상 실행중인 앱에 바로 브라우저로 접근하기 위해 실행중인 앱의 포트를 알고 있을 필요가 없어졌다. 부트 대시보드에서 프로젝트를 더블클릭하기만 해도 새로운 브라우저가 앱에 기본설정된 URL로 접근할 것이다.

05-browser.png

기본적으로 Eclipse/STS는 내부 인터넷 브라우저 뷰를 사용한다. 만약 외부 인터넷을 사용하려 한다면 설정에서 지정해야 한다.

기본으로 접근해야할 기본 URL이 지정되어있지 않다면, 그것을 사용자설정할 수 있다. 대시보드에서 프로젝트를 선택하고 속성뷰를 열어 URL 경로를 Path에 입력한다. 앱을 더블클릭하면 사용자설정한 URL로 열리는 것을 확인할 수 있을 것이다.

06-path.png

애플리케이션에 정의된 URL 확장이 명확하지 않다면, 속성뷰 창에서 "Request Mapping"을 선택할 수 있다. 실행중인 앱의 모든 리퀘스트 매핑 목록 - 여러분이 정의한 것들은 상단에, 라이브러리들에 의해 생성된 것들은 하단에 위치한다. 리퀘스트 매핑 목록에서 URL 부분을 클릭하면 해당 URL을 브라우저에서 열고, 코드 부분을 클릭하면 해당 프로젝트의 코드 편집기를 통해 해당 코드를 연다.

07-request-mappings.png


역자주

"org.springframework.boot:spring-boot-starter-actuator"를 추가해줘야 /mappingsAPI를 이용해서 앱의 Request Mapping 목록을 조회할 수 있다.

작업공간에서 보다 많은 마이크로서비스를 가지고 있다면, 그것들 모두가 동시에 동작하지 않을 가능성이 있다. 그렇다면 묶음설정을 좋아할 것이다. 예를 들자면 Eclipse/STS에서, 작업 묶음을 만드는 것과 같다. 부트 대시보드는 프로젝트에 임의의 갯수로 태그를 선언하여 태그하는 것을 허용한다(다시 속성 뷰를 보자). 태그는 필터 박스(부트 대시보드 상단에 위치)를 이용해서 부트 대시보드에 보이는 부트 앱을 줄이는데 사용할 수 있다.

08-filter.png


역자주
속성창에서 Tags 항목에 입력이 가능하다. ㅡ_-)

화면으로는 명확하게 안보여.

3. 견해

연재 두번째 글에서는 부트 대시보드의 클라우드 파운더리Cloud Foundry 통합을 소개하면서, 부트 대시보드로부터 CF로 마이크로서비스를 어떻게 배포하는지, 로컬 부트 앱을 사용하여 CF에 배포하는 조합 사용법을 소개하겠다.


spring.io에서 Spring을 이해할 수 있도록 잘 작성된 가이드를 제공한다.

STS 자체에서도 spring.io/guide에서 제공하는 콘텐츠들을 바로 다운로드 받아서 열어볼 수 있는 기능을 제공한다.


1. 사용방법은 [File - New - Import Spring Getting Started Content]를 선택한다.

2. 자신이 받고 싶은 튜토리얼을 선택한다. 이때, 비동기식으로 선택받은 프로젝트를 다운로드 받는 과정을 진행하기 때문에, 하단에 있는 [Finish] 버튼이 바로 활성화되지는 않으니 잠시 기다린다. 'Maven'이나 'Gradle' 중 하나를 선택하면 되는데, 몇몇 프로젝트들은 build.gradle 파일이 존재하지 않는다는 메시지와 함께 [Finish] 버튼이 비활성화된다.


3. 선택한 튜토리얼 다운로드가 끝나고 나면 프로젝트가 임포트import 되고 내부 브라우저창으로 해당 튜토리얼관련 페이지가 뜬다.


이렇게 간단하게 스프링과 관련된 튜토리얼을 다운로드 받고 살펴볼 수 있다. 최근에 작성된 프로젝트의 경우에는 Spring boot를 이용해서 바로 실행가능한 형태를 취하고 있다.

곧 있을 발표에 사용할 목적으로, 그레들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 목록이 추가 된 것을 확인할 수 있다.



+ Recent posts