Whiteship's Note

'Good Tools'에 해당되는 글 186건

  1. 2009.10.29 [JRebel, IntelliJ] IntelliJ에 JRebel 플러그인 설치/설정/사용하기
  2. 2009.10.26 [IntelliJ] 이클립스 바이바이~~ 인텔리J 안녕!! (22)
  3. 2009.10.15 [JRebel] 오퀘!! 퍼스널 OSS 라이선스 득탬!! (4)
  4. 2009.10.15 [JRebel] 개발시 서버 리부팅 시간을 줄이자. 아니 없애자!! (6)
  5. 2009.09.25 정말 멋진 플러그 디자인 (6)
  6. 2009.09.03 [이슈트래커] 레드마인 redmine 괜찮네~ (8)
  7. 2009.08.11 [파이어폭스 플러그인] 파이어버그 짱인듯... (4)
  8. 2009.08.10 [파이어폭스 플러그인] 구글 리더 왓처 (2)
  9. 2009.08.07 맥용 STS가 달라졌다!! (2)
  10. 2009.07.30 구글 토크 트위터 봇(bot) 추가하기
  11. 2009.07.27 아틀라샨 이클립스 플러그인
  12. 2009.07.07 [파이어폭스 플러그인]Live HTTP headers
  13. 2009.07.01 [파폭 테마] 구글 크롬 테마 (6)
  14. 2009.06.24 이클립스 3.5 갈릴레오 설치 인증샷 (6)
  15. 2009.06.14 [MAC]OmniGraffle
  16. 2009.05.13 메이븐 프로젝트에서 단위/통합 테스트 어설프게 구분하기 (2)
  17. 2009.05.13 [Mockito] void 메서드 stubbing 새로운 방법
  18. 2009.05.12 JUnit Max 자동 실행 여부 설정하기
  19. 2009.05.12 Maven Embedder 사용해서 자바 코드로 메이븐 Phase 또는 Goal 실행하기
  20. 2009.05.12 Cargo의 TomcatManager
  21. 2009.05.11 JGit로 push 성공 기념샷. (6)
  22. 2009.05.11 통합 테스트 분리와 메이븐 관련 참조 할 글
  23. 2009.05.11 Cargo 메이븐 플러그인 설정하기
  24. 2009.05.10 webdriver - NextSteps
  25. 2009.05.08 웹드라이버(webdriver) pom.xml에 의존성 추가하기
  26. 2009.05.07 웹 테스트 관련 공부할 것
  27. 2009.05.01 오늘 하루 타일즈(Tiles)에 낚였나보다~ (2)
  28. 2009.05.01 스프링 MVC에서 타일즈 2 사용하기 (2)
  29. 2009.05.01 Tiles와 SiteMesh 차이
  30. 2009.05.01 Tiles VS SiteMesh (2)

[JRebel, IntelliJ] IntelliJ에 JRebel 플러그인 설치/설정/사용하기

Good Tools : 2009. 10. 29. 12:51


참조: http://www.zeroturnaround.com/intellij-idea-jrebel-tutorial-formerly-javarebel/

1. 플러그인 설치
- settings -> plugin -> available 탭에서 jre 검색 후 클릭해서 다운로드 설치 하고 재부팅.

2. 플러그인 설정.
- settings -> jrebel 에서 jrebel.jar 파일 찾아주기.
- settings -> Debugger -> Data View -> Show 탭에서 Synthetic fields 끄기
- 컴파일 output 폴더 변경
- 컴파일 이후에 웹 서버에 재배포 하지 않도록 설정하기
- 컴파일 단축키를 Ctrl+S로 설정하기
- rebel.xml 파일 만들기

012


3. 톰캣 Run with JRebel 실행하기


플러그인 설치까지는 수월했지만, 그 뒤에는 잡다하게 설정할 것들이 좀 있었네요. 하지만 한번만 설정해두면 두루 두루 좋은거니깐~

top

Write a comment.


[IntelliJ] 이클립스 바이바이~~ 인텔리J 안녕!!

Good Tools : 2009. 10. 26. 18:35


와.. 대박!! 인텔리J 완전 좋아요!!

단축키는 이클립스 단축키로 바꾸고, 기본적인 설정 몇 가지를 변경하면 이클립스에서 인텔리J로 후딱 갈아탈 수 있습니다. 물론, 100%까진 아니지만, 어느정도 개발이 가능한 정도까지.. 대충 70% 가량은 인텔리J로 개발환경을 바꿀 수 있습니다. 그담부터는 인텔리J의 고유 기능들과 단축키를 만끽하는 일만 남은거죠.


설치 후 한 일

1. settings에서 keyset 변경
- eclipse 키셋을 카피 한 다음 원하는 단축키 설정.
  - close(Ctrl + W)
  - declaration(Ctrl + 마우스 버튼1)
  - goto test(Ctrl + J)

2. settings에서 코드 라인수 보이도록 설정.
- code line으로 검색 후 apperance에서 체크.

3. settings에서 수정 후 저장하지 않은 파일 표시 되도록 설정.
- mark modi로 검색 후 Editor Tabs에서 체크.

4. settings에서 폰트 변경
- font로 검색 후 블라 블라.

5. 서버 추가 및 실행
- settings의 Application Servers에서 추가.
- 서버 설정 뷰에서 war/폴더 배포 설정 가능.

6. 기본 최대 메모리 512로 늘리기
- IDEA 설치 폴더/bin/idea.exe.vmoptions 편집 -Xmx512m로 수정
- code inspection 실행 할 때 빼곤 거의 기본 350m 정도면 충분해 보임.

7. 폰트에 안티 얼라이징 효과 주기
- IDEA 설치 폴더/bin/idea.exe.vmoptions 편집 -Dawt.useSystemAAFontSettings=lcd 추가

놀란 기능

1. Git/SVN 및 다양한 VCS 그냥 지원.

2. UML 그냥 지원.

3. MoreUnit 기능 그냥 지원.

그밖에도 아직 해보지 않은 환상적인 기능들이 무궁 무진 함.

충분히 갈아탈만한 개발 툴로 보입니다. 갈아타실 수 있는 분들은 갈아타자구요.
사용하시는 분들이 많아야 소소한 팁을 나누면서 좀 더 잘 써먹죠.ㅋ


top

TAG IntelliJ
  1. Favicon of http://okjsp.tistory.com BlogIcon kenu 2009.10.26 18:55 PERM. MOD/DEL REPLY

    commercial과 community의 기능차이가 심해 보이던데...
    http://www.jetbrains.com/idea/nextversion/editions_comparison_matrix.html
    여튼 잘 읽었어요. ^^

    Favicon of http://whiteship.tistory.com BlogIcon 기선 2009.10.26 21:03 PERM MOD/DEL

    오호.. 기능차이가 심하네요. ^^;;;
    전 현재 8점대 상용버전을 오픈소스 라이선스로 사용하고 있습니다.

    OSAF(현재는 이걸로), WebTUnit, SpringSprout 셋 중 아무거로나 받아서 쓸 수 있으니... 참 좋쵸.ㅋ

  2. Favicon of https://helols.tistory.com BlogIcon is윤군 2009.10.26 19:30 신고 PERM. MOD/DEL REPLY

    언제 또 이렇게 정리 했데유... ㅋㅋ
    세팅 exprot 하는 기능 빼먹었잖아요 ;;ㅋㅋ
    가장 중요한데;;ㅋㅋ

    Favicon of http://whiteship.tistory.com BlogIcon 기선 2009.10.26 21:04 PERM MOD/DEL

    아 그러네. 세팅스는 하나 가지고 다녀야겠어. 저걸 매번 세팅할 순 없지..

  3. abc123 2009.10.26 20:54 PERM. MOD/DEL REPLY

    이클립스보다 장점이 뭔가요?

    그냥 글에서만 보면 괜한 수고 같은데

    Favicon of http://whiteship.tistory.com BlogIcon 기선 2009.10.26 20:58 PERM MOD/DEL

    써보시면 알아요.

  4. Favicon of http://blog.lckymn.com BlogIcon Kevin 2009.10.26 21:32 PERM. MOD/DEL REPLY

    Eclipse의 AJDT 같은 AspectJ 지원 기능도 있나요? :)

    Favicon of http://whiteship.tistory.com BlogIcon 기선 2009.10.26 23:18 PERM MOD/DEL

    AJDT의 레퍼런스 뷰인가 하는 기능은 기본으로 제공해 주는 것 같아요.

    이제 인텔리J 하루 차 인데 뭘 알겠어요. 계속 써봐야죠.ㅋㅋ

    Favicon of http://blog.lckymn.com BlogIcon Kevin 2009.10.27 01:36 PERM MOD/DEL

    그렇군요... :)
    좋은 정보 고맙습니다. 저도 언제 한번 도전을... :)

    Favicon of http://whiteship.me BlogIcon 기선 2009.10.27 12:08 PERM MOD/DEL

    생각보다 쉬워요~ :)

  5. 지니랜드 2009.10.27 08:53 PERM. MOD/DEL REPLY

    제가 생각하는 인텔리J의 가장 큰 장점은 직관적이라는것 ^^;

    Favicon of http://whiteship.me BlogIcon 기선 2009.10.27 12:40 PERM MOD/DEL

    넵, 저한텐 이클립스보다 안정적인것 같습니다.

    설령 인텔리J가 죽는 일이 벌어져도 그냥 다시 켜면 아무일 없었다는 듯이 다시 제 할 일을 합니다. 이클립스는 한 번 죽으면 그 뒤부터는 영.. 이상해지죠.

    아참. 플러그인 설치도 아주 간편합니다. 그냥 검색해서 설치하면 되죠. 이클립스처럼 웹 사이트가서 업데이트 URL 찾아서 추가하고 한 참 기다리는 일은 없습니다.

  6. Favicon of http://naucika.pe.kr BlogIcon naucika 2009.10.27 12:56 PERM. MOD/DEL REPLY

    64bit.. 를 지원안하나보네요. 이클립스는 배포버젼이 있는뎅..

    Favicon of http://whiteship.me BlogIcon 기선 2009.10.27 13:24 PERM MOD/DEL

    넹. 언젠간 지원하겠죠.

  7. Jared 2009.10.27 14:01 PERM. MOD/DEL REPLY

    제가 많이 쓰는 기능은 live template입니다. 이게 로깅같은 거 할 때 무지 유용합니다.

    Favicon of http://whiteship.me BlogIcon 기선 2009.10.27 14:57 PERM MOD/DEL

    오오. 그런게 있었군요.
    감사합니다.

  8. Favicon of http://ujuc.kr BlogIcon 사진우주 2009.10.27 19:54 PERM. MOD/DEL REPLY

    드디어~~ 공짜버전이 나왔군요.ㅡㅡ 저번에 무료화된다고 기사봤을때는.... 막혀있었는데..

    한번 사용해봐겠습니다^^..ㅋㅋ

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

    오호.. 9.0이 나왔나요!! 가봐야겠군요.

    Favicon of http://ujuc.kr BlogIcon 사진우주 2009.10.28 00:52 PERM MOD/DEL

    그게..ㅡ.ㅡ.. 9.0이었나요.ㅡ.ㅡ..... 멀었군요....

    전.ㅡ.ㅡ. 그거나온건 줄알았는데ㅠ.ㅠ.

    Favicon of http://whiteship.tistory.com BlogIcon 기선 2009.10.28 00:55 PERM MOD/DEL

    네.. 9.0 부터인데 아직은 좀 기다리셔야 할 것 같습니다. 토비님은 어떻게 받으셔서 직접 빌드도 해보신 것 같은데 전 그냥 정식 배포를 기다리고 있습니다.

    현재 사용중인 버전은 8.1.3 입니다.

  9. 상민 2009.11.05 15:43 PERM. MOD/DEL REPLY

    3년전인가 4년전 대학교 때 쓰다가 취직하면서 상용이라 빠이 ~ 했던 IntelliJ 기능이나 UI가 참
    마음에 들었었는데 이클립스에서 인텔리제이의 단축키를 눌렀던 적이 한두번이 아니였는데 ㅋ
    오픈소스 되서 반갑네요 ㅋ

    Favicon of http://whiteship.me BlogIcon 기선 2009.11.05 20:59 PERM MOD/DEL

    네, 사서 쓰기엔 부담스럽긴 하죠.ㅋㅋ

Write a comment.


[JRebel] 오퀘!! 퍼스널 OSS 라이선스 득탬!!

Good Tools : 2009. 10. 15. 22:08


개인용 오픈 소스 라이선스를 받았습니다.

1년에 무려 7만원 가량(59달러)이나 하는 제품의 무료 라이선스를 특탬했습니다. 냐하하하~ OSAF 말고도 WebTUnit 이나 SES 플젝으로 받아도 되긴할텐데 일단 컨플루언스에 그럴싸하게 올라가있는 걸로 받았습니다. 오늘 낮 1시쯤 메일을 보냈을텐데 9시간 정도 걸렸군요. 빠른편입니다.



저는 이제 귀찮은 서버 껐다 켜기에서 해방입니다. 냐하하하~~

기념으로 스크린캐스팅 하나 찍어줘야겠군요.
top

TAG JRebel
  1. Favicon of http://naucika.pe.kr BlogIcon naucika 2009.10.16 11:32 PERM. MOD/DEL REPLY

    아.. 부럽구만유. ㅜ.ㅜ 이참에 오픈프로젝트나 하나... ;;;

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2009.10.16 11:49 신고 PERM MOD/DEL

    구글 코드에 올려놓으시고 라이선스 달라고 하면 금방 줄꺼에요. 파이팅이요~!

  2. Favicon of http://funny.textcube.com BlogIcon 장난ㅡㅍ-)/ 2009.12.04 13:37 PERM. MOD/DEL REPLY

    헐 라이센스 어떻게 무료로 받져?

    Favicon of http://whiteship.tistory.com BlogIcon 기선 2009.12.07 08:50 PERM MOD/DEL

    라이선스를 무료로 받은것이 아니라. 오픈 소스 프로젝트 용 라이선스를 받은거랍니다. ^^;;

Write a comment.


[JRebel] 개발시 서버 리부팅 시간을 줄이자. 아니 없애자!!

Good Tools : 2009. 10. 15. 11:26


http://www.zeroturnaround.com/jrebel/installation/

JSP에서 DB 쿼리, 자바코드, HTML 짬뽕으로 몇 천 줄짜리 코드를 만들고 힘들게 유지보수 하는 이유가... '서버 리부팅을 하지 않아도 되니까'라고 하던데... 정말 그 이유 때문인지 모르겠습니다.

암튼, 그렇게까지 서버 리부팅이 하기 싫으시다면, JRebel을 쓰시는걸 추천하고 싶습니다.
사용법도 매우 간단합니다.
상용제품이기는 한데, 라이센스 없이 30일간 무료로 사용해볼 수 있습니다.

예전에도 이 제품을 써보려고 살펴보긴 했는데, 애플리케이션을 실행할 때 마다
noverify -javaagent:/path/to/jrebel.jar
이런 옵션을 줘야 한다는게 너무 귀찮아서 해보지도 않았습니다.

그런데 오늘은 방명록에 올라온 글 때문에 다시 살펴봤더니 이름도 JavaRebel에서 JRebel로 짧게 바꾸고 이클립스 플러긴도 제공해서 저런 옵션을 수동으로 주지 않아도 되게 해놨더군요. 대박이닷!! 해보자!!

그래서 해봤더니.. 정말 잘 돌아가고 너무 간단합니다.
개발 시간을 상당히 많이 단축 시킬 수 있을 것으로 보입니다.

톰캣 로그가 다음과 같은 모습이 됩니다.                                                     
#############################################################

 JRebel 2.1a (200910071200)
 (c) Copyright ZeroTurnaround, Ltd, 2007-2009. All rights reserved.

 A rough estimate: Over the last 1 days JRebel
 prevented the need for at least 0 redeploys/restarts.
 Using industry standard build and redeploy times,
 JRebel saved you between 0 and 0 hours.

 You are running JRebel evaluation license.
 You have 30 days until the license expires.

 You will see this notification until you obtain a
 full license for your installation.
                                                         
 Visit www.jrebel.com for instructions on obtaining   
 a full license. If you wish to continue your evaluation 
 please e-mail to support@zeroturnaround.com.            
                                                         
 If you think you should not see this message contact    
 support@zeroturnaround.com or check that you have your  
 license file in the same directory as the JAR file.      #############################################################

2009. 10. 15 오전 10:56:59 org.apache.tomcat.util.digester.SetPropertiesRule begin
경고: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.j2ee.server:springsprout2' did not find a matching property.
2009. 10. 15 오전 10:56:59 org.apache.catalina.core.AprLifecycleListener init
정보: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jdk1.6.0_10\bin;.;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\oracle\product\10.2.0\db_1\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\QuickTime\QTSystem;c:\Program Files\Microsoft SQL Server\90\Tools\binn;C:\Program Files\VanDyke Software\SecureCRT;C:\Program Files\SecureCRT;C:\Program Files\QuickTime\QTSystem;c:\Program Files\Microsoft SQL Server\90\Tools\binn;C:\Program Files\TortoiseSVN\bin;C:\Program Files\Subversion\bin;C:\Program Files\ESTsoft\ALZip;C:\Program Files\QuickTime\QTSystem\;C:\Program Files\Microsoft SQL Server\90\Tools\binn\;C:\Program Files\Java\jdk1.6.0_10\bin;C:\apps\apache-maven-2.0.10\bin;"C:\Program Files\PostgreSQL\8.3\bin";C:\apps\apache-ant-1.7.1\bin;C:\Program Files\Git\bin;C:\Program Files\ESTsoft\ALZip;C:\apps\spring-roo-1.0.0.M1\bin
2009. 10. 15 오전 10:56:59 org.apache.coyote.http11.Http11Protocol init
정보: Initializing Coyote HTTP/1.1 on http-8080
2009. 10. 15 오전 10:56:59 org.apache.catalina.startup.Catalina load
정보: Initialization processed in 323 ms
2009. 10. 15 오전 10:56:59 org.apache.catalina.core.StandardService start
정보: Starting service Catalina
2009. 10. 15 오전 10:56:59 org.apache.catalina.core.StandardEngine start
정보: Starting Servlet Engine: Apache Tomcat/6.0.18
JRebel: Directory 'C:\workspace-sts\springsprout2\web\WEB-INF\classes' will be monitored for changes.
JRebel: Directory 'C:\workspace-sts\springsprout2\target\test-classes' will be monitored for changes.
JRebel: Directory 'C:\workspace-sts\springsprout2\web' will be monitored for changes.
2009. 10. 15 오전 10:56:59 org.apache.catalina.loader.WebappClassLoader validateJarFile
정보: validateJarFile(C:\workspace-sts\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\springsprout2\WEB-INF\lib\com.springsource.javax.servlet-2.5.0.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class

=============================== [JRebel Spring Framework Plugin] ===============================
Plugins are contributed by third party and can cause compatibility problems.
If you have any troubles set -Drebel.spring_plugin=false to disable it.
------------------------------------------------------------------------------------------
Description: Supports adding new beans and adding new bean dependencies using
annotations or XML. Singletons will be reconfigured after the change. It also
supports adding or changing Spring MVC controllers or handlers.
=============================== [/JRebel Spring Framework Plugin] ==============================


=============================== [JRebel AspectJ Plugin DISABLED] ==============================
You can enable AspectJ Plugin by setting -Drebel.aspectj_plugin=true.
------------------------------------------------------------------------------------------
Description: Allows the AspectJ load-time weaving (javaagent launched by aj5 or
-javaagent:aspectjweaver.jar) to be used with JavaRebel. Note that AspectJ
weaver will still show "java.lang.Exception: AspectJ5 does not weave hotswapped
class" in the beginning, but this can be safely ignored.
=============================== [/JRebel AspectJ Plugin DISABLED] =============================

2009. 10. 15 오전 10:57:00 org.apache.catalina.core.ApplicationContext log

...생략...

INFO - FrameworkServlet.initServletBean(322) | FrameworkServlet 'springsprout': initialization completed in 828 ms
Hibernate: select this_.id as id4_0_, this_.authCode as authCode4_0_, this_.avatar as avatar4_0_, this_.blog as blog4_0_, this_.email as email4_0_, this_.joined as joined4_0_, this_.name as name4_0_, this_.outDate as outDate4_0_, this_.outReason as outReason4_0_, this_.password as password4_0_, this_.status as status4_0_, this_.totalAttendanceRate as totalAt12_4_0_, this_.totalTrustRate as totalTr13_4_0_ from Member this_ where this_.status=?
Hibernate: select this_.id as id13_1_, this_.descr as descr13_1_, this_.endDay as endDay13_1_, this_.manager_id as manager10_13_1_, this_.maximum as maximum13_1_, this_.meetingCount as meetingC5_13_1_, this_.memberCount as memberCo6_13_1_, this_.startDay as startDay13_1_, this_.status as status13_1_, this_.studyName as studyName13_1_, member2_.id as id4_0_, member2_.authCode as authCode4_0_, member2_.avatar as avatar4_0_, member2_.blog as blog4_0_, member2_.email as email4_0_, member2_.joined as joined4_0_, member2_.name as name4_0_, member2_.outDate as outDate4_0_, member2_.outReason as outReason4_0_, member2_.password as password4_0_, member2_.status as status4_0_, member2_.totalAttendanceRate as totalAt12_4_0_, member2_.totalTrustRate as totalTr13_4_0_ from Study this_ left outer join Member member2_ on this_.manager_id=member2_.id where this_.status in (?, ?, ?)
JRebel: Reloading class 'springsprout.modules.study.StudyController'.
JRebel-Spring: Reconfiguring bean 'studyController' [springsprout.modules.study.StudyController]
WARN - DefaultHandlerExceptionResolver.handleNoSuchRequestHandlingMethod(142) | No matching handler method found for servlet request: path '/study/index.do', method 'GET', parameters map[[empty]]
JRebel: Reloading class 'springsprout.modules.study.StudyController'.
JRebel-Spring: Reconfiguring bean 'studyController' [springsprout.modules.study.StudyController]

OSAF를 이용해서 오픈 소스 라이선스를 신청해야겠습니다. 냐하하~

JRebel에 스프링 빈들의 의존성과 컨트롤러, 핸들러 등을 XML과 애노테이션 정보가 바뀔 때마다 클래스를 릴로딩 해주는 것을 플러긴화해서 내장하고 있나봅니다. 스프링 뿐 아니라, 구글쥬스, 스트럿츠 설정이 변경되는 것도 감지하도록 되어 있네요. 캬...

감동입니다!

ps: 오늘 할 일이 다 끝나고도 여유가 생기면 오랜만에 스크린캐스팅으로 찍어보겠습니다.
top

  1. Favicon of https://helols.tistory.com BlogIcon is윤군 2009.10.15 11:38 신고 PERM. MOD/DEL REPLY

    좋은건 공유 ..ㅋㅋ

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

    ㅇㅇ집에가서 해야지
    일단은 SWF

  2. Favicon of http://bluepoetworld.tistory.com BlogIcon bluepoet 2009.10.15 13:45 PERM. MOD/DEL REPLY

    다른 이유도 있겠지만 클래스, xml 파일등이 수정되었을 때 WAS 재부팅 이슈가 있어서

    모델1방법으로 많이 하는것 같기는 해요 (ㅠ.ㅠ)


    다음 포스팅 글 기대할게요^^

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

    넹.. 다음엔 JRebel 사용하는 방법을 올리겠습니당.

  3. Favicon of https://sehaeng.tistory.com BlogIcon 쌩~ 2009.10.15 15:44 신고 PERM. MOD/DEL REPLY

    WAS리부팅시간이 상당히 많이걸리는 솔루션을 가지고있어서
    사용해보고 감동먹은후 라이센스비용을 알아봤습니다만
    개발전체인력이사용하기에 많은비용이소모되어 포기했었는데 ^^;
    개인으로라도 구매하고싶은 제품이더라구요~

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

    넵. 좋은 제품인것 같아요.

    회사의 경우 한화로 1년에 1인당 149달러이고, 개인은 59달러네요.

    캬~ 저 회사 돈 잘 벌겠네요.

Write a comment.


정말 멋진 플러그 디자인

Good Tools : 2009. 9. 25. 14:11


멋져요;;



자세한 건 요기서;;
top

  1. Favicon of http://blog.lckymn.com BlogIcon Kevin 2009.09.26 05:15 PERM. MOD/DEL REPLY

    영국이라고 나오는데, 발음은
    우리나라 사람 발음이네? 하고 기사를 클릭해 보니
    역시 우리나라분이 만드신거군요.
    아이디어가 정말 대단합니다. 모양도 훨씬 깜끔하고 이쁘네요. :)

    Favicon of http://whiteship.tistory.com BlogIcon 기선 2009.09.26 08:01 PERM MOD/DEL

    넹 정말 멋진거 같아요.
    저는 소프트웨어로 저런걸 만들어 보고 싶은데 말이죠.ㅋ

  2. Favicon of http://blog.naver.com/j81811 BlogIcon aStRe 2009.09.26 09:58 PERM. MOD/DEL REPLY

    이건 영국 플러그인데.. 오~ 220으로도 사용이 가능하군.
    완전 좋은거 같답

    Favicon of http://whiteship.tistory.com BlogIcon 기선 2009.09.26 15:06 PERM MOD/DEL

    ㅇㅇ
    영국 어느 예술학교 다니는 한국인이 만든거래

    자기는 프랑스에서 학교 다닐때 뭐했어?

  3. Favicon of http://blog.naver.com/j81811 BlogIcon aStRe 2009.09.26 23:53 PERM. MOD/DEL REPLY

    난 프랑스에서 한국어 가르쳤어 ㅋㅋㅋ

    그리고.. 쫌 껌 쫌 씹었을 뿐이고..

    Favicon of http://whiteship.tistory.com BlogIcon 기선 2009.09.27 13:02 PERM MOD/DEL

    프랑스에서 껍씹고 왔구나. :)

Write a comment.


[이슈트래커] 레드마인 redmine 괜찮네~

Good Tools : 2009. 9. 3. 09:18


이슈트래커는 상용제품인 Jira만 써봤는데, 봄싹에서 Redmine이라는 걸 설치했길래 살펴봤는데, 괜찮습니다. UI도 깔끔한 편이고, 제공해주는 기능과 플러그인도 많이 있네요.

개인적으로 가장 맘에 드는건, 소스 코드 뷰 기능이 기본으로 탑재되어 있다는거.. Jira나 Bamboo에서는 그럴수가 없었고, Fisheye라는 걸 설치해야만 했었는데, 플러그인만 추가하면 소스 코드에 코멘트까지 다는 Crucible의 기능까지 할 수 있다고 합니다. 아틀라시안.. 제품 두 개(Fisheye, Crucible)와 Jira의 주요 기능이 한 곳에 들어있는 느낌입니다.

http://dev.springsprout.org/redmine

봄싹과 관련해서 버그나 새로운 추가 기능 요구가 있으신 분들은 위 이슈 트래커를 이용해주세요~

곳곳에 숨어있는(?) 그래프 들이 눈을 즐겁게 합니다.

012




top

  1. Favicon of http://beonit.tistory.com BlogIcon 톱아보다 2009.09.03 10:41 PERM. MOD/DEL REPLY

    설치할 때 무슨 업데이트하면서 6시간 넘게 걸리고 되지도 않아서 포기했어요.

    Favicon of http://whiteship.me BlogIcon 기선 2009.09.03 13:30 PERM MOD/DEL

    오호.. 그렇군요..
    제가 직접 설치하진 않아서 설치가 편했는지 어땠는지는 잘 모르겠네요. 아마 별 말이 없는 걸 보면 괜찮았을지도..

  2. 찬솔부 2009.09.03 15:09 PERM. MOD/DEL REPLY

    Redmine 조금 느린 것 빼면 무료로 사용도 가능하고 쓸만한 plugin도 좀 있고 해서 좋은 것 같습니다. UI도 JIRA처럼 뭔가 선뜻 손이 가지 않는 구조도 아닌 것 같고.

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

    넹. 저는 Redmine의 i18n을 보고 깜짝 놀랬습니다. "일감" 이라는 표현이 기가 막히더군요.ㅎㅎ

  3. 선데이모닝 2009.09.28 02:23 PERM. MOD/DEL REPLY

    저도 회사에서 쓰고 있는데 쓰면 쓸수록 깔끔한인터페이스에 만족하게 되게 되더군요

    Favicon of http://whiteship.me BlogIcon 기선 2009.09.28 09:29 PERM MOD/DEL

    넹 깔끔한것 같아요,

  4. Favicon of http://blog.lckymn.com BlogIcon Kevin 2009.09.28 14:34 PERM. MOD/DEL REPLY

    Ruby로 만들어졌으니...
    역시 문제는 속도겠군요...ㅡ_ㅡ;
    전 그냥 일단 Trac으로 만족을...

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

    흠.. 그렇게 느린지는 모르겠데요.
    한국은 인터넷이 빨라서 그런지..
    영.. 모르겠어요~~

Write a comment.


[파이어폭스 플러그인] 파이어버그 짱인듯...

Good Tools : 2009. 8. 11. 21:15


요즘 봄싹에서 개발을 하다보니(참... 봄싹은 개발 업체가 아니라 스터디입니다.) 재밌는 것이 있는데, 여러 툴 사용법을 익힐 수 있다는 겁니다. 파이어버그가 좋은 줄은 알고 있었지만, 사용법을 제대로 익혀본적이 없어서 어떻게 써먹는 줄 몰랐는데.. 이번 기회에 유용한 기술을 몇 개 습득했습니다.

1. 레이아웃 미리 조정해보기

레이아웃은 float등으로 띄우고 나서 margin, padding, border로 조정할 수 있는데 border야 뭐.. 그렇다 치고.. margin이랑 padding을 주로 사용해서 레이아웃을 조정합니다. 이 때, JSP나 CSS를 조금 바꾼 담에 브라우저에서 릴로딩해서 보고, 다시 또 수정해서 다시 브라우저가서 릴로딩 하고.. 이런 일을 반복하기 일수인데, 파이어버그를 써서 미리 화면이 어떻게 바뀌는지 조정해서 적당한 값을 알아낼 수 있습니다.


오른쪽 아래에 보이는 레이아웃 창에서 숫자를 클릭해서 조정하면 곧바로 화면에 띄워져 있는 박스들의 위치가 바뀝니다. 캬~~ 멋져요 멋져.

2. 자바스크립트 미리 실행해보기


두번째로 유용하게 쓰고 있는 기능은 '콘솔' 너무 막연해서 뭔지 몰랐는데 여개다가 자바스크립트를 입력해서 미리 실행해 볼 수 있었습니다. 위 화면에서는 복잡한 selection을 하는 제이쿼리를 미리 실험해본 화면입니다.

3. net

왔다 갔다 하는 요청/응답 헤더와 내용을 볼 수 있어서 유용합니다. 스샷은 생략~

IE 8부터는 파이어버그 같은 프로그램이 포함되어 있다던데.. 어떨런지 모르겠습니다. 수수료만 안 붙는다면 10달러 정도 기부하고 싶어지네요.

top

  1. Favicon of http://blog.outsider.ne.kr BlogIcon Outsider 2009.08.12 10:08 PERM. MOD/DEL REPLY

    파이어버그 정말 최고죠....
    IE8의 개발자도구도 이전 IE의 개발도구 지원에 비하면 정말 괜찮아 지긴 했지만 파이어버그정도의 수준을 기대하시면 실망하실듯 합니다. ㅎ

    Favicon of http://whiteship.me BlogIcon 기선 2009.08.12 11:00 PERM MOD/DEL

    넹 그렇군요.
    IE8은 아직 설치도 안했네요.ㅋ

  2. Miracle 2009.08.12 12:53 PERM. MOD/DEL REPLY

    이제 firebug 없는 화면단 개발은 생각도 하기 싫어요...

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2009.08.12 13:27 신고 PERM MOD/DEL

    넹..ㅎㅎ 형 덕분에 제이쿼리랑 파이어버그 잘 쓰고 있어요.

Write a comment.


[파이어폭스 플러그인] 구글 리더 왓처

Good Tools : 2009. 8. 10. 17:35


https://addons.mozilla.org/en-US/firefox/addon/4808

구글 리더를 모니터링 해주는 플러긴 입니다. 얼마전 RSS 갱신이 다소 느리고 사이트 차단까지 당해서 접속이 안 되던 한RSS에서 구글 리더로 갈아탔습니다. 그런데도 도무지 사부님 블로그 포스팅을 실시간으로 캐치하지 못하겠더군요.(실시간으로 알아채지 못하면 항상 애정이 식었다고 하시기 떄문에 @_@) 그래서 결국은 이런 플러그인까지 찾아서 설치했습니다. 과연~~ 애정은 어찌될런지... 몇 일 지켜봐야겠습니다.

혹시 매일 인터넷 서핑을 1시간 이상 하시는 분들 중에 아직도 RSS를 모르시거나, RSS 리더기를 사용하지 않으시는 분들이 있다면 사용을 권해드리고 싶습니다. 정보 습득량과 속도가 많이 달라 지실 겁니다.

ps: 그러고보니, 봄싹 RSS를 개발해야하는군요. 음... 스프링 3.0에 AtomView같은게 있었던 것 같은데 사용해 볼 수 있겠네요.ㅎ
top

  1. Favicon of http://blog.thebum.net/ BlogIcon YG 2009.08.10 23:47 PERM. MOD/DEL REPLY

    FeedDemon이라는 프로그램 한번 사용해보세요. :)

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2009.08.10 23:50 신고 PERM MOD/DEL

    오호..데탑앱이로군요.
    감사합니다~

Write a comment.


맥용 STS가 달라졌다!!

Good Tools : 2009. 8. 7. 22:54


2.1.0이 배포됐다길래. 받으러 들어갔더니.. dmg 파일들이 있다. 오호.. 설마 그냥 옮겨 담기?? 아니네! 인스톨러가 뜨네... 이야~~


이전에는 끼워주기(?)로 주는 dm 서버, tc 서버, roo를 덩달아 다운받아 설치하는 수밖에 없었다. 뭐 압축만 풀면 끝이니깐.. 설치라고 하기도 뭐하지만.. 그런데 이번에는 설치할 제품 목록을 선택하는 화면에서 빼내면 설치하지 않을 수도 있다. 설마.. 이것 때문에 이런 installer를 만들었단 말인가!?

암튼 귿!

ps: 맥용으로 carbon, cocoa, cocoa 64 세 가지 버전이 있는데, 아직은 cocoa로 빌드한 버전을 성능 관련 문제로 비추하고 있다.

Mac OS X

Download the STS Mac OS disk image (*.dmg) from the list above. Once downloaded, please mount the disk image by double-clicking the downloaded dmg file. Open the volume named 'SpringSource' and double-click on the installer to launch the installation. Follow the on-screen instructions to finish the installation.

(*) At this time we do not recommend to use any of the Cocoa builds for Mac OS. There a numerous open performance related problems with the Cocoa port reported at Eclipse.org.


top

  1. Favicon of http://blog.lckymn.com BlogIcon Kevin 2009.08.08 00:19 PERM. MOD/DEL REPLY

    어젯밤에 저도 이거 설치했습니다. :)
    e3.5는 리눅스용도 인스톨러로 바뀌었구요. e3.4 기반의 버전은 여전히 압축파일인건 아실테고...
    인스톨러 보셔서 아시겠지만 얘써서 만들었나봐요.
    http://izpack.org/
    GNOME을 연상시키는 웹페이지에서 OpenSource 분위기가 물씬 풍기네요.
    plugin 이거 저거 깔고 확인해 봤는데, 잘 되네요.
    그냥 기분이 그런건지는 모르겠는데, RC1 버전보다 좀 빠르게 동작하는거 같아요. :)
    근데, WebResources 부분은 안 고쳐졌네요. 중요한거는 아니지만...

    Favicon of http://whiteship.tistory.com BlogIcon 2009.08.08 10:25 PERM MOD/DEL

    전 어제 설치하고, subversive 플러긴만 설치해놓고 잤습니다.ㅎㅎ

    이제부터 본격적으로 사용해보려구요. 맥은 일단... 단축키부터 잡아야 하는 번거로움이..ㅠ.ㅠ

    아.. 단축키 목록을 export/import 하는 기능이 있었나 모르겠네요. 그거 있으면 그걸로 하나 들고 다녀야겠어요.ㅋ

Write a comment.


구글 토크 트위터 봇(bot) 추가하기

Good Tools : 2009. 7. 30. 13:25


참조: http://www.labnol.org/internet/most-useful-google-talk-bots/4347/

예전에 사부님이 알려주신 구글 토크 사전 봇 en2ko.dict@bot.talk.google.com을 추가해서 요긴하게 쓰고 있는데, 갑자기 jabber와 xampp에 관심이 가서 자료를 찾아 보던 중 윗글을 발견했습니다.

그 중에 하나로 트위터가 있더군요. 간단하게..

twitter@twitter.com

이 녀석을 친구추가 해주시면.... 안 됩니다.

초대를 받아주질 않네요. 일정 시간이 되면 친구 검색해서 일괄처리하나...@_@ 기다려보죠. 뭐.

낚아서 죄송합니다~ㅋㅋ

top

Write a comment.


아틀라샨 이클립스 플러그인

Good Tools : 2009. 7. 27. 21:52




http://www.atlassian.com/software/ideconnector/eclipse.jsp

앗.. 몰랐네~ 좋구만~
top

Write a comment.


[파이어폭스 플러그인]Live HTTP headers

Good Tools : 2009. 7. 7. 11:56


https://addons.mozilla.org/en-US/firefox/addon/3829

HTTP 헤더 정보를 보여주는 창을 띄울 수 있습니다. 도구 -> Live HTTP headers를 클릭하면 되죠.
그런 다음 파폭 아무 탭에서 URL을 날리면 Headers 탭에서 HTTP 헤더 정보를 보여줍니다.


전 이제 이것과 스프링의 AbstarctController와 WebContentGenerator를 보면서 HTTP 공부를 해야 하고, js 파일들을 캐싱해서 보내주는 컨트롤러를 만들어야 합니다. 오늘 안에 꼭!!! 파이팅!

이것도 http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

top

Write a comment.


[파폭 테마] 구글 크롬 테마

Good Tools : 2009. 7. 1. 21:51


https://addons.mozilla.org/en-US/firefox/addon/8782


음~~ 귿!! 가끔씩 테마를 바꿔주는 센스..
top

  1. Favicon of http://selic.pe.kr BlogIcon selic 2009.07.02 08:21 PERM. MOD/DEL REPLY

    파폭3.5로 검색했다가 우연히 들어왔네요. 좋은글 많이 읽고 갑니다. ^ 0 ^..

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2009.07.02 11:44 신고 PERM MOD/DEL

    넵~ 방문 감사합니다.

  2. Favicon of http://sonegy.egloos.com BlogIcon 소내기 2009.07.02 09:57 PERM. MOD/DEL REPLY

    탭위치가 어색해.

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2009.07.02 11:45 신고 PERM MOD/DEL

    탭은 원래 파폭 자리에 있어요. 그냥 색이랑 탭 모양만 크롬 형태로 바뀌는 듯.

  3. 대한민국토리 2009.07.14 12:22 PERM. MOD/DEL REPLY

    네이버 테마도 그럭저럭 괜찮던데요. 이제 크롬 스타일로 바꿔 볼 때가 된건가요?? 좋은 정보 감사합니다.~~~

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

    요즘 파폭보다 빠를 것 같은 크롬이나 사파리로 갈아타고 싶긴한데 그쪽 플러긴들이 파폭 플러긴처럼 검색, 설치, 업데이트, 기능미가 나은 것 같은 느낌이 들지 않아서 고민입니다.

    플러긴을 포기하고 속도를 얻을 걷인가.. 말 것인가..

Write a comment.


이클립스 3.5 갈릴레오 설치 인증샷

Good Tools : 2009. 6. 24. 22:58


http://www.eclipse.org/downloads/

이클립스 JEE Mac OS X carbon 버전을 설치했습니다.

http://blog.springsource.com/2009/06/24/installing-sts-into-eclipse-35/

좀 전에 올라온 스프링 소스 블로그 글을 보고 STS 설치를 시도했지만, AJDT 플러그인 사이트에는 연결이 안되고, 스프링 IDE 사이트에서 접근 가능한 플러긴은 AJDT 관련 플러긴 밖에 없길래 포기했습니다. @_@ 뭐.. 조만간 STS 2.1.0 RC 버전이 나온다고 하니.. 아직은 3.5 기반 STS를 좀 더 오래 기다려야 할 것 같습니다.


top

  1. Favicon of http://blog.lckymn.com BlogIcon Kevin 2009.06.25 11:52 PERM. MOD/DEL REPLY

    저거 설치하다가 잠도 제대로 못 잤네요...ㅡ_ㅡ;;;
    우여곡절끝에 설치 완료 했습니디만... 결국 당분간은 Galileo는 못 쓸것 같네요... @_@;;;
    Galileo JEE 자체에 버그가 있는거 같습니다. ㅠ_ㅠ
    'Web Resources' 기능이 제대로 작동 안 하는거 같아요.
    버그 리포팅 해야겠습니다.
    애초에 걱정은 사용중인 plug-in설치가 잘 될까 였는데,
    plug-in들은 어떻게 다 설치를 마쳤지만,
    (M2Eclipse stable development 버전이랑 Subclipse 1.6.x 버전도 설치가 잘 되네요).
    결국 Eclipse JEE 기본 기능 버그라는 엄청난 복병이... ㅠ_ㅠ
    아놔, 잠도 못자고 시간낭비 했네요.

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

    고생하셨네요; 전 아직 서버시브 설치도 안 해봤어요.

    한 세달 정도 지나면 쓸만해 질지도...ㅎㅎ

  2. Favicon of http://blog.lckymn.com BlogIcon Kevin 2009.06.27 12:30 PERM. MOD/DEL REPLY

    오늘 SpringSource에서 Eclipse 3.5기반의 STS 2.1.0 RC1을 내놨네요. (3.4 기반도 RC1)
    plug-in 설치하려고 한 제노력은 삽질이 되어 버리는 희소식입니다... @_@;
    AspectJ 사용하기 편한 기능들이 추가 됐다고 해서 기대하고 있습니다. :)

    Favicon of http://whiteship.me BlogIcon 기선 2009.06.27 14:44 PERM MOD/DEL

    네 저도 좀 전에 보고 다운 받아뒀습니다. ^^
    왠만하면 Subversive도 같이 설치해서 배포해주면 할 일이 하나 줄어들텐데 그건 직접해야겠네요.

    MoreUnit도..ㅋㅋ

  3. Favicon of http://blog.lckymn.com BlogIcon Kevin 2009.06.27 20:04 PERM. MOD/DEL REPLY

    제가 실수 했네요. 지금 보니까 Eclipse 3.5 기본 기능에 문제가 있는게 아닌거 같습니다.
    그동안 설치하면 plug-in부터 깔기 시작해서
    순수한 Eclipse JEE만 써본적이 거의 없어서 몰랐는데,
    기본 기능이 아니고,
    M2Eclipse 아니면, STS 에 있는 기능 하나가 제대로 안 돌아가는거 같네요.
    Web Resources 기능이 동작을 안 합니다.
    아주 중요한건 아니지만, 없으면 좀 불펀한데... :(

    Favicon of http://whiteship.tistory.com BlogIcon 기선 2009.06.27 21:28 PERM MOD/DEL

    조만간 해결되겠죠?
    제대로 써보질 않아서 어떤 문제가 있는지 몰겠네요.

Write a comment.


[MAC]OmniGraffle

Good Tools : 2009. 6. 14. 14:52


OmniGroup이라는 회사 제품 중 하나인데, 맥에서 UML 그릴 때 뭐가 좋을지 찾다가 발견했습니다. 여태 PPT로 그렸었는데, 이젠 좀 더 편하게 그릴 수 있겠네요.

http://www.omnigroup.com/applications/omnigraffle/



top

TAG UML2.0,

Write a comment.


메이븐 프로젝트에서 단위/통합 테스트 어설프게 구분하기

Good Tools : 2009. 5. 13. 17:58


참조: http://wiki.rodcoffin.com/index.php?title=Maven_Integration_Testing

안타깝게도 maven-surefire-plugin에는 아직 이 둘을 구분지을 만한 기능이 없습니다. 그럼에도 불구하고 기존에 제공하는 기능들을 잘~ 조합하여 원한 것과 비슷한 결과를 도출해 냅니다. 결코 원하던 결과는 아니지만, 뭐 그나마 그래도 다행인 결과이기는 합니다.

결론부터 보자면

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>**/*WebTest.java</exclude>
                    </excludes>
                </configuration>
                <executions>
                    <execution>
                        <id>integration-test</id>
                        <goals>
                            <goal>test</goal>
                        </goals>
                        <phase>integration-test</phase>
                        <configuration>
                            <excludes>
                                <exclude>none</exclude>
                            </excludes>
                            <includes>
                                <include>**/*WebTest.java</include>
                            </includes>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

이런 식으로 설정해야
<단위 테스트>
mvn test를 실행 할 때 WebTest로 끝나는 자바 파일은 테스트 대상에서 제외하고,
<통합 테스트>
mvn integration-test를 실행 할 때는 모든 WebTest로 끝나는 자바 파일을 포함하여 모든 것들을 다 테스트 합니다.

그나마 다행이라고 한 이유는 통합 테스트를 할 때 단위 테스트를 실행하는 건 시간 상 메모리 상 분명히 오버헤드에 해당하지만, 통합 테스트 자체가 이미 상당량의 시간과 메모리를 잡아 먹을 것이기 때문에, 마치 큰 산에다가 흙 한 줌 더한 꼴로 볼 수 있기 때문이죠. 또 하나 테스트 실패/성공 측면에서 보더라도 이미 단위 테스트 단계를 통과하고 온 것들이라면 이 단계에서 실패할 가능성은 거의 없다고 봐도 무관하겠죠.

그래도 좀.. 잘 나눌 수 있게 sufire:integration-test 같은 골을 추가해주거나, 설정을 좀 더 잘할 수 있게 기능을 추가해줬으면 좋겠습니다.

ps: mutual exclusive 설정 같은걸 추가해주면 안 되남..
top

  1. Favicon of http://toby.epril.com BlogIcon Toby 2009.05.13 20:40 PERM. MOD/DEL REPLY

    저 지저분한 XML 을 보라

    Favicon of http://whiteship.tistory.com BlogIcon 기선 2009.05.13 22:33 PERM MOD/DEL

    쫌~ 그르치요~~

Write a comment.


[Mockito] void 메서드 stubbing 새로운 방법

Good Tools : 2009. 5. 13. 16:41


참조: http://mockito.googlecode.com/svn/branches/1.4/javadoc/org/mockito/Mockito.html

링크에 있는 글대로 작성 해 보면

        stubVoid(mockWarManager).toThrow(new WarPackgingException()).on().packaging();

이렇게 됩니다.

"누가 뭘 던 진다 뭐 할 때."

새로운 형태로 작서한 코드는 다음과 같습니다.
       
        doThrow(new WarPackgingException()).when(mockWarManager).packaging();

"이걸 던진 다. 누가 뭐 할 때"

후자가 조금 더 짧죠.

ps: 매녈 좀 업데이트 해주시지 말입니다. 스프링은 매녈이 소스 코드를 앞서 간다는데...
top

TAG Mockito

Write a comment.


JUnit Max 자동 실행 여부 설정하기

Good Tools : 2009. 5. 12. 19:57


도대체 이 기능이 있다고는 하는데, 어딨는지 몰라서 못쓰고 있었네요. 단위 테스트면 뭐 계속 돌아가도 상관이 없는데, 통합 테스트도 완전히 웹 서버까지 띄워서 테스트를 하고 있는데, 이걸 계속 JM이 돌리겠다고 아둥 바둥 하다가 에러를 뱉어 내길래 답답하던 참이었는데 사부님한테 물어봐서 알아냈네요. ㅋㅋㅋ

진작 물어볼 걸...



top

TAG JUnitMax

Write a comment.


Maven Embedder 사용해서 자바 코드로 메이븐 Phase 또는 Goal 실행하기

Good Tools : 2009. 5. 12. 16:03


참조: http://maven.apache.org/guides/mini/guide-embedding-m2.html
http://repo1.maven.org/maven2/org/apache/maven/maven-embedder/

메이븐 pom.xml에 의존성을 추가해 줍니다. 엄청 많은 transitive 의존성들이 추가되기 때문에 조금 오래 걸릴 겁니다.

        <!-- maven emberdder -->
        <dependency>
            <groupId>org.apache.maven</groupId>
            <artifactId>maven-embedder</artifactId>
            <version>3.0-alpha-2</version>
        </dependency>

이 녀석 하나가 끌고 오는 것만 15개입니다. 따라서 총 16개의 라이브러리를 추가한 겁니다. @_@ 사용하는 방법은 다른 것들은 다 기본 값을 사용하도록 하고, ClassLoader를 설정한 configuration을 만들어서 MavenEmbedder를 만들고, 실행할 phase나 goal들을 MavenExecutionRequest에 담고 execute를 하면 Result를 받을 수 있습니다.

        Configuration configuration = new DefaultConfiguration()
            .setClassLoader(Thread.currentThread().getContextClassLoader());

        ConfigurationValidationResult validationResult = MavenEmbedder
                .validateConfiguration(configuration);

        if (validationResult.isValid()) {
                MavenEmbedder embedder = new MavenEmbedder(configuration);
                MavenExecutionRequest request = new DefaultMavenExecutionRequest();
                request.setGoals(Arrays.asList(new String[] { "package", "cargo:start" }));
                MavenExecutionResult result = embedder.execute(request);
                if (result.hasExceptions()) {
            ...
                }         
        } else {
            ...
        }

이런 식이죠. 이렇게 하지 않고, 그냥 콘솔 명령어를 호출하도록

Runtime rt = Runtime.getRuntime();
Process p = rt.exec("/apps/apache-maven-2.0.10/bin/mvn.bat package");

이렇게 짤 수도 있지만, 이렇게 하면 메이븐이 돌다가 에러 난 상황에 적절한 대처를 하기가 어렵기 때문에 위와 같이 다소 장황한 방법을 사용했습니다.

top

Write a comment.


Cargo의 TomcatManager

Good Tools : 2009. 5. 12. 14:36


아파치 톰캣 매니저를 랩핑한 녀석인데 아주 편리합니다.

TomcatManager manager;
manager = new TomcatManager(new URL("http://localhost:8080/manager/"));
manager.deploy("/springsprout", new URL("file:target/springsprout.war"), true);
manager.undeploy("/springsprout");

이런식으로 사용할 수 있습니다.

이슈 1.

Cargo와 관련 된 것이 아니지만, 한 가지 이슈 사항은 undeploy를 했을 때 해당 webapp에서 path에 해당하는 폴더가 지워지지 않으면 그 다음에 같은 폴더로 deploy를 하면, 톰캣은 제대로 배포가 됐다고 생각을 하는데, 실제로는 그렇치 않습니다. 접속해보면 404가 뜨죠.

derby.jar 파일이 지워지지 않고 lib폴더에 남아있는 경우였는데, deploy할 때 무슨 이유에서든가 webapp 밑을 이 파일만은 유독 지워지지 않고 남아서 이 다음 deploy를 방해하고 있었습니다. @_@ 필요도 없는 라이브러리였는데 들어가서 말썽을 부리더군요.

이슈 2.

두 번째는 Cargo에서 제공하는 TomcatManager말고 여러 Deployer들이 있는데, 그 녀석들을 사용하여 deploy는 할 수 있었지만, 그 외의 메서드 redeploy(), undeploy() 등은 Not Supported 예외를 발생시킵니다. 메이븐으로 연동하였을 때도 마찬가지로 cargo:undeploy 등은 not support 에러가 나고 제대로 동작하지 않았습니다. 물론 제가 뭔가 잘못했을 수도 있습니다. @_@ 하지만, TomcatManager 설정이 Deployer 보다 더 간단하고 잘 동작하기 때문에 다시 Deployer를 시도해보진 않을 것 같습니다.


top

Write a comment.


JGit로 push 성공 기념샷.

Good Tools : 2009. 5. 11. 01:04


재일이형 제보로 알게된 기트 허브 이클립스 플러그인을 설치할까 하다가 그림을 보니까 JGit랑 거의 흡사하길래 그냥 JGit에 머물기로 했습니다. 위 링크에 보이는 그림 대로 push to를 해봤더니 되네요. 이전에는 어찌해야 할지 몰라서 제대로 못 썼는데 이젠 좀 쓸만하네요.ㅋㅋ

commit, push to, fetch from 메뉴에 단축키만 지정해 두면 웬만한 SVN, CVS 플러그인 부럽지 않게 사용할 수 있을 것 같습니다.

팁으로 SVN, CVS에 비해 히스토리 정보 참조가 엄청나게 빠르다는 겁니다. 그도 그럴 것이 저장소가 로컬에 있으니깐 필요한 히스토리 정보 로딩이 SVN이나 CVS에 비해 훨씬 빠른 것 같습니다. 물론 뭐 네트워크 사정에 따라 조금씩 차이는 있겠지만요..ㅋ




top

TAG JGit, 기트
  1. Favicon of http://blog.naver.com/j81811 BlogIcon aStRe 2009.05.11 09:30 PERM. MOD/DEL REPLY

    열심히 하셨군요~!

    Favicon of http://whiteship.me BlogIcon 기선 2009.05.11 12:57 PERM MOD/DEL

    간단한거야;;

  2. Miracle 2009.05.11 19:26 PERM. MOD/DEL REPLY

    전 어제 egit로 clone하는거 시도 했는데.. 조금 불편한점이 있지만..
    별 무리 없이 성공 했어요..

    push는 실패한것 같지만요;;;

    Favicon of http://whiteship.me BlogIcon 기선 2009.05.12 09:51 PERM MOD/DEL

    저도 윈도에선 실패했어요 ㅋ

  3. Favicon of https://helols.tistory.com BlogIcon is윤군 2009.05.12 09:44 신고 PERM. MOD/DEL REPLY

    console 쵝오..ㅋ

    Favicon of http://whiteship.me BlogIcon 기선 2009.05.12 09:51 PERM MOD/DEL

    아아~ 윈도에선 실패했어. 맥북에선 잘 됐는데

Write a comment.


통합 테스트 분리와 메이븐 관련 참조 할 글

Good Tools : 2009. 5. 11. 00:53


http://docs.codehaus.org/display/MAVENUSER/Maven+and+Integration+Testing

http://docs.codehaus.org/display/MAVEN/Creating+a+Maven+Integration+Test

http://wiki.rodcoffin.com/index.php?title=Maven_Integration_Testing

이 중에서 마지막 글이 지금 봄싹 프로젝트 상태에 가장 적합한 내용인 듯...

통합 테스트를 별도의 프로젝트로 분리할 것인가 말 건인가.. 고민이로세~
top

Write a comment.


Cargo 메이븐 플러그인 설정하기

Good Tools : 2009. 5. 11. 00:36


참조: http://cargo.codehaus.org/Maven2+plugin

상당히 간단하지만, 그 결과는 그다지 간단하지 않은 것 같습니다. 일단 설정은 이렇게 했습니다.

            <plugin>
                <groupId>org.codehaus.cargo</groupId>
                <artifactId>cargo-maven2-plugin</artifactId>
                <configuration>
                    <container>
                        <containerId>tomcat6x</containerId>
                        <home>/apps/apache-tomcat-6.0.18</home>
                    </container>
                </configuration>
            </plugin>

이렇게 하고, cargo:start 골을 실행하면 톰캣 서버를 메이븐에서 실행할 수 있습니다. mvn cargo:start 이런식으로요.

테스트 진행은 다음 순서대로 할 겁니다.

WAR 파일 패키징 -> cargo를 사용하여 톰캣 서버 실행 -> 웹 (통합) 테스트 -> cargo를 사용한 톰캣 서버 정지

이 것을 그대로 메이븐 골로 옮겨 적으면 다음과 같습니다.

mvn package cargo:start test cargo:stop

그러나 이건 예상대로 동작하지 않습니다. 일단, 단위 테스트와 통합 테스트가 분리되어야 합니다. 단위 테스트를 실행하는데 굳이 카고를 이용하여 테스트 서버를 실행할 필요는 없기 때문이죠.

두 번째로 cargo:start를 실행하는 순간, 해당 커맨드 창은 이용할 수가 없습니다. 서버 로그가 뜨고 Ctrl+C를 눌러 서버 실행을 멈추기 전까지는 해당 커맨드 창이 먹통이나 다릅없습니다. 또 다른 콘솔을 띄우고 그 곳에서 테스트를 진행 한 다음 cargo:stop으로 서버 실행을 멈출 수 있습니다.

이 두 가지를 생각해 봤을 때 빌드가 2단으로 구성되어야 할 것 같습니다.

1단에서 할 일은 clean package(이 안에 complie, test 포함) cargo:start
2단에서 할 일은 integration-test, cargo:stop

궁금한 건 이러한 2단 빌드를 제공하는 CI 툴이 있느냐 하는 것과 메이븐으로 이런 구성을 하는 방법입니다. 후자는 금방 찾을 것 같은데 전자는 잘 모르겠네요. 기존 CI 툴의 plan을 잘 짜서 여러 plan끼리 의존성을 주며 실행하도록 할 수 있다면 가능할지도 모르겠고, 아예 하나의 plan으로 이러한 2단 빌드를 구성할 수 있게 해준다면 편리할 것 같습니다.
top

Write a comment.


webdriver - NextSteps

Good Tools : 2009. 5. 10. 14:38


참조: http://code.google.com/p/webdriver/wiki/NextSteps

어떤 웹 드라이버 구현체를 사용해야 하는가?

HtmlUnitDriver: 모든 OS 지원
FirefoxDriver: 모든 OS 지원
InternetExplorerDriver: 윈도우만 지원
SafariDriver: 맥 OS X만 지원

빠르게 테스트하고 싶다면, HtmlUnitDriver가 제격이지만, 실제 브라우저를 통해서 어떤 일이 벌어지는지 보고 싶다면, 각 브라우저에 대한하는 드라이버를 이용. 대신 속도는 떨어질 수 있다.

WebDriver 인터페이스를 사용하여 각각의 구현체를 교체해가며 테스트 할 수 있다.

WebDriver driver = new HtmlUnitDriver();

네비게이션

페이지 이동을 테스트 할 때는 get()을 사용한다.

driver.get("http://www.google.com");

또는 driver.navigate().to("http://www.google.com"); 이런 식으로 이동할 수도 있다.

페이지 다루기

<input type="text" name="passwd" id="passwd-id" />

이 엘리먼트를 참조하는 객체를 만들려면 아래와 같이 사용할 수 있다.

WebElement element;
element = driver.findElement(By.id("passwd-id"));
element = driver.findElement(By.name("passwd"));
element = driver.findElement(By.xpath("//input[@id='passwd-oid']"));

XpathInWebDriver를 사용할 때, 쿼리에 해당하는 엘리먼트가 여러개 라면 그 중에서 가장 첫 번째 엘리먼트를 참조하게 되고, 해당하는 엘리먼트가 없다면, NoSuchElementException이 발생한다.

값을 입력할 수도 있다.

element.sendKeys("some text");

방향키를 누른 효과를 낼 수 도 있다.

element.sendKeys(" and some", Keys.ARROW_DOWN);

텍스트 필드에 입력한 값은 자동으로 지워지지 않기 때문에 원하는 곳에서 clear()로 지워야 한다

element.clear();

폼 채우기

WebElement select = driver.findElement(By.xpath("//select"));
List<WebElement> allOptions = select.getChildrenOfType("option");
for (WebElement option : allOptions) {
    System.out.println(String.format("Value is: %s", option.getValue()));
    option.setSelected();
}

위 코드는 화면에서 SELECT 엘리먼트를 찾고 그 안에 있는 OPTION을 순회하면서 화면에 값을 출력하고 모두 체크한다.

폼을 서브밋 할 수도 있다.

driver.findElement(By.id("submit")).click();  // Assume the button has the ID "submit" :)

또는 모든 엘리먼트에 있는 submit() 메서드를 이용할 수도 있다.

element.submit();

비주얼 정보와 드래그 앤 드랍

화면에 보여줄 엘리먼트인지 감추는 엘리먼트인지는 캐스팅을 통해 알 수 있다

WebElement plain = driver.findElement(By.name("q"));
RenderedWebElement element = (RenderedWebElement) element;

만약 화면에 보여주는 엘리먼트라면 그 위치와 크기 정보를 알 수 있으며 드래그 앤 드랍도 할 수 있다.

RenderedWebElement element = (RenderedWebElement) driver.findElement(By.name("source"));
RenderedWebElement target = (RenderedWebElement) driver.findElement(By.name("target"));

element.dragAndDropOn(target);

윈도우와 프레임 이동하기

화면을 전환할 수 있다.

driver.switchTo().window("windowName");

프레임을 이동할 수도 있다.

driver.switchTo().frame("frameName");

닷(.)을 이용해서 서브 프레임으로 이동할 수도 있다.

driver.switchTo().frame("frameName.0.child");

네비게이션: 히스토리와 위치

처음에 살펴본 get()을 사용할 수도 있지만, navigate()를 이용해서 이동할 수도 있다.

driver.navigate().to("http://www.example.com");

navigate를 사용하면, forward()와 back()을 이용하여 히스토리 정보를 이용할 수 있다.

driver.navigate().forward();
driver.navigate().back();

쿠키

// Go to the correct domain
driver.get("http://www.example.com");

// Now set the cookie. This one's valid for the entire domain
Cookie cookie = new Cookie("key", "value");
driver.manage().addCookie(cookie);

// And now output all the available cookies for the current URL
Set<Cookie> allCookies = driver.manage().getCookies();
for (Cookie loadedCookie : allCookies) {
    System.out.println(String.format("%s -> %s", loadedCookie.getName(), loadedCookie.getValue()));
}

top

Write a comment.


웹드라이버(webdriver) pom.xml에 의존성 추가하기

Good Tools : 2009. 5. 8. 15:27


참조: http://code.google.com/p/webdriver/wiki/UsingWebDriver

라이브러리가 담겨있는 저장소부터 등록합니다.

            <repository>
                <id>openqa-releases</id>
                <name>OpenQA Releases</name>
                <url>http://nexus.openqa.org/content/repositories/releases</url>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
            </repository>

다음은 사용할 드라이버에 따라 각기 다른 의존성을 추가합니다.

HTMLUnit 드라이버를 사용할 때는

    <dependency>
        <groupId>org.openqa.selenium.webdriver</groupId>
        <artifactId>webdriver-htmlunit</artifactId>
        <version>0.6.964</version>
    </dependency>

Firefox 드라이버를 사용할 때는

    <dependency>
        <groupId>org.openqa.selenium.webdriver</groupId>
        <artifactId>webdriver-firefox</artifactId>
        <version>0.6.964</version>
    </dependency>

IE 드라이버를 사용할 때는

    <dependency>
        <groupId>org.openqa.selenium.webdriver</groupId>
        <artifactId>webdriver-ie</artifactId>
        <version>0.6.964</version>
    </dependency>

사파리 드라이버를 사용할 때는

    <dependency>
        <groupId>org.openqa.selenium.webdriver</groupId>
        <artifactId>webdriver-safari</artifactId>
        <version>0.6.964</version>
    </dependency>

마지막으로 서포트 클래스들을 사용하고 싶다면 아래 의존성을 추가합니다.

    <dependency>
        <groupId>org.openqa.selenium.webdriver</groupId>
        <artifactId>webdriver-support</artifactId>
        <version>0.6.964</version>
    </dependency>
top

Write a comment.


웹 테스트 관련 공부할 것

Good Tools : 2009. 5. 7. 17:53


PageObject 패턴
webdriver
WebDriver와 PageObject 패턴
XPath
DOM
Test Driven

생각해 볼 것
- TDD, 꼭 작은 테스트를 만들어야 하는가? 단위가 중요한게 아니다.
- CRUD 테스트라면 구지 DAOTest, ServietTest, ControllerTest로 나눌 필요가 있을까?

top

Write a comment.


오늘 하루 타일즈(Tiles)에 낚였나보다~

Good Tools : 2009. 5. 1. 19:46


성윤이랑 정말 신나게 가지고 놀았는데, 집에 갈 때 쯤이 다 되서 생각해 보건데..

매번 페이지를 추가할 때 마다 설정을 추가해야 한다는 건 정말 못 할 짓이다. 하루 종일 성윤이랑 씨름하며 개발중인 봄싹 사이트에 적용해 보았다.

못 할 짓이다.

안그래도 하면서 성윤이한테 이런 얘길 했었다.

    <!-- main page  -->
    <definition name="index" extends=".root">
        <put-attribute name="content" value="/jsp/index.jsp" />
    </definition>

    <definition name="login" extends=".root">
        <put-attribute name="content" value="/jsp/login/login.jsp" />
    </definition>

    <!-- member page  -->
    <definition name="member/list" extends=".root">
        <put-attribute name="content" value="/jsp/member/list.jsp" />
    </definition>

    <definition name="member/add" extends=".empty">
        <put-attribute name="content" value="/jsp/member/add.jsp" />
    </definition>

    <definition name="member/view" extends=".empty">
        <put-attribute name="content" value="/jsp/member/view.jsp" />
    </definition>

    <definition name="member/update" extends=".empty">
        <put-attribute name="content" value="/jsp/member/update.jsp" />
    </definition>

이런 식으로 계속 설정하는 건 정말 안 되겠다 싶어서, definition의 name 속성에 넣는 값이랑 put-attrubute의 value 속성에 넣는 값들이 비슷해 보이니까 저런걸 CoC 적용해서 자동으로 할 수 있게 패치를 만들어 볼까? 하는 얘길했었다.


그러나...


못 할 짓이고, 안 해도 될 것 같다. 하루 종일 공부했는데 허탈한 기분이 들지만..

사부님이 such is life 란다. ㅋㅋ

내일은 태그파일을 적용해봐야겠다.


top

  1. 영감님 2009.05.02 10:23 PERM. MOD/DEL REPLY

    http://yunsunghan.tistory.com/259
    이거 말씀하시는건지요?

    Favicon of http://whiteship.tistory.com BlogIcon 기선 2009.05.02 10:41 PERM MOD/DEL

    헉.. 그거네요!!
    이야~ 역시 비슷한 생각을 하고, 개발까지 완료하신 분들이 있었군요. 대단하네요.ㅋㅋ

Write a comment.


스프링 MVC에서 타일즈 2 사용하기

Good Tools : 2009. 5. 1. 19:10


참조: http://richardbarabe.wordpress.com/2009/02/23/apache-tiles-2-integration-with-spring-mvc/

오늘은 노동자의 날(?)이라 쉬는 사람들이 많은데도 출근한 성윤군이랑 열심히 타일즈를 적용하고 있습니다. 아파치 타일즈 2 홈페이지, 프로 스프링 2.5, 스프링 3.0 레퍼런스를 보면서 적용했지만... 잘 안되더군요.  결국은 위 블로거가 제공하는 패치를 사용해서 해결했습니다.

0. pom.xml에 Tiles 라이브러리 추가하기

        <!-- tiles -->
        <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>com.springsource.org.apache.tiles</artifactId>
            <version>2.1.2.osgi</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>com.springsource.org.apache.tiles.core</artifactId>
            <version>2.1.2.osgi</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>com.springsource.org.apache.tiles.servlet</artifactId>
            <version>2.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>com.springsource.org.apache.tiles.jsp</artifactId>
            <version>2.1.2</version>
        </dependency>

1. xxx-servlet.xml에 TilesConfigurer 추가하기

    <!-- ============================================================= -->
    <!--  Tiles                                                        -->
    <!-- ============================================================= -->
    <bean id="tilesConfigurer" class="springsprout.web.SpringTilesConfigurer">
        <property name="definitions">
            <list>
                <value>/WEB-INF/tiles/general-layout.xml</value>
                <value>/WEB-INF/tiles/tiles-content.xml</value>
            </list>
        </property>
    </bean>

2. xxx-servlet.xml에 뷰 리졸버 추가하기

    <bean id="tilesViewResolver"
        class="org.springframework.web.servlet.view.UrlBasedViewResolver"
        p:viewClass="org.springframework.web.servlet.view.tiles2.TilesView" />

3. 타일즈 설정 파일 추가하기

위 설정대로 /WEB-INF/ 밑에 tiles라는 폴더를 만들고 그 안에 파일 두 개를 만들어 줍니다.

저희는 제일 간단한 3단 구조로 설정했습니다.

general-layout.xml
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE tiles-definitions PUBLIC
       "-//Apache Software Foundation//DTD Tiles Configuration 2.1//EN"
       "http://tiles.apache.org/dtds/tiles-config_2_1.dtd">
<tiles-definitions>
    <definition name=".root" template="jsp/root.jsp">
        <put-attribute name="header" value="/jsp/layout/header.jsp" />
        <put-attribute name="footer" value="/jsp/layout/footer.jsp" />
    </definition>
</tiles-definitions>

tiles-content.xml
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE tiles-definitions PUBLIC
       "-//Apache Software Foundation//DTD Tiles Configuration 2.1//EN"
       "http://tiles.apache.org/dtds/tiles-config_2_1.dtd">
<tiles-definitions>
    <definition name="index" extends=".root">
        <put-attribute name="content" value="/jsp/index.jsp" />
    </definition>

    <definition name="login" extends=".root">
        <put-attribute name="content" value="/jsp/login/login.jsp" />
    </definition>
</tiles-definitions>

general-layout.xml은 그야말로 템플릿 레이아웃이고 이 레이아웃을 tiles-context.xml에 상속 받아서 사용합니다. 이렇게 해야 설정을 최소화 할 수 있겠죠. 불편한 거 하나는.. 모든 뷰를 명시적으로 저렇게 설정이 한 덩어리씩 추가가 되어야 한다는 거죠. 이걸 CoC로 어떻게 간편화 할 수 없을지 고민입니다. 타일즈에서 만들어 주세요~

4. 템플릿 만들기

general-layout.xml에 정의한 root.jsp, header,jsp, footer.jsp, empty.jsp 파일을 만듭니다. 이 JSP 페이지가 기본 레이아웃을 그리는 JSP 페이지입니다.

roo.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml" lang="en">
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    <title>SpringSprout</title>
    <link href="/css/main.css" media="screen" rel="stylesheet" type="text/css" />
  </head>
<body>
    <div id="main">
        <tiles:insertAttribute name="header"/>
        <tiles:insertAttribute name="content"/>
    </div>
    <tiles:insertAttribute name="footer"/>
</body>
</html>

header.jsp
<div id="header" class="basic">
    <div class="site">
         <div class="logo">
             <a href="/"><img src="images/logo.png" alt="springsprout" /></a>
         </div>
         <div class="actions">
             <a href="/">Home</a>
             <a href="/">Studies</a>
             <a href="/">Seminars</a>
             <a href="/">Blog</a>
             <a href="/">Wiki</a>
             <a href="/">Signup</a>
             <a href="/login.do">Login</a>
         </div>
    </div>
</div>

footer.jsp
<div id="footer">
    <div class="site">
        <h2>Good Bye ~~~!!</h2>
    </div>
</div>

empty.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<tiles:insertAttribute name="content"/>

끝입니다. 이제 새로운 페이지를 만들 때 마다 헤더와 푸터를 제외하고 몸통 부분만 만들면 됩니다.

5. 패치

1번에서 설정한 tilesConfigurer를 등록하시려면 아래 파일이 필요하실 겁니다.


이 파일을 사용하지 않고 스프링이 제공하는 클래스를 사용하시면 맨 위 링크의 글에 나타나 있는 에러가 발생할 겁니다.

top

  1. Favicon of https://slothink.tistory.com BlogIcon 편현장 2012.06.08 14:44 신고 PERM. MOD/DEL REPLY

    모든 뷰를 명시적으로 저렇게 설정이 한 덩어리씩 추가가 되어야 하는거, 아직도 해결이 안되었을라나요?

  2. 그걸 쓰고 해봤지만 2012.06.21 14:51 PERM. MOD/DEL REPLY

    에러가 결국은 나더라구요 ^^. 아무래도 제 설정의 잘못일 수도 있겠지만 일단은 기존 방식과 같은 에러 메세지이기에 안됐다고 보는걸 1가정으로 두게 되더군요.

    그리고 맞다. tile2 컨트롤 단내에서 sql문 관련에서 db값을 가져올때 주소부터 sql 문까지 안에서만 하면 (가장 원시적인 방법) 문제없이 돌아가지만, 외부에서 선언하여 메소드문만 따올경우나 xml에서 선언한 경우 문제가 발생하더군요.

    뭔가 좋은 방법이 없는지 궁금합니다.

Write a comment.


Tiles와 SiteMesh 차이

Good Tools : 2009. 5. 1. 14:42


참조: http://tiles.apache.org/framework/tutorial/pattern.html

이 두 가지 툴이 비슷한 일을 하지만, 그 일을 하는 방식은 다른 것 같습니다. Tiles는 Composite View 패턴을 사용하고 SiteMesh는 Decorator 패턴을 사용하는 차이가 있더군요.

두 패턴을 비교한 표가 있길래 옮겨 봅니다.

Aspect Composite View Decorator
Reusability The different parts of the
page (template and pieces) can
be reused across the whole
application.
Each decorator can be
reused, but the decoration
itself can be applied to
one page at a time.
Ease of
configuration
Each page must be defined
explicitly.
The decorator can be
applied even to the entire
application.
Runtime
configuration
The pages can be configured
and organized at runtime
Since one page is decorated
at a time, this feature is
not present.
Performances Low overhead for composition. The page to be decorated
has to be parsed.

일단, 재사용성에 있어서는 매번 데코레이터를 적용하여 페이지를 만들어 내는 데코레이터 패턴 보다는 변하는 부분만 바뀌고 나머지는 재사용하는 컴포짓 뷰 패턴에 한표를 주고 싶습니다.

두 번째, 설정에 있어서는 컴포짓 뷰 패턴이 모든 페이지에 (뷰 구성요소들을)명시적으로 정의해줘야 하는 불편함이 있기 때문에 데코레이터에게 한표 주겠습니다.

세 번째. 실행시에 설정을 변경할 수 있는 것 때문에 컴포짓 뷰에 한표 주겠스니다.

마지막으로 성능에 있어서도 컴포짓 뷰에 한표 주겠습니다.


top

Write a comment.


Tiles VS SiteMesh

Good Tools : 2009. 5. 1. 14:25


너무 차이가 많이 나네요. 3단 구조(위, 본문, 아래)로 나누려는데, 비슷한 일을 해주는 두 개 툴중에 뭘 쓸까 고민하다가 일단 트랜드를 확인해 봤습니다. 무작정 트랜드를 따르려는 건 아니고, 둘 중에 어떤게 왜 인기가 많은지 궁금하자나요.ㅎㅎ



Tiles가 엄청나게 인기가 좋군요. 작년에 무슨일이 있었길래 인기가 급상승 중이던 SiteMesh가 급 하락 하고, Tiles 인기가 확 올라갔는지 궁금해지네요. 그보단 일단 왜 Tiles가 인기가 좋은 건지 Tiles를 좀 봐야겠습니다~
top

  1. 억수로 2009.05.07 17:48 PERM. MOD/DEL REPLY

    안녕하세요?
    위의 구글 트랜드 검색결과는 "sitemesh, tiles" 로 검색하신거 아닌가요?
    "sitemesh,apache tiles" 로 검색하면 전혀 다른 결과가 나오는데...

    Favicon of http://whiteship.tistory.com BlogIcon 기선 2009.05.07 19:20 PERM MOD/DEL

    네, 그렇게도 해봤으나 tiles를 apache tiles로 검색하는 횟수가 너무 희박할 것 같아서요. 걍 저렇게 해봤습니다.

    구글 트랜드 말고 indeed.com에서는 apache tiles로 검색했습니다.

Write a comment.




: 1 : 2 : 3 : 4 : 5 : ··· : 7 :