Play framework 을 사용해볼까?

자바 웹 프레임웍을 떠올렸을 때, 가장 먼저 생각나는 것이 Spring framework 이다. 아마, 대한민국에서 가장 많이 사용하는 프레임웍임을 부인하는 사람은 없을 것이다. 내가 재직하고 있는 회사 내에서도 자바로 개발하는 프로젝트의 90% 이상은 스프링을 사용하고 있으리라.

난 개인적으로 스프링을 그리 좋아하진 않는다. 물론, 내가 좋아하지 않는다는 것은 지극히 개인적인 의견이며, 그렇다고 스프링이 좋지 않다는 말은 더더욱 아니다. 스프링에 대해 모르는 것이 더 많은 하찮은 개발자의 단순한 반골기질에 의해 발현되는 개인적인 취향일 뿐이라 이해하면 될 것이다.

뭐 어쨌든.. Play framework 에 대해 얘기를 하려다 사설이 길었는데.. 이러한 이유로 인해 스프링이 아닌 자바를 이용해 웹 애플리케이션을 개발할 수 있는 다른 웹 프레임웍을 찾다가 발견한 것이 바로 Play 다. Play 말고도 자바를 이용할 수 있는 다른 프레임웍이 물론 많이 있겠지만, 나의 견문이 짧아 다 알진 못한다.

본격적으로(?), 내가 플레이를 학습 및 사용해보려는 이유에 대해 한번 정리해보자.

Play framework 의 장점은?

Play framework 공식 페이지에서 얘기하는 장점을 나열해보면 다음과 같다.

Built for asynchronous programming

Play 는 비동기적인 http 프로그래밍 모델을 지원한다. 플레이는 Akka 를 지원하는데, 이는 액터 기반(Actor-based)의 모델을 사용하는 성능 좋은 동시성 시스템을 구현하기 위한 라이브러리이다.

Focused on type safety

Play 2.0 부터 스칼라 기반의 템플릿 엔진을 사용함으로써, 비즈니스 로직 뿐만 아니라, 뷰를 위한 영역에서도 타입 안정성을 확보할 수 있게 되었다.
또한, routing 시스템에서도 타입 체크를 수행하여 컴파일 시점에서 정의된 route 들을 검증할 수 있다.

Native support for Java and Scala

초기 Play 는 스칼라를 지원하기 위해 별도의 모듈을 제공하는 방식이었으나, 지금은 Play 의 코어가 스칼라로 쓰여졌다. 자바 또한 완벽하게 지원하며, 2.5 에서는 Java 8 의 클래스들을 사용하도록 업데이트 되었다.

Powerful build system

Play 는 build tool 로 자바와 스칼라 프로젝트를 모두 빌드할 수 있는 sbt 를 사용한다.
때문에, 프로젝트 빌드를 커스텀하게 설정할 수 있으며, Maven 프로젝트와의 통합도 쉽다. sbt 뿐만 아니라 Activator 라는 툴을 사용할 수도 있는데, Activator의 명령어를 통해 Play 프로젝트의 생성 및 실행을 간단하게 수행할 수 있다.

Datastore and model integration

전통적인 데이터베이스 액세스 라이브러리인 Ebean, JPA, Anorm 을 지원하는 것은 물론, 많은 data store 와의 통합이 자연스럽다.

Reference 는?

LinkedIn

내가 알고 있는 가장 큰 레퍼런스는 링크드인이다. 링크드인의 Yevgeniy Brikman 의 글(링크) 에는 아래와 같은 내용이 있다.

Play is built on top of Akka and Netty, so it’s fully asynchronous: that is, you can use non-blocking I/O when making calls to remote services. This makes it possible to support many concurrent connections without dealing with thread pools. It also makes it easy to make I/O calls in parallel to improve performance and enables the use of real-time, streaming, and server push technologies such as WebSockets.

위 단락의 주된 내용은, Play 를 사용함으로써 쓰레드 풀에 대한 고민없이 많은 수의 요청을 동시에 처리할 수 있는 이점을 가질 수 있다~ 이다. 사실 난 개인적으로 이런 부분이 Play 를 사용하면서 얻을 수 있는 가장 큰 장점이라 생각하며, 동시에, 내가 Play 를 사용하려는 이유이기도 하다. 하지만, Play 의 non-blocking I/O 를 통해 얻는 퍼포먼스 이점이 스프링과 비교했을 때 얼마나 차이가 날지는.. 사실, 아직 잘 모르겠다.

결론

Play 는 장점이 많은, 제대로 학습 한번 해봄직한 프레임웍이다.
현재 대부분의 자바 애플리케이션이 스프링을 사용하고 있는 현상에 조금 지겨움을 느끼는 개발자나, 스프링에 대해 어떤 이유에서건 거부감을 가지고 있는 개발자라면.. 또한, 자바말고 스칼라를 한번쯤 꼭 익혀보고 싶은 개발자이면, Play framework 을 관심있게 지켜볼 필요가 있을 것 같다.