본문 바로가기

카테고리 없음

한국스프링사용자모임3회(KSUG) 참가 후기 (자리잡은 커뮤니티)

스프링(Spring Framework)아파치 미나(Apache MINA)로 통신서버를 개발할수 있다고 말한지 몇주가 지났다. 팀장님은 개발이 실패할경우 예비로 개발할 C기반 통신서버로 대체하겠다고 하셨다. 나는 팀장으로써 감수해야할 막중한 책임감에 고개를 끄덕였다. 발달된 자바 기술의 혜택을 우리회사도 누릴수 있을지는 나에게 달려 있는 것처럼 보였다.

스프링(Spring Framework) IoC기능을 적용하였다. 무작정 적용하고 보니, 인터페이스를 구현한 구상 클래스를 결정하기 위해 별도의 클라이언트 로직을 만들 필요 없이 스프링(Spring Framework) XML로 구상 클래스를 주입하면 간단하게 해결된다는 것은 그야말로 스프링(Spring Framework)의 간결함 만큼 명확하게 와닿았으며, 스프링(Spring Framework)의 참신한 만큼 발상의 전환이 대단해 보였다.

탄력을 받아 진행한 작업은 'IP, Port, 프로토콜 설정, 전문 설정' 등의 각종 통신 설정을 외부화 하는 작업과, 메시지소스를 외부화 하는 작업이었다. 설정 정보의 외부화시 프로퍼티 파일이 읽히지 않아서 삽질 하다가 알게된 것은, 스프링(Spring Framework) XML을 로딩할때 BeanFactory로 로딩하면 안되고, ApplicationContext로 로딩해야 한다는 것이다. 그리고 메시지소스 외부화 작업시도 잘 되지 않아 몇시간을 삽질했는데 알고보니 스프링(Spring Framework) XML과 같은 위치에 메시지소스 파일을 놓는것이 아니라, 클래스패스의 가장 최상단에 따로 놓아야지만 작동되었다.

(위 두가지 사실은 몇시간 삽질해서 알게되었으니 혹시 설정 외부화 관련 작업들을 해보시지 않은 분은 참고하시길 바랍니다.)

내가 스프링(Spring Framework)을 알고 적용하는 것은 아직 미흡하여 여기까지다. 통신 서버를 개발하는 나에게 이번 주제인 스프링(Spring Framework) MVC는 관심 분야가 아니었다. 그래도 스프링(Spring Framework) 전문가를 만나고 스프링(Spring Framework)에 관심 있는 개발자를 만나고 그들의 지식을 듣는다는 것 자체가 많은 자극을 주리라 기대하여 '만원' 내고 '3회 스프링(Spring Framework) 사용자 모임에' 참가하게 되었다.

사용자 삽입 이미지

사용자 삽입 이미지

양재역은 교통이 편리했으며, 세미나 환경은 2회때에 비하면 많이 쾌적했다. 다음의 세련되고 쾌적한 시설들이 역시 대형 포털 회사라는 느낌을 주었다.

+ KSUG의 미래-안영회

사용자 삽입 이미지

스프링(Spring Framework) 사용자 모임이 단순한 세미나가 아니라, 이 모임을 통해 이루고 싶은 더 큰 목표가 있다는 것은, 스프링(Spring Framework)으로 각종 혜택을 보고 싶은 나같은 평범한 개발자한테 힘이 되는 사실이다.

안영회님은 스프링(Spring Framework) 사용자 모임을 정착시켜 사용자 모임의 조직화 작업을 한다고 했다. 운영위원회를 구성하여 각종 기업/단체/커뮤니티 별 대표자가 KSUG의 주요 의사결정에 참여한다고 했다.

소수 중심의 커뮤니티에서 네트워크 형태로 발전하여, 다양한 기업/단체/커뮤니티와 연계된 모임을 추구한다고 했다. 다수 의견이 반영된 합리적 의사결정, 긴밀한 협력이 가능한 점 조직화의 효과가 있다고 했다.

기타 회원제의 고민, 오픈소스 프로젝트 준비, 다양한 솔루션과 스프링(Spring Framework)의 연계 등의 이슈등을 이야기 했다. 친구처럼 나도 스프링(Spring Framework) 매니아가 되었기에 회원제 하면 가입하고, 오픈소스 하면 나도 참여하고 싶다. 스프링(Spring Framework)의 힘은 소극적인 나를 적극적인 참여 의지로 바꿔놓았다.

+ 효과적인 Spring Web MVC 컨트롤러 구성-백기선
"노트북을 가져와 따라해볼수 있다는 말은 그럴듯 하게 들렸다. 내 친구는 쇳덩어리 같은 노트북을 힘들게 들고 왔으나, 발표 내용 힘들게 따라가는것에 비하면 아무것도 아니었다. 짧은 시간에 연사 사진 찍듯 지나가는 어려운 내용을 따라갈려면 차라리 집중해서 발표를 보고 듣는것이 낳았다. 친구는 자존심이 강한편이라 어떻게든 따라가볼려고 했지만 10번 연습했다는 발표자의 능숙한 코딩을 따라갈수 없었다. 집에 돌아가는 길에 쇳덩어리를 들고가는 친구가 투덜거렸다. 나는 속으로 안들고 가길 잘했다고 했다."

사용자 삽입 이미지
직접 코딩을 하며 진행되었다.

사용자 삽입 이미지
빨간줄의 에러 표시, 친구는 따라가지 못했다.


그래도 효과적인 세미나를 위한 다양한 시도는 좋다고 생각하며, 백기선님은 어려보이는 외모와는 달리 차분하면서도 안정된 목소리로 발표를 능숙하게 진행했다.

사용자 삽입 이미지

다만 스프링(Spring Framework) MVC는 내 관심분야가 아니라 제대로 집중하기 어려웠다. Template Method의 디자인 패턴과 Extract Superclass의 리팩토링을 활용하여 스프링(Spring Framework) 컨트롤러 기능을 어떻게 객체지향적으로 튜닝할 수 있는지의 튜닝 과정과 그 과정 중 펼쳐지는 막강한 이클립스 편집 기능을 눈여겨 보는데 집중했다.

내가 이번 발표를 통해 스프링(Spring Framework) 컨트롤러에 대해 이해한것은, MultiActionController를 사용하여 처리 단위를 하나로 묶을 수 있고, 공통으로 할 일은 SuperClass로 추상화 하여 소스를 간결하게 할 수 있다는 것이었다.

+ Struts2와 Spring Web MVC-현철주

사용자 삽입 이미지

신입사원때 스트럿츠(Struts) 할줄 안다고 자랑했다가 맹목적인 신기술 추종은 좋지 않다는 선배의 따끔한 지적을 받은적이 있다. 그뒤 스트럿츠의 복잡성등이 좋지만은 않다고 생각되어 스트럿츠의 열기는 없어졌다. 오늘 문득 신입사원때의 추억이 떠올랐다. 스트럿츠2(Struts2)는 어떻게 진화했을 것인가~

'애플리케이션 구축, 배포, 유지 보수 전 영역에 거쳐 개발 사이클을 가질 수 있도록 디자인된 프레임워크'라는 문장이 인상깊었다. 나한테 와닿은 기능만 쓴다.

1. 주요 기능
1.1 애플리케이션 구축,
- 요청의 라이프 사이클이 커스터 마이즈 될 수 있다. 아마 인터셉터 기능을 가리키는 것 같다.
- 유효성 검사 규칙을 액션 코드와 분리 할 수 있다.
- 웹 개발시 가장 지루한 데이터 변환 작업(String mckdh = request.getPrameter(“mckdh”) <- 이런 작업들을 가리키는 것 같다.)과 관련하여 자동으로 데이터 객체의 값으로 변환한다.
- 스프링(Spring Framework)과 같은 의존성 삽입(Dpendency Injection) 가능
- 대형 프로젝트를 위한 환경 설정 파일 모듈화
- 자바5 annotation기능 사용 환경설정 오버헤드를 줄일 수 있다.(이번 세미나때 새롭게 알게된 기능)

1.2 애플리케이션 배포
- 웹 컨테이너 재시작 안해도 리로드 가능

1.3 애플리케이션 유지보수
- 테스트 용이, Action들이 HTTP 독립적, mock 객체에 의존하지 않고 테스트 가능
- 강력한 디버깅 기능, 프로파일링, 오류 보고등의 디버기 도구 내장

2. 주요 이슈
2.1 Interceptor
- 액션 실행 주위로 실행될 수 있는 코드를 쉽게 장착, 장탈하는 기능, 액션 외부에 정의되고, 런타임 시에 액션과 액션 실행 환경에 접근할 수 있다.
- 아파치 미나(Apache MINA)의 Filter기능과 거의 똑같아서 놀랐다. 아파치 미나(Apache MINA)의 Filter처럼 주요 기능을 액션 주변에 장착, 장탈 할 수 있다는 것은 유지보수와 성능향상에 크게 기여하는 기능 같다.
- 스트럿츠2(Struts2)에서 제공하는 Interceptor들을 보니 그 기능들이 다양하면서도 막강한 것 같다. 개인적으로 스트럿츠2(Struts2)의 가장 특화된 기능은 Interceptor기능 같다.

2.2 OGNL(Object Graph Navigation Language)
“자바 객체의 프로퍼티 값을 얻거나 저장하기 위하여 자바빈들 상의 프로퍼티들을 추적하는 표현식을 다룰 수 있게 한다.”라는 기능인데 애매모호한 정의 처럼 개인적으로 어떤 기능인지 나는 알 수 없었다.

OGNL 기능이라는 것이 스트럿츠2(Struts2)의 속도를 저하시키는 원인이라는 이슈가 있었는데, 내가 이 기능을 모르니 구체적으로 쓰기가 어려웠다. 다만 OGNL이 그런 이슈가 있다라는 것만 쓴다.

+ SpringOne2007 정리-이일민

사용자 삽입 이미지

스프링(Spring Framework)기술 습득에 도움이 되진 않겠지만 이 시간이 제일 기대됐다. 세계 스프링(Spring Framework) 커뮤니티의 핵심에 접근하고 있는 이일민님의 다양한 현장 이야기가 재밌을 것 같았다.

어느 벤처 캐피탈로부터 '1000만 달러를 펀딩' 받아 스프링(Spring Framework) 풀타임 개발자가 확대 되었다고 한다.

스프링(Spring Framework)의 간결하면서도 강력한 기능은 이미 인정을 넘어서 사실상의 엔터프라이즈 자바 개발 모델의 표준이 되었다고 한다.

스프링(Spring Framework)과 반대 진영이라고 볼수도 있는 EJB관련 솔루션/컨설팅 업체인 BEA등으로부터도 인정받아 스프링(Spring Framework)을 이용하여 WebLogic10이 개발된다고 할 정도로 스프링(Spring Framework)은 인정받고 있다.

스프링(Spring Framework)2.1 관련 기능을 설명하면서 Annotation 기능을 직접 이클립스로 시현하였는데 @ 태그만 붙이면 깔끔하게 환경 설정이 줄어드는 기능을 눈으로 확인하면서 생소하여 어려웠던 Annotation기능을 실제로 써봐야 겠다는 동기부여가 되었다.

기타 현장감 가득한 이야기를 들었다.

+ Spring 전문가에게 묻는다.

사용자 삽입 이미지

설문조사를 바탕으로한 질문과 전문가의 답변 시간이었다. 내가 와닿은 질문/답변만 쓴다.

- 질문은 기억안나고 답변만 기억나는 것 하나
“금융쪽에서 초강력 서버로 무장하고 있지만 그야말로 엄청난 트랜잭션이 매초마다 발생하기 때문에, 서버가 견뎌야 되는 부하는 매우 크며, 그래서 성능 튜닝이 중요한 부분인데, 서버가 현재 부하가 많은 EJB로 구성 되어 있는 문제가 있다. 만약 EJB의 기능을 온전히 수용하는 스프링(Spring Framework)으로 대체 개발할 수 있다면, 서버 성능 향상에 상당한 도움을 줄것이다.

..X-Internet의 기능에 주목하고 있다. X-Internet은 서버의 로직 연산을 클라이언트에서 대신할 수 있기 때문에 서버 성능향상에 기여한다.”

우리 회사는 금융 관련 IT 회사이다. 클라이언트는 X-Internet으로 구성하고, 서버는 스프링(Spring Framework)을 쓸 예정이다. 이 답변을 듣고 나는 기분이 매우 좋았다. 우리 회사는 알게 모르게 서버 성능향상을 위해 전문가가 추천하는 솔루션들을 쓰고 있는 것이었다.

- 스프링(Spring Framework)을 쓸때 꼭 인터페이스를 이용하여 개발해야 하는가?
 “인터페이스를 지향하여 개발하는 것은 유지보수 등의 성능을 개선하고 개발자의 습관을 올바르게 지향하는 중요한 개발 방법이다.

 ..스프링(Spring Framework)의 장점은 개발자가 스프링(Spring Framework)을 쓰면 쓸수록 스프링(Spring Framework)을 잊어간다는 것이다.”

+ 마무리
두번째 답변을 다시 정리하면서 스프링(Spring Framework) 사용자 모임 3회 세미나 후기를 마무리해야 겠다. 내가 생각하는 프레임워크를 쓰는 이유는 교통표지판의 지도 처럼 잘 짜여진 프레임워크의 지도를 받아, 깔끔하면서도 고성능의 개발을 지향하는 것인데, 스프링(Spring Framework)은 고품질의 어플리케이션 개발 유도 뿐만 아니라, 자연스럽게 인터페이스를 지향하는 개발을 유도함에 따라 개발자의 습관까지 바람직하게 지도하는 프레임워크라는 것이다. 그래서 스프링(Spring Framework)은 프로그램 주제에 감히 개발자(사람)의 습관까지 영향을 끼치는 막강하면서도 유익한 프레임워크라고 생각한다.

스프링(Spring Framework)을 쓰면 쓸수록 스프링(Spring Framework)을 잊게 된다는 역설은 과거 중국 은나라 임금이 백성들이 임금이 누군지 모를정도로 행복하게 일하고 있다는 말을 듣고서야 비로서 뿌듯했다는 이야기와 통하고 있었다.

그래서 나도 스프링(Spring Framework)에 열광하며, 스프링 사용자 모임에 적극 참여하고, 스프링 공부도 열심히 하여 궁극적으로 우리 회사에 간결하면서도 강력한 스프링(Spring Framework) 적용 확실하게 해야 겠다.

사용자 삽입 이미지
받은 기념품들


+ 참고 사이트
한국 스프링 사용자 모임 http://www.springframework.co.kr
스프링 컨설팅 회사 Eprill http://www.epril.com
이일민님 블로그 http://toby.epril.com
안영회님 블로그
http://younghoe.info/
백기선님 블로그 http://whiteship.tistory.com
현철주님 회사 사이트 http://www.artszen.com/ (스트럿츠2로 개발되었다고 함)