연례 행사인 회고록 작성의 시간이 돌아왔습니다. 작년 기록은 2007년 기년회 기록을 보세요. 올해 목표는 원래 NCHOVY 외에는 달리 세운게 없었습니다.
새로운 언어: 얼랭
Erlang은 Programming Erlang 원서로 책도 다 봤고, 번역서 리뷰에도 참여했습니다. 실제 얼랭으로 개발도 좀 해봤는데, 아무래도 생산성이 안 나와서 GG입니다. 일단 가장 큰 불만은 라이브러리가 극히 빈약하다는 것인데 아마 몇 년 지나면 해결될 수도 있겠죠. 당장 XML 파싱부터 버그가 나오고 그래서 개발할 때마다 오만가지 쓸데없는 것을 신경쓰느라 아무래도 안 되겠다 싶었습니다.
그렇지만 아무튼 제 인생에서 지금껏 가장 재미있게 공부했던 언어였습니다. 함수형 언어인데다가 문법 수준에서 병행성 지원을 다 해주다보니 깔끔하기도 하고, 핫 코드 스왑 등 재미있는 아이디어도 많이 있었습니다.
아! 그리고 마이크로소프트웨어 8월호 얼랭 특집으로 CouchDB 기사를 기고한 것도 빼놓을 수 없지요. 이 특집을 계기로 thinkr 님과 고감자 님을 만나뵐 수 있었습니다.
이맥스
아직 현란하게 쓸 수준은 안 되지만, 그래도 드디어 리눅스에서 편집기 하나를 제대로 쓸 수 있게 되었습니다. 예전엔 vi를 거의 pico (nano) 수준으로 써서 도무지 리눅스에서는 제대로 코딩도 못 해먹겠고 그냥 putty에서 복사 붙여넣기 하는 식으로 삽질스럽게 작업을 했었습니다. 아 쪽팔려라. 그래서 마음 먹고 Learning GNU Emacs 책 하나 질러서 열심히 연습했더니 금방 손에 붙더군요. 지금껏 이맥스가 안 퍼진 건 순전히 자료 부족이란 생각이 들었습니다. ECB(Emacs Code Browser)도 설치해서 웬만한 IDE 부럽지 않게 레일스와 얼랭 코드 개발을 할 수 있었습니다. Rails 개발은 ECB에 rails-mode 붙여서 쓰는게 최고인 듯. 스텁 생성이나 DB 마이그레이션도 단축키로 다 할 수 있었죠. 얼랭은 아직 erlang-mode 쓰는 것 외엔 제대로 된 개발 환경 자체가 없네요. 단지 ECB가 모듈 간 버전 호환이 잘 안 되는 문제가 있었는데, 그래도 있다는 것만으로도 감사한 일.
컴퓨터 프로그램의 구조와 해석
작년 12월부터 겨울 내내 진행했었는데, 이건 예전 글을 참고하세요. 중도에 그만둬서 안타깝지만 그래도 상당히 빡세게 진도 나갔습니다.
시간이 모자라지나 않을까 걱정되긴 했지만 그래도 한 번 해보자는 생각으로 헐랭이 형님께서 올리신 메타스플로잇 연구회 모임에 참여했습니다. 안 했으면 무진장 후회했을 것 같네요. 보안 업계의 유명하신 분들을 이 모임을 통해 만나뵐 수 있어서 영광이었습니다. 참여 안 했으면 아마 KISC도 몰랐을 듯. 저는 두 번째 발표를 맡았습니다. 필요하신 분은 메타스플로잇 3 아키텍처 자료를 참고하세요. 이 다음에도 마지막 모임 때 ASP.NET HTTP 모듈을 이용한 웹 터널링 데모를 보였습니다.
루비 온 레일스 2.0
1.0 때부터 했으면 그나마 쉽게 적응할 수 있었을텐데, 2.0 나온 다음 시작하려고 하니 참 힘들었습니다. 국내에서 나온 책은 거의 도움이 안 되었고, 2.0 기준으로 출간된 The Rails Way가 결정적인 도움이 되었습니다. 아무래도 2.0에서 도입된 REST 스타일이 가장 큰 장벽이었던 것 같네요. 팀원들 개강이라는 미룰 수 없는 시간적 압박도 있었고요. (빨리 숙달해서 팀원들에게 가르쳐줘야 했기 때문에 더 압박 -_-) 뭐 그래도 죽어라 공부해서 별 탈 없이 NCHOVY 인터넷 스톰 센터를 오픈할 수 있었습니다. 처음에는 Nginx 웹 서버와 Mongrel 클러스터를 연동해서 사용했고, 이후 Passenger 모듈이 나오면서 아파치 웹 서버로 갈아탔습니다. 하지만 역시 루비는 성능이 잘 안 나온다는 느낌이네요. 대규모 서비스를 할 수는 있겠지만 운영 비용 문제가 걸림돌이 되는 것 같습니다.
PADOCON2008 컨퍼런스 발표
인젠에 요청해서 NDSL 경품도 전달하고, 발표도 했습니다. 저는 스팸을 주제로, 승현이는 스푸핑과 스니핑을 주제로 발표했습니다. 이 행사에서 많은 보안 동아리 회원들을 만날 수 있었어요. 다음 파도콘 컨퍼런스는 2009년 1월에 열린다고 합니다. 지금 중국에 있는 관계로 발표는 고사하고 참가도 할 수 있을지 (..)
자료 다운로드: Ending Spam
자바 개발 학습
얼랭 포기하고 자바로 돌아서면서 수업 들을 때나 좀 써봤던 자바를 공부하기 시작했습니다. 엔터프라이즈 개발이라는 면에서는 닷넷과 비슷하게 보일 수 있지만, 닷넷 환경은 쓰는게 다 정해져 있는데 반해 자바 환경은 오픈소스를 이것 저것 비교해보고 조합해서 써야 한다는 면에서 상당히 머리가 아프더군요. 그래도 어쩌겠습니까, 다 돌아가려면 현실적으로 자바 밖에 없네요.
이 부분은 올해 말이나 내년 초가 되어야 결정이 나겠지만, 내년부터 네오와처를 유지보수하게 될 가능성이 있습니다. 지금은 PCI Express 지원하는 인텔 NIC를 제어하는 트래픽 펌핑 드라이버를 개발하고 있습니다. 만약 하게 된다면 TCP/IP 처리도 제대로 공부해야겠지요. Aho-Corasick 문자열 패턴 매칭을 문서로 정리했고, NDIS와 Intel 8257x 포팅 개발 문서도 작업이 완료되면 정리할 예정입니다.
지금까지 NIC가 하는 일을 아주 단순하게 생각하고 있었는데, 실제로 드라이버를 구현하려니 아주 많은 기능을 제어해야 하더군요. DMA 제어는 물론이고 (이것도 동적으로 DMA 공유 메모리 할당 조정하는 고급 기능을 구현하는 경우가 있음), 인터럽트 속도 조절, NVM 읽고 쓰기 (이것도 EEPROM이랑 플래시 따로 제어하는 경우가 있고, SPI로 제어하는 경우가 있음), LED 제어, TCP/IP 체크섬 오프로딩, 링크 속도 자동 협상, 흐름 제어 (PAUSE FRAME), VLAN 처리, 유니캐스트 및 멀티캐스트 수신 주소 설정, AMT 지원, 패킷 스플릿 등. PHY도 Copper, Fiber, SerDes 따라 제각기 다르구요. NDIS도 직접 구현하면서 이제 하나씩 감이 잡히고 있습니다. 지금까지 정리했던 글들을 아래 붙입니다.
Lucene, BDB, Inverted Index
코드게이트
XML-RPC
TELNET
OSGi, Felix, BND
구매 도서 (미완결)
올해는 NCHOVY 팀 책을 통합 구매했기 때문에 골라내기가 쉽지 않군요.
올해 3월에 거금을 들여 입수한 커즈와일 SP2X 키보드와 함께 즐거운 연주 생활을 하고 있습니다. 후후후. 올해는 딱 2곡만 새로 열심히 연습한 것이고, 나머지는 기존 연습하던 곡을 계속 연습했네요. 물론 In An Old Castle 같은 곡은 새로 친 것이긴 하지만 워낙 쉬운 곡이라.
이별의 곡은 외워서 무난하게 칠 수 있을 정도는 되었습니다. 아직 제대로 된 연주라고 할 수는 없지만.
비창 1악장은 시작한지 얼마 안 되었지만 맹렬하게 연습 중입니다. 농담 아니라 가끔 손톱이 부서질 정도로 연습합니다.
나머지는 커즈와일로 깨끗하게 (하지만 디지털 특유의 밋밋함도 -_-) 녹음한 것 뿐입니다.
서산 간월도 마라톤 10K 완주

운동 제대로 안 하고 뛰어서 죽는 줄 알았네요. 기록은 01:08:34.48입니다.
새로운 언어: 얼랭
Erlang은 Programming Erlang 원서로 책도 다 봤고, 번역서 리뷰에도 참여했습니다. 실제 얼랭으로 개발도 좀 해봤는데, 아무래도 생산성이 안 나와서 GG입니다. 일단 가장 큰 불만은 라이브러리가 극히 빈약하다는 것인데 아마 몇 년 지나면 해결될 수도 있겠죠. 당장 XML 파싱부터 버그가 나오고 그래서 개발할 때마다 오만가지 쓸데없는 것을 신경쓰느라 아무래도 안 되겠다 싶었습니다.
그렇지만 아무튼 제 인생에서 지금껏 가장 재미있게 공부했던 언어였습니다. 함수형 언어인데다가 문법 수준에서 병행성 지원을 다 해주다보니 깔끔하기도 하고, 핫 코드 스왑 등 재미있는 아이디어도 많이 있었습니다.
아! 그리고 마이크로소프트웨어 8월호 얼랭 특집으로 CouchDB 기사를 기고한 것도 빼놓을 수 없지요. 이 특집을 계기로 thinkr 님과 고감자 님을 만나뵐 수 있었습니다.
이맥스
아직 현란하게 쓸 수준은 안 되지만, 그래도 드디어 리눅스에서 편집기 하나를 제대로 쓸 수 있게 되었습니다. 예전엔 vi를 거의 pico (nano) 수준으로 써서 도무지 리눅스에서는 제대로 코딩도 못 해먹겠고 그냥 putty에서 복사 붙여넣기 하는 식으로 삽질스럽게 작업을 했었습니다. 아 쪽팔려라. 그래서 마음 먹고 Learning GNU Emacs 책 하나 질러서 열심히 연습했더니 금방 손에 붙더군요. 지금껏 이맥스가 안 퍼진 건 순전히 자료 부족이란 생각이 들었습니다. ECB(Emacs Code Browser)도 설치해서 웬만한 IDE 부럽지 않게 레일스와 얼랭 코드 개발을 할 수 있었습니다. Rails 개발은 ECB에 rails-mode 붙여서 쓰는게 최고인 듯. 스텁 생성이나 DB 마이그레이션도 단축키로 다 할 수 있었죠. 얼랭은 아직 erlang-mode 쓰는 것 외엔 제대로 된 개발 환경 자체가 없네요. 단지 ECB가 모듈 간 버전 호환이 잘 안 되는 문제가 있었는데, 그래도 있다는 것만으로도 감사한 일.
컴퓨터 프로그램의 구조와 해석
작년 12월부터 겨울 내내 진행했었는데, 이건 예전 글을 참고하세요. 중도에 그만둬서 안타깝지만 그래도 상당히 빡세게 진도 나갔습니다.
- SICP의 중턱에서
- 연습문제 3.25 다차원 테이블 조작
- SICP 연습문제 3.27
- SICP 연습문제 3.19 토끼와 거북이
- SICP 7차 모임 문제 할당
- SICP 6차 문제 할당
- SICP 5차 모임용 문제 풀이 할당
- SICP 그림 언어 연습
- car와 cdr의 사용 (SICP 142쪽)
- for-each 구현 (SICP 139쪽)
- square-list 구현 (SICP 138쪽)
- SICP 3차 코드 북
- SICP 3차 모임 발제 및 문제 풀이 할당
- SICP 연습문제 1.21 ~ 24 발판
- SICP 연습문제 1.13
- SICP 연습문제 1.11
- SICP 연습문제 1.16
시간이 모자라지나 않을까 걱정되긴 했지만 그래도 한 번 해보자는 생각으로 헐랭이 형님께서 올리신 메타스플로잇 연구회 모임에 참여했습니다. 안 했으면 무진장 후회했을 것 같네요. 보안 업계의 유명하신 분들을 이 모임을 통해 만나뵐 수 있어서 영광이었습니다. 참여 안 했으면 아마 KISC도 몰랐을 듯. 저는 두 번째 발표를 맡았습니다. 필요하신 분은 메타스플로잇 3 아키텍처 자료를 참고하세요. 이 다음에도 마지막 모임 때 ASP.NET HTTP 모듈을 이용한 웹 터널링 데모를 보였습니다.
루비 온 레일스 2.0
1.0 때부터 했으면 그나마 쉽게 적응할 수 있었을텐데, 2.0 나온 다음 시작하려고 하니 참 힘들었습니다. 국내에서 나온 책은 거의 도움이 안 되었고, 2.0 기준으로 출간된 The Rails Way가 결정적인 도움이 되었습니다. 아무래도 2.0에서 도입된 REST 스타일이 가장 큰 장벽이었던 것 같네요. 팀원들 개강이라는 미룰 수 없는 시간적 압박도 있었고요. (빨리 숙달해서 팀원들에게 가르쳐줘야 했기 때문에 더 압박 -_-) 뭐 그래도 죽어라 공부해서 별 탈 없이 NCHOVY 인터넷 스톰 센터를 오픈할 수 있었습니다. 처음에는 Nginx 웹 서버와 Mongrel 클러스터를 연동해서 사용했고, 이후 Passenger 모듈이 나오면서 아파치 웹 서버로 갈아탔습니다. 하지만 역시 루비는 성능이 잘 안 나온다는 느낌이네요. 대규모 서비스를 할 수는 있겠지만 운영 비용 문제가 걸림돌이 되는 것 같습니다.
PADOCON2008 컨퍼런스 발표
인젠에 요청해서 NDSL 경품도 전달하고, 발표도 했습니다. 저는 스팸을 주제로, 승현이는 스푸핑과 스니핑을 주제로 발표했습니다. 이 행사에서 많은 보안 동아리 회원들을 만날 수 있었어요. 다음 파도콘 컨퍼런스는 2009년 1월에 열린다고 합니다. 지금 중국에 있는 관계로 발표는 고사하고 참가도 할 수 있을지 (..)
자료 다운로드: Ending Spam
자바 개발 학습
얼랭 포기하고 자바로 돌아서면서 수업 들을 때나 좀 써봤던 자바를 공부하기 시작했습니다. 엔터프라이즈 개발이라는 면에서는 닷넷과 비슷하게 보일 수 있지만, 닷넷 환경은 쓰는게 다 정해져 있는데 반해 자바 환경은 오픈소스를 이것 저것 비교해보고 조합해서 써야 한다는 면에서 상당히 머리가 아프더군요. 그래도 어쩌겠습니까, 다 돌아가려면 현실적으로 자바 밖에 없네요.
- 이클립스: 처음엔 직관적이지 않은 UI 때문에 고생했습니다. 그렇다고 넷빈즈를 쓰자니, 훨씬 직관적이긴 한데 별로 안 이쁘기도 하고 기능도 떨어지고 말이죠. 이클립스 책 하나 사서 해결했습니다. 역시 직관적이지 않은 UI도 익숙해지면 편하게 느껴지네요. 물론 이클립스 장점도 많습니다. 코드 복사해서 패키지 이름에 대고 붙여넣기만 해도 알아서 자바 소스 파일 생성되고 문법 맞춰서 포맷팅 다 되고, 의외의 부분에서 스마트한게 느껴지더군요. OSGi 스펙을 공부하면서 Equinox에 대해서도 많이 알게 되었는데 감탄이 절로 나오더랍니다. 지금 OSGi가 엔터프라이즈 개발까지 침투할 수 있게 된 것은 Equinox의 성공에 힘입은 바가 크지요. 앞으로 크라켄 지원 때문에 이클립스 플러그인 개발도 좀 해야될 것 같은데 더 공부해야 되겠습니다.
- Ant: 처음에 이클립스 쓰기 싫어서 Emacs와 JDEE를 연동한 개발 환경을 사용했습니다. JDEE에서 Ant 연동이 되기 때문에 빌드 스크립트를 전부 Ant로 만들었지요. Makefile과 비교하면 당연히 Ant가 훨씬 낫긴 한데, 노가다스러운 부분은 어쩔 수 없더군요. 아무리 부모-자식 잘 쪼개놔도 노가다는 노가다. 결국 Maven으로 넘어가는 계기가 되었습니다. 도중에 Ant 버그도 발견해서 리포트했었고요. (FIX 됨) 관련 글은 정리된 Ant 스크립트와 Ant Jar Task에서 Manifest Class-Path 자동 입력하기입니다.
- Maven
- Log4J
- MINA
- JAAS
이 부분은 올해 말이나 내년 초가 되어야 결정이 나겠지만, 내년부터 네오와처를 유지보수하게 될 가능성이 있습니다. 지금은 PCI Express 지원하는 인텔 NIC를 제어하는 트래픽 펌핑 드라이버를 개발하고 있습니다. 만약 하게 된다면 TCP/IP 처리도 제대로 공부해야겠지요. Aho-Corasick 문자열 패턴 매칭을 문서로 정리했고, NDIS와 Intel 8257x 포팅 개발 문서도 작업이 완료되면 정리할 예정입니다.
지금까지 NIC가 하는 일을 아주 단순하게 생각하고 있었는데, 실제로 드라이버를 구현하려니 아주 많은 기능을 제어해야 하더군요. DMA 제어는 물론이고 (이것도 동적으로 DMA 공유 메모리 할당 조정하는 고급 기능을 구현하는 경우가 있음), 인터럽트 속도 조절, NVM 읽고 쓰기 (이것도 EEPROM이랑 플래시 따로 제어하는 경우가 있고, SPI로 제어하는 경우가 있음), LED 제어, TCP/IP 체크섬 오프로딩, 링크 속도 자동 협상, 흐름 제어 (PAUSE FRAME), VLAN 처리, 유니캐스트 및 멀티캐스트 수신 주소 설정, AMT 지원, 패킷 스플릿 등. PHY도 Copper, Fiber, SerDes 따라 제각기 다르구요. NDIS도 직접 구현하면서 이제 하나씩 감이 잡히고 있습니다. 지금까지 정리했던 글들을 아래 붙입니다.
- PCI 설정 공간과 인터럽트 처리
- Relaxed Ordering
- Snoop Not Required
- NDIS 인터럽트 흐름
- 드라이버와 어플리케이션 간 메모리 공유
- SerDes : Serializer/Deserializer
- GBIC : Gigabit interface converter
Lucene, BDB, Inverted Index
코드게이트
XML-RPC
TELNET
OSGi, Felix, BND
구매 도서 (미완결)
올해는 NCHOVY 팀 책을 통합 구매했기 때문에 골라내기가 쉽지 않군요.
- 레일스와 함께 하는 애자일 웹 개발: 1.2 기준이긴 하지만 그래도 많은 도움이 되었음.
- 웹사이트 분석의 기술: 정리가 잘 되어있는데 막상 게을러서 써먹어 보질 못함.
- 애자일 프랙티스: 보긴 봤는데 기억이 없다. (역시 기록을 하면서 봐야 한다.)
- 실전해킹 절대내공: 기본 개념과 오픈소스 보안 툴을 전반적으로 익히고 싶다면 이 책이 좋다.
- 제프리 젤드만의 웹표준 가이드: 쓸만했다.
- 애자일 회고: 보긴 봤는데 마찬가지로 기억이 없다.
- 컴퓨터 프로그램의 구조와 해석: 올해 최고의 책. 생각하는 방식을 근본적으로 바꿔준다. 연습문제 풀면서 Scheme에 상당히 익숙해졌다.
- 데이터베이스 설계와 구축: 사놓고 안 봤음.
- AI Application Programming: 역시 사놓고 거의 안 봤음.
- 집단지성 프로그래밍: 막연히 어렵게 생각하기 쉬운 집단지성을 쉽게 풀어놨다. 추천.
- The Design and Implementation of the FreeBSD Operating System: 싸길래 일단 질렀는데 몇 년 후에 보게 될지 -_-
- 루씬 인 액션: 루씬을 배우고 싶다면 추천. 버전은 약간 달라져서 실제 코딩에 애로사항이 약간 있을 것이다.
- 한국어 형태소 분석과 정보검색: 강승식 교수님 책이 아직까지 가장 좋은 책인 것 같다. 각종 통계도 잘 정리되어 있고.
- Expert One-on-One J2EE Development without EJB: 아직 제대로 못 봤다.
- 톰캣 최종분석: 톰캣 구조를 이해하는데 많은 도움이 되었다. 그런데 다 보지는 못 했다. 코요테가 빠져서 아쉬움.
- 열혈강의 프로그래머를 위한 서블릿/JSP: 혹시 필요할까 싶어서 샀는데 볼 일은 많지 않을 듯.
- IT EXPERT 리눅스 커널 프로그래밍: 아직 손 못 댔다. 그래도 이런 책은 절판되기 전에 질러야 함.
- Head First OOAD: 잘 쓰긴 했는데 막상 다 보고 나면 별 내용이 없다는 느낌이 들 것이다.
- 프로그래밍 jQuery: 아직 못 봤다.
- 자바스크립트 완벽 가이드: 정독할 생각인데 앞부분 밖에 못 봤음. 다만 서버사이드 언어로 자바스크립트를 쓰기엔 아직 부족할 것이라는 느낌만 얻었음.
- Effective Java 2판: 강력 추천. 번역서는 1판이니 자바 최신 버전을 기준으로 개정된 2판 원서를 보세요. 근데 곧 번역되지 않을까?
- 레거시 코드 활용 전략: 비추. 번역한 사람 패주고 싶음.
- WDF 윈도우를 위한 차세대 통합 드라이버 개발 모델: 강력 추천. 명쾌한 윈도우 드라이버 파운데이션 설명이 돋보인다. 원래 프레임워크란 문제 해결 방식을 시스템화 한 것이기 때문에, WDM만 공부하고 실제 개발을 안 하면 흐름을 알기 어려운 부분이 아주 머리에 잘 들어오게 된다.
올해 3월에 거금을 들여 입수한 커즈와일 SP2X 키보드와 함께 즐거운 연주 생활을 하고 있습니다. 후후후. 올해는 딱 2곡만 새로 열심히 연습한 것이고, 나머지는 기존 연습하던 곡을 계속 연습했네요. 물론 In An Old Castle 같은 곡은 새로 친 것이긴 하지만 워낙 쉬운 곡이라.
이별의 곡은 외워서 무난하게 칠 수 있을 정도는 되었습니다. 아직 제대로 된 연주라고 할 수는 없지만.
비창 1악장은 시작한지 얼마 안 되었지만 맹렬하게 연습 중입니다. 농담 아니라 가끔 손톱이 부서질 정도로 연습합니다.
나머지는 커즈와일로 깨끗하게 (하지만 디지털 특유의 밋밋함도 -_-) 녹음한 것 뿐입니다.
서산 간월도 마라톤 10K 완주

운동 제대로 안 하고 뛰어서 죽는 줄 알았네요. 기록은 01:08:34.48입니다.




