xUnitTestPattern/chapter9
View more presentations from eritaka.

8월 7일 토요일에 아꿈사에서 발표한 자료입니다. 
이 책은 순차적으로 보기보다는 계속 뒤의 패턴 레퍼런스를 참조해가며 보는게 가장 좋아 보입니다.
프로젝트에 단위 테스트를 적용하기 전부터 이 책을 읽는다면 많은 도움이 될 겁니다. 

이번 자료는 종빈님이 제공해준 Architect 테마를 적용하여 만들어봤습니다. 

언제나 발표 자료는 급하게 만들게 되는데 다음부턴 좀 미리 만들 수 있도록 노력해야할 것 같네요

저작자 표시 비영리 동일 조건 변경 허락
Posted by eritaka

이 책은 디버깅에 관해 체계적이고 실용적인 관점에서 서술되었다.
특정 디버깅 도구를 사용하는 방법에 관한 내용은 없다. 

플랫폼에 무관하게 디버깅에 대한 기본적인 이론과 방법을 다루고 있는 책이다. 
따라서 이 책을 읽고 단숨에 디버깅 툴을 손쉽게 다룰 수 있을 거란 생각은 버리는 게 좋다. 
특정 플랫폼에서 특정 툴을 사용한 디버그 방법을 설명하는 그런 내용은 전혀 없으니까.
단지 디버깅을 하기에 앞서 한 발 물러서서 문제의 본질에 대해 생각할 수 있는 기회를 주는 책이다.

'내가 디버깅을 한다는 행위가 무엇인지 제대로 알고 있는가?'라는 질문에 답하지 못하는 개발자,
IDE의 디버거를 사용할 줄 알면 디버깅을 다 안다고 생각했던 개발자,
다들 신경쓰지 않는 것 같고 '디버깅은 원래 삽질의 연속이야'라고 생각해버렸던 개발자 모두에게 추천한다.


우리는 소프트웨어 개발에 드는 시간보다 버그를 잡는데 훨씬 더 많은 시간을 소모하고 있다.
개발자라면 자신이 실제 개발 중 디버깅에 얼마나 많은 시간을 소모하고 있는지 잘 알 것이다. 
그럼에도 불구하고 우리는 체계적인 디버깅 수업조차 받아본 적이 없다.(적어도 나로서는, 그리고 아마 대부분의 개발자가.)
디버깅을 체계적으로 연구하고 학습하기보다는 그 디버깅 하는 기술에만 초점을 맞추어 그것도 구전으로 비법(도구 사용법)을 전수받는 일이 빈번하다.

왜 디버깅에 대해 그토록 힘들어 하면서도 개선하기 위해 체계적으로 공부하지 않는 걸까?
어쩔 수 없이 겪어야 한다면 좀 더 쉽고 유연하게 대응해야 하는 것이 아닐까?

그 모든 것에 대해 깨닫고 나서 공부하려 해보면 마땅한 책도 부족했다.

이제 그런 교육을 받을 수 있는 책이 나왔다. 
게다가 딱딱하지 않고 말랑말랑한 내용만을 담은 그야말로 실용적인 책.

만약 '프로그램은 왜 실패하는가?(Why Programs Fail?)'를 먼저 일독했다면 이 책의 내용이 생소하지 않을 것이다. 
그러나 지루한 내용은 질색이며 쉽게 이해 가능한 내용을 원한다면 이 책을 추천한다.
실용적인 프로그래머 시리즈의 특성이 바로 그런 거니까. 
'프로그램은 왜 실패하는가'는 풍부한 내용을 담고 있지만 딱딱하고 응용하기 어려운 내용이 포함되어 있었다면 이 책은 그 반대로 이해하면 될 것이다. 
책 내용도 심플하여 출근 길 혹은 주말이면 금새 읽을 수 있다. 

개발자라면 버그를 수정한다는 것이 정확히 어떠한 의미인지 꼭 알아야 한다.
버그가 필연이라면 보다 적게, 그리고 보다 효율적으로 수정해야 한다.
이 책이 그 시작이 되어 줄 수 있을 것이다.

참고: 10장은 소스코드 없이 이해하기 어려웠다.
(단언문과 단위 테스트에 관한 명쾌한 정의도 포함되어 있다. 개인적으로는 Eiffel 언어의 Design by contract 개념에 대해서도 알아두길 추천한다)
takeMemorySnapshot() 과 reportMemoryLeaks()의 구현을 보려면 http://www.paulbutcher.com/2009/11/debug-it-sample-code/ 을 참고하자
저작자 표시 비영리 동일 조건 변경 허락
Posted by eritaka
흔히 자금성에 비하면 경복궁은 아주 초라한 작은 궁궐에 불과하다라는 말이 많았었고 나 자신도 자금성에 비하면 우리나라 궁궐은 볼 것이 없지 않을까 하고 생각하고 있었다.

그런데 최근 광화문 복원 공사가 다음달로 종료된다는 소식에 좀 찾아보니... 실제로 경복궁이 그 크기나 규모 면에서 큰 차이가 없다는 것을 알게 되었다. 
즉 지금과 같은 모습은 일제 시절에 처참히 파괴되었기 때문이지 실제로 조선시대 궁궐은 동양의 그 어느 궁궐과 비교해도 절대 왜소한 크기가 아니었다. 

조선시대 정궁으로 인정받던 경복궁과 실제로는 경복궁보다 오히려 더 많이 쓰였던 창덕궁, 그리고 창덕궁 우측에 맞닿아 있던 창경궁까지 합하면 그 규모는 자금성은 저리가라 할 정도...

자금성의 칸수가 9999칸이며 현재는 8000칸 정도가 남아있다. 
그럼 경복궁은? 
경복궁은 고종시절 330동에 칸수로만 7200 칸 정도이며 면적은 이리저리 보면 자금성의 약 70% 정도 되는 듯. (구글 어스 사진들도 있고) 
일제 침략기를 거치며 1/10 정도인 36동만 남게 되었으며 경복궁 뒤엔 후원이 있었는데 이 자리가 지금의 청와대.
창덕궁과 창경궁은 한 몸이나 마찬가지이므로 합해서 4000 칸 정도이니 합하면 엄청난 규모가 된다. 11200 칸?;
면적은 창덕궁과 창경궁이 경복궁의 2배 남짓? 정확한 규모는 잘 모르지만...
게다가 경희궁과 덕수궁도 있었으니... 
다만 일제시절 모두 철저하게 파괴된 것 뿐이다.

물론 화려함이나 위엄과 웅장함을 목표로 삼았던 자금성의 개개의 건물과 다른 점도 있지만 이 정도면 그리 뒤지는 궁궐은 아니라고 본다. 또한 우리나라의 소나무 목재 특성 상 큰 건물을 짓는 데에는 한계가 있었다고 한다.

자, 그럼 여기서 칸은 무슨 단위이냐 하면 기둥과 기둥 사이를 한 칸이라고 한다. 
예를 들어서 경복궁에서 가장 큰 건물인 근정전은 앞면의 기둥이 6개인데 기둥과 기둥 사이를 1칸이라고 하니까 근정전의 앞면은 5칸이겠죠. 근정전 옆면도 기둥이 6개라서 옆면이 5칸입니다. 그래서 근정전 건물의 크기는 앞면 5칸에 옆면 5칸을 곱해서 모두 25칸 건물이 됩니다.

뭐 어쨌든 최근 1차 복원사업이 20년간 진행되어 올해가 마지막이라고 한다.
다음달 8월 15일로 광화문 복원 공사도 마무리된다고 하니 기대가 된다.

문화재청은 내년부터 다시 20년 간 경복궁 전각을 76%까지 복원하는 2차 복원정비사업을 추진할 계획이라고 한다. 1차 복원이 중심 건물들로 경복궁의 뼈대를 갖추는 것이었다면, 2차 복원은 임금의 수라간과 궐내각사 등 많은 부속건물을 지어 살을 붙이는 과정이다.

기대가 된다.

자 아래는 지금까지 진행된 경복궁 복원 정비 사업이다. 여기 담긴 정보는 대부분 경복궁 홈페이지와 위키에서 가져왔다. 

경복궁 복원 정비 사업
기본방향
- 조선정궁의 기본 궁제로 복원정비
- 복원지역은 우선순위에 따라 단계별로 정비
- 사업순서는 기본적 주요건물, 주축선상의 건물, 외조의 중심건물 순으로
  복구한 다음 외곽지역의 건물들을 순차적으로 복구토록 함.
- 중건 기준연대는 남아있는 건물들이 축조된 시기인 고종의 경복궁 중건시기
  (1865년~1888년)를 기준으로 함
사업 개요 - 사업기간 : 1990년 ~ 2009년 (20개년)
- 사 업 비 : 1,789억원
- 사업대상 : - 강녕전 등 93동 3,250평 복원정비
  · 침전 권역 (1990~1995) : 강녕전 등 12동 794평 복원
  · 동궁 권역 (1994~1999) : 자선당 등 18동 352평 복원
  · 흥례문권역 (1996~2001) : 흥례문 등 6동 517평 복원
  · 태원전권역 (1997~2004) : 태원전 등 25동 496평 복원
  · 광화문및기타권역 (2001~2009) : 광화문 등 32동 1,091평 복원 ※ 경복궁 기본궁제 복원 후 건물 면적 비교
고종 당시 기존건물(’90년) 2009년까지 복원 후
330여동
(약 15,600여평)
36동
(2,957평)
93동 복원
(3,250평)
총 129동 (6,207평)
고종당시의 40%

→ 고종당시 : 330여동 (약 15,600여평)
 

→ 기존건물(’90년) : 36동 (2,957평)


→ 2009년까지 : 93동 복원 (3,250평) 



그리고 아래는 창덕궁과 창경궁을 그린 동궐도이다.

어마어마 하지 않은가. 경복궁을 빼고도 이 정도이니. 
음 어쨌든 이 정도면 우리나라 궁궐에 대해 가졌던 소박한 느낌은 지워버려도 될 듯 하다. 

다음달 1차 사업이 끝나면 조만간 한번 가볼까 한다. 기대가 된다. 내 교태전에 앉아 볼테다.; 
저작자 표시 비영리 동일 조건 변경 허락
Posted by eritaka
HolubOnPatterns/chapter3_1
View more presentations from eritaka.

6월 26일 아꿈사에서 토요일에 발표했던 자료입니다.
3장이 혼자 발표하기엔 자료가 많아 1/3 으로 나누어 첫번째로 발표했습니다
역시 slideshare 에서는 GIF 등이 표현되지 않는군요 움직이는 그림인데.. :(
패턴 책 중에서는 실용적인 주제로 설명하여 인상적입니다. 
패턴에 관심이 있다면 꼭 봐야할 책으로 선정합니다.

어설픈 실력으로 그림 그리는데 시간을 다 잡아먹었습니다.
역시 그림 스터디라도 해야할듯...
저작자 표시 비영리 동일 조건 변경 허락
Posted by eritaka
트위터를 눈여겨보며 나도 해야지 해야지 하다가 못하고 있었는데... 
이제서야 시작합니다. 

사실 블로그의 부족한 점(장문의 내용으로 인한 접근성의 한계)과 싸이월드에서 제가 가장 싫었던 점(서로 간의 대화 매개체가 사진이기 때문에 주제가 한정되는 점)을 극복한 트위터가 좋아보였었죠

어쨌든 제 트위터 id는 eritakas 입니다. 누군가 eritaka를 선점했더군요 
아무래도 UUID 가 필요합니다. 아니면 namespace 라도 도입해달라! 
결국 아무도 쓰지 않으면서 맘에 드는 id를 찾지 못했기 때문에 s 를 추가했습니다 :(

스마트폰이 생기기 전까지는 컴터를 사용할 수 밖에 없지만 :( 
어쨌든 이젠 나도 트위터 뉴비 :)

저작자 표시 비영리 동일 조건 변경 허락
Posted by eritaka
TAG 트위터

I'm Free.

Diary 2010/06/04 00:53
사실 며칠 좀 됐지만 정신적으로도 육체적으로도 바쁜 일이 많아 이제서야 올리게 되는군요
남들은 모두 '벌써 제대야? 시간 진짜 빠르네..'라고 하는 그런 때 입니다.
2010년 5월 28일자로 소집해제 되었습니다. 벌써 일주일이나 지났네요

뭐 어쨌든 이제 저도 예비군입니다. 저도 군번이란 게 있더군요 :)
아무 것도 바뀐 것 없이 계속 그대로 생활입니다만 단지 몸과 마음이 점점 바빠질 것 같습니다.

자, 이제 변명조차 할 수 없게 되버렸으니 열심히 살아야 합니다. 
파견근무, 스터디, 영어, 기타 등등 중요한 것들이 태산이니까요 :)

인증샷 보기


저작자 표시 비영리 동일 조건 변경 허락
Posted by eritaka
최근에 오라클에서 갑자기 함수 오버로딩에 관한 이야기를 접했습니다.
한번도 사용해 본 적이 없었지만 왠지 쉽게 될 것 같아 만들어 보려했지만 생각처럼 되지는 않더군요
예를 들어 다음과 같이 사용하고 싶은 거였죠

SELECT UserFunction() FROM DUAL;
SELECT UserFunction('ERITAKA') FROM DUAL;
SELECT UserFunction('ERITAKA', '.NET') FROM DUAL;

그런데 이게 함수만 만들어 바로 사용하는 건 불가능했습니다.
즉, Package 로 감싸지 않는 이상은 오버로딩이 불가능했습니다.
그래서 다음과 같이 Package를 만들고 함수를 추가했습니다.

CREATE OR REPLACE PACKAGE Eritaka AS

  FUNCTION UserFunction RETURN VARCHAR2;
  FUNCTION UserFunction(p_field IN VARCHAR2) RETURN VARCHAR2;
  FUNCTION UserFunction(p_field IN VARCHAR2, p_field2 IN VARCHAR2) RETURN VARCHAR2;
  FUNCTION UserFunction(p_field IN NUMBER) RETURN VARCHAR2;
  
END;

그런 후에 아래와 같이 Package의 Body를 만들어 줍니다.

CREATE OR REPLACE PACKAGE BODY Eritaka AS

  FUNCTION UserFunction RETURN VARCHAR2
  IS 
  BEGIN
    RETURN 'Eritaka';
  END;
  
  FUNCTION UserFunction(p_field IN VARCHAR2) RETURN VARCHAR2
  IS
  BEGIN
    RETURN to_char(p_field);
  END;
  
  FUNCTION UserFunction(p_field IN VARCHAR2, p_field2 IN VARCHAR2) RETURN VARCHAR2
  IS
  BEGIN
    RETURN to_char(p_field || p_field2);
  END;
  
  FUNCTION UserFunction(p_field IN NUMBER) RETURN VARCHAR2
  IS
  BEGIN 
    RETURN UserFunction() || to_char(p_field);
  END;
END;
 
그러면 이제 다음과 같이 사용할 수 있게 됩니다.

SELECT Eritaka.UserFunction() FROM dual;
SELECT Eritaka.UserFunction('eritaka') FROM dual;
SELECT Eritaka.UserFunction('eritaka', '.net') FROM dual;
SELECT Eritaka.UserFunction(3) FROM dual;

결과는 뭐 아래와 같습니다.

Eritaka
eritaka
eritaka.net
Eritaka3

그러면 이제 처음 목적과는 조금 다르게 Package를 꼭 서두에 붙여야 사용가능하다는게 문제입니다.
사실 이 부분을 해결하기 위해서는 Synonym 을 생성하면 되겠다. 라고 간단히 생각했는데... 안되더군요.  oTL
즉, 아래처럼 하면 될거라고 무심코 생각해버렸었다는.. ㅠ.ㅠ

Create Public Synonym UserFunction for Eritaka.UserFunction;

아참 MS-SQL 의 T-SQL 에서는 오버로딩이 안되는 것 같습니다.
요새 느끼는 거지만 오라클을 사용하다 씨퀄을 사용하면 왜 이렇게 불편한 점이 많은지...
Posted by eritaka

최근에 64bit 환경의 Windows7 에서 다음과 같은 프로그램 오류가 난다는 보고를 받았습니다.


보통 80040154 오류는 COM 클래스를 레지스트리에 등록하지 않아 발생하는 경우이나 이 경우는 등록 후에도 해당 증상이 발생했습니다. 

결국 문제는 64비트 환경이기 때문에 일어나는 현상으로 주소 공간이 맞지 않기 때문에 발생합니다.
.net 은 Any CPU로 빌드되어 실행 시에 각 환경에 맞도록 64비트로 컴파일되어 실행되지만 해당 COM 개체는 처음부터 32비트로 컴파일되어 있습니다. 여기서 문제가 발생합니다.
즉 64비트 .net 응용 어플리케이션은 64비트 주소공간을 가지고 있는데 in-process 방식의 COM DLL 은 32비트 주소공간을 가지고 있기 때문에 해당 dll 을 메모리로 로드할 수 없어서 생기는 일이죠.

해결 방법은 크게 2가지로 나눌 수 있습니다.
첫번째로는 32비트 버전이든 64비트 버전이든 둘 다 일치시켜주는 방법입니다.
아주 쉽죠?
즉 아래와 같이 각 대상 플랫폼의 환경이 서로 다른데 이걸 맞춰주셔야 합니다.

관리 코드의 경우


비관리 코드의 경우


그런데 이 경우는 생각보다 까다롭습니다. 일단 제 경우처럼 해당 COM DLL 을 외부에서 제공받은 경우이며 해당 업체에서 64bit 버전을 제공할 수 없는 경우가 있을 수 있고 그 경우 .net 을 모두 32bit 로 고정시켜 빌드해야 하므로 CI 환경을 갖추지 않은 경우 빌드 스크립트를 수정하지 않고 일일이 테스트 해야 하므로 까다롭죠.
게다가 .NET 이 64bit 로 실행가능함에도 다운그레이드 해야하므로 뭔가 기분이 좋지 않죠.
마지막으로 빌드된 버전이 2가지 버전으로 나뉘는 것도 꺼림칙 합니다.

그래서 두번째 방법이 나옵니다.
두번째 방법은 out of proc 방식으로 COM을 별도의 실행 프로세스로 만들어 참조하는 방법입니다. 즉 COM+ 응용 서비스를 사용하여 32bit 프로세스로 Wrapping 하는 방법입니다. 이렇게 되면 닷넷 응용 어플리케이션의 주소 공간으로 해당 dll을 로드할 필요가 없게 되니 당연히 문제도 사라집니다.
즉 관리도구의 구성요소 서비스에서 COM+ 응용 어플리케이션을 선택하고 빈 응용 어플리케이션을 하나 만듭니다.
COM+ 응용 프로그램은 하나 이상의 COM 구성 요소로 구성됩니다. 그러니 해당 DLL을 COM 구성요소로 등록시킵니다.
성공하면 아래와 같은 화면을 보게 됩니다.

등록이 된 후에는?
잘 되는지 커피 한잔 마시며 테스트 하면 됩니다.
Posted by eritaka
TAG 64bit, COM+

2009년 연구실 신년회 기억이 아직도 생생한데 벌써 2010 연구실 신년회입니다.
항상 다른 연구실과 다른 신년회를 가졌던 것 같은데 올해는 더욱 특이한 신년회였습니다.

저녁식사야 매년 같았지만 올해는 2010년 1월 29일 강남 토즈 2호점에서 각자 자유주제로 페차쿠차 형식으로 발표하는 시간이 추가되었습니다.
페차쿠차 형식으로 짧은 시간으로 발표하진 못했으나 다들 새로운 시도로 페차쿠차 형식이 지향하는 바에 대해 공감했으리라 생각합니다.
아래는 제가 발표한 내용입니다.

2010 Dblab신년회 안명환
View more presentations from 동균 이.

무엇보다 변화를 받아들이고 실천하는데 있어서 학생들을 따라갈 수가 없는 나이가 되었나 싶어서 슬픈 신년회이기도 했습니다.
역시 아이폰이 대세더군요
10년을 써온 핸드폰 번호 바꾸는 것이 싫기도 하고 사람들과 즐겁게 얘기하는 것이 더욱 좋다며 애써 외면했으나 아이폰 4G가 나올 때 쯤이면 안드로이드폰이든 아이폰이든 바꾸지 않을까 예상합니다.
내년 신년회에는 저도 지지 않겠습니다. (부러우면 지는거다?)
Posted by eritaka
요새 가장 크게 영감을 얻고 있는 부분은 '실생활을 관찰하기' 입니다.
주변에서 관찰하고 흔한 것들에서 의미를 부여합니다.
흔하게 지나쳤던 것들을 관찰하다 보면 큰 영감을 받을 때가 있기 때문이죠

그렇게 실생활을 관찰하다 최근들어 가장 절감하는 것이 바로 '구조를 먼저 개선하자' 입니다.
우리는 보통 기술적 맹신에 빠지기 쉽습니다.
'누가 이런 걸 했더니 좋다더라. 우리도 도입하자!' 는 식이죠
그러나 그 이전에 '왜 우리가 먼저 도입 못했을까. 도입한 사람들과 우리와의 차이점은 무엇인가?' 에 집중해야 합니다.
그리고 나서 도입하기 쉬운 문화를 먼저 만들어야 합니다.
그러면 일이 쉬워집니다.
그렇지 않고 기술만을 도입하려 한다면 실패할 확률이 매우 높습니다.
기술 이전에 구조 혹은 문화를 바꾸어야 합니다.

이전 아파트에 살 때 꿈꾸던 것이 있었습니다.
'아 나른한 오후에 나가서 책을 읽고 사람들과 대화를 할 수 있는 그런 아파트 문화를 만들고 싶다'...
그렇게 10년을 넘게 살고 이사를 했습니다.
그런데 평생 나가서 하지 않던 저도 그렇고 다른 사람들도 갑자기 집 밖 벤치에 나와서 책을 읽는 사람들이 생기기 시작했습니다.
그럼 왜 이런 변화가 생겼을까요
이전 아파트 단지에는 벤치 주변에 차가 있는 경우가 많았습니다. 또한 차들이 주변에 지나가서 시끄럽죠.
또한, 설치된 벤치의 수도 적었지만 일자형 벤치만이 주를 이루었습니다.
새로 이사한 아파트 단지에는 사람들이 앉고 걸어다니는 공간과 차들이 움직이는 공간을 완전하게 분리했습니다.
그렇게 조용한 공간을 만들고 벤치만이 아니라 테이블도 설치하고 멋진 정원도 조성했습니다.

그렇게 아파트 디자인을 변경했더니 사람들이 갑자기 나와서 책을 읽기 시작한 겁니다.
누가 뭐라고 하지 않아도 자연스럽게 움직입니다.

새로운 문화를 도입하고 싶으세요?
먼저 구조를 변경하세요 문화가 자연스럽게 스며들 수 있도록 환경을 구축하면 문화가 자연스레 변경됩니다.
저작자 표시
Posted by eritaka
TAG DESIGN