Outsider's Dev Story

Stay Hungry. Stay Foolish. Don't Be Satisfied.
RetroTech 팟캐스트 44BITS 팟캐스트

ANYFRAME JAVA SEMINAR 2010

10일에 삼성SDS주최로 진행된 ANYFRAME JAVA SEMINAR에 갔다가 왔습니다. Anyframe은 삼성에서 만들어서 오픈소스로 공개한 자바 프레임워크로 이름 정도만 알고 있었는데 최근에 들으니 스프링 기반으로 되어 있는듯 합니다.(이걸 기반이라고 해야하는건지는 잘 모르겠지만요.)



Spring 3.0
첫번째 세션은 스프링에 대한 설명이었습니다. 스프링이 2.0에서 3.0으로 넘어오면서 3.0이 가진 Feature들을 중심으로 간략한 설명들과 간단한 데모를 통해서 어떻게 사용하는 부분인지에 대해 설명해 주었습니다.

  • Spring Expression Language가 추가되어 #{expr}을 통해서 특정 객체의 접근 및 조작이 가능하면 코드내에서는 @Value와 함게 사용하여야 합니다. <spring:eval>을 제공하여 JSP에서도 사용가능합니다.
  • 모델 밸리테이션 : 이전에는 Javascript로 하거나 스프링이 가이드한 밸리데이터를 만들어야 했으나 3.0부터는 JSR-303을 지원하여 밸리데이션 규약을 제공하고 있습니다. 밸리데이션 방법으로는 파라미터에 @Valid 애노테이션을 선언하는 선언적 방법으로 BindingResult에 밸리데이션의 결과가 자동으로 담기게 되고 @Autowired로 밸리데이터를 직접 인젝트하는 프로그램적 방법이 있습니다.
    타입 컨버전 : 이전 버전에서는 프로퍼티에디터를 주로 사용하였으나 프로퍼티에디터의 단점을 해결하고 범용적으로 사용할 수 있도록 타입컨버전을 3.0에서 추가하였습니다. 포맷이 필요한 컨벚전에서는 Formatter를 사용합니다.
  • MVC 네임스페이스: mvc:annotation-driven을 통해서 컨버터, 밸리데이터, 포매터등을 자동으로 등록되도록 선언할수 있습니다.
  • REST지원 : REST는 모든 리소스에 대해 URI가 생기기 때문에 이에 대한 관리를 지원하게 되었으며  HiddenHttpMethodFilter는 웹브라우저가 GET, POST만 지원하는 한계를 해결하기 위해 DELETE, PUT을 지원하도록 하였습니다. ContentNegotingViewResolver를 통해서 URI의 확장자에 따라서 포매팅을 다르게 해줄 수 있습니다.

저는 스프링에 대해서 아직 많이 몰라서 그냥 들었습니다만 스프링을 좀 아는 사람들에게는 기초적인 내용으로 보였습니다. 3.0에 추가된 기능들 위주로 설명이 진행되었기 때문에 내용을 정리하기가 쉽지 않지만 그냥 기억나는 부분위주로만 로그성으로 적어두었습니다.(일부 잘못되거나 누락된 내용이 있을 수 있습니다.) 3.0특징에 대해 알려면 인터넷에 정리된 문서를 참고하는게 더 낫지 않을까 합니다.




웹 개발 단순화 방안
일반적으로 하는 요청에 대해서 디스패처서블릿이 컨트롤을 찾고 로직을 탄뒤 페이지에 전달하는 프리젠테이션 레이어를 개발하는 것은 항상 하는 반복적 작업이므로 이걸 공통화 한 부분에 대한 설명이었습니다. Controller에 대한 공통화로 모든 곳에서 확장포인트를 제공하고 있다고 하였으며 Controller를 공통화하여 페이지의 header, left, footer를 공통으로 하고 비동기로 body만 바꿀수 있도록 한 Anyframe의 기능에 대한 설명이었습니다.

Taglibrary를 이용하여 프로트엔트에서 많이 사용하는 부분을 공통화하여 더블서브빛 방지나 메뉴 클릭시 body부분을 어떤 페이지로 바꿀지, form태그에 달력기능을 추가하는 등의 기능들을 View페이지에서 태그라이브러리를 사용하여 개발할 수 있도록 한 구조였습니다. 이렇게 함으로써 프리젠테이션 레이어의 개발을 빠르게 하고 콘트롤러는 공통을 그대로 사용한채 비즈니스로직과 모델만을 개발할 수 있다고 하였습니다.

앞의 설명에 확장포인트를 제공하고 있다고 하였지만 아무래도 프레임워크가 UI기능을 제공하기 때문에 종속적이 신경쓰였습니다. 시연에서는 tiles와 jquery가 사용되었었는데 달력등의 기능은 어떤 라이브러리에 대한 종속성을 가지지 않고는 해결할 수 없는 기능이었기 때문에 굳이 프레임워크에서 제공해야하는 기능인지는 잘 모르겠다는 생각이었습니다. 특정 환경에서는 저런식으로 다 만들어 놓으면 개발은 어느정도 편리할것 같기는 했습니다. 세미나듣다가 예리한 arawn이 말한대로 저렇게 호출부가 뷰페이지에 퍼져있으면 변경사항 생겼을때 컨트롤러만 바꾸면 될일을 사용한 곳 모두를 찾아가면서 수정해야 된다는 단점을 지적해주더군요. 제가 잘 몰라서 그런건지 크게 인상적이지 않게 느껴졌는데 발표는 상당히 큰 기능처럼 하셔서 보는데 약간의 당황스러움이 느껴지더군요.




인증 및 권한 관리
기존의 권한관리가 가지고 있던 한계를 스프링 세큐리티가 대부분 해결가능해 졌습니다. 스프링 세큐리티의 장점은 웹영역뿐만 아니라 전체 애플리케이션 영역에 대한 검증된 권한 관리가 가능하고 다양한 인증 표준규격을 지원하며 컨테이녀별 이식성 및 호환성을 확보하였고 재사용의 기반을 제공하고 있다는 것입니다만 한국상황에서는 DB기반이 아닌 XML기반이라 고객이 직접 수정하기가 어렵다거나 환경설정에 대한 UI를 제공하지 않고 권한정보 변경시 서버의 재기동이 필요하다는 담점이 존재하고 있습니다.

그래서 이런 단점을 보완하여 만든 Anyframe IAM을 소개하였습니다. XML을 DB로 관리할 수 있도록 변경하고 IAM Admin Console을 통해서 GUI환경설정기능을 제공하고 있었습니다.

스프링 세큐리티와 어드민 부분은 최근에 관심을 가지고 있는(가져야 되는) 부분이라서 그래도 나름 흥미롭게 봤던것 같습니다. 이것저것 최근에 봄싹사람들하고 의논했던 부분들에 대해서 비슷한 내용들이 나와서 더욱 그랬던것 같습니다. 정확한 메카니즘까지는 모르겠지만 관리화면에서 권한변경이 서버의 재기동없이 바로 적용되는 시연까지 보여준 것이 꽤 인상적이었습니다.




첫세션을 제외하고는 애니프레임에 대한 소개가 주를 이룬 듯한 느낌이고 전체적으로는 간단에 그리 인상적이지 않은 세미나였습니다. 세미나 갔다올때마다 항상 많은 것을 얻어오는 느낌을 받고는 하는데 괜히갔다왔다정도는 아니었습니다만 그리 흥미롭지도 않았던 세미나였던것 같습니다. (왠지 안좋은 얘기만 하는것 같네요. 그렇게 시니컬하진 않은데요. ^^)

2010/04/12 03:57 2010/04/12 03:57