파일을 정리하다보니 2002년 SCEJ(SCEA) 합격 후기를 남긴 기록이 있네요.
혹시 이 자격증 준비하는 분께 도움이 될지 몰라 후기 남깁니다. 참고하세요.

Sun Certified Enterprise Architect for J2EE 시험후기


회사에서 J2EE기반 서비스를 개발하고 있을때입니다.

그 당시 우리팀은 가칭 Catseye Project를 진행하고 있을때입니다.
Catseye Project의 서비스의 목표 및 요구사항등은 대부분 정리되고 있었습니다.
필요한 컴포넌트 및 구현해야할 인프라는 대부분 결정되었습니다.
그 인프라중 하나는 Payment Gateway를 설계/구현하는 것이었는데,
Payment Gateway와 같은 금융거래성격이 짙고 Uptime 24 *7을 지원해야하는 서비스 특성을 고려할때
High Available,Secure,Reliable,Scalable한 Architecture를 필요로 했습니다.
우리팀은 서비스 플랫폼을 검토했고, 분산환경에서 Transaction,Security,Concurreny,Resource Management등
안정되고 검증된 기본적 서비스가 필요했기 때문에 만장일치로 J2EE Architecture를 도입하기로 결정했습니다.


우리팀은 아키텍쳐를 결정할때마다 저마다 최선의 방법으로 논쟁을 했고, 느리지만 프로젝트는 진행이 되었습니다.
참가 인원이 소수였고, 공간적으로 항상 같은 곳에서 일을 했기때문에 의사소통은 원할한 편이었습니다.
Usecase를 정하고 분석할때마다 다양한 의견들이 제시되었고 나름대로 최선의 해결책을 선택했습니다.
우리팀은 엄격한 문서화를 통해서 내용을 보관하진 않았지만 그래도 J2EE Architecture에서 권고하는
Pattern을 따랐고, Interface등을 통해서 각자 맡은 컴포넌트끼리의 협력관계를 정의했습니다.
우리팀은 비교적 시행착오없이 무사히 프로젝트를 마치게 되었습니다. 지금와서 생각해보면 서로의 의사소통이
거의 막힘없이 전달 되었고 반영되었기 때문입니다. 이는 매우 중요한 것으로 모든 개발팀에서 공유해야할
자산이라 생각합니다.


주로 프로그림 개발자로서 Identitiy를 갖고 있었던 저로서는(서비스 분석/설계도 물론 병행했지만) 개발자로서 영역보다
시스템 및 서비스를 분석/설계하고 요구사항에 최적으로 모델화하는 것이 시스템 Quality를 높이는 최선의 길이라 생각하게 되었습니다.
더구나 프로젝트를 진행하면서 아키텍트로서 성장하는 것에 상당히 고무되었습니다.
실제로 저는 Sun에서 제시하는 아키텍트로서 기본적으로 가져야 하는 생각들을 이해하고, 객관적으로 제가 이해한
방법이 검증된 해결책인가를 평가 받고 싶어서 SCEJ시험을 준비하게 되었습니다.


SCEJ는 J2EE기반 시스템을 분석/설계하는 아키텍트로서의 기술과 이해를 평가하고, 검증하는 시험입니다.
SCEJ는 Part I, Part II, Part III로 나누어져 있고,시험을 치기위한 선수요건은 없습니다.
SCEJ를 먼저 취득한 한 사람으로서 SCEJ의 각 Part에 대한 개요와 필수로 요구하는 지식등을 언급하고,
제가 공부한 방법이나 얻은 경험을 공유하도록 하겠습니다. 비단 자격증을 위한 공부가 아니라 아키텍트로서
성장하고싶은 많은 분들에게 조그만 격려가 되었으면 하는 바램입니다.

SCEJ Part I
Part I을 통해서는 검증하고자 하는 목표는 아래와 같은 주제에 대한 이해도입니다.
Common Architecture
Legacy Connectivity
Enterprise JavaBeans
Enterprise JavaBeans Container Model
Protocols
Applicability of J2EE technology
Desing Patterns
Messaging
Internationalization
Security

이 주제들은 Sun의 Certification Success Guide에 언급된 주제들인데 실제로 Part I에서 다루어 지는
내용은 오히려 이보다 더 범위가 넓게 느껴졌고, 다른 분들의 의견도 그러합니다.
보다 현실적인 도움을 필요로하시는 분들을 위해서 제가 Part I을 대비해서 습득한 주제들과 도움받은
책,문서,WebSite등을 알려 드립니다.  (오해가 없기를 바라며, 또한 저는 SCEJ가 되기 위해서 공부한 것은 아니며, 실제로 J2EE
기반 서비스를 분석/설계/개발을 하면서 필요한 책,문서등을 구입하고 실전에 응용하는 것을 주업으로 했습니다.
여러분께서도 주객이 전도 되는 일은 없었으면 합니다.)

Common Architecture
    Scalability - the ability to support the required quality of service as the load increases
    Maintainability - the ability to correct flaws in the existing functionality without impacting other components/systems
    Reliability - the assurance of the integrity and consistency of the application and all of its transactions. Reliability spans from the OS to the Application to the service provided.
    Availability - the assurance that a service/resource is always accessible
    Extensibility - the ability to add/modify additional fuctionality without impacting existing functionality
    Manageability - the ability to manage the system in order to ensure the continued health of a system with respect to scalability, reliability, availability, performance, and security.
   
    저는 SAMS에서 출판한 Building Java Enterprise Systems with J2EE, 저자 Paul J.Perrone and Venkata S.R "Krishna" R,Chaganti.
    를 구입해서 읽었습니다. J2EE의 모든 주제를 다루고 있으며 비교적 설명이나 내용이 일관되고, 잘 되어 있다고 생각합니다.
    아키텍트로서 읽어보았으면 하는 책중에 하나입니다. 좀 두꺼운 단점이 있지만 (약 1500 p) 고생한 보람은 얻으리라 확신합니다.


Legacy Connectivity
   Corba,RMI-IIOP,Java IDL,JNI에 관한 내용입니다.
   물론 이와같은 주제가 한 두줄에 설명이 가능하다고는 절대 생각지 않지만, 간략한 내용이나 개념은
   숙지하시기 바랍니다. Part I에서도 깊은 지식을 요구하지는 않습니다.
   

Enterprise JavaBean Architecture.
    Part I의 핵심은 Enterprise JavaBean Architecture입니다.
    다시말해 J2EE의 핵심은 Enterprise JavaBean Architecture다라고 생각합니다.
    그만큼 비중이 깊으며 중요성도 높습니다.
    저는 Enterprise JavaBean Architecture에 관해서는 Sun의 Specification이 최고의 교재라고 생각합니다.
    EJB 1.1 Specification도 훌륭하지만, 기왕이면 EJB 2.0 Specification을 읽어 보시기 권합니다.
    단숨에 읽기에는 내용이 만많지 않습니다. 가장 좋은 책이다 생각하고 여러번 정독하시면 좋을 듯합니다.
    EJB에 관한 책들이 범람하고 있습니다. 어떤책은 본의 아니게 거짓말(?)도 하지요. 그런 의심이 들때는
    Specification이 해결해 줍니다. 반드시 읽기를 권합니다.
    Enterprise JavaBeans (O'Reilly, 저자 - Richard Monson-Haefel)의 2nd Edition을 권합니다.
    최근에 EJB2.0의 내용이 추가된 3rd Edition이 나왔다고 들었는데, 2nd Edition의 명성을 고려해보면 역시 추천할만 하겠습니다.
    입문서로는 위 두가지로 충분하다고 생각하지만 마지막으로 추천한다면, J2EE Server Vendor의 Document를 권합니다.
    BEA WebLogic을 사용하신다면 WebLogic의 Document, JBoss Group의 Jboss를 사용하신다면 Jboss Document를
    추천합니다. 왜냐하면 Specification에 비해 풍부한 예제와 실전 코드가 있기때문에 이해가 빠르게 되기 때문입니다.
    흔히 EJB를 공부한다고 한다면 EntityBean,SessionBean의 두 인터페이스와,Bean클래스를 만들고 끝내는 경우가
    많은데 저 같은 경우는 Deployment Descriptor를 vi editor로 일일히 만들었습니다.
    vendor가 제공해주는 gui tool이용해서 뿐만 아니라 스스로 DD를 만들수 있다면 자신에게 상당히 도움이 될것입니다.
    왜냐하면 DD에 관한 질문도 상당히 많기 때문이기도 하지만 DD를 충분히 이해한다면 EJB와 EJB Container간의 관계를 이해하는데
    적잖이 도움이 되기때문입니다.
    EJB의 Runtime환경,즉 EJB Container에 관해서도 깊은 공부를 하시기 바랍니다. 이는 비단 시험에서 뿐만아니라,
    필드에서 가장 필요로 하는 지식중 하나이기 때문입니다.

Multi Tier Architecture.
    J2EE기반의 Application은 대부분 Multi Tier로 구성이 됩니다.
    일반적으로 Web Tier, Middle Tier,Data Representation Tier,EAI Tier등 여러 Tier로 구성됩니다.
    각 Tier에서 어울리는 J2EE Component는 어떤 것들이 있는지 왜 어울리는지 논리적으로 정당화 할 수 있어야 합니다.
    예를 들면 Web Tier에 어울리는 것은 Servlet이나 JSP가 될테고, Middle Tier에서는 EJB가 되겠지요.
    문제에서는 간략한 제시와 이와 같은 경우 어떤 Technology가 어울릴 것인가라는 형태의 문제도 눈에 띕니다.
    각 Tier별로 나름대로의 Responsibilty가 있읍니다. 그 Responsibility를 확실히 해두는 것이 좋습니다.
    즉, Session Management를 어느 Tier에서 책임을 질것인가? 일반적으로 Web Tier에서 Session Management를 할수도 있고,
    Middle Tier에서도 할수 있고, 혹은 Client에서도 할 수 있습니다. 각각의 장점 및 단점, 이런 상황에서는
    최적의 해결책은 이런 것이다라고 판단할 수 있는 논리적 근거가 있어야 합니다.
    많이 언급되고 있는 MVC(Model-View-Controller)구조에 대해서도 알아두시기 바랍니다.

Servlet/JSP
    J2EE가 성숙할 대로 성숙해버린 Web Interface를 지원하지 않으면 안되겠지요.
    저는 Servlet 2.2 Specification과 2.3 Specification이 최고의 교재라고 생각합니다.
    JSP 1.1 Specification도 읽어보십시요. Servlet에 비해 내용도 적고, 규모도 작습니다.
    Servlet에 관한 내용을 충분히 이해한다면 JSP에 관한 내용은 빠른 속도로 이해하시리라 생각합니다.
    Specification을 제외하고 제가 참고한 교재는 Sun에서 출간한 Core Servlets and JavaServer Pages입니다.
    Java 2 Platform, Enterprise Edition Series중하나로 Marty Hall이 저자 같습니다.
    안타깝게도 Servlet 2.2 specification 위주로 되어 있습니다만 쉽게 설명되어 있습니다.
    JSP에 관한 내용은 Manning사의 Web Development with Java Server Pages책을 보았습니다. 이 책도 쉽게 설명이
    되어 있습니다.
    제가 Servlet Specification에서 강도높게 여러번 공부한 부분은 Security부분입니다. 이부분은 추후에 J2EE의
    JAAS서비스와 연관관계가 있기 때문에 깊이 보아두시기를 권해 드립니다.

UML
    UML이 첫째 존재이유는 의사소통입니다. 물론 제 개인의 생각입니다만. 아키텍트와 개발자간에 , 개발자와 개발자간에
    의사소통수단이 UML이라고 생각합니다.
    개발방법론인가요? 정확한 용어는 한글로는 모르겠습니다만, 대충표현해보자면
    Inception,Elaboration,Construction,Transition형태로 진행이 되어갑니다. Part I에서는 이 부분에 관해
    비교적 상세히 질문하고 요구합니다. 알아두시기를 권합니다.
    실제로 UML에 관한 내용은 기본적인 것들을 질문합니다. Diagram의 종류및 용도등은 필히 아셔야겠습니다.
    제가 공부한 UML관한 책은 UML Distilled, Second Edition입니다.
    소제목은 A Brief Guide to the Standard Object Modeling Language.
    그리고 UML책은 아니지만 Pattern in Java라는 책의 앞부분은 UML에 관한 기초적인 내용이 있습니다.
    이부분도 비교적 잘 다루고 있다고 봅니다.

J2EE Design Pattern
    실제로 아키텍트로서 이해와 경험을 가장 필요로 하는 부분이라 생각합니다.
    노력과 경험만이 이부분의 실력을 향상 시킬수 있다고 봅니다.
    저는 Sun에서 출판한 Core J2EE Patterns (소제목이 Best Practices and Design Strategies, Java 2 Platform,
    Enterprise Edition Series중하나로 Deepak Alur,John Crupi,Dan Malks가 저자 같습니다)를 여러번 정독했으며
    실제로 실무에 적용하여 사용하였습니다. 비록 완전한 Code가 수록되어 있지는 않지만 아주 쉽고, 좋은 책이라 확신합니다.
    EJB Pattern에 관한 보다 기술적이고 자세한 내용은 www.theserverside.com에 EJB Pattern에 관한 문서와
    여러 심도 있는 주제의 문서들이 많습니다. 접속하셔서 내용을 보시면 좋은 결과가 있을 것입니다.
    java.sun.com이나 developer.java.sun.com에서 J2EE Pattern에 관한 주제로 글이 나와 있습니다.
    짤막한 글들이지만 읽을 가치는 충분합니다.
    OMG Press 출판사의 Enterprise Java with UML이라는 Design Pattern (저자 CT Arrington)책도 보았습니다만 Sun의 책이 훨씬 유용했습니다.
    그리고 Sun 교육센터의 교재중 Architecting and Designing J2EE Applications (SL-425) 교재도 참고했습니다.
    Sun에서 주관하는 시험인 관계로 반드시 보아야겠다는 의지로 수소문해서 구했습니다. 시험치기 바로전에 요약하기에 좋더군요.
    Design Pattern의 카테고리, 즉 Creational,Structual,Behavioural등을 숙지하시고 해당 카테고리별로 어떤 Pattern등이 있는지
    외우셔야 할 겁니다. 상당히 헷갈리는 상황이 옵니다.
    저는 Pattern in Java I,II라는 책을 보고 공부했는데, 평판이나 수준을 볼때 중간정도라고 생각합니다.딱히 권하지는 않겠습니다.
    Pattern에 관한 Bible같은 GoF를 읽으셔도 무방하겠습니다.

    그리고 EJB Component등이 어떤 Pattern에 속하는지 파악해 두는 것도 잊지마십시요.
    예를 들면 EJBHome은 대표적인 Factory Pattern이고, Creational 카테고리입니다.

Messaging
    JMS Messaging에 관해서는 아직까지 깊이 경험해보지 못했습니다. 다만 간단한 예제정도를 EJB와 같이 엮어
    해보았을 뿐입니다. 제가 참고한 서적은 O'Reilly의 Java Message Service (Richard Monson-Haefel과 David A. Chappell 공저)입니다.
    상당히 간결하고 간명한 책이며 , Messaging서비스에 관한 개론및 기본을 설명한 책입니다.
    읽으시면 도움이 되실거라고 생각합니다. 비교적 얇은책인데 가격은 만많치 않습니다.
    금액이 부담되시는 분들은 java.sun.com, developer.java.sun.com에 가셔서
    메세징 부분을 검색해보시면 비교적 쉬운예제와 간명한 설명이 있습니다. 참조하세요.
    시험에서는 기본적인 내용과 Messaging의 특징및 개요등에 대해서만 언급합니다.

I18N
    Internationalization에 관한 영역입니다.
    저는 상당히 고생했습니다. 이부분에 관해서 실무에서 거의 사용하지 않았기 때문입니다.
    Locale,Resoures Bundle,Formatters등에 관해 언급됩니다.
    저는 Sun에서 나온책 Core Java2의 뒷부분에 나오는 I18N부분만 여러번 읽었습니다. 하지만 약했던 부분이라 실제 시험에서는
    여전히 당황스런 부분이었습니다.

Security
    CrytoGraphy,Signature,Certificate,Java Security Model,JCA,JSSE,JAAS등 언급되는 내용등은 많습니다.
    하지만 실제 Security의 깊은 부분까지 언급하지는 않고 각각의 특징및 개요등에 대해서 질문을 합니다.
    Core Java2의 뒷부분에 나오는 Security부분을 참고 했으며, O'Reilly에서 나온책 Java Security 2nd Edition(저자 Scott Oaks)
    이 상당히 깊게 다루고 있습니다. 추천하는 책입니다.
    그리고 java.sun.com의 Security에 관련된 문서들도 읽어보기에 적당한 규모라 생각됩니다.


Part II Assignment.
    드디어 Part I을 합격하고, Part II Assignment를 받았습니다.  Assignment는 항공사의 전산시스템을 J2EE로 전환하는 예입니다.
    FBN이라는 회사는 국내로치면 아시아나항공과 같은 항공사인데, 사세를 확장하는 중이며, 확산되는 인터넷사용인구를 대상으로
    인터넷으로 자사 항공권을 예약할 수 있는 서비스를 계획중입니다.
    물론 기존에 제공하고 있던 서비스는 그대로 유지한채 ,몇가지의 FBN에서 제기한 제약조건을 만족시키면서 전산시스템을
    J2EE로 디자인해야 합니다.
    FBN의 CTO와 아키텍트간 인터뷰내용이 수록되어 있고, 아키텍트가 인터뷰를 통해 얻은 정보를 바탕으로 기본적인 Domain Model을
    설정해 놓았습니다.
    인터뷰로부터 Usecase가 파생되는데 시험은 이 Usecase로부터 J2EE기반 시스템에 참여하는 컴포넌트를 설정하고,관계를 규명하는등
    J2EE Architecture로 구성할 것을 요구합니다.
    그 결과물은 반드시 J2EE이어야하며, UML Compliant한 Class Diagram,Sequence Diagram,Component Diagram을 제출해야 합니다.
    분석/설계를 진행 하는 동안 제기한 Assumption을 기록해야하며, 왜 그런 Assumption을 하게 되었는지 정당화 해야하고,
    Architecture가 완성되는 동안 사용했던 Pattern들을 설명해야 하며, 정당화 해야합니다.
    Assignment를 처음 접하는 순간 상당히 당황스러우실 것입니다. 왜냐하면 대부분의 개발자들은 이미 정해진 규정대로, 틀이 잡혀져 있는
    곳에 더하여 무언가를 창출하는 것에 익숙합니다.
    이처럼 논리적으로 모순된 부분도 존재하고, 딱히 정답이 없는 - 어느 방법으로도 일장/일단이 존재하므로 - 문제를 해결하는 것은
    경험하지 못했기 때문이리라 생각합니다.
    Assignment를 진행하면서 저는 그동안 익혔던 지식들을 최대한 활용하고 싶었습니다.
    그래서 욕심을 내어 모든 세세한 상황까지 검토하고,전개해보았습니다. 과감히 실패했습니다.
    여러분들도 추후에 겪어보시면 아시겠지만, 이렇게 무작정 덤비어서는 제 풀에 지칠 것입니다. 생각을 해 보십시요.
    아시아나 항공의 인터넷 예약시스템을 구축하는 데 , 단 한명의 아키텍트만 있고, 그사람이 당신이다라고 했을때 그 규모가 놀랍지
    않습니까?
    저의 조언은 단 2가지 입니다. 저는 굉장히 많은 시행착오를 겪어서 개발자중심의 생각에서 아키텍트 중심의 생각으로 전환 했습니다.
    개발자와 아키텍트는 눈높이가 다릅니다. 그걸 인정해야겠더군요.
    첫째. Abstraction입니다. 큰 규모로 Abstraction시킵니다. 세세한 메소드나 인터페이스등에 얽매이지 마십시요. 그것은 한참후에나 결정될
    얘기 입니다. Abstraction이 되어 있지 않으면 아시아나 항공 인터넷 예약시스템 정도 규모의 서비스는 한눈에 볼수가 없습니다.
    둘째. 선택의 기로에서는 과감하게 선택하시고 그 선택의 이유에 대해서 정당화 하시기 바랍니다.
    예를 들어 Session Management를 Web Tier에서 하겠다고 가정하고, Architecture를 구성하십시요. 그리고 그렇게 하는 장점과 단점을 언급하시고
    장점으로 언급된것이 현 상황에서 훨씬 중요하다는 것을 정당화 하십시요.

    Assignment는 Abstraction과 선택(가정)후의 정당화 두가지입니다.
    Assignment를 upload하게 되면 Sun에서 제시한 채점기준, 그러니까 반드시 J2EE이어야 하고, UML Compliant해야하고 (이것이 아니면 불합격)
    얼마나 작성된 Architecture가 요구한 기능 즉, Scalable한가 Reliable한가, Performance는 괜찮은가, 검증된 해결책인 Pattern등을 적절히
    사용했는가 등을 채점하게 됩니다.
    물론 Sun에서 채점하는 것이 100%정답이라고 할 수는 없지만 많은 사람들이 real world problems을 겪고 해결해 본 경험을 전제로 하기때문에
    모범적인 답안이라고 할만 하겠습니다.

Part III Essay Exam.
    Part II assignment를 upload하고 나서 Essay Exam을 치게 됩니다. Essay Exam을 치고나면 , Part II Assignment와 Part III Essay가 함께
    채점이 되기 시작합니다.
    Part III Essay Exam은 당연히 영어로 답을 작성해야하며, 질문의 내용은 극히 기본적인 내용입니다.
    본인의 힘으로 part II를 진행했다면 , 수많은 고민을 스스로 했을 것이고, 나름대로 해결책을 정당화 했을 것이기 때문에 Essay는 무난한
    관문이라 생각합니다.
    Part III의 질문내용은 주로 Part II에서 언급한 선택과 정당화로 집중됩니다.
    4개의 문항이 출제가 되며 전부 Part II에서 아키텍트로서 결정한 선택에 관해서 왜 그렇게 했으며 그 근거를 요구하는 시험입니다.
    물론 자신의 Architecuture가 scalable,reliable 한 좋은 해결책이라는 것을 정당화 할 수 있어야겠습니다.

    시험결과는 Essay Exam을 치른후 약 1개월후에 나오게 되며 70점 이상이면 합격입니다.

이상으로 SCEJ Part I,Part II, Part III에 대한 소개와 경험을 소개했습니다.

Posted by
,