고객으로부터 질문이 있었습니다. Seam이냐 Spring이냐라는 질문이 있었습니다. 일반적인 내용이기에 블로그에 올리도록 하겠습니다.

질의 내용

제가 조사해 본 결과 Seam은 OSGi를 지원치 않는 것으로 알고 있습니다.

Web 개발에는 장점은 있는데 OSGi 처럼 Modular Loading과 Versionning 기능이 필요 합니다.

이 부분 확인 부탁 드립니다.

기본적으로 EJB를 전혀 사용치 않고 Spring 처럼 Light한 체제로 이동하는 것이 개발성이 좋은데  이에 대해 Seam 관점에 장점을 무엇 일까요?

답변은 다음과 같았습니다.
우선 궁금해하신 사항을 요약해보겠습니다.
1. JBoss Seam의 장점이 무엇인가?
2. JBoss Seam과 Spring의 차이점.
3. JBoss OSGi 지원(현재 및 향후) - JBoss OSGi 1.0.0.Beta4는 현재 OSGi Release 4.2(R4.2)를 지원하고 있으며 Seam과는 별개입니다.

우선 2, 3번은 technical 하게 다시 정리하도록 하겠습니다.

글이 조금 장황하게 쓰여질 수도 있으나 우선 Seam이 Java EE 기술중에 환영받지 못했던 JSF와 EJB를 사용한다는 점에서 lightweight를 표방하고 있는 Spring에 비해 사용률이 적다는 것은 충분히 공감할 수 있는 사항입니다. 하지만 JVM의 기술이 올라가고 Java EE의 스펙에 바뀌면서 EJB는 더 이상 사용하기 어려운 애플리케이션 프레임워크가 아니라고 보시는 편이 좋을 것 같습니다. EJB 자체도 이미 POJO 형태로 넘어온 상태이며 성능 테스트를 진행하더라도 차이는 거의 없다고 보시면 됩니다. EJB가 무겁고 사용하기 어렵다는 것은 그저 EJB 2.0의 폐해(리모트 구조, 수많은 인스턴스 생성 등)로 인한 근거 없는 통념(myth)에 불과하다고 볼 수 있습니다.(Seam에서 애플리케이션과 퍼시스턴스 레이어에 EJB는 선택사항일 뿐입니다.) 따라서 이는 Seam을 도입해도 되는 충분한 이유가 될 수 있다고 여겨집니다.

하지만 Seam은 웹 애플리케이션 개발시에 모든 레이어를 일관되게 연결시키는 것으로써 Spring자체보다는 Spring Web Flow와의 비교에 초점을 맞춰야 하는 것이 맞을 것 같습니다. 즉 Spring의 애플리케이션 프레임워크를 생각하신다면 비교 대상은 Seam이 아니라 오히려 JBoss Microcontainer로 보는 편이 훨씬 더 타당할 것이라는 의견을 드립니다.

즉 질문하신 내용 중 '기본적으로 EJB를 전혀 사용치 않고 Spring 처럼 Light한 체제로 이동하는 것이 개발성이 좋은데  이에 대해 Seam 관점에 장점을 무엇 일까요?' 의 답변이 JBoss MicroContainer라고 결론으로 귀결이 됩니다.

JBoss Microcontainer는  EJB를 사용하지 않으면서 Spring과 유사한 구조를 가지는 애플리케이션 런타임 엔진으로 보시면 됩니다. JBoss OSGi는 Seam이 아닌 JBoss MicroContainer를 활용하여 대상 번들을 deploy, undeploy, redeploy하는 것이 가능합니다.

제가 이해한 바로 원하시는 결론(저는 웹이 아닌 애플리케이션 프레임워크 + OSGi로 이해했습니다)에 도달하시려면  JBoss MicroContainer + JBoss OSGi가 원하시는 내용이 아닌가 싶습니다.
간략하게 요약하자면 다음과 같습니다.
Spring Core == JBoss MicroContainer
Spring Web Flow== JBoss Seam
SpringDM == JBoss OSGi

첨부드리는 파일은 Gavin King이 Seam의 핵심 기능으로 발표하는 Web Beans(JSR-299)에 대한 슬라이드입니다. 기술적으로 작성한 슬라이드이지만 도움이 되셨으면 합니다.
도움이 되셨을지 모르겠습니다. 금요일에 오시면 Gavin으로부터 자세한 내용을 들으실 수 있도록 하겠습니다.
기선님의 코멘트로 Spring MVC를 Spring Web Flow로 변경하였습니다.
크리에이티브 커먼즈 라이센스
Creative Commons License
2009/11/04 17:06 2009/11/04 17:06
http://www.javapattern.info/trackback/300