아.....드디어 6주차의 과정이 끝났네요. 토요일마다 나가서 들으려니 죽을 것 같았어요-_-
3차 강의신청도 10월중순쯤에 받고, 11월에 시작된다고 하니 관심있으신 분들은 KSUG 메일링 리스트에 가입을 하세요~^^
3차 강의에 관심있으신 분들을 위해-_- 후기를 남깁니다-_-(뭐 전 KSUG랑 관계없는 사람이구요-_- 그냥 강의가 좋아서 글을 남깁니다-_- 어차피 선착순이고 하루이틀이면 다차기 때문에 빨리하지 않으면 손해임 ㄷㄷ)
그리고, 강의를 들으시는 분들은 스프링을 한번쯤 사용해보신 분이 가장 적당한 것 같습니다^^ 그냥 멋도 모르고 사용해보신 분이면 더 좋구요(저처럼-_-). 그런 분들은 왜 이렇게 사용하지? 이런걸 알게 되는 좋은 기회일테니까요^^

Korea Spring User Group http://groups.google.com/group/ksug

스프링을 국내에 널리 알린 KSUG에서 하는 강의라 역시 스프링강의 중에는 최고입니다. 그냥 책을 보면서 스프링을 익히는 것 보단 스프링에 대해서 정말 잘 알고 관심있어하시는 분께 강의를 들으니 이해가 가지 않았던 개념도 많이 잡히더군요.

1주차 - IoC / DI
전 1주차 때가 역시...맘에 듭니다. 의존성을 개선하는 좋은 예제와 Junit을 이용한 테스트를 하는 것을 배우게 될 것입니다. 의존성을 개선하는 과정에서도 테스트는 항상 같기 때문에 항상 통과해야합니다. 테스트는 리펙토링을 할 때 매우 유용하더군요.
또한 예제를 준비해오셨는데, IoC/DI개념을 이해하기 좋을만한 예제를 준비해서 쉽게 실습합니다. 셋팅 관련된 것은 거의다 만들어오시고, 실제 중요한 로직만 코딩하는 방식으로 주로합니다. ^^

2주차 - JDBC
스프링에서 제공하는 JdbcTemplate을 처음부터 만들어봅니다. 이걸 만드는 이유는 Spring에 있는 Template류의 구현 패턴을 이해하기 위함이였습니다. JDBC Template를 만들면서 느끼는 점은 스프링이 참 대단하구나 라는 것을 느끼게 됩니다-_- Strategy pattern을 이용해 중복코드는 제거해가는 것을 직접해보는데, 이클립스의 강력한 기능인 리펙토링(사실 개발하면서 써본적 없음 ㅠㅠ)을 이용해서 합니다. 이클립스 리펙토링기능도 많이 알게 되는 좋은 시간이였던 것 같습니다. 덕분에 이클립스의 많은 기능을 배웠던 것 같아요^^

3주차 - Transaction & Advanced JDBC
전 대규모프로젝트나 트랜잭션이 필요한 프로젝트를 해본적이 거의 없어서-_- 트랜젝션에 대한 개념이 조금 전무했었습니다. 그냥 두개의 테이블에 데이터를 넣는데, 두번째가 실패하면 첫번째도 롤백이라는 간단한 개념만 알고 있었죠-_- 업무단위라고 주로하죠^^
이번 강의도 트랜젝션을 적용하기 위해선 업무로직과 섞이기 마련인데요. 이걸 트랜젝션만 따로 빼주는 Transaction Template을 만들어봅니다^^ 그러면 업무로직에만 집중할 수 있는 걸 보여주죠^^
이것보다 더 편한 AOP를 이용한 선언적 트랜젝션도 배우고요^^
그리고, 트랜젝션하면서 이건 대체 뭐하는 거지 라고 생각된 Propagation에 대해서도 잘 설명해줍니다^^ 재미있는 사례와 함께요^^

4주차 - Web MVC
전 웹에 관심이 많다보니 MVC가 역시 ^^ 여기서도 SpringDispatcherSerlvet이 어떤식으로 동작하는지를 알기 위해 FrontController라는 DispatcherServlet과 비슷한 걸 만들어보는 실습을 하게 됩니다^^ 이런 원리를 알고 사용하면 역시나 나머지에 대한 이해가 참 빨라집니다^^
이것 외에는 MVC쪽은 많이 삽질을 해봐서 복습한다는 내용으로 많이 들었던 것 같네요.

5주차 - Annotation-style Programming
1~4주차까지 한 내용을 다 애노테이션으로 바꿉니다-_- 지금까지 한 내용들은 애노테이션을 사용하기전에 개념과 원리를 잡기 위한 내용이였다고 보면 되구요. 애노테이션으로 바꾸면서 이것들을 매우 쉽게 사용할 수 있게 되었습니다. 설정에 들어가는 XML도 줄어들구요.
이거 처음부터 애노테이션을 사용해서 배워버리면 이게 왜 이렇게 되는지 알기 힘들고, 사용법만 배우는 건 완전 겉핥기가 되버리기 때문에 이렇게 강의를 구성한 것 같아요. 좋아요^^

6주차 - Security
Security는 역시 보안, 인증관련된 부분이라 어려운 것이라고 하더군요. 예전부터 로그인할 때 인증하는 것이라고만 알고있어서 더 알고 싶었던 것도 있었는데요. 근데, 역시나 하루만에 많은 걸 가르칠 수 없었기에 웹인증과 권한관련된 내용만 했습니다.
그래도 유용했던 것은 그 전 Acegi때 했던 필터 기반을 먼저 보여주고, 네임스페이스 기반을 보여줘서 원리에 대해서 잘 알았던 것 같네요. 그리고, 사실 어떻게 쓰는 줄 몰라서 못해봤었는데, 사용법도 알게 되어서 좋았네요^^


덕분에 많은 것을 배웠던 것 같네요. 강사님이 중간중간 현장 얘기도 좀 해주시고, 스프링관련 얘기도 해주시고 그래서 더욱 재미있었던 것 같네요.

3차 신청하시는 분들 참고하세요-_-
 
Posted by 머드초보
,
 
스프링에 예전부터 관심만 계속 가져왔었는데, 스프링에 대한 국비지원 무료강의가 있다고 해서 신청했습니다. 박찬욱님 블로그를 구독하고 있었는데, 강의를 모집한다는 글을 보자마자 신청^^

예전에 KSUG 세미나할 때 참석했을 때 박찬욱님이 JDBC강의를 했던 것으로 기억합니다.
http://mudchobo.tomeii.com/tt/342
그 당시에 jdbc templete을 만드는 것이 였는데, 화면이 휙휙 지나가! 이런 느낌을 받았는데요. 무슨무슨 패턴들이 나오면서 막 지나가면서 이해를 못했던 강의를 들었던 것 같습니다.
정말 다행인 것은 이번 스프링강의 때 이와 비슷한 내용을 한다는 것! 저도 꼭 만들어보고 싶었거든요-_- 아직 디자인 패턴도 잘 모르고 해서-_- 이번 기회에 디자인패턴을 좀 공부해야겠습니다.
이야기는 삼천포로 빠졌군요.

어쨌든, 첫시간인데요. 사실 전 java쪽 일을 하고 있지 않은데요-_- 그래도 Spring에 대한 기본적인 과정에 대해서 꼭 배우고 싶었습니다(미래는 어떻게 될지 모르니까요!)
이날 강의에서 배운것들^^

1. JUnit
우선 개발할 때 거의 안 쓰는 JUnit을 배웠는데, 이거 정말 유용하군요. 예전에는 JUnit같은 것 귀찮게 왜하지 그랬는데, 오늘 하는 것 보니까 이유가 있네요-_- 테스트를 작성해놓고, 나중에 리팩토링을 해도 제대로 돌아가는지 확인을 할 때 매우 유용하군요. 젠장 난 헛살았어.....

2. 초보자들이 IoC / DI 이해하기에 만족할만한 예제
저같은 허접도 이해할 수 있도록 쉬운 예제와 쉬운 설명으로 강의를 해주셨습니다. 이 피자스토어 예제는 제가 예전에 Head First Design Patterns 팩토리패턴에서 본 예제와 비슷하네요. 그걸 스프링에 맞게 수정하셨어요^^ 후....디자인패턴 공부해야겠다.......-_-

3. 그 외에 여러 팁
역시 단축키를 써야해요. 그래야 누가 뒤에서 코딩하는 것을 지켜볼 때 자랑할 수 있어요............

저랑 갑으로 알고 있는데, 강의를 너무 잘하심^^ 저도 분발해야겠습니다-_- 덕분에 스프링에 대해서 조금 더 다가가는 계기가 되었네요.
 
Posted by 머드초보
,
 
아...저번 회 때에는 박재성씨가 준비한 세미나를 들어서 그 때에는 스프링에 관한 것 보다 그냥 협업프로세스를 도울 만한 유용한 프로그램이나 작업 방법을 소개하는 자리였습니다. 그래서 스프링에 관해서는 많이 듣지 못했는데요.

오늘 세미나는 우선 2가지 세션을 못들은 것이 좀 아쉽구요. 그래도 백기선씨의 Spring AOP가 도움이 많이 되었구요. 박찬욱씨의 그 괴물같이 손이 보이지 않을 정도로 하는 라이브로 코딩하는 실력을 보면서 감탄사를 내뱉느라 제대로 못 듣기는 했지만, 꽤나 유용한 시간이였습니다. 그리고 스프링 보안인 Spring Security에 관한 설명도 들었는데....마침 이 시간이 졸려서-_- 잤습니다(발표자님께는 죄송하지만ㅠ)

우선 11시에 도착을 했는데, 20분부터 한다고 공지가 되어있더라구요.

1. 박찬욱님의 Refactoring JDBC Programming
우선 기존 JDBC를 접근하는 방식을 스프링 jdbc templete을 라이브로-_-; 만들어 보는 과정을 보게 되었습니다. 이건 뭐 감탄사밖에 안 나오는 군요. 이런 것을 한번도 보지 못한 저로썬 그냥 놀랄 따름입니다-_-; 보통 이클립스의 리펙토리 기능은 잘 쓰기 힘든데, 저걸 저렇게 활용하는 사람도 있구나 라는 생각이 드는군요 ^^
기존에 JDBC는 Try Catch Finally Try Catch의 반복으로 이루어져있죠. 그래서 그걸 템플릿으로 만들어서 중복코드에 대한 제거를 하고, 바뀌는 부분만 비교해서 잘 보여주셔서 이해가 매우 빨랐습니다. (하지만....휙휙~지나가는 화면들..OTL...)
사실 기존에 DB연동 부분은 그냥 항상 사용하기만 해서 내부 구조를 볼 겨를이 없었거든요. 실제 구현체를 보니 신기할 따름이군요. 그냥 queryForObject, queryForList, update, delete, insert 등의 메소드를 가져다가 쓰기만 했지, 어떻게 돌아가는지 몰랐는데, 이제 보니 확실히는 아니지만, 어느정도 알겠네요. 인터페이스를 활용하여 Strategy패턴을 이용해서 하는 것이더군요. 이제부터 디자인패턴을 공부해야겠다는 생각이 좀 드네요-_-; 사실 Head First Design Patterns책이 있는데...왠지 펼치기 싫습니다만, 이제 펼쳐야겠습니다 ㅠ
아....그리고, 저도 이클립스 단축키를 좀 외워야겠습니다-_-; 저도 이제부터 간지코딩을...-_-;

2. 박현준님의 Spring Security
헉.....순간 졸다가 기절했습니다-_-; Spring Security를 사용 안해봐서 인지 모르겠지만, 내용도 너무 어렵고ㅠ 졸리고 해서....ㅠ 자다가 일어나니 그 데모를 좀 보여줬는데, 대충 내용을 보니, 그....로그인 프로세스를 데모로 보여준 것 같습니다. 인증을 한 페이지를 보여주고 막 그랬던 것 같은데.....사실 잘 모르겠군요 ㅠ
얼마전 OAuth를 공부한 적이 있었는데, Spring Security에서도 지원을 한다고 한 것이 생각나는군요. 갑자기 얘기가 또 새네-_-; 암튼 보안쪽도 공부를 해봐야겠습니다 ㅠㅠ

3. 백기선님의 Spring AOP
우선 AOP에 대한 개념을 쉽게 설명해주어서 좋았구요. 하지만, 제 친구는 AOP에 대한 개념을 처음 접하는데, 용어가 너무 어렵다고 하더군요. 저도 친구들이랑 AOP스터디를 했을 때 advice, advisor, pointcut, joinpoint 등의 용어가 처음에는 헷깔렸는데, 그런 용어를 통해 친구가 그냥 처음에 들으려니까 어려운 부분이 있었나 봅니다. 암튼, AOP에 대한 EMAIL예제를 보여주시고, 1.X대 방식, 2.0.X방식, 2.5방식(어노테이션)을 보여주시고 ^^ 예전에 최범균님의 스프링2.5프로그래밍이라는 책에서 나온 예제가 있는데, 그것이 생각나더군요. 거기에서도 다 나와있었어요. 1.X대 방식은 어떤 인터페이스를 구현하는 것으로 나오고 ^^ 2.0.X는 POJO로 하고, XML설정파일에서 포인트컷을 정의를 해주는 방식이죠. 2.5의 어노테이션은 마법이죠 ^^
아...그리고 신기했던 것이 저도 @AspectJ 붙이면 컴포넌트 스캔이 안되는데, 그걸 포함시킬 수 있더군요.
저는 그냥
[code]<bean class="~~~~.AnnotMyAop" />[/code]그냥 선언해줬는데-_-; 컴포넌트 스캔에 AspectJ클래스를 넣으면 되는군요.
그리고, Spring AOP와 AspectJ를 비교하셨는데, 역시 AspectJ는 안써봐서 모르겠군요-_-;
또 하이버네이트는 제가 안해봐서 몰르겠는데, 이거 db를 객체랑 매핑해주는 거로 알고 있는데, add를 하면 insert를 하는건데, 이거 지가 필요하면 하는 거군요. 그래서 jdbctemplete이랑 같이 쓰면 데이터를 가져오면 insert가 안되서 문제가 발생하는데, 이걸 AOP로 해결할 수 있더군요. AOP를 예전에 회사에 적용해보려고 하다가 실패를 했던 기억이 있어서-_-; 다시 한번 해봐야겠습니다-_-;

근데, 이번 세미나를 마지막으로 무료세미나를 마친다고 한 것 같더라구요. 이제 돈내고 들어야하는건가....
암튼, 어느 정도 좋은 정보를 얻을 수 있었고, 도움이 많이 되었습니다. 스프링에 대해서 공부를 안한지 쫌 됐는데, 다시 한번 되새기게 만들어주네요. 우선 @MVC관련된 강의를 듣지 못해서 좀 아쉽구요. 저도 열심히 공부를 해야겠다는 생각이 드는군요.

이런 모임이 자주 있어서 좋은 정보를 공유했으면 하는데, 아직도 스프링 자료는 외국에서 많이 찾아야해요 ㅠ


 
Posted by 머드초보
,
 

KSUG는 Korea Spring User Group이라고 하는 국내의 스프링 유저 모임입니다.
이번에는 자바지기로 유명한 박재성씨가 세미나를 준비했네요.
박재성씨는 JCO 컨퍼런스에서 강연을 들은 적이 있고, 그 분이 쓴 책인 스프링 워크북과 스트럿츠 워크북을 본 적이 있는데요. 이 분이 주장하는 것은 요약하면 그런 것 같습니다.
좀 더 멋진 환경에서 개발해보자! 인 것 같습니다.
예전에 오픈소스 컨퍼런스에서 봤을 때도 오픈소스를 활용하여 더욱 나은 개발환경을 구축하는 법에 대해서 강의를 하였습니다. 그렇게 좋은 오픈소스가 있는 줄 모르고, 뭐든 수동으로 다 처리하고 그랬었습니다. 하지만 앞으로는 더욱 나은 개발환경을 삽질해보도록 노력해봐야겠습니다. 스프링프레임워크도 그런 개념에서 나온 거니까요^^

우선 첫시간인 사용자 스토리를 기반으로 한 요구사항 분석이였는데, 박재성씨가 NHN에서 일하다보니 NHN은 이렇게 일을 하는구나 라는 생각을 들게 만들더군요. 우선 사진을 찍어서 보여주셨는데 왕따시만한 화이트보드가 있더군요. 거기다가 모두에 대한 업무흐름을 다 그리는 듯 하군요. 우리회사에는 그런거 없는데^^
그리고, 요구사항을 포스트잇에 적고, 뭐 이렇게 하더니 일정산정을 하더군요.
보통 일정산정은 고객이 결정하는데 ^^ 언제까지 하라고 하면 하면 되는겁니다 핫핫-_-;
그리고, 저는 작은 프로젝트만 해와서 그런지 그냥 코딩에 들어갑니다-_-; 정말 나쁜습관입니다-_-; 앞으로 많이 고치려고 노력하고 있는데 잘안되네요. 이번에 기회를 삼아 고쳤으면 하네요.

이슈관리 시스템인 Jira라고 하는 것을 보여주셨는데, 박재성씨 말을 들어보면 참 편하고 유용할 것이라고 생각이 들긴 들지만, 전체다 적용하고 모두를 이해시키는데는 참 오랜시간이 걸릴 듯 합니다. 그리고 한번에 너무 많은 것을 보여주셔서 약간 혼란이 있었네요 ^^ 너무 신기한 것이 많아서 ^^ 박재성씨도 얘기했지만, 이 세미나를 통해 모든 것을 다 배워가는 것보다 약간의 힌트라도 얻고 갔으면 한다고 얘기를 하셨어요. 그 힌트를 가지고 삽질하는 것은 우리들의 몫이 되겠죠 ^^ 어쨌든 요구사항 분석은...잘 안하는데....-_-; 무조건 코딩-_-; 고칩시다-_-;

Eclipse를 기반으로 한 통합개발환경 시간에는 이슈관리툴을 Eclipse에 연동해서 보여준 것 같은데요. Mylyn인가?-_-; 어쨌든 완전 모르는 겁니다. Maven이라는 것도 소개했는데 얘기만 들었지 써보지는 않았어요. ANT만 쓰고 있어서. 근데 MAVEN에 대해서 얘기를 들으니 ANT에서 기능을 더 업그레드한 개념이라고 하네요. 라이브러리같은 것을 자동으로 업데이트가 되는 듯합니다. 보통 라이브러리 버전이 업데이트가 되면 그것을 다시 받아서 JAR로 추가하고 그랬어야 했는데 MAVEN을 이용하면 버전 숫자만 바꿔주면 가능하다고 합니다. Eclipse플러그인으로 제공한다고 하네요 ^^

아.....그리고 로컬에 개발DB를 하나 둔다고 말씀하셨는데, 음 그거 좀 공감이 갑니다. DB서버가 하나면, 스키마변경하면 다른 사람 작업에 영향을 미치게 됩니다. 전에 제가 개발서버에 있는 DB와 연동해서 개발하는데 저쪽에서 갑자기 칼럼을 바꿔버려서 제가 개발해놓은 프로그램이 잘 돌아가던게 안 돌아갔던 일이 있었어요.

어쨌든, 참 모르는 말 투성이만 듣고 온 듯 합니다. 마지막시간인 Teamcity CI툴을 활용한 지속적인 통합 방법에 대해서 얘기를 했습니다. Teamcity라는 것도 처음 들어봅니다-_-; 대충 얘기를 들어보니 코드를 서브버전에 커밋한다음에 팀시티가 커밋된 것을 확인하고 빌드를 하고 이 코드에 대한 리포트를 작성해서 개발자들에게 알려주는 듯합니다. 완전 자동화를 위한 툴인 듯 합니다. CI(Continuous Integration)가 지속적인 통합이라는 뜻으로 계속 통합한다는 뜻입니다-_-; 이것을 이용해서 협업도 가능하게 하고 자동화도 가능하게 하려고 하는 것같은데, 아직은 잘 모르겠습니다 ^^ 많은 ci툴중에 팀시티를 도입한 이유중 하나가 시스템 트레이로 리포트를 알려준다고 하네요^^
뭐 빌드가 깨지면, 바로바로 알려주고, 소스에 대한 피드백도 받고 그러는 것 같은데, 이렇게 멋진 툴이 있는지도 몰랐네요 ^^ 무조건 ant로 빌드하고 업로드했는데 ^^

아.....그리고, 테스트를 만드는 것을 강조했는데, 테스트만드는 것은 왠지 정말 귀찮은 일입니다. 박재성씨도 그것을 잘 아는지 테스트 잘 안만드는거 알고 있더군요 ^^ 테스트를 만드는 습관을 들여야하겠군요. 테스트도 자동화에 추가해서 할 수 있다고 하네요.

아.....그리고, 마지막에 신기한 툴을 하나 보여줬는데 와티즈인가?-_-; 암튼 잘 못들었는데요. 실제 환경에서 테스트할 수 있게 도와주는 것 같은데. 만약 로그인 하는 화면이라면 웹을 띄우고, 로그인을 하는 테스트를 자동으로 해버리는 툴같았는데-_-; 너무 빨리 지나가서 볼 수가 없었어요 ^^ 찾아봐야겠군요 ^^

마지막으로 참 재미있었던 것은 NHN에서는 10시20분에 회의를 하는데 1분전에 쥬얼리의 원모어타임이 나오는 듯 합니다-_-; 그리고, 퇴근시에는 빅뱅의 마지막인사를.....-_-; 어쨌든 박재성이라는 분은 어두운 개발자 환경의 빛을 보여주려고 많은 노력을 하시는 것 같네요 ^^

오늘 가서 아무 것도 몰랐지만, 많은 힌트를 얻을 수 있었던 것 같습니다. 근데 강의가 너무 빨라서 ㅠㅠ 앞으로 이런 세미나를 자주 참석해서 많은 것을 배웠으면 하는 바램입니다. 이것저것 공부해야할 것이 많이 늘었네요 ^^

 
Posted by 머드초보
,