프로그래밍/Spring & Maven

Spring boot 살펴본 느낌

Terry Cho 2014. 11. 25. 09:05

Spring boot 살펴본 느낌


요즘 Spring Boot가 하도 유행이길래,잠깐 REST API Expose하는 시나리오와 DB 연동 시나리오등 몇가지 일반적으로 웹 개발하는데 사용되는 시나리오들을 살펴 보았다.

전체적인 느낌은 node.js나 ruby on rails와 같은 모던 웹 기술의 생산성을 따라잡기 위해서 무단히 노력했다는 점. 그래서 코드 생산성은 유사하거나 약간 열세? 정도 일거 같은 느낌인데, 왠지 개운하지 않은 뒷맛이 남는다고나 할까? 컨셉적으로 복잡하고 정교한 프로그래밍을 위한 프레임웍을 이용해서 단순성을 부여하다 보니, 빠지거나 아니면 디폴트 설정으로 인해서 위험한 부분이 있을 것 같은 느낌인 든다.


일단 코드 생성 부분을 보면

Maven 프로젝트를 이용해서 생성한 후에, 


JSON 객체와

package hello;


public class Greeting {

long id;

String content;

public Greeting(long id,String content){

this.id = id;

this.content = content;

}

public long getId(){

return id;

}

public String getContent(){

return content;

}

}



그리고 이 객체를 Get 하는 간단한 REST API를 구현해보면


package hello;


import java.util.concurrent.atomic.AtomicLong;

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

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

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


@RestController

public class GreetingController {


    private static final String template = "Hello, %s!";

    private final AtomicLong counter = new AtomicLong();


    @RequestMapping("/greeting")

    public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) {

        return new Greeting(counter.incrementAndGet(),

                            String.format(template, name));

    }

}


이 정도 수준이다. 

처음 시작하는 수준에서, 문서만 보고 이렇게 구현하고 개념을 잡는데 까지 약 20여분이 걸렸으니, node.js나 python등의 여타 모던웹 언어와 크게 진입은 다르지 않다.


실행도, 복잡한 톰캣 설치나 배포 등이 필요 없이, jar 파일을 java -jar로 실행만 하면 spring boot가 tomcat이나 jetty를 임베드한 상태로 기동이 된다.


마치 node.js에서 코드 작성하고, node 소스.js를 기동하면 되는 것과 같은 편리함이다.

기존의 복잡한 XML 설정도 과감하게 생략할 수 있으며, 운영에서 필요한 모니터링과 같은 API등을 Actuator라는 이름으로 제공한다. (Hearbeat 체크, 모니터링 메트릭스 API등)


무엇보다 장점은, 기존의 자바와 스프링 프레임웍에 제공하는 프레임웍들을 그대로 사용할 수 있다는 것이다.

Spring Batch,Spring integratio이나 Spring XD등의 프레임웍을 그대로 사용이 가능하다. 그리고 이런 프레임웍을 이용해서 웹 기반의 애플리케이션 뿐만 아니라, Command Line에서 기동할 수 있는 일반적인 애플리케이션도 개발이 가능하다.(배치 데몬 등)


약간 신경이 쓰이는 부분은

데이타 베이스 엑세스 부분도 다른 일반 프레임웍 (Hibernate,MyBatis 등)을 당연히 사용할 수 있겠지만, Spring-JPA-Data로 사이트에서는 은근(?) 가이드를 하고 있다. Spring-JPA-Data가 은근 스프링에서 밀고 있는 느낌인데, SQL을 JPA에다가 한계층 더 올려서 Data 레벨까지 추상화 한 개념은 아무래도 아직까지는 개운하지는 않다. 요즘들어 많이 쓰이고는 있지만, Hibernate 조차도 복잡한 테이블 관계등을 가지는 경우 여전히 성능이나 메모리 문제를 야기 하는데, 잘 이해하고 쓰면 모르겠지만 Data 레벨을 추상화된 프레임웍이라니 아직은 걱정이 되는게 사실이다.


그리고, node.js = express, python = django, ruby = rails와 같이 모던웹 기술들은 널리 사용되는 웹 프레임웍과 템플릿 엔진이 있는데, Spring boot는 이 부분이 아직 부족해 보인다. (없다는 게 아니라, 그만큼 저변이 확대된 생산성이 높은 웹 프레임웍 엔진, 템플릿 엔진이 없다는 것이다.)

thymeleaf (http://www.thymeleaf.org/whoisusingthymeleaf.html) 템플릿 엔진이 많이 언급되고 있는 것은 같은데, 아직까지 메이져는 아닌거 같고, grails도 아직까지는 다른 스크립트 언어에 비해서 웹에서는 강세가 낮기 때문에 다소 지켜봐야할 부분이 아닌가도 싶다.

그렇지만, 이 부분은 모던 웹에서는 풀 자바스크립트 클라이언트 (angular.js)등을 사용하는 추세가 많아 짐에 따라 큰 장애가 되지는 않을 것으로 보인다.


오히려, API나 백엔드를 빠르게 만들 수 있는 생산성에 의해서 MSA (Micro Service Architecture)와 맞물려서, 백엔드 서버의 API 서버로 포지셔닝할 거 같고, 기존의 node나 ruby와 같은 타 스크립트에 기술을 아직 배우지 못한 자바 개발자들이 이쪽으로 넘어가지 않을까 싶다. 

그리고 JTA 연동을 통한 분산 트렌젝션이나 큐를 이용한 비동기 처리등은 기존의 스크립트 언어들이 가지지 못한 장점이기 때문에, 엔터프라이즈 수준의 프레임웍을 제공하는 것은 인정할만 장점이다.

시간내서 제대로 한번 정리해서 볼 필요는 있는듯.


'프로그래밍 > Spring & Maven' 카테고리의 다른 글

Spring Batch (DB2File)  (0) 2013.06.27
Spring Batch 개념 정리  (0) 2013.06.27
SpringBatch HelloWorld  (0) 2013.06.27
Eclipse에서 Spring Maven 개발환경 설정하기  (0) 2013.03.19
Maven 스터디  (0) 2013.03.19