Play 프레임워크 미리보기
Play 프레임워크는 거창한 엔터프라이즈 자바 스택에 대한 깔끔한 대체품이다. 이것은 개발 생산성에 초점을 맞추고, RESTful 아키텍처에 목표를 두고 있다. Play 는 애자일 소프트웨어 개발의 완벽한 동반자이다.
Play 프레임워크의 목적은 Java로 어려움을 겪는 것보다 쉬운 웹 어플리케이션 개발을 하는 것이다. 이것이 어떻게 가능한지 보도록 하자.
Play 는 순수 Java 프레임워크 이며, 당신이 좋아하는 개발툴과 라이브러리를 그대로 사용할 수 있게 해준다. 만약 당신이 벌써 개발환경으로 Java를 사용하고 있다면, 다른 언어, IDE, 라이브러리로 바꿀 필요가 없다. 단지 더욱 생산성 있는 Java 환경으로 바꾸기만 하면된다.
버그를 고치고 리로드 하기
Java 플랫폼은 반복적이고 지루한 컴파일-패키지-배포 순환으로 기인한 낮은 생산성으로 악명이 높다.
이것이 우리가 개발 사이클을 다시 생각한 이유이며, Play로 효과적인 프로세스를 통해서 개발하도록 하였다.
프레임워크는 당신의 Java 소스를 바로 컴파일하며, 서버를 재시작하지 않고도 리로드한다. LAMP 나 Rails 같은 환경처럼 코딩하고 리로드하고 수정사항을 바로 확인할 수 있다.
간단한 텍스트 에디터로도 충분히 작업할 수 있어서, 다양한 기능을 제공하는 Java IDE를 사용하지 않아도 된다는 점은 아주 재미있는 부분이다.
에러가 발생할 때마다, 프레임워크는 당신의 수고를 덜 들일수 있는 방법을 찾고 문제점을 알려준다.
스택 트레이스는 불필요한 것은 줄이고 최적화하여 문제를 더 쉽게 해결할 수 있도록 해준다.
단순한 상태비보존 MVC 아키텍쳐
데이터베이스와 웹브라우저. 왜 이 둘사이의 상태를 가지고 있어야 될까?
상태보존과 컴포넌트 기반의 Java 웹프레임워크는 페이지의 상태를 쉽게 자동으로 저장할 수 있게 해주지만, 다른 많은 문제들을 가져온다 : 만약 당신이 두번째 윈도우를 연다면? 만약 당신이 브라우저의 뒤로가기 버튼을 누른다면?
Share Nothing 아키텍쳐는 PHP, Rails, Django 에 이르기까지 많은 웹프레임워크에 장려되고 있다. 브라우저가 더욱더 강력해짐에 따라서, 클라이언트쪽의 상태 문제를 해결하기 위해서, Ajax 또는 오프라인 스토리지를 사용하는 것이 이제는 쉬워졌다.
우리는 웹위의 위조상태를 리빌드하기 위해서 더이상 HTTP 모델을 해킹할 필요가 없다. 'share nothing'의 다른 면은 병렬로 페이지의 부분을 렌더링하기 쉽게 만들어주고, 부분 페이지 업데이트를(또는 진보적인 향상들) 하게 해준다는 것이다.
HTTP-to-code 매핑
만약 다른 Java 웹프레임워크(서블린 API, 스트럿츠)를 이미 사용하고 있다면, 당신은 벌써 이상한 Java API와 개념을 포함한 HTTP 프로토콜의 추상뷰를 사용하고 있는 것이다. 우리는 다르게 생각한다. 웹프레임워크는 HTTP와 그의 개념에 대한 충분하고 직관적인 접근을 제공해야만 한다. 이것이 Play 와 다른 Java 웹프레임워크들의 기본적인 차이점이다.
HTTP, the Request/Response 패턴, REST 아키텍처 스타일, content-type negotiation, URI 는 모두 Play 프레임워크의 주요 개념들이다.
예를 들어서, URI 패턴에서 Java를 호출하는 바인딩은은 아래처럼 한줄로 끝난다:
GET /clients/{id} Clients.show
Ajax, REST, 웹페이지 사이의 뒤로/앞으로의 이동관리 들이 매일 당신이 웹개발시에 접하는 이슈들이라면, 바로 Play를 시도해보기 바란다.
효과적인 템플릿 엔진
우리는 JSP 와 표현식에 대한 아이디어를 좋아한다. 하지만, 태그 라이브러리를 생성하가 위해, 왜 그렇게나 많은 설정파일이 필요한 것인가? 밑단에 존재하는 객체 모델에 완벽한 접근을 할 수 없는 것일까? JSP는 많은 한계들을 가지고 있고, 이것은 정말로 불만스러운 것이다.
누구든 아래와 같이 작성하면 피곤할 것이다:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> <c:choose> <c:when test="${emails.unread != null && fn:size(emails.unread)}"> You have ${fn:size(emails.unread)} unread email(s)! </c:when> <c:otherwise> You have no unread emails! </c:otherwise> </c:choose>
우리는 확실하게 아래와 같이 작성하는 것을 좋아하리라 생각한다:
You have ${emails.unread ?: 'no'} ${emails.unread?.pluralize('email')} !
Play 템플린 엔진에서 제공되는 표현식은 Groovy 이며, Groovy는 Java와 일치하는 문법을 제공한다. Play는 템블릿 시스템이 HTML response를 렌더링하는 것을 기본으로 사용하고 있지만, e-mail 메시지, JSON 과 같은 다른 문서형식을 생성하는데에도 자유롭다.
스테로이드 주입한 JPA
Java Persistence API (JPA)는 Java에서 사용 가능한 가장 깔끔한 객체-관계 매핑(ORM) API 이다. 만약 당신이 벌써 알고 있다면, 당신은 Play와 함께하면서 얼마나 더욱 간단하게 되었는지 놀라게 될 것이다. 설정할 것 없이, Play는 자동으로 JPA 엔티니 매니저를 시작하고 코드가 리로드 되는 동안에 마술적으로 동기화한다.
게다가, 당신이 제공되는 play.db.jpa.Model 수퍼클래스를 사용한다면, 그것은 더욱 당신의 코드를 예쁘게 만들어줄 것이다:
public void messages(int page) { User connectedUser = User.find("byEmail", connected()).first(); List<Message> messages = Message.find( "user = ? and read = false order by date desc", connectedUser ).from(page * 10).fetch(10); render(connectedUser, messages); }
테스트 주도 개발
통합된 테스트 실행기는 테스트 주도 개발(TDD)을 쉽게 해준다. 단순한 유닛테스트부터 수용가능한 모든 종류의 테스트를 작성할 수 있고, Selenium을 사용해서 브라우저에서 직접 수행한다. 코드 커버리지(범위) 또한 측정된다.
풀스택 어플리케이션 프레임워크
Play 프레임워크는 처음에 우리 자신의 Java 어플리케이션의 영감을 받았다. 그것은 현대 웹어플리케이션을 생성하기 위한 모든 도구들을 포함하고 있다:
- JDBC를 통한 RDBMS 지원.
- 하이버네이트를 사용한 객체-관계 매핑 (with the JPA API).
- 통합 캐쉬 지원하며, 필요한 경우 분산 memcached 를 쉽게 사용할 수 있다.
- JSON 또는 XML 을 사용한 직관적인 웹서비스 (SOAP이 아닌, 실제 웹서비스들을 말함).
- 분산 인증을 위한 OpenID 지원.
- 어디에든 배포될 수 있는 웹어플리케이션 (어플리케이션 서버, 구글 앱 엔진, 클라우드, 등…)
- 이미지 처리 API.
모듈식 아키텍처는 웹어플리케이션을 다른 것을과 결합할 수 있도록 해준다. modules 어플리케이션에 감사하라. 당신의 Java 코드, 템플릿, 정적인 리소스들(Javascript, CSS 등)을 간단하게 재사용할 수 있다.
와우~ 국내 playframework의 선두주자시군요^^;;
답글삭제전 지난주 JCO에서 알게되서 검색을 통해서 들어오게됬습니다.
번역글 잘보고 갑니다.^^
번역을 하다 말아서~ 좀 그렇긴 합니다. ^^
답글삭제Play Framework 사용해보니, 아직은 초기라서, 아주 쪼끔 부족한 부분이 있긴 하지만, 충분히 쓸만했습니다. 중소규모의 실제 사이트에 적용해도 무리가 없을 정도입니다.
좋은 글 감사합니다.
답글삭제