http://code.google.com/appengine/

http://code.google.com/appengine/



Google Apps Engine(구글 앱스 앤진)의 발전속도가 날로 빨라지고 있습니다. Google Apps Engine가 나오면서 부터 많은 관심을 가지고 있었습니다. Google Apps Engine(이하 GAE)는 초기에 Phython을 지원하면서 시작되었습니다. 이 때문에 저는 개인적으로 Phython을 조금이나마 공부하기도 하였습니다.

하지만 제가 주로 다루는 언어가 Java인지라 Java를 지원하는 GAE의 출현을 애타게 기다리고 있었습니다. 그리고 드디어 Google Apps Engine for Java 그룹이 출범하였습니다. 역시 쬐려보고 있기를 잘한것 같습니다. :-)

벌써 전세계 개발자들이 난리가 났습니다. 하루에도 수십번씩 메일이 왔다갔다하면서 GAE for Java의 기능들을 하나 하나씩 테스트 해보고 있습니다.

아 얼마나 멋진 일입니까?

아시다시피 GAE가 제공하는 파워는 무한에 가깝습니다. 무한 스토리지, 무한 데이터베이스 저장공간, 무한 프로세서 등등....
물론 개인에게 제공하는 공간은 500메가 이지만 적은 비용으로 계속 추가할 수 있습니다.

아마존의 E3와 견줄 수 있을 것 같은 이 무한 파우어를 이제 Java라는 언어로도 사용할 수 있습니다.
JDO를 이용한 DB 핸들링과 안전한 샌드박스 모델안에서 Java 프로그래밍을 즐기실 수 있습니다. JDO 관련된 내용은 여기를 참조하시기 바랍니다.

며칠전부터 저도 언릉 SDK를 다운로드 받아 만지작 만지작 거리고 있습니다. 여기에서 GAE for Java를 위한 SDK를 다운로드 받으실 수 있습니다. 이제 Google Apps Engine이 제공하는 무한 클라우딩 컴퓨팅의 세계로 들어가볼 차례인것 같습니다.

GAE에 관심있으신 분들은 GAE for Java : Getting Started를 읽어보시길 권해드립니다. 그리 어렵지 않습니다. 앞으로 저도 하나씩 배우면서 테스트하면서 여러 이야기들을 여러분들과 공유하겠습니다.

하나 더~ GAE는 아직 안정화되어 있지 않은 것 같습니다. 간혹 메일링에 HTTP 500에러가 이유없이 발생되는 경우를 격으시는 분들이 많습니다.
앞으로 GAE 시스템이 더욱 안정화되겠지요~

여러분들도 Google Apps Engine이 제공하는 무한 파우워를 한번 즐겨보시기 바랍니다.
감사합니다. :-)
저작자 표시
신고

WRITTEN BY
jangsunjin
전세계 사람들의 삶의 질을 높일 수 있는 소프트웨어를 만들어 함께 나누는 것이 꿈입니다. 이 세상 그 무엇보다 사람이 가장 소중합니다.

받은 트랙백이 없고 , 댓글  4개가 달렸습니다.
  1. 좋은 소식 감사^^
  2. GAE와 iPhone은 진리라죠 =ㅂ=
    저와는 아직까지는 먼 영역이라서 바라보고만 있지용
    • 제가 GAE하고 Android에도 관심만 가지고 있습니다.
      Google Apps Engine으로 뭔가 하려고 지금 구상중입니다. 하나씩 삶을 위한 소프트웨어를 만들어 보고 싶네요~ :-)
  3. 죄송한대요~ 예를 들어서 간단히 설명을 하자면요..
    대학교 원서를 접수하는 웹화면(JSP) 가 있는경우에 JSP 로 구현한 화면을
    클라우딩 환경하에서 구동되게 하려면 구체적으로 어떻게 해야할까요....???

    검색을 해도 도저히 못찾겠어서.. 이렇게 글을 한번 남겨봅니다.
    꼭좀 답변 부탁드려요 ㅠ_ㅠ

    네이트온 : eoflive@nate.com
    메일 : publicmind@naver.com
secret

JavaServer Faces에서는 입력되는 값들을 변환(Conversion)하고 검증(Validation)할 수 있는 표준적인 방안을 제공하고 있습니다.

이 방안을 통하여 여러분들은 언제나 쉽고 빠르게, 그리고 가장 중요한 점은 동일한 형태의 변환이나 검증을 할 경우 미리 만들어 놓은 검증기나 변환기를 재사용(Reuse)하여 원하는 어플리케이션을 보다 쉽고 빠르게 구축하실 수 있습니다.

이에따라 간략하게 JSF의 변환과 검증에 대하여 살펴보고자 합니다. 본 문서는 IBM developersWors의 JSF for nonbelievers: JSF conversion and validation라는 자료를 바탕으로 작성하였으며, Apress의 Pro JSF and AJAX란 책도 일부 참고하여 작성하였습니다.

 

여기서 중요한 점은 변환이란 무었이고 검증이란 무었인가?라는 것입니다.

변환이란 다음과 같은 것을 의미합니다.

  • String 값을 java.util.Date 객체로 변환하는 것입니다.
    즉 "20090107"이란 String 객체를 Date("20090107") 객체로 변환하는 것을 객체변환이라고 합니다.
  • String 값을 double으로 변환하는 경우도 있습니다.
    예를들어 "3.14159"란 String을 double pi = 3.14159로 사용하고 싶다면 타입변환을 하여야 합니다.

이러한 예를 통하여 변환이란 결국 객체를 다른 객체로 변환하거나, 객체를 다른 타입으로 변환하거나, 타입을 객체로 변환하는 것을 의미합니다.

 

그렇다면 검증이란 무었을 의미할까요? 예를 통하여 확인하여 보면 다음과 같습니다.

  • java.util.Date가 "yyyy-MM-dd HH24"와 같은 형식(format)인가? 를 확인하는 작업이 검증하는 작업입니다.
  • float의 값이 3.0에서 4.0 사이인지 확인하여 한다면 검증하여야 합니다.

이와 같이 검증은 무었인가의 값의 형식(format)이나 범위 등을 확인하는 작업입니다.

만약 검증하여야 할 대상의 형식이 복잡하다면 정규식(Regular Expression)을 이용하여 검증하실 수 있으며, 각 조건에 맞는 검증기 클래스(Validator Class)를 작성하실 수 있습니다.

 

변환(Conversion)과 검증(Validation)을 이해하였다면 JSF의 생명주기(Lifecyle)에 대하여 살펴볼 필요가 있습니다.

이 단계를 살펴보면 "Apply request values" 단계 후에 "Process Validations" 단계를 거치게 되어 있습니다. 이는 JSF를 바탕으로 구현된 어플리케이션의 경우 기본적으로 입력받은 값들을 검증하는 단계를 거치도록 되어 있다는 것입니다.

변환과 검증의 가장 중요한 목적은 모델을 업데이트하기 전에 값들이 정확한지 보장하기 위한 것입니다.

따라서 여러분들이 JSF를 사용하여 검증 및 변환을 한다면, JSF는 여러분들이 정의한 변환 규칙에 맞게 변환되는지 확인하고 변환할 것이며, 여러분들이 만든 검증 규칙에 맞는지 확인할 것입니다. 뭐 다른 Web 관련 UI Framework도 이런 규칙을 따르고 있잖아? 라고 말한다면 그 지적은 맞습니다. 하지만 JSF의 검증 및 변환에 관련된 라이프사이클을 조금 더 자세히 살펴본다면 약간 더 진보적이라는 것을 확인할 수 있습니다.

 

상기 그림에서도 나와 있듯이 JSF의 생명주기에서 "Apply Request Values" 단계에서 기본적인 변환이 일어납니다. 아울러 사용자가 정의한 변환도 이 때 일어납니다. 이는 다른 UI 관련 프레임웍과 차별화된 부분입니다.

JSF에서는 기본적으로 요청된 값들을 적용할때 값들을 객체로 변환하거나 지정된 타입으로 변환합니다. 거의 모든 다른 UI 프레임웍에서는 그냥 String 값인 상태로 전달되지만 JSF는 비즈니스 로직에 맞는 모델에 맞는 객체나 타입으로 변환시켜줌으로써 모델의 들어가는 값의 안전성과 신뢰성을 높입니다.

이는 중요한 사항입니다. 여러분은 아직도 HttpServletRequest 객체에서 request.getParameter("XXX");를 통해서 View에서 전달된 값을 일일이 받아서 사용하거나, Spring MVC를 사용한다면 조금 더 향상은 되었겠지만 거의 비슷한 방법으로 View에서 전달된 값을들 Business Logic이 담긴 Controller와 같은 클래스로 넘기고 있을 것입니다.

Spring Framework을 사용한다고 하여 값의 변환을 자동으로 시켜주지는 않습니다. 이것이 다른 UI 프레임웍과 JSF의 가장 근본적인 차이점중에 하나입니다.

아울러 JSF는 변환 단계 후 검증 단계를 실시합니다.

이 검증 역시 표준적인 검증과 사용자 정의 검증을 통하여 값들을 형식이나 범위등을 확인합니다. 검증할 범위가 특이하거나 일반적이지 않은 형식을 검증하여야 할 경우에는 사용자 정의 검증을 할 수 있습니다.

한가지 주의하여야 할 점은 javax.faces.component.UIInput을 상속받은 javax.faces.component.html.HtmlInputText나 javax.faces.component.UISelectOne 컴포넌트의 경우 immediate라는 속성을 true라고 지정하면 아래 그림과 같이 JSF의 생명주기가 바뀝니다.

immediate 속성의 기본값은 false인데, true로 설정하면 상기 그림과 같이 "Apply Request Values"에서 변환과 검증을 합니다.

immediate 속성에 대한 자세한 내용은 다음에 다루겠습니다. 당근 값을 즉시 전달하는데 사용하는 옵션입니다.

 

다음에는 JSF의 변환에 대하여 자세하게 알아보겠습니다. 먼저 확인하고 싶으신 분은 IBM developersWors의 JSF for nonbelievers: JSF conversion and validation라는 자료를 보시기 바랍니다. 설명이 참 잘되어 있습니다.

감사합니다. ;-)

신고

WRITTEN BY
jangsunjin
전세계 사람들의 삶의 질을 높일 수 있는 소프트웨어를 만들어 함께 나누는 것이 꿈입니다. 이 세상 그 무엇보다 사람이 가장 소중합니다.

받은 트랙백이 없고 , 댓글이 없습니다.
secret
JSF(JavaServer Faces)의 경우 Rederer 를 바꿀 수 있습니다. Rederer를 바꿀 수 있다는 의미는 하나의 컨텐츠를 다양한 형태로 바꿀 수 있다는 것을 의미합니다.
즉  하나의 HTML 문서를 MS Word로 바꾸거나 PDF로 바꿀 수 있다는 거죠.

최근 SVG에 대한 관심이 높아지면서 JSF + SVG에 대한 글이 있어서 공유차원에서 올립니다. 이미 Adobe Flex와 연동이 되고 있습니다. 나중에 한번 다루겠습니다.

개인적으로는 Flex나 SVG와 같은 벡터 그래픽을 Rich UI로 사용하는 것에 관심이 많습니다. 앞으로 점 더 연구해볼 가치가 있을 것 같습니다. :-)

출처: https://www.dimis.fim.uni-passau.de/~doeller/research_projects/sw_internship/Pfnuer/Praktikum.pdf


신고

WRITTEN BY
jangsunjin
전세계 사람들의 삶의 질을 높일 수 있는 소프트웨어를 만들어 함께 나누는 것이 꿈입니다. 이 세상 그 무엇보다 사람이 가장 소중합니다.

받은 트랙백이 없고 , 댓글이 없습니다.
secret
Oracle의 기술백서중에서 "JavaServer Faces, Ajax, Flash: 차세대 사용자 인터페이스"라는 좋은 글이 있어서 공유차원에서 올립니다.

몇년전부터 JSF를 간혹 사용하여 오다가 최근 제가 맡은 프로젝트에서 본격적으로 활용하고 있습니다.

앞으로 JSF에 대한 좋은 글들을 올리겠습니다.

그럼 우선 Oracle의 문서부터 한번 살펴보시죠 :-)


신고

WRITTEN BY
jangsunjin
전세계 사람들의 삶의 질을 높일 수 있는 소프트웨어를 만들어 함께 나누는 것이 꿈입니다. 이 세상 그 무엇보다 사람이 가장 소중합니다.

받은 트랙백이 없고 , 댓글이 없습니다.
secret
JSF(JavaServer Faces)로 개발을 하다보면 JSP(JavaServer Pages)에서 가장 많이 사용하였던 request.getContextPath()를 EL(Expression Language)로 어떻게 표기해야 할지 막막할때가 있습니다.

특히 JSF의 경우 EL을 바탕으로  UI 관련 개발을 하기 때문에 EL에 익숙하지 않으신 분들의 경우 더더욱 그렇습니다.

가장 많이 사용되는 EL 중에 다음과 같은 표기식이 있습니다.

#{facesContext.externalContext.requestContextPath}

HttpServletRequest.getContextPath()와 같은 의미입니다.

이 외에도 facesContext의 externalContext에는 SessionMap이나 RequestMap과 같은 유용한 객체들이 많습니다. 한번씩 확인해보시기 바랍니다.

혹시 EL을 쓰시면서 궁금하신 부분들이 있으면 댓글달아주시면 최대한 알려드리겠습니다. ;-)
신고

WRITTEN BY
jangsunjin
전세계 사람들의 삶의 질을 높일 수 있는 소프트웨어를 만들어 함께 나누는 것이 꿈입니다. 이 세상 그 무엇보다 사람이 가장 소중합니다.

받은 트랙백이 없고 , 댓글이 없습니다.
secret

평소 소프트웨어(Software) 개발에 관심이 많거나, 특히 알고리듬(Algorithm)이나 소프트웨어 디자인(Software Design)에 관심이 많다면 Top Coder(http://www.topcoder.com)라는 사이트에서 자신의 능력을 다른 사람들과 함께 겨루어 보는 것도 참 좋은 일이라고 생각합니다.

 

 

전 세계에서 소프트웨어에 관심이 많은 사람들이 모여서 자신의 능력을 겨루고 있는데 재미있는 점은 우리나라의 순위입니다.

현재 우리나라의 순위는 8위인데 세계최고의 소프트웨어 강국인 미국은 7위로서 별 차이가 없으며, 세계 2위의 소프트웨어 강국인 인도의 경우 14위로 우리보다 많이 떨어집니다. 인도의 경우 1133명이나 참여하고 있지만, 우리나라의 경우 149명정도밖에 참여하지 않았는데도 좋은 성적을 거두고 있습니다.

하지만 얼마전에는 우리나라의 국가순위가 5위 정도까지 올라간 적도 있습니다. 이 순위에 큰 의미를 두기는 어려운듯 합니다만, 10위권안에 우리나라가 올라와 있다는 자체가 기분 좋네요 :-)

 

Top Coder는 소프트웨어 개발에 필요한 개발자의 능력을 온라인상에서 확인할 수 있는 좋은 사이트입니다.

특히 알고리듬 문제나 다른 문제등을 풀어서 좋은 성적을 거둔다면 자신의 능력을 검증함과 동시에 상금도 탈 수 있습니다.

 

저의 경우 소프트웨어 디자인(Software Design) 분야 중에서 컴포넌트에 많은 관심을 가지고 있습니다.

컴포넌트 문제는 대략 다음과 같습니다. 주로 Java를 사용하는 저에게 적합한듯 합니다.

 

일반적으로 C나 C++만을 중심적으로 다룰것 같지만, 거의 Java와 C++를 주로 사용하고 UML도 다루고 있습니다.

따라서 소프트웨어에 관심을 가지고 있다면 자신이 참여할 수 있는 분야는 매우 많습니다.

 

아울러 본 사이트에서 좋은 성적을 거둔다면 여러가지 해택이 따르는듯 합니다. 단순히 돈을 번다기 보다 국내외에 자신의 능력을 객관적으로 증명할 수 있는 좋은 이점이 있습니다.

만약 컴포넌트 디자인(Component Design) 분야에서 좋은 성적을 거둔다면, 많은 컴포넌트 관련된 회사에 취업이나 이직시 객관적으로 자신의 능력을 증명할 수 있습니다. 물론 얼마나 인정할지는 모르지만, 해외 유수의 기업에서 Top Coder를 후원하고 있으니 분명히 해외에서 더욱 많이 인정해 줄 듯 합니다.

 

아직 많은 문제를 풀어보지는 않았지만, 문제의 수준은 낮지는 않은 듯 합니다.  변별력을 가지기 위한 방안인듯하다.

 

세계적인 소프트웨어 개발자가 되기 위한 방안은 매우 많습니다. Top Coder에서 시작해보면 어떨까 싶습니다.

본 포스트를 보고 Top Coder에 가입하려면 http://www.topcoder.com/reg/ 에서 하면 됩니다.  가입시 jangsunjin을 추천해주면 감사하겠습니다. ;-)

신고

'Architecture for Software > Algorithm' 카테고리의 다른 글

최대 공약수 구하기  (0) 2009.11.09
RLE(Run-Length Encoding) 알고리즘  (2) 2009.11.09
Top Coder에 도전하세요!  (4) 2009.01.01
Algorithm 이란  (0) 2008.11.17
The 3n+1 Problem  (3) 2008.11.11
스택(Stack)  (0) 2008.10.08

WRITTEN BY
jangsunjin
전세계 사람들의 삶의 질을 높일 수 있는 소프트웨어를 만들어 함께 나누는 것이 꿈입니다. 이 세상 그 무엇보다 사람이 가장 소중합니다.

받은 트랙백이 없고 , 댓글  4개가 달렸습니다.
  1. 추천자 아이디 입력도 있나보군요 ㅎㅎ

    새해 복 많이 받으시구 올 한해 늘 행복하세요!!!
    • 네~ 추천점 부탁드려요 :)

      아직 저도 본격적으로 문제를 풀어보지 않았는데~ 워밍업점하고 함 풀어보려구요~ ㅎㅎㅎ

      잘 풀 수 있을지 모르겠습니당~

      지환님도~ 새해 복 많이 받으시구요~ 좋은일 가득하시길 기원드립니당~ ;-)
  2. 이 글 보고 한번 도전해보려고 합니다. :D 좋은 글 감사합니다.
secret

Java의 메소드 인라인(Method Inline)에 관한 좋은 글이 있어서 공유하고자 올립니다.
기회가 있을때 마다 Java의 이해라는 글을 올리고자 합니다.
이 글은 The Java HotSpot Performance Engine: Method Inlining Example 을 바탕으로 작성하였습니다.

 

Java에서는 성능 향상을 위하여 Java HotSpot Engine(VM)이 다음과 같은 경우 메소드 인라이닝(Method Inlining)을 합니다. 이를 통해서 메소드를 호출할때 실제 메소드를 호출하지 않고 바로 결과값을 돌려주어, JVM(Java Virtual Machine)의 성능을 향상시킵니다.

class A {
  final int foo() { return 3; }
}


A라는 클래스(Class)가 있고 다른 클래스에서 에서 foo()라는 메소드를 호출하면 당연히 3이라는 값이 리턴됩니다. 왜냐하면 이 클래스는 final이라는 키워드 때문에 변경할 수 없는 값을 리턴하기 때문입니다. 특히 final이라는 키워드를 사용하는 경우 int foo()를 오버라이드 할 수 없습니다.

이에따라 Java HotSpot VM은 final int foo() 메소드를 상수 3으로 교체하여 성능을 향상 시킵니다.

HopSpot이 이와 같이 메소드를 상수로 교체하는 것을 메소드 인라이닝(Method Inlining)이라고 부릅니다.
메소드 인라이닝은 다음과 같은 효과가 있습니다.

  1. 메소드 호출(Method call)을 하지 않습니다.
  2. 동적인 디스패치(Dynamic dispatch)를 하지 않습니다.
  3. 값에 대한 상수 연산(constant-fold; 상수처럼 인식되어 바로 연산할 수 있도록하기 때문에 상수연산으로 번역합니다.)이 가능합니다. 예를 들어 “a.foo()+2” 의 결과값은 “5” 인데, 런타임(Runtime)시 a.foo() 메소드를 실행하지 않고 바로 “3 + 2” 연산으로 처리됩니다.


예전에는 이러한 이유로 프로그래머들이 종종 final이라는 키워드를 사용하였습니다. final이라는 키워드를 사용하여 실행 속도를 높이거나 큰 메소드안에서 작은 메소드를 통합하기 위하여 인라인 기능을 사용하였습니다.

하지만 이런 테크닉을 사용하면 프로그래밍 언어에서 완벽한 모듈화(modularization)를 할 수 없었으며, 재사용성(reusability)이 감소하게 됩니다.


하지만 Java HotSpot VM은 final이란 키워드가 없이도 메소드 인라이닝 테크닉을 사용할 수 있습니다.

class B {
  int foo() { return 3; }
}

이제 final이라는 키워드가 없으니 당연히 오버라이드가 잘 될 것입니다. 하지만 아래의 클래스 C와 같이 B 클래스를 상속하여 int foo() 메소드를 오버라이딩하는 경우는 어떻게 될까요? C 클래스 외에 D 클래스도 B 클래스를 상속받아 int foo() 메소드를 오버라이딩하였다면 어떻게 될까요?

class C extends B {
  int foo() { return 6; }
}


사실 B.foo()라는 인라이닝 메소드를 부르는 어떤 코드만 있다면 큰 문제는 없습니다. 왜냐하면 B 클래스는 다른 어떤 클래스로부터 상속받지 않았으며, int foo() 메소드 역시 오버라이딩 되어있지 않기 때문입니다.

가장 궁금한 경우는 다음과 같을 때입니다.

B bc2 = (B) c;
int numByBC2 = bc2.foo();
System.out.println("bc2.foo() is " + numByBC2);

결과 값이 3일까요 6일까요? 객체지향개념에 맞도록 메소드 인라인이 이루어 졌다면 당연히 6입니다. 실제로 테스트해본 결과 java version 1.6.0_07에서 정상적으로 6이 리턴되었습니다.


하지만 본 문서의 예처럼 단순한 경우만 있는 것이 아닙니다. 메소드 내에서 다른 메소드를 호출하는 등의 영향으로 결과값이 틀려질 때도 있습니다.

기본적으로 Java HotSpot VM은 이러한 문제를 해결하기 위하여 인라인 메소드 선택의 문제가 발생할 만한 부분을 감지하여 코드에 기록(the code makes)하여 놓습니다. 기록시에는 메소드 인라인의 결과값에 대한 가정(assumptions)을 기록합니다.

그리고 각 클래스들이 로딩되어 실행될 때 이러한 가정이 맞는지 확인합니다. 만약 경합이 발생하거나 다른 이유로 컴파일시의 가정이 맞지 않는다면 해당 메소드 인라인의 가정은 무시됩니다. 이를 디옵티마이즈(Deoptimized)되었다고 합니다.


제가 이해를 돕고자 예제를 만들어 보았습니다. 메소드 인라인에 대한 이해와 함께 상속에 대한 이해도 높이실 수 있을 것 같습니다.

메소드 인라인에 대하여 궁금하신 분들은 제가 첨부한 Java 파일을 다운로드하셔서 간단하게 테스트해보시기 바랍니다.



참고로 결과값은 다음과 같습니다.

 

Created A object!
Called foo() method in A object!
a.foo() is 1
-----------------------
Created B object!
Called foo() method in B object!
b.foo() is 3
-----------------------
Created B object!
Created C object!
Called foo() method in C object!
c.foo() is 6
-----------------------
Created B object!
Created C object!
Called foo() method in C object!
bc.foo() is 6
-----------------------
Called foo() method in C object!
bc2.foo() is 6

 

감사합니다. ;-)

신고

WRITTEN BY
jangsunjin
전세계 사람들의 삶의 질을 높일 수 있는 소프트웨어를 만들어 함께 나누는 것이 꿈입니다. 이 세상 그 무엇보다 사람이 가장 소중합니다.

받은 트랙백이 없고 , 댓글  2개가 달렸습니다.
  1. 어라 왜 이글은 피드가 안오지 ㅎ
    아무래도 자바니깐 넌 이해못하니깐 안봐도 돼! 하면서 안오는 걸까요 :)

    뭐... 사실 잘 이해 못하겠어요!
    • 윈도우 라이브 라이터로 작성해서 그런것 같습니당~

      요넘에 정을 들이고 있는데~ 아직 완벽하게 사용을 못하고 있나보네요~

      대부분 관심이 많은 부분이 아니라서 이번에 정리차원에서 올렸는데~ 나중에 더 자세하게 정리해드릴께요~

      감사합니당 :)
secret

마이크로소프트웨어 2008년 9월호의 "화제의 해외서적"이란 코너에 기고하였던 글을 정리하여 올립니다.

Spring Framework의 확산으로 많은 분들에게 잘 알려진 Rod Johnson이 쓴 "J2EE Developement without EJB"이란 책을 소개합니다.

진정으로 Spring Framework의 사상과 철학을 알기 원하는 독자들에게 매우 유익한 책이 될 것입니다. 또한 과거의 EJB관련 프로젝트에서 많은 고생을 하셨던 분들에게 시원한 해결책을 제시해 주고 있습니다.

이 책이 쓰여진 후 Spring Framework은 더욱 빠르고 견고하게 발전하고 있지만, 이 책에서 말하는 사상이나 해결책은 현재의 Spring Framework의 근간이 되고 있기에 여전히 이 책을 읽는 것은 가치가 있다고 생각합니다.

아쉬운 점은 아직 역서가 없기에 편안하게 Rod Johnson의 사상을 이해하기 어려울 수 있다는 점입니다. 최신 Spring Framwork의 내용을 보강하여 이 책을 번역한다면 많은 분들에게 큰 도움이 될 수 있을 것이라고 확신합니다.

필자가 처음 EJB(Enterprise JavaBeans)를 사용하는 프로젝트에 참여하였을 때 EJB는 모든 것을 해결해줄 수 있는 은탄환과 같은 존재였다. 분산환경을 지원하는 EJB는 매우 훌륭해 보였으며 모든 비즈니스 로직을 무결하게 수행해 줄 수 있는 해결책이었다. 필자와 동료들은 EJB를 적극적으로 활용하기 위한 노력을 계속하였음에도 불구하고 악몽과도 같은 야근과 빡빡한 일정 속에 추가인력이 투입되어서야 겨우 프로젝트를 끝낼 수 있었다.

프로젝트를 마친 후 많은 고민을 하였다.

필자가 참여한 프로젝트는 5000여명의 직원이 인트라넷에서만 사용하는 MIS(Management Information System)를 구축하는 프로젝트였는데, EJB를 활용하여 비즈니스티어를 구성하였으며, EJB의 성능을 보장하기 위하여 BEA WebLogic 5.1과 HP Superdom이란 거대한 서버장비를 도입하였다.

지금 생각해보면 이러한 시스템 아키텍처는 분명히 과도한 기술과 장비의 투입(Over-Engineering)이라고 생각한다. 하지만 무엇이 문제였으며 어떤 부분이 잘못된 부분인지 필자는 정확하게 설명하지 못하였다.

시간이 지난 후 우연히 로드 존슨의 “J2EE Development without EJB”란 책을 읽으면서 필자는 지난 여러 EJB를 활용한 프로젝트의 문제를 하나 하나씩 명확하게 깨우쳐 나갈 수 있었다.

비즈니스 요구사항을 만족시키기보다는 EJB의 이상적인 스펙을 위한 시스템 아키텍처의 설계가 개발자들을 핵심적인 비즈니스 로직 구현에 집중할 수 없게 하였고, 시스템의 복잡성은 늘어갔으며, 테스트의 어려움이 지속적으로 증가하게 되었던 것이다. 이 때문에 프로젝트의 생산성은 극히 낮았으며 유지보수 또한 매우 어렵게 되었고, 성능 좋은 서버장비 구입 및 EJB 컨테이너 구입을 위하여 많은 비용을 지출하여야 했다.

로드 존슨은 이러한 문제를 해결하기 위하여 과감하게 이 책을 통하여 EJB 없는 J2EE 개발방안을 제시하고 있다. 단순하게 문제점만 지적하는 것이 아니라 경량 컨테이너와 IoC(Inversion of Control) 및 오픈 소스를 적극적으로 활용함으로써 EJB 활용의 문제점에 대한 다양한 해결책을 제시하고 있다.

특히 요사이 가장 많이 사용하고 있는 Spring Framework(http://springframework.org/)를 소개하면서 AOP(Aspect Oriented Programming)를 바탕으로 각종 JavaEE 스펙에 치중되지 않는 POJO(Plain Old Java Object) 기반의 개발을 제시하고 있다. 또한 JavaEE에서 해결해야 하는 문제인 트랜잭션 관리, 퍼시스턴트, 웹 티어 디자인, 테스트, 성능과 확장성 등에 관하여 구체적으로 다양한 솔루션들의 장단점들을 비교함으로써 효과적인 시스템 아키텍처를 설계할 수 있는 방안을 제시하고 있다.

여기서 우리가 주목해야 할 점은 로드 존슨의 사상은 매우 구체적이고 실용적이며, 우리가 현재 활용하고 있는 것들이란 것이다. 예를 들어 이 책에서는 효과적인 퍼시스턴스 관리를 위하여 iBATIS SQL Maps 뿐만 아니라 Hibernate 및 JDO에 대한 비교를 통하여 실용적인 처리 방법을 알려주고 있다.

Spring Framework를 진정으로 이해하길 원하는 독자라면 이 책을 꼭 한번 읽어보기를 권한다.

Spring Framework는 결국 효율적인 JavaEE 개발을 위한 로드 존슨의 고민의 결정체이기 때문이다. 그의 치열한 고민에서 나온 해결책들을 바탕으로 현재 우리는 효과적으로 경량 컨테이너를 활용하여 쉽고 빠르게 JavaEE기반의 어플리케이션을 개발하고 있기 때문에 그의 고민이 무엇이었는지 알아보는 것은 더욱 효과적인 JavaEE 기반의 시스템 아키텍처를 설계할 수 있는 좋은 길잡이가 될 것이다.

필자는 이 책을 통하여 로드 존슨의 열정을 독자들도 함께 느낄 수 있기를 희망한다. 열정적인 그는 최근 SpringSource Application Platform를 통하여 분산환경을 효과적으로 지원할 수 있는 방안까지 제공하고 한다.

아직 이 책의 번역서가 없기 때문에 이 책을 읽기가 부담스러운 독자들은 “J2EE 설계와 개발”이란 책을 먼저 읽어보기를 권한다. “J2EE 설계와 개발”은 JavaEE에 대한 그의 철학을 주로 담고 있으며, "J2EE Development without EJB"은 철학을 구체화하는 방안을 주로 담고 있다.

필자에게 한가지 소망이 있다면 독자들에게 이 책에 포함된 로드 존슨의 사상을 쉽고 정확하게 이해할 수 있도록 도와주고 최근 Spring Framework에 대한 내용도 함께 공유할 수 있는 기회를 갖는 것이다.

마이크로소프트웨어 9월호의 PDF를 첨부하오니 PDF로 보시길 원하시는 분들께서는 참고하시기 바랍니다.



신고

'Books in Life > 2005' 카테고리의 다른 글

Expert One-on-One: J2EE Development without EJB  (0) 2008.11.20

WRITTEN BY
jangsunjin
전세계 사람들의 삶의 질을 높일 수 있는 소프트웨어를 만들어 함께 나누는 것이 꿈입니다. 이 세상 그 무엇보다 사람이 가장 소중합니다.

받은 트랙백이 없고 , 댓글이 없습니다.
secret

- 책제목: JSF(JavaServer Faces) in Action

- 지은이: 키토 D 맨; 이태상 옮김

- 출판사: 에이콘

- 서평

JSF가 세상에 나온지는 오래되었으나 진정으로 JavaEE관련 UI 관련 기술로 많이 확산되고 있지는 못하다.

이책 역시 JSF의 확산을 도와주는 역활을 못하고 있다고 생각한다.


실제적인 내용보다는 API에 가까운 내용들로 채워져 있다.


Step-by-Step으로 JSF를 이해하고 이를 Spring Framework와 연동하여 Backing Bean등을 생성하는 내용들이 보강되어 나온다면 아마도 JSF에 대한 이해가 높아지지 않을까 생각한다.


언제 기회가 되면 JSF의 실제적인 활용과 이해라는 주제로 AJAX 스타일의 UI 구성에서 Spring Framework를 이용하여 이를 효과적으로 Control 단으로 연동시키는 부분들을 주제로 책을 한권 쓰고 싶다.

JSF 화이팅~

신고

WRITTEN BY
jangsunjin
전세계 사람들의 삶의 질을 높일 수 있는 소프트웨어를 만들어 함께 나누는 것이 꿈입니다. 이 세상 그 무엇보다 사람이 가장 소중합니다.

받은 트랙백이 없고 , 댓글이 없습니다.
secret