본문 바로가기

스프링 부트

스프링 부트(Sting boot) 편리하니 사용해보자 스프링로디드(Springloaded)

스프링 로디드라는것을 활용해보도록 하겠습니다.

스프링 로디드는 스프링에서 제공하는 서버 재시작하지 않고도 java나 코드 수정시에 바로 적용되게끔 도와주는라이브러리 입니다.


보통 큰 프로젝트에 투입되거나 개인플젝하더라도 여러가지를 추가하고 복합적인게 되면 서버 실행시 많은시간이 걸립니다.

java 파일 수정했을시에 보통 서버 재시작을 하지 않고서는 변경된 내용 확인하기가 어렵습니다.


그걸 가능하게 하는 기능을 구현하는게 오늘의 목표입니다. 핫리로딩이라고 불립니다. Jrebel이라는것도 있지만 상용성이라 (지금은 무료되었나?)


기존에 Maven 설정했는데 안되시는분들 참조하시면 해결될것입니다.


방법은 여러가지가 있습니다.


1. 이클립스-톰켓 연동시 방법

2. intellij springloaded 

3. 스프링 부트(maven) 설정방법

3. 스프링 부트(gradle) 설정방법



저희는 스프링부트를 하고있기에 maven을 활용하도록하겠습니다.


<dependencies>여기에 아래코드 넣으시면됩니다.</dependencies>


  <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>springloaded</artifactId>
      <version>1.2.8.RELEASE</version>
  </dependency> 


pom.xml   xml파일도 따로 추가하오니 참조하시기 바랍니다.


tip : maven에 라이브러리 추가할 시 http://search.maven.org/로 검색하여 pom.xml 설정에 추가하시면 됩니다.


maven 설정은 이제 다 끝났습니다.

자 이제 남은것은 이클립스 저희는 Spring 통합버전으로 STS를 사용하기에 STS 설정이 남아있습니다.

여기서도 두가지 방법이 있습니다.
설정이라고 해봤자 어떻게 실행시키느냐인데요..

1. 프로젝트 선택 - 오른쪽버튼 클릭 - Run As - Maven Build(두개뜨신분들은 그냥 첫번째꺼)

2. 프로젝트 선택 - 오른쪽버튼 클릭 - Run As - Spring boot App(기존글 보면 이것으로 스프링 부트 내부서버 실행시켰습니다.)

일단 실행시키지 마시고 하기전에 설정을 하나 해줘야합니다.


▼ 그림1-1) 프로젝트 선택 - 오른쪽버튼 클릭 - Run As - Run Configurations...




 프로젝트 선택 - 오른쪽버튼 클릭 - Run As - Maven Build 실행 하기 전 설정 방법부터 살펴보도록 하겠습니다. (헷갈리지마세요)

이것은 maven을 빌드시키고 아래 그림림에 Goals : spring-boot:run 명령어를 삽입시켜 실행시키는 방법입니다.



▼그림 1-2) 프로젝트 선택 - 오른쪽버튼 클릭 - Run As - Run Configurations... 하면 아래그림처럼 표시됩니다.



Maven build를 선택하여 아래 실행시킬 프로젝트명을 선택합니다. 저는 demo 프로젝트를 선택합니다.

그리고 우측 그림처럼 Goals 부분에 spring-boot:run 명령어를 입력하시고 Apply 하시고 cloase하면 설정은 완료

Run은 누르게 되면 명령어 설정한대로 실행이됩니다.


이후 실행시킬때는 그림1-1) 처럼 프로젝트 선택 - 오른쪽버튼 클릭 - Run As - Maven Build 누르시면 서버가 시작됩니다.


---------------------------------------------------------------------------------------------------------------------------------------------------------


첫번째 maven build으로 실행시키는 방법은 끝났습니다.
두번째 Spring boot App 방법으로 넘어가죠 이것도 뭐 비슷합니다.


▼ 그림2-1) 프로젝트 선택 - 오른쪽버튼 클릭 - Run As - Run Configurations... 처음과 동일하네요



▼그림 2-2) 프로젝트 선택 - 오른쪽버튼 클릭 - Run As - Run Configurations... 선택합니다.

좌측에 보시면 Spring Boot App 선택하시고 화살표 눌러서 적용되어있는 프로젝트를 선택합니다. demo 프로젝트를 선택합니다.

우측에 보시면 Aguments 탭으로 이동 - VM arguments에 명령어를 입력합니다.


주의하실사항 : 자세히 보시면 경로가 포함되어있습니다. 

네 해당 경로에가서 jar파일을 읽도록 되어있습니다. 이거 해주셔야지 정상적으로 스프링 로디드가 적용됩니다.

경로는 이전에 maven repository 변경하는 포스팅(http://zanywitch.tistory.com/85) 했었는데 그 경로로하시면 됩니다.


따로 변경안하시고 하셨으면 기본적으로는 C:\Users\사용자명\.m2\repository\org\springframework\springloaded\1.2.8.RELEASE\springloaded-1.2.8.RELEASE.jar


빨간색 칠해진 부분은 따라하셨으면 버전도 동일하게 받으셨을테니 동일할것입니다.



-javaagent:E:\SpringBoot\maven\repository\org\springframework\springloaded\1.2.8.RELEASE\springloaded-1.2.8.RELEASE.jar -noverify 


aguments 설정완료하셨으면 Apply 해주시고 바로 Run하시면 내부서버가 동작하게 됩니다.


그 이후에는 설정 따로하지 않고 Run As - Spring Boot App 실행시키면 됩니다.






자 이제 마지막 단계입니다. 맞아요 확인하는 단계


▼ 기존에 Run As - Spring Boot App 실행시키고 나서 http://localhost:8080 호출시



서버 종료 or 재시작하지 마시고 그대로 둔채로 java 소스를 변경해봅시다.

파란색으로 색칠된 부분을 봅시다.
Hello World -> Hello Spring boot로 변경하였고
아래는 신규 url로 호출시 처리하는 로직을 넣었습니다. http://loclahost:8080/new로 호출시에 화면에 New Url이 찍히겠군요

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@SpringBootApplication // @Configuration + @EvableAutoConfiguration + @ComponentScan 3가지 묶음
// 해당 어노테이션들은 다양한 설정이 자동으로 수행된다. 기존의 스프링 설정파일이 필요없게됨
public class DemoApplication {
 
 @RequestMapping("/")
 public String home() {
  return "Hello Spring Boot";
 }
 // 추가로 신규 url 추가
 @RequestMapping("/new")
 public String newMethod() {
  return "New Url";
 }


 public static void main(String[] args) {
  SpringApplication.run(DemoApplication.class, args);
 }
} 


자 이제 localhost:8080 으로 다시 호출해복보겠습니다. 다시  호출시 url 클릭하고 블록씌어지면 엔터치거나 ▶(초록색) 누르면 됩니다.



▼ 그림을 보시면 Hello World가 Hello Spring Boot로 변경이 됩니다. 재시작하지 않았는데 말이죠..     




▼맛보기용 2 새로운 url로 호출