Whiteship's Note

'모하니?'에 해당되는 글 934건

  1. 2010.06.23 [스프링 3.0 이해와 선택] 2차 교육 공지 (2)
  2. 2010.06.17 [하이버네이트 완벽 가이드] 드뎌.. 하이버 번역서가 나왔습니다. (16)
  3. 2010.06.15 테스트 주도 개발 : 고품질 쾌속개발을 위한 TDD 실천법과 도구 (2)
  4. 2010.06.10 [집안일] 바느질하는 기선이 (4)
  5. 2010.06.07 봄싹 마니산 등정 성공 (4)
  6. 2010.05.30 6월 2일 투표 방법 알아보자 (2)
  7. 2010.05.27 [결혼 1주년 기념] 유진&기선 결혼식 축하 공연 공개 2 (2)
  8. 2010.05.27 [하이버네이트 Criteria] 목록 사이즈 구하기 (4)
  9. 2010.05.25 JUnit 4.8 카테고리 기능
  10. 2010.05.25 [결혼 1주년 기념] 유진&기선 결혼식 축하 공연 공개 1 (2)
  11. 2010.05.22 선거 방법(?)좀 바꾸자 (2)
  12. 2010.05.20 토비님 책으로 스프링 3.0 강의합니다. (4)
  13. 2010.05.18 일상에 회의감이 드는 순간... (10)
  14. 2010.05.12 '소로우의 노래'를 읽다가 (4)
  15. 2010.05.11 인텔리J에서 스칼라 시작하기 (7)
  16. 2010.05.06 블로깅 계획
  17. 2010.04.28 봄싹 관련 사이트 정리
  18. 2010.04.25 [봄싹 코딩] DAO 테스트 만들기 (4)
  19. 2010.04.20 [KSUG] 10회 스프링 세미나 발표자료 (2)
  20. 2010.04.20 서비스 계층의 비즈니스 로직을 도메인으로 옮기자
  21. 2010.04.19 [Econovation Fair] 아이폰 앱 아이디어 & 개발 대회
  22. 2010.04.13 지난 주 일요일 안면도 대하 (2)
  23. 2010.04.04 [주말 코딩] 봄싹 위키 (10)
  24. 2010.04.01 [JSON in Java] JSON에서 필요한 데이터 뽑기
  25. 2010.03.30 KSUG 제10회 한국 스프링 사용자 모임 세미나 (4)
  26. 2010.03.26 [Spring 3.0 & Atlassian] RestTemplate으로 Confluence의 Space 목록 가져오기
  27. 2010.03.19 [Spring Security] Method Security Test
  28. 2010.03.17 나는 null 중대 소속이다.. 너는 어디냐.. (13)
  29. 2010.03.17 봄싹 개발자 모집합니다. (완료됨) (4)
  30. 2010.03.12 [Agile 번역] 어떻게 하면 번역을 기민하게 할 수 있을까? (4)

[스프링 3.0 이해와 선택] 2차 교육 공지

모하니?/Planning : 2010.06.23 14:10


http://www.hanbitedu.co.kr/incumbent/shortContent.do?index=1097

벌써 공지가 떴네요. 캬..
1차 교육 끝나자 마자 바로 시작합니다.
2차 강의 할 땐 토비님 책을 가지고 시작할 수 있겠군요.
한결 든든하겠네요.

- 1일차 (7월 24일) 
 1장 오브젝트와 의존관계 
 2장 테스트 
 3장 템플릿 
 4장 예외 

- 2일차 (8월 07일) 
 5장 서비스 추상화 
 6장 AOP 
 7장 스프링 핵심기술 응용 
 8장 스프링이란? 

- 3일차 (8월 14일) 
 9장 스프링 프로젝트 시작하기 
 10장 IoC 컨테이너와 DI 
 11장 데이터 엑세스 기술 

- 4일차 (8월 21일) 
 12장 스프링 웹 기술과 스프링 MVC 
 13장 스프링 @MVC 
 14장 AOP와 LTW 
 15장 콘텍스트 테스트 프레임워크 
 16장 스프링의 기타 기술과 효과적인 학습방법 

1일차와 2일차는 "이해"하는 단계입니다. 이 부분에서 스프링 IoC 컨테이너, 테스트, 템플릿, 트랜잭션 추상화, 이메일 추상화, 스프링 AOP 기능들이 어떻게 만들어졌는지 실습을 통해서 학습하게 됩니다.

3일차와 4일차는 "선택"하는 단계로 실제 웹 애플리케이션을 만들어 가면서 IoC 컨테이너 설정 방법, 연관 관계 설정 방법, 빈 등록 방법 등을 선택하고, DAO 기술을 선택하고 그에 따른 스프링 지원 기술을 사용하며, 트랜잭션 선언 방법도 선택하고 적용합니다. 4일차에서는 @MVC를 사용해서 웹 애플리케이션을 마무리하고 3.0에 추가된 기능들을 학습합니다.


top

  1. 대웅 2010.08.09 17:50 PERM. MOD/DEL REPLY

    저 링크 500에러나;;;

    Favicon of http://whiteship.me BlogIcon 기선 2010.08.09 19:57 PERM MOD/DEL

    강의 시작해서.. 내용이 없어졌나봐요.ㅋ
    NullPointerException이 나는군요.ㅋㅋ

Write a comment.


[하이버네이트 완벽 가이드] 드뎌.. 하이버 번역서가 나왔습니다.



Java Persistence With HIbernate 번역서가 나왔습니다.
어흑.. 몇년째 번역한건지.. 원래 이 책을 프로 스프링 2.5보다 먼저 번역 하고 있었거든요.
사실 그보다 훨씬 더 전에는 물개선생님께서 번역하고 계셨었는데... ㅋ
하이버에 관심있으신 분들을 한권쯤...ㅋ



top

  1. Favicon of http://helols.pe.kr BlogIcon isyoon 2010.06.17 09:54 PERM. MOD/DEL REPLY

    수고 하셨어요!!!!!!!!!!

    Favicon of http://whiteship.me BlogIcon 기선 2010.06.17 12:38 PERM MOD/DEL

    좋구나~

  2. Miracle 2010.06.17 11:57 PERM. MOD/DEL REPLY

    와~ 드디어 나왔네요~ ^^

    Favicon of http://whiteship.me BlogIcon 기선 2010.06.17 12:39 PERM MOD/DEL

    그러게요.. 드디어!! 개빈킹에게도 이소식을 전해줘야지.

  3. Favicon of http://architect.tistory.com BlogIcon 짱가 2010.06.17 14:48 PERM. MOD/DEL REPLY

    축하드립니다. ^^
    멋진책이 될것 같아요~~~

    Favicon of http://whiteship.me BlogIcon 기선 2010.06.17 15:38 PERM MOD/DEL

    감사합니다.
    이제부턴 좀 얇은책을 번역해야겠어요. ㅋㅋ

  4. Favicon of http://yunsunghan.tistory.com BlogIcon Max 2010.06.17 17:09 PERM. MOD/DEL REPLY

    끝을 봤군요... 대단한 일을 하셨네요.
    수고 많으셨습니다. ^^*

    Favicon of http://whiteship.me BlogIcon 기선 2010.06.17 17:17 PERM MOD/DEL

    앗 봄싹의 아버님. 감사합니다.:)
    봄싹에서 스프링 Roo 스터디 한번 하셔야죠.

  5. Astre 2010.06.17 22:52 PERM. MOD/DEL REPLY

    완전 감동이였어. 자랑스러운 남편이야!!

    Favicon of http://whiteship.me BlogIcon 기선 2010.06.17 23:12 PERM MOD/DEL

    자기 덕분이야.

  6. 코바 2010.06.18 11:03 PERM. MOD/DEL REPLY

    아 책살께 많아 지네요

    토비님책도 사야하는데 이책도 보고 사야 될듯 ㅎㅎ

    어쨋든 책번역도 하시고 대단하십니다

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2010.06.18 16:05 신고 PERM MOD/DEL

    그러게요. 책들이 몰려서 나오네요..ㅋ

  7. Favicon of http://blog.doortts.com BlogIcon 펭귄너구리 2010.06.18 19:19 PERM. MOD/DEL REPLY

    와!!! 축하 축하!! 주변에 좋은 일들이 잔뜩!

    올 여름 독서 꺼리 걱정은 없겠는걸!

    Favicon of http://whiteship.me BlogIcon 기선 2010.06.19 00:31 PERM MOD/DEL

    어흑.. 저도 책쓰고 싶어요. 쓰고 싶은게 2권이나 있는데...
    형이나 사부님 보면 섯불리 엄두가 안나요.

  8. Favicon of https://slothink.tistory.com BlogIcon 편현장 2010.06.22 08:02 신고 PERM. MOD/DEL REPLY

    최범균님의 빨간 하이버네이트 이후로 이렇다할만한 국내서가 존재 하지 않았는데, 귀한 책을 번역해 주셨네요. 감사합니다. 이전 책들보다 실무에서 사용할만한 고급 주제를 잘 다루는거 같네요. 목차로 보기엔 :) 잘 읽겠습니다..^^

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2010.06.22 10:06 신고 PERM MOD/DEL

    넵. 그 책은 입문용으로 좋은것 같구요. 실무하시려면 이 책이 필요하실 것 같습니다.

Write a comment.


테스트 주도 개발 : 고품질 쾌속개발을 위한 TDD 실천법과 도구

모하니?/Thinking : 2010.06.15 16:19


http://www.hanb.co.kr/book/look.html?isbn=978-89-7914-726-1


드뎌 수원형 책이 나왔다. 캬~~
좋은 책들이 쏟아지려나보다.
좀있으면 토비님 책도 나오고 재성형 책도 나올텐데.. 

왠지 아는 사람들이 쓴 책을 접하게 되니까 기분이 좋다.
책에 적혀있는 텍스트를 읽으면서 저자분 성격에 비추어 어떠한 생각으로 어떤 기분으로 이 글을 썼는지 짐작하는 재미가 쏠쏠해서 일까...

암튼 왠지.. 난 이 분들을 만나봤다는 것 만으로도 참 기분이 좋다.
나도 언젠간...꼭!

그나저나 이책은 줄여서 뭐라고 불러야 하지...
'고품질 쾌속개발을 위한 TDD 실천법과 도구를 보세요.' 헥헥헥..
'빨간 TDD' 보세요 라고 할까나...
top

  1. Miracle 2010.06.15 16:31 PERM. MOD/DEL REPLY

    저자에게 실례가 되지 않는다면~~~ 너굴 TDD~ ^^;;

    Favicon of http://whiteship.me BlogIcon 기선 2010.06.15 18:49 PERM MOD/DEL

    ㅋㅋㅋ그것도 좋군요

Write a comment.


[집안일] 바느질하는 기선이



오늘은 왠지.. 쉬고 싶어서 회사에 가지 않았습니다. (오늘은 그래서 [회사일] 포스팅이 없을꺼에요.ㅋ)
초등학교 때 이후로 처음해보는 바느질.. 재밌더군요.


오전에 냉장고 위치 바꾸고, 커튼 다시 달고, 대문에 빛 가리게 달고, 청소까지.. 캬..
이제 아내가 해주는 밥먹고 씻고 공부해야지. 피아노도 쳐야겠군. 띵똥띵똥. 월광 1악장 ㄱㄱㅆ.
top

TAG 바느질
  1. 코바 2010.06.10 11:39 PERM. MOD/DEL REPLY

    멋있는 남편이시네요 ^^

    Favicon of http://whiteship.me BlogIcon 기선 2010.06.10 16:26 PERM MOD/DEL

    캬캬캬.. 감사합니다.

  2. 머큐짱 2010.06.10 13:05 PERM. MOD/DEL REPLY

    오우~~

    Favicon of http://whiteship.me BlogIcon 기선 2010.06.10 16:26 PERM MOD/DEL

    오홋..

Write a comment.


봄싹 마니산 등정 성공



마니산 최악의 코스(맵에도 없는 코스)를 선택한 봄싹은 등산 초반 부터 시작된 고난을 이겨내고 장작 4시간 반만에 드디어 마니산 정상인 첨성단에 도착합니다.

그리고 저는 아이스크림을 먹었습니다. 그것도 두개 씩이나.. +_+



올해 먹었던 아이스크림 중에 제일 맛있는 아이스크림이었어요.

올라갈 때 선택한 코스는 택시 기사 아저씨가 추천해준 코스인데 입장료를 내지 않아도 되고 2시간 반이면 된다고 해서... 갔지만.. 정말 막막하더군요. 이정표도 없고 이길이 맞는 길인지도 잘 모르겠고, 그냥 '높은곳으로 가자. 계속 올라가다 보면 정상에서 만나겠지' 라는 일념으로 계속해서 올라갔습니다.

그렇게 오르기를 계속하다가 처음 만난 이정표가 얼마나 반갑던지.. '아.. 다행이다.' 라는 생각이 들더군요. 계속 가면 정상은 나온다는거니깐 안심했습니다. 그러나.. 예상보다 험하고 길어지는 산행에 당황하지 않을 수가 없더군요. 그래도 어쩔 수 없었습니다. 그 상태에서 다시 올라온 길을 내려가기는 싫고 끝까지 올라가는 수밖에 없다는 생각으로 계속 올라갔습니다.

이번 산행에서는 봄싹 팀원들의 팀웍을 보는 재미가 쏠쏠 했습니다. 우선 운영진의 불찰로 인해 엄한 등산로를 타기 시작했는데도 모두 끝까지 포기하지 않고 올라갔다는 것이 저로써는 굉장히 기뻤습니다. 운영진이 매번 잘할 수는 없습니다. 운영진도 사람들인지라 실수도 하고 잘못된 방향으로 이끌기도 하지만 계속해서 운영진을 믿고 따라 줘야만 잘못도 인지하고  더 나은 방향으로 더 성숙한 운영을 할 수 있기 때문입니다. (이번 일은 운영진이 사과드릴만한 행동을 했습니다. 흑흑. 다음부턴 꼭 사전답사도 제대로 하고 정확한 경로로만 다니겠습니다.) 또한 봄싹 내부에서 힘든 사람 짐을 들어주고 쳐지는 사람을 앞으로 보내고 중간 중간 선두와 후미 간격 조정, 물 나눠 마시기 등을 보면서 상당히 즐거웠습니다. '아.. 다행이다. 봄싹이 이래서 계속 유지 될 수 있는 거구나..' 라는 생각이 들었고, 따뜸한 한마디를 아끼지 않던 정우형도 고마웠습니다. 서로가 어찌나 이렇게 잘 맞물리는지.. 후훗. 머 가끔 모난 곳도 있긴하지만 바위가 세월에 깎이듯 같이 오래 지내다 보면 분명히 서로 잘 어울리게 될 거라 생각합니다.

이번 봄싹 MT는 힘들었던만큼 좋은 추억거리가 된 것 같습니다.
다음에도 좋은 추억 만들 수 있게 열심히 달립시다.


한분은 비공개를 요청하셨기 때문에 고스트로 처리해드렸습니다.ㅋㅋㅋ


 







top

  1. Favicon of http://helols.pe.kr BlogIcon is윤군 2010.06.07 23:53 PERM. MOD/DEL REPLY

    고스트 완전 멋진껄요 ㅋㅋ

    Favicon of http://whiteship.me BlogIcon 기선 2010.06.08 08:04 PERM MOD/DEL

    고스트 멋지지ㅋㅋ

  2. Favicon of http://starplatina.tistory.com BlogIcon june 2010.06.09 11:19 PERM. MOD/DEL REPLY

    어디 당장이라도 핵 떨어질 기세 ㅋㅋㅋ

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2010.06.09 12:30 신고 PERM MOD/DEL

    ㅋㅋㅋㅋ

Write a comment.


6월 2일 투표 방법 알아보자

모하니?/Planning : 2010.05.30 09:59


8명이나 뽑아야 된다. 다행히다. 딴지일보에서 설명을 잘 해주고 있다.

http://www.ddanzi.com/news/21502.html

자 이제 내가 찍어야 할 후보를 알아보러 가보자.

http://www.nec.go.kr/nec_new2009/Main.do

후보자 찾기를 누르면 http://epol.nec.go.kr/ 여기로 이동한다.
흠.. 사이트는 잘 만든 편이다. 맥북 사파리에서 잘 보인다니 다행히다. 
IE에서만 볼 수 있었다면 난 바로 꺼버렸을거다.

광명4동을 찾아서 눌러줬다. 오퀘 다 나왔다.


비례대표의원 후보는 너무 많아서 캡처하기도 귀찮았다. 그래서 캡처 안했다. @_@;; 귀찮아 귀찮아..

자 이제 선택의 시간이다. 기준이 필요하다. 아무런 기준없이 찍으면 똥인지 된장인지도 모르고 투표하는 꼴이 되는거다.

내 기준은 간단하다.

1. 한나라당 아웃.

모든 후보들 중에서 한나라당은 일단 아웃이다.

2. 연합 후보 지지.



3. 나머진 찍자.

1번으로 다 빼고, 2번에서 찾아봐도 나오지 않는 후보가 있을 땐 그냥 찍자.
어쩔 수 없다. 비례대표의원들을 다 알아보다간 날 새겠다. 그냥 찍고 말랜다.

결과

1. 경기도교육감: 김상곤 
2. 경기도교육의원: 최철환
3. 경기도의회의원: 정대문
4. 광명시의회의원: 문현수
5. 경기도지사: 유시민
6. 광명시장: 양기대
7. 비례대표경기도의회의원: 아 몰라;;
8. 비례대표광명시의회의원: 문영희

끝났군!!
top

  1. 없다캐라 2010.05.31 11:38 PERM. MOD/DEL REPLY

    1번 한나라당 아웃이 저랑 같군요 ㅋㄷ 화이팅.

    Favicon of http://whiteship.me BlogIcon 기선 2010.05.31 12:55 PERM MOD/DEL

    ㅎㅎ화이팅!

Write a comment.


[결혼 1주년 기념] 유진&기선 결혼식 축하 공연 공개 2

모하니?/Watching : 2010.05.27 15:18


이번엔 락 밴드 공연~



학교 친구들끼리 모여서 만든 친목 락밴드 라고 했던것 같은데 잘하세요. 
캬~~ 웅성웅성 시끄러운데도 쩌렁쩌렁 잘 들리고 좋아요. ㅎㅎ
top

  1. Favicon of http://lckymn.com BlogIcon Kevin 2010.05.27 18:03 PERM. MOD/DEL REPLY

    Queen의 Don't stop me now 군요. 잘 부르네요. :)
    식사하는 자리라 그런지 관객분들 호응이 좀 약한게 아쉽습니다.

    Favicon of http://whiteship.me BlogIcon 기선 2010.05.27 23:53 PERM MOD/DEL

    그러게요. 더 열열히 호응해줬으면 저분들도 즐거웠을텐데..흑흑..

    그래도 찍어두길 정말 잘했어요. 저날 정신없어서 공연 제대로 못즐겼는데 이렇게 가까이서 찍은 동영상이 있으니 두고 두고 보고 있답니다.ㅋㅋ

Write a comment.


[하이버네이트 Criteria] 목록 사이즈 구하기

모하니?/Coding : 2010.05.27 10:47


난 편의상 이런 메서드들을 만들어 놓고 쓴다.

    private Session getSession() {
        return sessionFactory.getCurrentSession();
    }

    private Criteria getCriteriaOf(Class clazz){
        return getSession().createCriteria(clazz);
    }

이 두개가 있다고 했을 때.. Criteria API를 이용해서 목록 사이즈를 구하는 코드를 작성해보자.

    public int totalSize() {
        return getCriteriaOf(Code.class).list().size();
    }

캬.. 얼마나 명시적인가. 하지만 이러면 안된다. ㅠ.ㅠ.. 난 하이버가 좀 더 똑똑해져서 저렇게 짜더라도 알아서 count 쿼리를 만들어 주면 좋겠지만 그러지 않는다. 전부다 select 해온다. 로그를 보면..

Hibernate: select this_.id as id0_0_, this_.code as code0_0_, this_.descr as descr0_0_, this_.name as name0_0_ from Code this_

이렇다. 필요한건 사이즈 뿐인데 Code 테이블에 있는걸 전부다 가져온 셈이다. 크헉.. 따라서 목록 사이즈를 구할 때는 이런 쿼리를 쓰면 안된다.. 절대로; 그럼 어떻게 할까나..

    public int totalSize() {
        return (Integer)getCriteriaOf(Code.class)
            .setProjection(Projections.count("id"))
            .uniqueResult();
    }

이렇게 하면된다. Projections를 이용하면 count 말고도 max, min등을 사용할 수 있다. 코드가 좀 길어지고 Projection API에 적응해야 한다는 단점이 있지만 쿼리는 깔끔해진다.

Hibernate: select count(this_.id) as y0_ from Code this_

딱 내가 원하던 쿼리다. 하이버네이트를 쓸땐 이렇게 Criteria나 HQL이 생성해주는 SQL도 일일히 확인하는것이 좋다. 사실 일일히 확인하는 작업을 DBA가 해주면 좋겠지만 하이버네이트랑 친한 DBA가 있을 때의 이야기이고 그렇지 않다면 본인이 해야겠다. 아니면 하이버네이트를 마스터해서 어떤 쿼리가 생성되는지 달달달 꽤고 있다면 시간을 좀 단축 시킬 수 있을 것 같기도 하다.

하이버네이트를 마스터 하기 위해서는 조마간 나올 하이버네이트 번역서가 필수라는....앗..  광고를 하려고 시작한 글은 아니었는데;; ㅋㅋㅋ

ps1: Criteria를 사용해서 좀 더 간결한 코딩으로 가져오는 방법이 있으면 알고 싶다.
ps2: 반드시 Criteria를 써야 한다. 나중에 저 쿼리에 검색 조건이 임의로 추가될텐데 그럴때 Criteria가 빛을 발하기 때문이다. 난 동적쿼리를 SQL이나 HQL로 짜지 못하겠다. 짜증난다.
top

  1. Favicon of http://lckymn.com BlogIcon Kevin 2010.05.27 18:36 PERM. MOD/DEL REPLY

    본문과는 좀 다른 얘긴데요,
    최근에 나온 Hibernate에서도 JPA 2.0을 지원하기
    시작해서 관련된 얘길 잠깐... ^^;

    하이버네이트가 JPA 2.0 지원 시작하면서 바로 갈아타고
    JPQL도 전부 Typesafe query API 사용하는걸로 대체 했습니다만...
    이거 API가... 영...ㅡ_ㅡ; 코드 가독성을 떨어뜨리네요.
    typesafety 말고는 QL 언어보다 장점을 못 찾겠습니다.
    (뭐 사실 그걸 장점으로 내세운거긴 합니다만...ㅡ_ㅡ; )
    부가 코드만 늘어나고... 장점에 따라오는 단점이 좀...

    리턴 타입이야 generics 사용해서 Query 랑 EntityManager 확장해서
    어느정도 typesafe 하게 만들수 있다보니,
    JPA 2.0의 typesafe queries 는 리턴타입 이외에도
    parameter의 typesafety 를 보장해준다는거 정도밖에는 장점을
    못 느끼겠습니다. 이게 꽤 큰 장점이긴 하지만,
    그나마도 따로 @StaticMetamodel annotation을 마킹한 class를
    작성해야 가능하니... 없이 만들면 기존의 setParameter 와 별 다를바가...

    나름대로 필요한 객체들 묶어서 CriteriaManager 를 만들어서 쓰니 조금 편하긴한데
    이래도 가독성 높이려면 뭔가 한참은 부족하네요...ㅡ_ㅡ;

    암튼 그래서 Querydsl 을 사용해 볼까도 고민중이긴 합니다만...
    http://source.mysema.com/display/querydsl/Querydsl

    Favicon of http://whiteship.me BlogIcon 기선 2010.05.27 23:50 PERM MOD/DEL

    저도 JPA2로 갈아탈까 고민했었는데 아직 스프링 번들 저장소에 라이브러리가 뜨지도 않았고 스프링 3.0.2 의존성도 아직 JPA2로 넘어가질 않아서 일단 하이버 3.4 쓰고 있습니다.

    JPA2에 있는 Criteria랑 하이버에 있던 Criteria랑 사용하는게 많이 다른가요? 하이버 Criteria API랑 많이 다르지만 않다면 넘어가볼까 합니다.

    쿼리 자체가 복잡하면 Criteria로 표현하는 것도 복잡하지만 SQL도 어쩔 수 없이 복잡해지지 않을까 싶네요. 하지만 SQL에 익숙하신 분들은 정말 Criteria가 더 복잡해 보일 수도 있을 것 같아요. 본문에 있는 내용도 거의 머;; @_@;;

  2. Favicon of https://slothink.tistory.com BlogIcon 편현장 2010.06.30 00:59 신고 PERM. MOD/DEL REPLY

    Projections.rowCount() 나, Projections.distinctCount() 도 좋지요. 보통 이런건 자주 쓰는거랑 하이버네이트 공통 클래스에다가 넣고 사용하곤 하는데, Code.class 에 대한 클래스 정의도 Dao 클래스에서 추상화시키면 더 간단해질거 같습니다. 그나저나, 하이버네이트 번역서 오늘 받아서 13장 패치 부분을 다 읽었는데 정말 좋군요. 감사합니다..^^

    Favicon of http://whiteship.me BlogIcon 기선 2010.06.30 06:54 PERM MOD/DEL

    rowCount()가 있었군요!
    GenericDao에 적용해볼 만한 내용이군요.
    감사합니다!!

Write a comment.


JUnit 4.8 카테고리 기능

모하니?/Coding : 2010.05.25 16:00


http://kentbeck.github.com/junit/doc/ReleaseNotes4.8.html

public interface FastTests { /* category marker */ }
public interface SlowTests { /* category marker */ }

public class A {
    @Test
    public void a() {
        fail();
    }

    @Category(SlowTests.class)
    @Test
    public void b() {
    }
}

@Category({SlowTests.class, FastTests.class})
public class B {
    @Test
    public void c() {

    }
}

@RunWith(Categories.class)
@IncludeCategory(SlowTests.class)
@SuiteClasses( { A.class, B.class }) // Note that Categories is a kind of Suite
public class SlowTestSuite {
  // Will run A.b and B.c, but not A.a
}

@RunWith(Categories.class)
@IncludeCategory(SlowTests.class)
@ExcludeCategory(FastTests.class)
@SuiteClasses( { A.class, B.class }) // Note that Categories is a kind of Suite
public class SlowTestSuite {
  // Will run A.b, but not A.a or B.c
}

1. A.a() 테스트: 아무것도 설정안함.
2. A.b() 테스트: SlowTest.class 카테고리로 지정함(애노테이션 참조)
3. B.c() 테스트: SlowTest.class과 FastTest.class 카테고리에 모두 해당함.( c() 메소드를 가지고 있는 클래스에 붙인 애노테이션 참조)

첫번째 SlowTestSuite 실행할 때는 SlowTest.class 카테고리를 포함시킴. 테스트 대상으로 A.class와 B.class에 있는 모든 테스트를 지정해줌.
=> 따라서 A와 B 클래스에 들어있는 테스트 1, 2, 3이 모두 테스트 대상이 되지만 그 중에서 SlowTest 카테고리에 해당하는 1번(A.b())과 3번(B.c())만 실행됨.

두번째 SlowTestSuite 실행할 때는 SlowTest.class 카테고리를 포함시키고 FastTests.class는 제외시킴.
=> 따라서 위 결과와 비슷하지만 FastTests.class 카테고리에도 들어갈 수 있는 3번이 제외됨.

벤댕이 그림을 그려서 보면 좋겠지만 귀찮아서..패스
top

TAG JUnit 4.8

Write a comment.


[결혼 1주년 기념] 유진&기선 결혼식 축하 공연 공개 1

모하니?/Watching : 2010.05.25 11:29


저희 결혼식은 대박이었습니다. 평생 기억에 남을만큼 톡창적이고 재미있고 멋지게 했습니다. 어느덧 벌써 그 결혼식이 1년이 지났네요. 그날을 멋지게 장식해준 분들의 축하 공연을 공개해봅니다.

blip.tv 버전


youtube 버전



두곳에 동일한 파일을 올렸는데.. bliip.tv가 더 보기 좋은것 같네요. 흠.. 유투브는 2GB, 10분 미만 동영상을 올릴 수 있으니 HD로 찍은 파일을 그대로 한번 올려봐야겠군요.

흠.. 다시보니 유투브도 볼만하군요. +_+.. 앞으로 10분 미만 동영상은 유투브에 올려야겠네요.

캬~~ 첫곡은 제가 신청한 종소리(라캄파렐라).
그 다음곡은 멘델스존 결혼행진곡이라네요

피아노는 역시 귀도 즐겁지만 날아다니는 손가락 보는 재미도 쏠쏠하다는..
top

  1. 세도 2010.05.26 12:43 PERM. MOD/DEL REPLY

    결혼 축하드려요~
    벌써 1주년이라니
    완전 행복하세요~

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2010.05.26 12:53 신고 PERM MOD/DEL

    감사합니다. :)

Write a comment.


선거 방법(?)좀 바꾸자

모하니?/Thinking : 2010.05.22 15:46


왜 선거는 진화되지 않는가. 그 동안 지긋지긋하게 해온 선거는 매번 비슷한 방법과 비슷한 수단으로 치뤄지고 있다. 고래고래 스피커 틀고 노래 부르고 춤추고 찌라시 같은 명함 나눠주면서 인사하고 악수 청하고 아주 난감해 죽겠다. 난 그런 사람들만 보면 이제 또 선거철이로구만.. 또 시끄럽겠구만.. 아 젠장. 도대체 뭐하는 사람들인지도 모르는데 내가 그 사람들을 일일히 조사해서 투표를 해야 하다니. 진짜 피곤한일 아닌가... 라는 생각을 한다. 

투표는 하고 싶다. 그런데 도대체 어떤 사람들인지 알아야 투표를 하지 맨날 시끄럽게 노래 틀고, 춤추고, 인사하고, 찌라시 나눠주는 사람들을 보면 대체 누굴 뽑아야 하는건지.. '그놈이 그놈이구만'이라는 생각밖에 안든다. @_@;; 변화가 필요하다.

일단 번호부터 없애자.

내가 직접 조사는 안해봤지만 기호 1, 2, 3번과 기호 5, 6, 7번의 당선 확률을 보사해보면 분명히 차이가 있을거다. 내가 정치학이나 사회학, 통계학을 전공하는 학생이었다면 이걸로 논문을 써봤을 것 같다. 순번을 매기는건 평등하지 않다. 기호 1번과 기호 7번에 내포되어 있는 의미가 아무것도 없다라고 할지라고 경험적, 심리적인 무언가가 작용하지 않는다고 볼 수 없다. 따라서 투표 용지에 무작위로 이름이 나열되어야한다. 투표를 하러 간 유권자라면 당연히 자신이 뽑으려는 사람 이름 정도는 알아볼테니 무작위로 나열해도 상관없고 모든 투표용지를 출력할 때마다 그 순서는 바뀌어야 한다. 물론 많이 뽑으면 동일한 순으로 나열된 투표지도 있겠지만 난 이렇게 하는게 더 공정하다고 생각한다.

소음 공해도 선거법 위반으로 하자.

제발 안그래도 혼잡한 시내에서 시끄럽게 차위에서 노래 틀고 춤추지 말자. 정신 사납고 시끄러워서 스트레스 받는다. 노래 부르고 춤춘다고 대단한 사람으로 보이지 않는다. 내가 알고 싶은건 그사람이 과거에 무슨 일을 했고 그걸 믿을 수 있는 증거와 앞으로 그사람이 하려는 일과 그 실현 가능성이다. 노래를 틀지말고 차라리 공약을 틀어라. 시끄러워 죽겠다. 전부다 선거법 위반으로 잡아넣고 후보에서 제외시켜 버린다음에 남은 사람들만 두고 투표하자. 시민들에게 불편을 주면서 까지 자기 노래 틀고 춤추는 사람이 시민을 위해서 무얼 해주겠는가?

찌라시는 그만 나눠주자.

명함이랍시고 뽑아온 종이가 무슨 찌라시만도 못하다. 안에 적혀있는 공약이라고는 "무상급식" 뿐이고 어느 학교를 나와서 어디 위원장으로 있는 것 밖에 모르겠다. 그게 그렇게 중요한가? 왜 다들 하나같이 "무상급식"을 내세우는 건지 모르겠다. 공약도 담합해서 정하는가? 내가 원하는 공약은 "환경미화"와 "시민 의식 개선"이다. 내가 머하러 "무상급식" 때문에 당신들을 찍어줘야 하는가... 그래서 버리는거다. 그래서 쓰레기가 되는거다. 돈들여서 찍는 종이에 제발 유익한 내용좀 넣어달라. 안그럴거면 좀 치워라. 선거철만 되면 길거리가 지져분하다. 찌라시 나눠주는 후보자는 그 동네 청소를 시켜라. 딱.. 아줌마들 시켜서 인사시키고 노래틀고 춤추게 한 시간만큼만 동네 청소좀 해달라.

젊은이에게 투표권을 2장씩 달라.

이 나라의 미래를 짊어진 사람은 젊은이들이다. 대중매체를 신처럼 모시고 사는 사람들이 많은 고령층에 비해 그나마 가장 깨어있는 연령층은 젊은이들이다. 접하는 매체부터가 다르다. 조/중/동/S/M/K 는 인터넷에 비하면 작은 점에 불과하다. 마주하는 매체 규모와 품질이 다르기 때문에 젊은이가 오히려 고령층에 비해 더 신선한 판단을 내릴 수 있다. 하지만 점점 더 심해지는 인구고령화로 인해 젊은이들의 투표권은 노년층의 투표에 묻히게 된다. 진정으로 젊은이를 나라의 미래로 생각한다면 젊은이들에게 투표권을 두장씩 달라. 아니면 노년층의 투표권을 박탈하라.

동사무소 가기 귀찮은 사람들과 거동이 불편한 사람들을 위해서 인터넷 투표도 좀 하고 생각하면 개선할 것들이 꽤 많을텐데 발전이 없다. 더이상 쓰기도 귀찮다.
top

TAG 선거
  1. 코바 2010.05.23 21:03 PERM. MOD/DEL REPLY

    다른건 공감하는데

    제일 마지막건 좀 위험한 발언 이시네요

    저도 요즘 보면 답답 하지만 20대가 투표 안하는걸 어떻하겠습니까

    다 자초 한거죠

    지금 추세 보면 정말 답답합니다만 마지막 발언 마큼은 좀 그렇네요

    Favicon of http://whiteship.me BlogIcon 기선 2010.05.23 21:18 PERM MOD/DEL

    저건 그냥 농담으로 생각해주시길;;

Write a comment.


토비님 책으로 스프링 3.0 강의합니다.

모하니?/Planning : 2010.05.20 18:58


http://www.hanbitedu.co.kr/incumbent/shortContent.do?index=1084

교재는 조만간 나올 토비님의 스프링 3.0 프로그래밍으로 합니다.
6월 19일부터 4주간 합니다. (6월 26일은 사정이 있어서 한번 건너 뛰구요.)

그전에 책이 나오지 않더라도 제가 미리 학습한 내용으로 교재나 PPT를 만들어서 진행할 계획이구요. 아마 스터디 끝나기 전까지는 책이 나오지 않을까 싶네요.

예전부터 강의는 하고 싶었지만 별로 기회도 없었고, 인맥을 부릴지도 몰라서 못하고 있었는데, 우연찮게 기회가 와서 덥썩 물었습니다. 이 책을 널리 전파하고 싶은 마음도 있고 이 책에 있는 내용을 쉽고 재미있게 이해할 수 있도록 돕고 싶습니다.

이번 강의를 위해서 꼭 스프링을 미리 알고 있어야 하는 것도 아니고 스프링 2.5를 학습하셨던 분이 아니어도 좋습니다. 기본적인 JDBC 코딩이나 서블릿&JSP를 코딩해본 경험이 있으신 분들이라면 누구나 들을 수 있도록 준비할 생각입니다.

처음엔 이 책에 있는 내용을 다 어떻게 전달할까 고민했었는데.. 인기 강사분(너굴아저씨?)에게 물어보니 강사가 전달하고 싶은걸 다 전달하려는건 욕심이고 전달하려는 내용중에 중요한 것 몇개만 쉽게 전달하는데 초점을 맞추라더군요. 그 조언에 따라 강의를 준비할 생각입니다. 창의적 교수법인가 하는 책도 있던데 그 책도 오늘 사볼거랍니다.

아무쪼록 최선을 다해 재밌고 유익한 강의를 준비하겠습니다.
top

  1. 김계옥 2010.05.24 11:02 PERM. MOD/DEL REPLY

    드디어 토비님 책이 나오는구나.. 거기에 강의까지...
    멋있어~~ 이 강의 정말 꼭 듣고싶다.. 회사님이 보내주심 참 좋을텐데... ^^

    Favicon of http://whiteship.me BlogIcon 기선 2010.05.24 11:06 PERM MOD/DEL

    안면이 있는 분들도 참석하신다면 맘이 한결 편하겠어요.
    내심 떨고 있답니다.

  2. 허웅 2010.06.07 21:43 PERM. MOD/DEL REPLY

    이번 회 말고... 다음번 강의 계획이 있는지 알고 싶습니다.

    Favicon of http://whiteship.me BlogIcon 기선 2010.06.08 08:03 PERM MOD/DEL

    논스탑으로 계속하고 싶긴 한데.. 아마 이번 강의 끝나고 한주 쉬고 바로 시작할 것 같기도 합니다. 근데 정확하진 않아요. 아직 계약된 건 아닌지라...

    나중에 일정이 잡히면 다시 알려드릴께요.

Write a comment.


일상에 회의감이 드는 순간...

모하니?/Thinking : 2010.05.18 22:22


오히려 잘 됐다.
이것을 변화의 기회로 삼아야겠다.

그동안 내 모든 열정과 애정을 쏟았던 것에 갑자기 회의감이 들었다.
안좋은 신호이기도 하고 좋은 신호이기도 하다.

이 회의감을 해결할 실마리를 찾아서 잠시 시간을 가져야겠다.
그동안 미친듯이 했으니 이 정도 시간은 이해해 줄 수 있겠지...

그렇치 봄싹?
top

  1. Favicon of http://lckymn.com BlogIcon Kevin 2010.05.18 23:35 PERM. MOD/DEL REPLY

    저처럼 25,6년 정도 놀기만 하시면, 뭔가 하고 싶어 미칠것 같아집니...ㅡ_ㅡ;;;

    Favicon of http://whiteship.me BlogIcon 기선 2010.05.19 11:58 PERM MOD/DEL

    헉;; 전혀 노신것 같지 않으신데요. @_@

  2. Favicon of http://okjsp.tistory.com BlogIcon kenu 2010.05.18 23:44 PERM. MOD/DEL REPLY

    정 반 합 원리에 의하면 좋은 기회일거예요.
    3인칭 시점에서 자신이 하고 있는 것들을 돌아볼 수 있는 좋은 기회죠.
    ^^ 그리고 좀 쉬어요.
    가족과 여행이라도. ^^

    Favicon of http://whiteship.me BlogIcon 기선 2010.05.19 11:59 PERM MOD/DEL

    넵.. 휴식은 평소에도 충분히 취하고 있어서 괜찮습니다.
    저만큼 많이 자는 개발자도 없을껄요.ㅋㅋ

  3. Favicon of http://helols.pe.kr BlogIcon isyoon 2010.05.19 00:37 PERM. MOD/DEL REPLY

    ㅎㅎㅎ그동안 열심히 달렸으니 좀 쉬어요~ 사람이 좀 쉬어야지요^^ 지치면 쓰러지기 마련이니!!!

    Favicon of http://whiteship.me BlogIcon 기선 2010.05.19 11:30 PERM MOD/DEL

    누가 지쳤는데?

    난 지쳐서 쉬는게 아니야..

    Favicon of http://helols.pe.kr BlogIcon isyoon 2010.05.19 13:22 PERM MOD/DEL

    아네;;;;

  4. Favicon of http://starplatina.tistroy.com BlogIcon june 2010.05.19 09:05 PERM. MOD/DEL REPLY

    안되요. 덥썩. ㅋ

    Favicon of http://whiteship.me BlogIcon 기선 2010.05.19 12:00 PERM MOD/DEL

    코딩은 계속 할테니 걱정마세요.ㅋ

  5. 머큐짱 2010.05.20 11:41 PERM. MOD/DEL REPLY

    같이 또 식사한번 해야겠군요..ㅎㅎ

    저도 정답은 모르지만, 이런저런 실마리들을 던져드릴 순 있을거 같아요..ㅎㅎ

    사람이 가끔은,, 머리도 식히고,, 방황도 하고 그래야지요..ㅋㅋ

    너무 완벽해도 못써요~~

Write a comment.


'소로우의 노래'를 읽다가

모하니?/Thinking : 2010.05.12 09:50


어제 저녁 다른 사람들이 나를 어떻게 생각하는지 알수 있는 이야기를 들었다. 나도 대충은 어떤 이야기 인지는 알고 있었고 올해 초 개인적으로도 많이 고민했던 내용이라 쉽게 짐작할 수 있었다. 많이 단순화 시켜 이야기하자면 규모가 좀 있는 직장으로 옮기는것이 좋치 않겠냐는 것이었다. 단체 생활도 해봐야지 않겠냐는.. 

그럴 때마다 나는 이야기했다. 어차피 다 장단점이 있고 나는 여기를 선택했노라고.. (구체적으로 이야기 하자면 너무 길어지고 지금은 그럴 시간도 그러고 싶은 맘도 별로 없다;)

지금 회사에 계속 있으면 안 좋은점은 위에서 지적한 것처럼 단체 생활 경험이다. 흔히 대한민국 SI라고 하는 것일텐데 내가 그런 경험이 없다는 것에 대해서 처음엔 부끄러웠다. 하지만 요즘은 생각이 바꼈다. 요즘 아이폰 열풍을 느끼고 있다. 이제 조금더 지나면 아이폰 개발도 안해봤냐고 부끄러워질 수 있겠다는 생각이 들었다. 그러면서 생각이 바꼈다. 대중적인 경험이러는 것이 그렇게 중요하고 내가 그런 경험이 없다고 해서 부끄러워해야 지당한 것인가? 그게 자연스러운 것인가에 대한 의문이 생겼다.

현재 나는 적어도 남에게 부끄럽지 않을정도 만큼은 성실하게 살고 있다. 난 그것만으로도 누군가에게 그 사람이 경험한 것을 경험해보지 못했다고 해서 부끄러워야할 이유가 없다고 생각한다. 또 반대로 내가 경험하고 학습한 것을 기준으로 다른 사람을 판단하는 것이 얼마나 어리석은가 하는 것도 알게 되었다.

이런 생각을 단 몇줄의 깔끔한 문장으로 정리한 사람이 있었다. 헨리 데이빗 소로우의 글귀를 모아둔 '소로우의 노래'에 다음과 같은 글귀가 있다.
아무리 좁고 꼬불꼬불하다 하더라도 그 길이 그대가 애착과 경애심을 갖고 있는 길이라면 추구해 나가라. 비록 큰길 위에 서 있는 여행자라 할지라도, 그가 볼 수 있는 것은 울타리 사이로 난 좁고 험한 길일 뿐... 사람이란 결국은 자신만의 좁은 길을 가는 것이다.
41페이지와 42페이지에 걸쳐 나오는 장문은 차마 옮겨적지 못하겠는데 그것 역시 아주 맘에 드는 문장이다.

오래전에 나온 책이라 절판됐을 가능성이 높다. 
아내가 책장에서 골라준 책이다. 쌩큐 알라뷰/


top

  1. Favicon of https://dazzilove2.tistory.com BlogIcon dazzi 2010.05.12 22:15 신고 PERM. MOD/DEL REPLY

    맞는 말씀 ^^* 소신껏 자신의 길을 가는거죠~~~~~
    노력만큼 행운도 함께하길 빌어요. ^^!!!!!!

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2010.05.13 09:03 신고 PERM MOD/DEL

    넵 감사합니다.

  2. Favicon of http://moova.tistory.com BlogIcon moova 2010.05.14 10:22 PERM. MOD/DEL REPLY

    오랜만이네요. 기선군.
    추천할 책이 하나 있어요....경험은 중요한 것이죠. 하지만 자신의 경험을 남의 경험과 빗대어서 비교하는 건 안되는 일이죠. 누가 기선군한테 si경험이 없다고 해서 나무란 사람이 있었나요?? 아니면 무시한 사림이 있었나요? 왜 그런 생각을 갖고 있는지 잘 모르겠지만.. 무소의 뿔처럼 혼자서 가라라는 말이 생각나게 된 포스팅이라 댓글 달고 지나갑니다.

    [행복의 조건]
    http://www.yes24.com/24/goods/3671088?scode=032&srank=1
    많은 도움 되었으니 참고했으면 합니다..^^

    Favicon of http://whiteship.me BlogIcon 기선 2010.05.14 11:03 PERM MOD/DEL

    앗 오랜만에 뵙네요.ㅎㅎ잘 계시죠?

    무시하거나 나무람 보다는 걱정하는 마음으로 느껴지더라구요. 절반은 제 스스로 만든 부끄러움이기도 하구요. 별 일 아니랍니다.

    낯익은 제목인데 읽어보진 않았네요. 저는 이미 행복하기 때문에 그 이상을 원해요.

Write a comment.


인텔리J에서 스칼라 시작하기

모하니?/Coding : 2010.05.11 16:18


1. 플러그인 설치

생략

2. 자바 플젝 + scala 만들기

일반 자바 플젝 만들다 다음 화면에서 scala 체크! 하면 라이브러리 다운받음.


3. HelloWorld

http://www.scala-lang.org/node/166

new -> Scala Class

object HelloWorld {
  def main(args: Array[String]) {
    println("Hello World")
  }
}

4. 스칼라 콘솔 띄우기


+ -> Scala console 선택, 이름 적당히 변경 후 실행.


top

  1. Favicon of http://blog.outsider.ne.kr BlogIcon Outsider 2010.05.11 16:37 PERM. MOD/DEL REPLY

    앗... 어제 포스팅쓰다가 win7에서 오류나서 그냥 잤는데.. ㅋ

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2010.05.11 17:55 신고 PERM MOD/DEL

    ㅋㅋ윈도7에선 머가 잘 안되요?

    Favicon of http://blog.outsider.ne.kr BlogIcon Outsider 2010.05.11 20:06 PERM MOD/DEL

    그룹스에 올리긴 했는데 경로에 괄호가 있으면 오류남... 64bit에서는 Program files에 괄호가 생겨서 ㅠㅠ

    Favicon of http://whiteship.me BlogIcon 기선 2010.05.11 23:27 PERM MOD/DEL

    저도 보긴 했는데;; 경로를 어디서 사용해요? 환경변수 등록할때?

    Favicon of http://blog.outsider.ne.kr BlogIcon Outsider 2010.05.12 00:13 PERM MOD/DEL

    ㅇㅇ 환경변수 등록해서 콘솔에서 명령어 사용할때 오류나옴.. ㅎ

    Favicon of http://whiteship.me BlogIcon 기선 2010.05.12 06:28 PERM MOD/DEL

    글쿤요; 전 환경변수도 등록안하고 그냥 인텔리에서만 해봤네요.

  2. Brad 2012.12.19 11:21 PERM. MOD/DEL REPLY

    안녕하세요 포스팅 잘 읽었습니다.
    궁금한게 있는데요
    컴파일까진 가능하게 되었는데 ;
    콘솔을 직접 입력하는 방식으로 변경하질 못하겠네요...
    조언좀 부탁드립니다..!(연습 하려구요..!)

    brad.jang.gbc@gmail.com

Write a comment.


블로깅 계획

모하니?/Planning : 2010.05.06 22:01


몇일 전에 이사를 했는데 이만 저만 힘든게 아니더군요. @_@ 여러 가지 일이 있어서 이사를 하게 됐는데 이번 기회에 많은걸 느꼈습니다. 안그래도 요즘 공부가 손에 안잡혀서 심난했는데 심리적으로나 신체적으로 정말 슬럼프의 바닥을 찍었던것 같습니다. 오랜만에 쓰는 블로그에서 주저리 주저리 생활고를 풀어내기는 싫고 앞으로 블로그에서 정리할 것들만 계획을 세워봅니다.

0. 스프링 학습

그날그날 학습한 것들에 대한 소감만 남겨보자.

1. 스프링 레시피 번역

학습이 끝나면 레시피 번역에 다시 열을 오리자.

2. 회사 뉴 플젝

플젝 진행 과정을 모두다 블로깅 해버릴까 생각 중.

3. ASM

클래스 읽기, 쓰기는 했고 이제 변형 할 차례.

4. 플렉스

봄싹 데탑용 프로그램을 만들어보자.

5. 아이폰

스탠포드 강좌 듣고 실습 결과 블로깅.
회사 애플 만들기.



top

Write a comment.


봄싹 관련 사이트 정리



봄싹 홈페이지: http://springsprout.org
봄싹 그룹스: http://groups.google.co.kr/group/springsprout?hl=ko
봄싹 이슈트래커: http://jira.springsprout.org/browse/SSD
봄싹 위키: http://wiki.springsprout.org
봄싹 코드: http://code.springsprout.org/browse/SpringSprout

이밖에도 몇개 더 있지만... 점점 취미활동 범위를 넘어서는 것 같다...
아니 어쩌면 이미 진작에 넘었는지도 모르겠다...
top

TAG 봄싹

Write a comment.


[봄싹 코딩] DAO 테스트 만들기





지난 KSUG 세미나 때 깜빡하고 못보여드린 내용을 찍었습니다.
외국 서버라 많이 느리네요. ㅠ.ㅠ 일시정지를 눌러두셨다가 한참뒤에 보시기 바랍니다. 흑흑..

국내에도 깔끔하게 광고 없고, ActiveX 설치하지 않아도 되면서, 고화질, 고용량, 장시간 동영상 서비스 좀 제공해주는 곳이 있으면 좋겠습니다.

blip.tv는 다 좋은데 외쿡 서버라 느린다는것만 빼면 정말 완벽합니다.

다운받기
top

  1. Favicon of http://cherrykyun.tistory.com BlogIcon cherrykyun 2010.04.25 20:52 PERM. MOD/DEL REPLY

    잘봤습니다. :) 좋은 동영상 감사합니다.

    Favicon of http://whiteship.me BlogIcon 기선 2010.04.26 13:57 PERM MOD/DEL

    감사합니다. 귀찮아서 안찍으려다가 마침 DAO 테스트도 작성해야되고 스크린캐스팅 찍어본지가 너무 오래되서 해봤습니다.

  2. Favicon of http://helols.pe.kr BlogIcon is윤군 2010.04.26 14:26 PERM. MOD/DEL REPLY

    ㅋ 간만에 올렸네요 ;;ㅎㅎ

    배경 음악 죽인다는;;; ㅎㅎ

    Favicon of http://whiteship.me BlogIcon 기선 2010.04.26 14:56 PERM MOD/DEL

    배경음악이 내 목소리보다 좋거던.. 사실 뭐 설명이 필요해야지 ㅋ

Write a comment.


[KSUG] 10회 스프링 세미나 발표자료




발표를 너무 오랜만에 해서 그런지 너무 못한것 같아요. @_@;; 계획했던 내용도 다 전달하지 못하고 그냥 소녀시대 가지고 장난 친것 밖에 기억나지 않으시는 분들이 많을까봐 걱정이로군요.

원래 계획으로는 조금 전에 올렸던 테스트 관련 내용이 더 있었는데 '장표'에 적어놓지 않았더니 까먹었지 머에요;; 구차한 변명이라면;; 그전날 수도공사 때문에 발표준비를 하나도 못했답니다. 그 전날까지 머릿속에만 담아놨던걸 옮기지 못한거죠. 그렇게 까먹고 있다가 뒤풀이 갈 때 생각이 나더군요. ㅋㅋ

DBUnit을 사용한 DAO 테스트, mocking을 사용한 서비스 테스트, 서비스 통합 테스트, 도메인 모델 테스트 덩덩도 이야기 했었어야 하는데;;; 흑.. 다음 기회에... 

다음에는 좀 더 잘.. 하겠습니다.
top

  1. 장난ㅡㅍ-)/ 2010.04.20 21:51 PERM. MOD/DEL REPLY

    제가 볼떄는 그 앞에서 시간을 너무 많이 잡아먹었어요

    일단 준비자체는 구상도 좋으셧구여 스칼라보다 잼썻어요.

    Favicon of http://whiteship.me BlogIcon 기선 2010.04.21 07:34 PERM MOD/DEL

    마지막 5분 남았을 때 그 시간에 후다닥 보여드릴 수도 있었는데 제탓이랍니다. OTL

Write a comment.


서비스 계층의 비즈니스 로직을 도메인으로 옮기자

모하니?/Coding : 2010.04.20 14:06


@RunWith(MockitoJUnitRunner.class) public class StudyServiceImplTest { StudyServiceImpl service; @Mock SecurityService securityService; @Mock StudyRepositoryImpl repository; @Mock UnifiedNotificationService notiService; @Mock MemberRepository memberRepository; @Before public void setUp() throws Exception { service = new StudyServiceImpl(); service.securityService = securityService; service.repository = repository; service.notiService = notiService; service.memberRepository = memberRepository; }

....

@Test
public void addCurrentMember() throws Exception {
Study study = new Study();
study.setMaximum(2);
Member currentMember = new Member();

// check add 1
when(securityService.getPersistentMember()).thenReturn(currentMember);
service.addCurrentMember(study);
checkStudyAndMemberSize(study, 1, currentMember, 1);
// check duplicated member add
service.addCurrentMember(study);
checkStudyAndMemberSize(study, 1, currentMember, 1);
// check add 2
currentMember = new Member("keesun@email.com");
when(securityService.getPersistentMember()).thenReturn(currentMember);
service.addCurrentMember(study);
checkStudyAndMemberSize(study, 2, currentMember, 1);

// check add over limit error!!
        try {
            service.addCurrentMember(study);
            fail();
        } catch(StudyMaximumOverException e) {

        }
checkStudyAndMemberSize(study, 2, currentMember, 1);

        //TODO NO_LIMIT_MEMBER_COUNT test
}

봄싹에 있는 코드입니다. 코드가 좀.. 거시기 합니다. mockito를 사용해서 테스트 했는데 사실 mockito를 잘 모르고 mock 테스트에 대해서도 잘 모르는 상태에서 저런 테스트를 이해하기는 힘듭니다.

문제의 원인은 뭘까요?

1. 테스트 코드가 지저분해서..
2. 로직이 서비스에 있느니까..

1번이라고 생각하셔도 별로 할 말은 없습니다. ㅋㅋㅋ 저는 2번이라고 주장하고 싶습니다. 서비스 계층에 비즈니스 로직이 들어가면 어쩔 수 없어요. 목킹을 해서 저렇게 단위테스트를 하던, 느려터진 통합 테스트를 하면 되는데.. 사실 해결책이 있는 경우가 많습니다.

비즈니스 로직을 도메인 클래스로 옮겨주는거죠.

public void addCurrentMember(Study study) {
study.addMember(securityService.getCurrentUser());
}

StudyService에 있던 코드입니다. 이렇게 서비스 계층에서 도메인 계층으로 로직을 모두 옮겼는데 서비스 계층의 테스트가 필요할까요?? 무엇을 테스트할까요? study의 addMember를 호출하는지? seurityService. .getCurrentUser()를 호출하는지? 그 결과는 잘 오는지? 글쎄요.. 호출하면 당연히 호출하겠죠; 머하러 그런걸 테스트할까요. 화이트박스 테스트인지, 행위 기반 테스트인지를 할 때는 필요할지도 모르겠지만 저는 별로 그러고 싶지 않습니다. (구현 세부 사항을 일일히 확인하느니 그냥 그 시간에 코딩을 하는게;;)

그래서 제 나름대로 내린 결론은 저런 코드는 테스트할 필요가 없다는 겁니다. 당연히 잘 호출하겠죠. 물론 예외는 있습니다.

- 트랜잭션 테스트
- 메서드 보안 테스트

이 녀석들은 서비스 계층의 역할로 할당했는데 이런것들은 스터디 통합 테스트에서 하는게 적절합니다. 이번 글에서 다루고자 하는 주제와는 거리가 있으니 다음으로 미루겠습니다.

그럼 위의 테스트를 지우면 끝일까요? 

아니죠. 테스트 위치가 바뀌어야 합니다. 도메인으로 비즈니스 로직이 옮겨갔으니 도메인 클래스를 테스트해야죠.

    @Test
    public void addMember(){
        Study study = new Study();
        Member member = new Member();

        study.addMember(member);

        assertThat(study.getCurrentMembers().size(), is(1));
        assertThat(member.getStudies().size(), is(1));
    }


    @Test(expected = StudyMaximumOverException.class)
    public void addMemberException(){
        Study study = new Study();
        study.setMaximum(1);

        Member member = new Member();

        study.addMember(member);

        assertThat(study.getCurrentMembers().size(), is(1));
        assertThat(member.getStudies().size(), is(1));
        
        study.addMember(new Member());
    }

그렇게 옮겨간 테스트가 이렇습니다. 모든 경우를 다 옮기진 않았지만 요렇습니다. 서비스에서 테스트 할 때 보다 훨씬 간결하기 때문에 테스트 작성도 쉽고 이해하기도 쉽습니다. 그쵸?? 아님 말구요.ㅋㅋ

사실 이 부분을 KSUG 발표 때 보여드렸어야 하는데;; 소녀시대 때문에 깜빡했어요.
top

Write a comment.


[Econovation Fair] 아이폰 앱 아이디어 & 개발 대회



http://www.econovation.co.kr/HTML/MAIN/introduce.asp

어익후.. 상금과 상품이 아주 빵빵합니다.

거기다 아이디어나 개발한 애플에 대한 권리도 뻇지 않는 것 같아요.

보통 저런거 해서 아이디어나 개발한거 다 가져가던데.. 이번 건 뭔가 다르네요. 캬~~

좋은 아이디어와 애플들이 많이 나올것 같아서 기대됩니다. +_+
top

TAG KT

Write a comment.


지난 주 일요일 안면도 대하




크니까 머리도 먹어야 한다고 구워 주시는...


깨끗하게..


몸통 다 먹고~


머리까지.. 새우 머리 까는 법도 익히고.. 맛나게 냠냠..
top

  1. 까오기 2010.04.13 14:52 PERM. MOD/DEL REPLY

    새우는 역시나 튀김이 젤로 맛있는듯 합니다. ^^

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2010.04.13 15:46 신고 PERM MOD/DEL

    네 튀김도 맛있지요~

Write a comment.


[주말 코딩] 봄싹 위키

모하니?/Coding : 2010.04.04 22:51



왼쪽에는 모든 위키 목록, 오른쪽에는 최근 작업한 페이지 목록.. 각 목록의 이미지를 클릭하면 하단에 설명 부분이 열립니다. 페이지 목록에서는 미리 보기 형태로 페이지를 보여주는데;; 디자인이 좀 깨지기 때문에 직접 가서 보는게 좋겠습니다. 해당 위키나 페이지로 이동하려면 이미지가 아니라 제목 주변을 클릭하시면 됩니다.

자바 코딩하는 데는 1시간도 안걸렸는데 화면 설계하고 코딩하는데 3시간 걸리네요. @_@;; 이렇게 보여줄까 저렇게 보여줄까? 이게 보기 편할까? 저게 보기 편할까? JQuery에 toggle을 어떻게 쓰더라. 옵션이 머지. accodoan을 써볼까 어쩔까.. 덩덩덩...

위키 목록은 Confluence REST API를 호출하여 가져오고, 최근 글 목록은 Confluence에서 최근 30일 내에 글 10개를 가져오도록 만들어 둔 Atom Feed를 사용해서 가져옵니다. 매번 요청할 때 마다 두 URL로 요청/파싱을 해서 그런지 느립니다. @_@;

내부 구현을 DAO를 사용하도록 바꾸는 작업은 KSUG에서 발표 할 때 해볼까 합니다.
1. 각 목록에 새로고침 버튼 추가.
2. 해당 버튼은 "관리자" 권한이 있는 사용자만 보이고 사용할 수 있음.
3. 새로고침을 누르면 WikiSpace와 WikiPage DB를 모두 비우고 새 데이터를 추가.
4. 위키 페이지 보여줌.
5. '일반' 사용자가 위키 페이지를 클릭하면 DB에 저장되어 있는 데이터를 가져옴.

이렇게 하면 아마 스프링 시큐리티, 스프링 MVC, 하이버네이트 코딩까지도 보여드릴 수 있을것 같습니다.
Comming Soon!
top

  1. Miracle 2010.04.05 16:02 PERM. MOD/DEL REPLY

    Wiki 정보를 굳이 DBMS로 관리해야할 자료인지 한번 생각해 봐야할것 같음.. ^^

    Favicon of http://whiteship.me BlogIcon 기선 2010.04.05 22:00 PERM MOD/DEL

    생각해봤는데요. 위에서 언급한 성능 문제나, 봄싹 위키 미가입자인 봄싹 가입자를 위한 서비스(즐겨찾기, 뷰 count, 비/추천 덩덩)를 생각하면 DB로 관리해야 될 것 같더라구요.

    Miracle 2010.04.06 12:04 PERM MOD/DEL

    현재 컨플런스에서 가공해준 데이터를 봄싹에서 가공해서 보여주는 방식이기 때문에 성능 문제는 캐싱 처리해서 해결 가능해보이고, 봄싹 가입자를 위한 서비스인 즐겨찾기 같은 기능은 위키 데이터와 별개로 보임. 즐겨찾기 기능은 전체 URL를 저장하는 걸로 구현해야할 듯~~

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2010.04.06 14:15 신고 PERM MOD/DEL

    글쿤요. 캐싱도 좋고 즐겨찾기 구현방식도 URL을 기준으로 하는게 일괄적으로 적용할 수 있어서 좋아보이네요.

    그런데 캐시를 위키 상태에 따라 계속 변경하는 거라차리면 만약 컨플루언스가 죽으면 위키 페이지도 같이 '멍'해지는 거죠?? DB에 저장해뒀으면 그냥 위키 페이지는 살아있고, 가장 최근 목록도 보여주면서, 이동하려고 했을 떄 "컨플루언스가 점검중"이라는 메시지만 띄울 수 있을텐데 말이죠.

    즐겨찾기 정보야 어떻게 관리하던, 해당 위키 스페이스나 페이지에 대한 관심과 호/불호 정보를 관리하려면 역시 DB에 넣는게 편하지 않을까요.. 흠..

    Miracle 2010.04.06 15:44 PERM MOD/DEL

    정보제공자(컨플)이 죽었는데.. 위키 페이지의 목록을 뿌려주는게 의미가 있을려나? ^^

    컨플 접속 불가능시 "컨플에 문제 발생"이라는 문구를 위키 페이지에 보여주는게 사용자의 클릭수를 줄일 수 있어 보임. 괜히 클릭했는데 점검중 나오는거 보다야 나을것 같구.

    다시 읽은 후에 추천/비추천은 어떻게 관리할 생각인지? 봄싹 페이지는 전체 자료를 가지고 있는게 아니라 컨플이 가지고 있는 페이지의 일부만 가지고 있으니, 추천/비추천한 자료의 신뢰성이 떨어지지 않을려나~~ ^^

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2010.04.06 16:57 신고 PERM MOD/DEL

    위키 공간 목록과 최신 글 목록을 보여주는게 아무것도 안 뜨는 것보다는 안정적이죠. 최신 글 목록에서 toggle로 글 내용도 볼 수 있으니 위키가 죽어있는 동안은 toggle로 만족할 수도 있을 겁니다.

    추천/비추천의 신뢰도라;; 아직 서비스를 완벽하게 구상한게 아닌데 이렇게 집요하게 나오시다니 당황스럽군요,

    추천/비추천, 즐겨찾기 덩덩의 서비스는 DB에 저장해 놨을 때 그 정보를 가지고 응용하는 서비스를 만들기 편할 것 같다는 예로 든 것일 뿐입니다.

    트위터를 보면.. 트위터 REST API를 사용해서 만든 수 많은 트위터 응용 사이트 들은 트위터 정보를 DB에 저장하지 않고 캐싱만 할까요? 그리고 트위터가 죽으면 그 사이트들도 전부 죽어야 되는건가요? 자기들만의 방어기제를 만들어 두는게 의미없는 짓인가요?

    저는 컨플루언스에 쌓이는 정보에 더 유용한 서비스를 붙여서 봄싹 위키에 보여줄 요량으로 그 정보들을 DB에 저장하려는 겁니다. 그러는 편이 매번 REST 요청/응답 파싱 Feed 요청/응답 파싱하는 것 보다 빠를 것 같고 응용 서비스 만들기도 편할 것 같기 떄문이죠.

    지금 당장 그런 서비스가 마땅치 않다고해서 DB를 쓰지말고 캐싱을 써야하는 건 아니지 않을까요. 캐싱으로 처리하는게 DB로 처리하는 것보다 간단했다면 모를까 저한테는 캐시 공유, 업데이트. 제거 전략을 고민하느니 DB를 사용하는게 쉽고 앞으로 만들 서비스를 생각했을 때도 데이터를 영속화하는 편이 좋아보입니다.

    흠 그래도 형은 나름대로 DB보다 캐싱을 써야하는 이유가 있어서 DB 사용을 반박하고 캐싱을 권하시는 것 같은데. 그 이유는 잘 짐작이 되지 않습니다.

    어떻게 하면 캐싱을 써서 컨플루언스 정보를 봄싹 위키와 연계하여 활성화 하고 발전 시킬 수 있을지 말씀해주시죠.

    Miracle 2010.04.07 20:13 PERM MOD/DEL

    3. 새로고침을 누르면 WikiSpace와 WikiPage DB를 모두 비우고 새 데이터를 추가.

    여기서 DB를 모두 비우게 되면, 자료를 DB로 저장할 필요가 없어 보인다는거지. 그리고 모두 비우기 때문에 캐쉬하는 방법도 완전히 지우고, 새로운 데이터로 채워 넣으면 그만이겠구.

    만일에 Wiki 목록을 계속 저장해두고, 활용할 서비스를 제공하겠다는 생각이 있으면, DB에 저장하면 되는거구.

    Favicon of http://whiteship.me BlogIcon 기선 2010.04.07 21:17 PERM MOD/DEL

    아. 그렇군요. 그 부분 때문에 휘발성 데이터를 영속화 시스템을 이용한다니까 이상하게 여기신거군요.

    생각해보니 그렇네요. 날리면 안되겠어요. ㅋㅋ

    Miracle 2010.04.07 22:48 PERM MOD/DEL

    영속화 시킬때는 중복 데이터가 들어가는 걸 막을 수 있게 PK 설정을 잘해야 할것 같음.

    Wiki가 그렇게 활발하게 업데이트되지 않을테니까..

    Favicon of http://whiteship.me BlogIcon 기선 2010.04.08 10:03 PERM MOD/DEL

    넹 페이지마다 키값이 있을꺼에요. URL에 있을텐데.. 흠냐.
    위키는 키값이 JSON으로 넘어오니까 괜찮구요.

Write a comment.


[JSON in Java] JSON에서 필요한 데이터 뽑기

모하니?/Coding : 2010.04.01 15:26


참조: 
http://www.json.org/java/
http://decoder.tistory.com/38

예전에는 JSON.simple 이라는 프로젝트였나본데, 소스 코드를 묶어서 주네요. 의존성도 없고 깔끔하군요. 최근까지도 계속 업데이트를 하고 있는 것 같으니 믿고 써볼만 해 보입니다.

몇일 전 Confluence 위키 내용을 RestTemplate을 이용해서 가져온 적이 있는데, 그 데이터 타입을 XML로 받을까 JSON으로 받을까 고민했었는데 그냥 JSON으로 받기로 했습니다. XML 받아서 OXM으로 파싱해도 되는데 일단 전송되는 텍스트량이 XML은 너무 많고 JSON은 꽤 간결하기 떄문입니다. 그 뒤에 객체로 변환하는 과정이 둘 중에 어떤게 편하냐를 가지고도 판단해보려고 했는데 OXM 써보기도 전에 JSON으로 기울태세 입니다.

        RequestCallback callback = new SpringSproutDefaultRestRequestCallBack();
        ResponseExtractor<String> extractor = new SpringSproutJsonRestResponseExtractor();

        RestTemplate restTemplate = new RestTemplate();
        String result = restTemplate.execute(SPACE_LIST_URL, HttpMethod.GET, callback, extractor);
        System.out.println(result);

        // ref: http://decoder.tistory.com/38
        JSONObject spaceListJSON = new JSONObject(result);
        JSONArray spaceJSONArray = spaceListJSON.getJSONArray("space");
        for(int i = 0 ; i < spaceJSONArray.length() ; i++){
            JSONObject spaceJSON = spaceJSONArray.getJSONObject(i);
            System.out.println(spaceJSON.getString("name"));
            System.out.println(spaceJSON.getString("key"));
            System.out.println(spaceJSON.getString("description"));
        }

캬.... 간단하군요. 이제 저 코드를 Extractor 쪽으로 옮겨서 RestTemplate 호출할 때 자동으로 ConfluenceSpace 컬렉션 객체가 튀어나오도록 해봐야겠습니다.

top

Write a comment.


KSUG 제10회 한국 스프링 사용자 모임 세미나





저도 발표자로 참석합니다.
봄싹에서 사용한 스프링 코드를 보여드릴 예정입니다.
설명만 하면 지겨우실테니,  스프링을 사용하여 어떤 간단한 서비스를 구현하는 모습도 보여드릴까 합니다.
많이 참석해 주세요~
top

  1. 송목 2010.03.31 09:07 PERM. MOD/DEL REPLY

    저두 우선 신청했는데 대기자네요. 토욜 출근할 것 같아 오전만하고 듣고 왔으면 합니다. 근데 저같은 초보도 잘 소화할 수 있을지 모르겠네요 ^^;

    Favicon of http://whiteship.me BlogIcon 기선 2010.03.31 10:19 PERM MOD/DEL

    듣다가 모르시는게 있으시면 질문하세요. 발표자 분들이 좋아하실꺼에요.

  2. 송목 2010.03.31 14:15 PERM. MOD/DEL REPLY

    읏 안됩니다ㅜㅜ 제가 하는 질문은 세미나 질을 떨어뜨려요 흑

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2010.03.31 18:17 신고 PERM MOD/DEL

    그럴리가요ㅋ
    세미나 때 뵈요~

Write a comment.


[Spring 3.0 & Atlassian] RestTemplate으로 Confluence의 Space 목록 가져오기

모하니?/Coding : 2010.03.26 00:51


public class ConfluenceRestTest {

    public static final String SPACE_LIST_URL = "http://dev.springsprout.org/wiki/rest/prototype/1/space?os_authType=basic";

    /**
     */
    @Test
    public void testGetWikiSpaceList() {
        RestTemplate restTemplate = new RestTemplate();
        String result = restTemplate.execute(SPACE_LIST_URL, HttpMethod.GET,
                new JsonRestRequestCallBack(),
                new BodyToStringRestResponseExtractor());
        System.out.println(result);
    }

    static class JsonRestRequestCallBack implements RequestCallback {
        public void doWithRequest(ClientHttpRequest clientHttpRequest) throws IOException {
            HttpHeaders headers = clientHttpRequest.getHeaders();
            headers.add("Authorization", "Basic XXXXXXXX(base64 encoded username:passwd)");
            headers.add("Accept", "application/json");
        }
    }

    static class BodyToStringRestResponseExtractor implements ResponseExtractor<String> {

        public String extractData(ClientHttpResponse clientHttpResponse) throws IOException {
            return convertStreamToString(clientHttpResponse.getBody());
        }
        ....
    }

}

봄싹 위키를 컨플루언스로 바꾸었기 때문에 기존 메뉴를 컨플루언스에 있는 정보를 끌어다 보여주는 것으로 바꾸려고 합니다. 그래서 파일럿(?) 겸사해서 코딩을 해봤는데 잘 됐네요.

{"expand":"space","space":[{"name":"개발툴","key":"DTL","link":{"rel":"self","href":"http://dev.springsprout.org/wiki/rest/prototype/1/space/DTL"},"description":"개발툴 관련 내용을 정리하는 공간입니다."},{"name":"베타리딩","key":"BTR","link":{"rel":"self","href":"http://dev.springsprout.org/wiki/rest/prototype/1/space/BTR"},"description":"봄싹 베타리딩 관련 공간입니다."},{"name":"봄싹 Modules","key":"BSM","link":{"rel":"self","href":"http://dev.springsprout.org/wiki/rest/prototype/1/space/BSM"},"description":"봄싹 Module과 관련된 정보를 정리하는 공간입니다."},{"name":"봄싹 개발","key":"SSD","link":{"rel":"self","href":"http://dev.springsprout.org/wiki/rest/prototype/1/space/SSD"},"description":"봄싹에서 진행하는 개발과 관련된 정보를 정리하는 공간입니다."},{"name":"스프링 3.0 레퍼런스 번역","key":"SRK","link":{"rel":"self","href":"http://dev.springsprout.org/wiki/rest/prototype/1/space/SRK"},"description":"스프링 3.0 레퍼런스를 번역하는 공간입니다."},{"name":"스프링 시큐리티 3.0 레퍼런스 번역","key":"springsecurity","link":{"rel":"self","href":"http://dev.springsprout.org/wiki/rest/prototype/1/space/springsecurity"},"description":""},{"name":"스프링소스 블로그 번역","key":"SBK","link":{"rel":"self","href":"http://dev.springsprout.org/wiki/rest/prototype/1/space/SBK"},"description":"스프링소스 블로그를 번역하는 공간입니다."},{"name":"연습장","key":"ds","link":{"rel":"self","href":"http://dev.springsprout.org/wiki/rest/prototype/1/space/ds"},"description":"봄싹 위키 사용법을 익히는 공간입니다."},{"name":"자바","key":"JAVA","link":{"rel":"self","href":"http://dev.springsprout.org/wiki/rest/prototype/1/space/JAVA"},"description":"자바 학습 공간입니다."}]}

막상 해보고 나니 고민이 생기네요. "저 작업을 뷰에서 할 것이냐 서버단에서 할 것이냐?"

뷰에서 하면 저 페이지로 이동 할 때 마다 요청을 보낼테니 Confluence 응답이 늦어지면 문제고 Confluence 입장에서 부담이 될 수도 있고, Confluence가 죽었을땐 위키 페이지까지 마비가 되지만 구현하는 입장에선 뷰 코드만 지지고 볶으면 되니까 간단할 것 같은데..

서버단에서 하면 DB에 저장해두거나 캐싱을 해둘 수 있으니 Confluence의 부담도 덜고 Confluence가 죽어도 위키 정보는 보여줄 수 있지만 구현하면서 이것 저것 신경쓸게 많아지네;; 정보를 읽어올 주기, 배치로 돌릴 것이냐? JSON말고 XML로 받아온다음 OXM을 이용해서 XML->Object로 바로 변환해버리는 ResponseExtracter를 만들까나.. 캐싱은 이미 Ehcache를 하이버 땜시 쓰고 있으니 캐싱도 해보고?

흠.. 서버단에서 할까나 어쩔까나.. Confluence가 죽어있으면 어차피 봄싹 Wiki에서 목록 본다음에 링크 클릭해도 이동을 못하니까 그냥.. 뷰에서 읽을까나.. +_+ 그럼 나 머하러 RestTemplate 사용한거지.. @_@.. 기왕에 썼으니까 OXM도 적용해서 서버 단에서 해버렷?ㅋ 
top

Write a comment.


[Spring Security] Method Security Test

모하니?/Coding : 2010.03.19 21:15


    @PreAuthorize("hasRole('ROLE_MEMBER')")
    public boolean write(String contents) {
        while (graffitiRepository.getTotalRowCount() >= GRAFFITI_LIMIT_COUNT) {
            graffitiRepository.deleteFirstGraffiti();
        }
        Graffiti graffiti = new Graffiti(contents, securityService.getCurrentMember());
        graffitiRepository.add(graffiti);
        return true;
    }

위 코드는 봄싹 낙서장 서비스의 코드이다. 봄싹 메인 화면에 있는 낙서장은 최대 100개를 유지하며 ROLE_MEMBER 권한을 가지고 있는 사용자(이메일 인증 절차를 거친 기본 회원)라면 누구나 낙서를 추가할 수 있다.

이 코드의 내용 대부분은 단위 테스트로 커버가 가능하다. 하지만 스프링 시큐리티 애노테이션이 제대로 동작하는지는 어떻게 테스트 할 것인가?

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"/testContext.xml", "/testContext-security.xml"})
@Transactional
public class MethodSecurityTest extends DBUnitSupport{

    @Autowired GraffitiService graffitiService;
    @Autowired GraffitiRepository graffitiRepository;

    @Before
    public void login() throws Exception {
        insertXmlData("testData.xml");
        SecurityContext securityContext = new SecurityContextImpl();
        Authentication authentication = new UsernamePasswordAuthenticationToken("whiteship@email.com", "passwd");
        securityContext.setAuthentication(authentication);
        SecurityContextHolder.setContext(securityContext);
    }

    @Test
    public void methodAuth(){
        assertThat(graffitiRepository.getAll().size(), is(0));
        graffitiService.write("hi");
        assertThat(graffitiRepository.getAll().size(), is(1));
    }

    @After
    public void after(){
        SecurityContextHolder.clearContext();
    }

}


이런식으로 테스트 할 수 있다.

1. 시큐리티 설정 파일을 테스트에서 만들 AC(ApplicationContext)용 설정에 추가한다.
2. DB에 xml로 작성한 가짜 사용자, 권한 정보를 넣어야 하니까 DBUnit을 편하게 사용할 수 있게 해주는 클래스를 이용한다.
3. 테스트 실행하기 전에 로그인 한다. (SecurityContextHolder에 SecurityContext를 넣는다.)
4. 테스트 실행한 뒤에 로그오프 한다. (SecurityContextHolder를 비워버린다.)


top

Write a comment.


나는 null 중대 소속이다.. 너는 어디냐..




어느덧 5년차... 하지만 여전히 귀찮은...

비도 오고.. 젠장
날씨도 추운데.. 젠장
시간 아깝게 젠장
top

  1. Favicon of http://arawn.tistory.com BlogIcon Arawn 2010.03.18 14:17 PERM. MOD/DEL REPLY

    null 중대라니... 너무 멋진걸?

    Favicon of http://whiteship.me BlogIcon 기선 2010.03.18 22:10 PERM MOD/DEL

    너무 빡쎈 중대에요;

    '몸살 걸리겠네..젠장'
    으로 마무리 되는 시 한편이 되었군요.
    제목은 '예비군 훈련'ㅋ

  2. Favicon of http://lf.hisfy.com/ BlogIcon 엽우 2010.03.19 17:35 PERM. MOD/DEL REPLY

    null 중대는 뭐든지 캐스팅 하는대로 다 시킨다니까요;
    뭐 그래도 NullPointerExceptoin 던지고 뻗어버리시면 되겠네요. ^^

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2010.03.19 21:16 신고 PERM MOD/DEL

    ㅋㅋㅋ 어제 집에 왔을 땐 정말 OutOfMemoryException 상태였답니다.

  3. 2010.03.19 21:02 PERM. MOD/DEL REPLY

    비밀댓글입니다

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2010.03.20 17:58 신고 PERM MOD/DEL

    흑흑 ㅠ.ㅠ 왜 Kevin님 댓글이 스팸으로 들어가는지 몰겠어요.

  4. Favicon of http://kingori.egloos.com BlogIcon kingori 2010.03.22 20:48 PERM. MOD/DEL REPLY

    ㅋㅋ 이름도 소속도 없는 특수부대인가요?

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2010.03.24 10:31 신고 PERM MOD/DEL

    개발자만 알 수 있다는 null 중대였죠.

  5. Favicon of http://helols.pe.kr BlogIcon is윤군 2010.03.25 23:16 PERM. MOD/DEL REPLY

    나도 널중대!

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2010.03.26 10:39 신고 PERM MOD/DEL

    너는 Object 중대로 가서 맨날 equals()랑 toString()이나 해~~

  6. Favicon of http://blog.lckymn.com BlogIcon Kevin 2010.03.26 16:33 PERM. MOD/DEL REPLY

    아직도 차단됐다고 나오는듯... ㅠ_ㅠ

    Favicon of http://whiteship.me BlogIcon 기선 2010.03.30 17:23 PERM MOD/DEL

    넹;; 계속 휴지통에 들어가있네요.
    필터를 봐도 Kevin님과 관련된 건 없어보이는데 말이죠;;

  7. Favicon of http://blog.lckymn.com BlogIcon Kevin 2010.03.31 18:51 PERM. MOD/DEL REPLY

    사용하고 계신 티스토리 플러그인 버그인거 같습니다.
    다른 티스토리 블로그들중에도 같은 증상을 보이는 곳도 있고,
    아닌곳도 있는걸 보면 그걸 가능성이 있지 않을까 싶군요.
    그것도 아니면 이건 티스토리 자체 버그일지도...ㅠ_ㅠ

Write a comment.


봄싹 개발자 모집합니다. (완료됨)

모하니?/Coding : 2010.03.17 11:00


모집이 완료되었습니다.
참가 신청 해주셔서 감사합니다.
- updated March, 22th. 2010
================================
봄싹 공통 개발팀: http://dev.springsprout.org/wiki/pages/viewpage.action?pageId=1114148
봄싹 세미나 개발팀: http://dev.springsprout.org/wiki/pages/viewpage.action?pageId=1114158

두 팀에서 개발자를 모집하고 있습니다. 이건 일자리가 아니라 취미 개발입니다. 개발 기간은 4~5주 정도로 잡고 있습니다. 자세한건 팀을 모집한 뒤에 논의하겠습니다.

가급적이면 서울 중심지에 사시는 대학생 또는 스프링과 하이버네이트에 관심있는 개발자 분들이 참여해주시면 좋겠습니다.1주일에 한번 정도는 오프라인으로 만나서 할거라서 서울 중심지에 사시는 분들이 이동하기 편할 것 같구요. 프로젝트가 스프링, 하이버네이트로 되어있어서 경험이 없지만 이 둘을 사용하는 프로젝트를 하고 싶으신 분들이 참여해주시기 바랍니다. 물론 경험자여도 상관없습니다. 같이 플젝을 해보고 싶으신 분들이라면 누구나 참여 가능합니다.

한 프로젝트당 최대 수용 인원은 4명 ~ 5명이구요. 제 메일(이 블로그 제일 하단에 있습니다.)로 신청해주시기 바랍니다. 메일을 보내주실 때 다음 유의사항을 지켜주세요.

- 제목 머릿말에 [봄싹]을 넣어주세요. 예) [봄싹] 개발 참가 신청합니다.
- 이름 또는 아이디 (뭐라고 불러드릴까요??)
현재 하시는 일 (무슨 플젝에 참여했었고 어디서 몇년째 근무중인게 궁금한게 아니랍니다. 학생일 경우에는어느 대학 무슨 학부 몇 학년인지 궁금한게 아니랍니다. 그런 피상적인 것들이 아니라 실제로 하고 계신 공부나 일을 적어주세요.)
- 참여하고 싶은 팀 (둘 중에 하나만 선택해 주세요.)
- 토요일 오전 모임 참석 가능 여부(중요합니다. 주로 신촌에서 토요일 오전에 모입니다.)
- 기타 (블로그, 하고싶은 이야기, 기타 덩덩덩)

기다리겠습니다.
top

  1. 코바 2010.03.19 22:45 PERM. MOD/DEL REPLY

    아 맨날 지켜보고 있는 사람중에 하나 인데
    지방에 있는게 정말 아쉽네요 ㅜ
    모여서 한번 해보고 싶은데 참 지방이라는게 한입니다
    기선님 블로그 잘보고 있습니다.~

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2010.03.20 00:35 신고 PERM MOD/DEL

    넵.. 지방에 계시군요.
    봄싹이 언젠가.. 지방 순회 스터디라도... ㅋㅋ

  2. 자바짜바 2010.03.22 08:14 PERM. MOD/DEL REPLY

    -_-;; 전 해외라.... 맘은 굴뚝같지만... 쩝.....

    저도 블로그 잘 보고 있읍니다.. 꾸벅.

    Favicon of http://whiteship.me BlogIcon 기선 2010.03.22 10:39 PERM MOD/DEL

    넵 마음만으로도 감사합니다.

Write a comment.


[Agile 번역] 어떻게 하면 번역을 기민하게 할 수 있을까?

모하니?/Thinking : 2010.03.12 11:09


번역은 쉽지 않다. 하지만 나름 재미는 있다. 돈은 되지 않지만, 하고 나면 뿌듯하다. 책으로 치면 지금하고 있는 책까지 두 권째다. 난 번역을 잘하지 못한다. 한글 실력이 엉망이고 책읽기를 별로 좋아하지 않아서 인지 문학 도서에 비하면 비교적 쉬운 영어를 사용하는 서적들 임에도 불구하고 한글 문장으로 옮기는 일이 쉽지 않다. 그래도 최소한 내가 다시 읽었을 때 이해할 수 있을 정도의 수준 만큼은 달성하고자 노력한다.

그렇게 어렵사리 번역을 하고나면 사실 다른 사람의 시각에서 읽었을 때 어떠한지 궁금하다. 그래서 베타리딩을 한다. 베타리딩을 하면서 내가 미처 감지하지 못했던 어색한 부분과 이해 못할 만한 부분이 드러난다. 그 부분을 개선하는 작업은 중요하다. 내가 읽었을 때 이해할 수 있었던 건 난 원문의 내용을 읽었기 때문이다. 그래서 원문을 보지 않고도 이해할 수 있는지 알려면 반드시 베타리딩이 필요하다. 코딩으로 치면 일종의 테스트다. 그런데 베타리딩도 쉽지 않다. 하이버네이트 같은 경우 한 챕터당 워드로 100페이지 정도가 된다. 넘는 것도 있고 덜 되는 것도 있지만 대충 그렇다. 그걸 바쁜 개발자들에게 읽어달라고 부탁하기가 참 뭐하다. 그 분들이 받는 댓가라고는 책을 미리 읽어볼 수 있다는 것 정도?

그래서 이런 저런 이유로 고민 중에 번역에도 Agile 기법을 도입하면 어떨까 하는 생각이 들었다. 그래서 상상을 해봤다.

페어 번역 

두 명이 앉아서 번역을 한다. 한명은 부르고 한명은 타이핑 하거나 그 반대로 한명이 읊으면서 동시에 타이핑도 하고 옆 사람은 보고 있다가 이상한 문장이나 틀린걸 봐주면 될 것 같다. 하지만 이건 번역으로 먹고 사는 사람이 아닌 이상 힘들어 보인다. 그렇게 30분 정도 번역을 한 다음 교대한다.

이런식으로 하루에 2시간을 번역한다고 쳤을 때 두 사람은 각각 1시간 번역 1시간 리뷰를 하게 된다. 한 사람이 2시간을 번역할 때와 2사람이 각각 1시간 번역/1시간 리뷰를 했을 때의 생산량과 품질을 확인해보고 싶다.

리뷰 퍼스트 번역

타이핑을 하기 전에 먼저 말로 리뷰를 한다. 아 이 문장은 대충 요러 요러한 이야기 같네요. 이렇게 옮기겠습니다. 라고 말을 한 뒤에 타이핑을 한다. 그리고 타이핑이 끝나면 옆 사람과 리팩토링을 진행한다. 어설프거나 한글 어법에 어긋나면 교정한다. 나중에 QA 팀 겪인 출판사의 검수자가 봐주겠지만 최소한의 품질을 보장하기 위한 수단이라고 보면 되겠다. 

페어 번역을 진행할 때 타이핑만 하지 않고 리뷰를 함으로써 대화를 유도할 수 있다. 하지만 대화가 목적은 아니기에 잡담으로 새는 일이 없게 주의해야겠다. 리뷰를 최소화하고 바로 타이핑을 한다. 그 다음 리팩토링에 해당하는 작업도 반드시 단락 단위나 문자 단위로 하는게 좋겠다. 이런 과정이 없다면 페어 번역을 하는 의미가 없으니 이렇게 하지 않을꺼면 페어 번역을 하지 않는게 좋겠다.

점진적인 베타리딩

베타리더에게 전달하는 과정을 일종의 배포로 간주하고 Agile 기법인 여러번 그리고 점진적으로 배포하는 수단을 번역에도 도입하면 어떨까. 예를 들어 베타리딩 주기를 1주일로 잡고 1주일치 번역한 내용을 베타리더에게 공개한다. 그리고 피드백을 받은 다음 그 주 초에 지난 배포의 개선 작업을 한 다음에 주 중~말까지 새로운 번역 작업을 진행하는 식이다.

베타리더에게 한번에 100 페이지씩 읽어야 하는 부담을 줄일 수 있고 피드백을 초기에 받음으로써 나중에 뭉탱이로 중복적인 피드백을 받는 것을 개선할 수 있을 것 같다. 하지만 베타리더도 번역자 못지않게 기민해야 할 것이다.

다음 번역은 봄싹에서 진행할 계획인데 이 세가지를 시도해 봐야겠다. 
과연.. 어떨까.. 후훗.. 재밌을 것 같다.
top

TAG agile, 번역
  1. Favicon of http://ParkPD.egloos.com BlogIcon ParkPD 2010.03.12 16:52 PERM. MOD/DEL REPLY

    번역만큼은 애자일을 적용하기가 어렵더군요. :)

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2010.03.12 17:17 신고 PERM MOD/DEL

    앗. xUnit Patterns 번역 하셨군요. 멋지십니다. +_+
    저도 왠지 어려울 것 같은데 그래도 한 번 해보려구요.ㅋ

  2. Favicon of http://codereview.co.kr BlogIcon 박형근 2010.03.13 13:11 PERM. MOD/DEL REPLY

    재미있는 글 잘 읽었습니다.
    저는 '점진적인 베타리딩'이 좋을것 같네요.
    작년에 'Fit'책의 일부챕터를 베타리딩을 했는데요,
    많은 양이 부담이 되기도 하고
    내가 고친 부분을 원래 번역자가 어떻게 생각할지도 부담도 되더군요.
    점진적으로 베타리딩을 한다면 이런 부분이 많이 해소될 것 같습니다.

    Favicon of http://whiteship.me BlogIcon 기선 2010.03.14 10:55 PERM MOD/DEL

    네. 하다못해 다른 건 못하더라도.
    점진적이고 지속적인 베타리딩은 시도해볼만 한 것 같아요.

Write a comment.




: 1 : 2 : 3 : 4 : 5 : ··· : 32 :