-
[비공개] 호주인 스프링 고수 Toby님 세미나를 도울 젊은 TFT 모집
별 생각 없이 참석한 Ralph Johnson 세미나. 행사준비 했다고 악수는 나눴지만 사실 꿈 같은 휴식을 보장하는 토요일에 세미나는 싫었다. 더군다나 발표자로 익숙해져서 듣는 일에는 인내심이 더 줄었으니까.하여간 행사 준비하고 안 가려니 캥겨서 갔다. 그리고 놀랐다. 운동화와 백펙으로 만난 거구의 대가 앞에서 내 무지와 오만에 놀랐다. 그런 일이 있고 Toby님이 한국에 온다는 소리에, 더구나 여비 마련을 위해 세미나 했음 좋겠다고 하니. 기묘한(혹은 자연스런) 필연이 아닌가? 바로 주문을 했다. 이런거 해달라고... 그랬더니 최소 6시간은 해야겠단다. 10 - 12: Applying Design Patterns Effectively with Spring 12 - 1p: 점심을 먹으며... 가벼운 담소1p - 3p: Rapid Enterprise App Development with ROO3p - 5p: Introduction to Spring Framework 3.0ROO는 인기가 없을 수도 있어 상대적으로 범용적..추천 -
[비공개] Sparxsystems EA 사용 팁
다이어그램 바탕색 지정 유용한 Sparxsystems EA 단축키 Sparxsystems EA 코드 생성 관련 설정 상속받은 속성 표시하기 소스코드에 링크 걸린 클래스 가져오기 시퀀스 다이어그램 기능 EA와 svn을 이용한 형상관리 노트 연결 제약사항 UML2 Nesting connector 프레임없는 이미지 복사 EA 모델요소 피커 단축키 패키지와 다이어그램 위치 이동 Hack 다이어그램 바탕색 지정 Tools > Options... (Ctrl+F9) 한 후에 Standard Colors 그룹에서 Paper 색상을 바꾼다. 상속받은 속성 표시하기 클래스 선택후 오른쪽 마우스 > Feature Visibility 대화창이 뜨면 Show Attributes 옵션을 선택한다. 소스코드에 링크 걸린 클래스 가져오기 타이틀이 어색하다. 로즈에서 relocate였던가. 하는 기능인데 context menu에서 Advanced > Convert Linked Element to Local Copy 명령으로 접근할 수 있다. 리버스 하여 얻은 클래스..추천 -
[비공개] 워드에서 단락 사이가 벌어져 통제를 못할 때
만들어주는 스타일만 쓰다 보니 가끔 원인을 알 수 없는 문서 버그(?)가 있다.문서 품질 보증 담당자가 '본문과 제목 사이 한 줄을 띄어라.'라고 하는데, 어떤 부분에서는 엔터를 치면 자꾸 다음 장으로 넘어갔다. 해결책을 배웠다.붙이고자 하는 앞과 뒤 단락 모두를 블럭 지정하고 컨텍스트 메뉴에서 단락을 선택한다. 줄 및 페이지 나누기 탭에 보면 현재 단락과 다음 단락을 항상 같은 페이지에 배치라는 선택 항목이 있다. 메뉴 등은 오피스 2007 기준.추천 -
[비공개] 이클립스에서 엑셀 파일 바로 띄우기
테스트를 위한 DB 초기화 데이터와 검증용 골든 마스터 데이터를 엑셀로 관리하다 보니 이클립스에서 엑셀 띄울 일이 많다. 디폴트는 In-Place Editor를 쓰기 때문에 불편하다. 오른쪽 마우스를 클릭해서 context menu를 이용하면 Open With > System Editor를 실행하여 엑셀로 열 수 있다. 매번 이렇게 하기 번거로울 땐 Quick Access(Ctrl+3) 명령을 실행하고 File Associations 중에 일부를 순차적으로 입력하고 엔터 키를 쳐서 File Associations References 대화창을 연다. 상단 File types: 에서 Add 버튼을 누른 후 '*.xls'를 입력한다. 새로 만든 *.xls를 선택한 상태에서 아래 Associated editors: 에서 Add 버튼을 누른 후 External programs 중에 Microsoft Office Excel 워크시트를 누른다. 이제 이클립스 안에서 xls 파일을 클릭하면 엑셀로 연다.추천 -
[비공개] 테스트 실천 방식에 대한 Toby형과의 대화
Toby(이하 굵은 글씨): 근데 dao테스트의 데이터는 어떻게 만들어 써? 엑셀로 만들어서 DBUnit 써서 올리지. 형한테 배운 방법이야. 스프링이 제공하는 트랜젝셔널 테스트[각주:1] 안에서 테이블 레코드를 지우고, 초기 데이터를 부어 넣는 방식으로 현재 개발 DB에 있는 데이터 상태에 영향을 받지 않게 했지. 그런데, 업무 자체가 이력을 포함한 다량의 실 데이터로 검증해야 의미를 가지기 때문에 테이블 전체를 지우는 일이 큰 부하를 발생시키지. 개발 표준을 전담한 후배가 유틸 함수인 deleteFromTables() 를 쓰도록 가이드하니까 개발자 모두가 일괄적으로 쓰다가, 기준 정보 2천만건을 지우느라 문제를 일으켰지. CI 돌리니까 DB 풀나는거야. DBA가 세션 모니터링 해서 그렇게 지울꺼면 Truncate를 하라고 권고를 했지. 테스트 코드에서 부작용 막으려는 선행 작업..추천 -
[비공개] SYSDATE로 넣는 컬럼에 대한 테스트
DAO 구현체 개발자 테스트 코드에서 다음과 같이 get 유형의 DAO 함수를 확인하는 코드가 있었다. someDto = someDaoImp.get(someDto); assertEquals("N", jdbcTemplate.queryForObject(getSingleColumnValueSelect("caob_yn"), String.class)); assertEquals("10", jdbcTemplate.queryForObject(getSingleColumnValueSelect("pd_crgr_dvsn"), String.class)); assertEquals("2", jdbcTemplate.queryForObject(getSingleColumnValueSelect("lat_strt_arct"), String.class)); assertEquals("3", jdbcTemplate.queryForObject(getSingleColumnValueSelect("lat_end_arct"), String.class)); assertEquals("1", jdbcTemplate.queryForObject(getSingleColumnValueSelect("strt_pd_crgr"), String.class)); assertEquals("UD12000", jdbcTemplate.queryForObject(getSingleColumnValueSelect("pd_segm_id"), String.class)); assertEquals("200908", jdbcTemplate.queryForObject(getSingleColumnValueSelect("stdd_ym"), String.class)); assertEquals("12345678", jdbcTemplate.queryForObject..추천 -
[비공개] ORDER BY 결과 검증 유틸리티(개발자 테스트)
'국내 SI에서는 개발자 테스트를 못한다'가 다수 의견이지만 운이 맞으면 실현할 수 있다. 물론 운만으로 부족하다. 이번 프로젝트에서도 개발자 테스트를 온라인 프로그램에 한해 적용하고 있다. 개발자 테스트를 진척도 측정에 포함하고 있어 PM 역시 중요 지표로 쓴다. 언젠가 기회가 생기면 경험을 공유하고 싶지만, 지금은 소소한 사항만 메모한다. 우여곡절 끝에 DAO 구현체 위주로 테스트하기로 했다. 몇 번의 교육과 동료 검토 끝에 궤도에 올랐는데 대부분의 SI 개발자가 몇 가지 어려워하는 사항이 있었다. 그 중 하나가 목록 조회 기능에서 정렬 여부를 확인하는 코드 작성이다. sql += " ORDER BY a.acct_item_code, " + " a.pd_segm_id "; 그래서 간단한 유틸 함수를 추가했다. /** * * 첫 번째 인자가 두 번째 인자보다 작거나 값이 같은지 확인한..추천 -
[비공개] 아름다운 야경을 보며 한강을 건널 때
집으로 향하는 길에 아름다운 야경을 보면 한강을 건넌다. 택시 뒷좌석에 기대어 강물 위에 흔들리는 불빛들을 보며 여유로움은 한껏 차올라 행복함을 느낀다. 하루에도 수차례 들쭉날쭉한 기분이지만, 이럴 때는 삶에 대해 온전히 감사함을 느낀다. 간사하게도 조금 힘들면 남을 비난하고, 현실을 부정하더니 다른 사람이 아니고 바로 나인데 이럴 땐 모든 집착도 다 놓을 수있다 여긴다. 흔치 않은데다 아주 짧은 순간이지만 그런 상태에 도달할 수 있는 순간이 있다는 사실이 충분히 감격스럽다. 다행스러운 사실은 이런 기분이 처음은 아니라는 점이다. 이미지 출처: 여기추천 -
[비공개] [Spring 기본 다지기 1] Spring과 AOP
오랜만에 다시 스프링에 대한 글을 시작한다. 스프링과 AOP(Aspect-Oriented Programming) 관계는 다음 그림이 잘 설명해준다. AOP는 기괴하다 싶을 용어와 함께 하기로 유명하다. 그래서, 비유적으로 이야기를 끌어가 보자. 위 삼각형을 도원 탁자라고 해보자. 탁자 위에는 사발과 술병이 올려 있을 법하다. 물론 탁자를 앞에 두고 유비, 관우, 장비가 앉아 있다. 스프링의 중추인 IoC는 유비에 비유할만하다. 하지만, 스프링이 EJB를 잠재우는 데에는 관우격인 Portable Service Abstractions의 공이 크다. 이제 하나 남은 AOP는 장비라 하자. AOP는 장비만큼이나 다루기 어렵다. 보통은 으뜸가는 장수로 일당백을 한다. 하지만, 감정에 휘말려 자칫 실수를 범한다. 비유가 기막히게 들어맞는다. 보통 스프링을 처음 쓸 때는 AOP를 쓰는지도 모르고 사용한다. 레퍼런스를 따라 하..추천 -
[비공개] 방법론의 핵심은 R&R
예전에 어떤 개발자가 R&R이란 표현이 모양이 나게 여겨졌는지, 문맥에 관계없이 R&R이란 표현을 남발했다. 옆에서 보면서 드는 생각이 R&R이 폼나는 표현이 아니란 사실을 알기 전까지는 그 의미를 전혀 모르겠구나 싶었다. 그리고 어떤 관리자는 틈만 나면 R&R 따지지 말고 서로 도와가며 일하라고 말했다. 우습게도 그 말에 반박했던 나 역시 얼마 후 다른 이에게 비슷한 말을 했다. 올해로 8년째 방법론과 직간접적으로 인연을 맺어왔다. 누군가에겐 우습게 들릴 수 있지만, 방법론에 대한 애증이 쌓였다. 요즘 누가 나에게 방법론이 무어냐고 물으면, '방법론은 R&R이다.'라고 말해주고 싶다. R&R은 'Role and Responsibility'의 약자다. 우리말로 역할과 책임이다. 역할과 책임을 규정하지 않고 일하는 조직이 어디 있을까? 하지만, 방법론이 효과를 발휘하려면 R&R..추천