네티 한국어 사용자 그룹을 개설했습니다.

원문은 여기

미나 프로젝트를 떠난 지도 상당한 시간이 흘렀습니다. 네티 프로젝트 를 시작하고 처음부터 모든 것을 다시 작성하느라 바쁘게 보낸 몇 달 간이었습니다. 이제 버그 리포트도 들어 오고 커뮤니티가 형성되어 가는 과정이어서 흐뭇합니다.

그동안 국문으로 여러분들께 미나에 대한 지원을 하고 싶었지만 재단 정책을 포함한 여러 가지 이유로 하지 못해 아쉬운 점이 많았는데요. 네티에서는 별도로 네티 한국어 사용자 그룹 을 운영하여 더 많은 분들의 편의를 도모해 보기로 하였습니다. 네티 프로젝트가 아직 초기 단계이니만큼 많은 질문과 논의점, 버그가 있으리라고 생각됩니다. 언제든지 자유롭게 이 그룹을 통해 메시지를 남겨 주시면 감사하겠습니다.

단, 공식 영문 네티 사용자 그룹 및 이슈 트래커는 전 세계인이 함께 보는 자리이므로 항상 영문을 사용하셔야 한다는 점 양지해 주시길 부탁드리겠습니다.

그럼 앞으로 많은 메시지가 이 그룹에서 오고 가기를 기원해 봅니다.

Using Fail2Ban to refuse brute-force attacks

I have been using a quick and dirty shell script to update /etc/hosts.deny file when brute-force attack flows into my server. It was pretty effective but was not effective enough to block the break-in attempts immediately. Today, I found a better solution – Fail2Ban. It scans the system log files and bans brute-force attacks for a certain period.

Most examples use iptables, but I always prefer /etc/hosts.deny and I don’t even care about unbanning once a host is banned. Therefore, I added the following to /etc/fail2ban/jail.conf:

[ssh-hostsdeny]
enabled  = true
filter   = sshd
action   = hostsdeny-nounban
           mail-whois[name=SSH, [email protected]]
logpath  = /var/log/messages

[ssh-ddos-hostsdeny]
enabled  = true
filter   = sshd-ddos
action   = hostsdeny-nounban
           mail-whois[name=SSH-DDoS, [email protected]]
logpath  = /var/log/messages

Please note that I defined a new action called hostsdeny-nounban, which doesn’t unban the attacker’s IP address once banned It’s /etc/fail2ban/action.d/hostsdeny-nounban.conf:

[Definition]
actionstart =
actionstop =
actioncheck =
actionban = IP=<ip> && grep -q "ALL: $IP" <file> || echo "ALL: $IP" >> <file>
actionunban =

[Init]
file = /etc/hosts.deny

For more information, I’d recommend you to read the Gentoo HOWTO fail2ban.

A nice quote about computer programming

From Larry O’Brien and Bruce Eckel in Thinking in C#:

Computer programming is tremendous fun. Like music, it is a skill that derives from an unknown blend of innate talent and constant practice. Like drawing, it can be shaped to a variety of ends – commercial, artistic, and pure entertainment. Programmers have a well-deserved reputation for working long hours but are rarely credited with being driven by creative fevers. Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination, but because their imagination reveals worlds that others cannot see.

한국어:

컴퓨터 프로그래밍은 너무나 재미있다. 그것은 음악과 마찬가지로 내면에 간직된 재능과 지속적인 훈련이 미묘한 방식으로 혼합된 결과이다. 그리고 그 결과는 그림과 마찬가지로 상업적 비즈니스, 예술, 혹은 순수한 엔터테인먼트, 어느 것으로도 나타날 수 있다. 프로그래머들은 엄청나게 많은 시간을 일하는 것으로 정평이 나 있는데, 그들이 창조적인 열정 때문에 그렇게 한다는 사실을 아는 사람은 별로 없다. 프로그래머들은 주말에, 휴가에서, 식사를 하면서 계속 소프트웨어 개발에 대한 이야기를 나눈다. 상상력이 부족해서 그런 것이 아니다. 그들의 상상력은 다른 사람들이 보지 못하는 멋진 세계를 드러내기 때문이다.

Introducing APIviz – Java API Visualizer

I’ve just released APIviz. APIviz is a JavaDoc doclet which extends the Java standard doclet. It generates comprehensive UML-like class and package diagrams for quick understanding of the overall API structure.

Please take a look at the sample report, give it a try to your application and let me know what could be improved.

얼마 전 APIviz 를 릴리즈했습니다. APIviz는 자바 표준 doclet을 확장한 자바독 doclet입니다. API의 전체적인 구조를 신속히 파악할 수 있도록 이해하기 쉬운 UML과 유사한 클래스 및 패키지 다이어그램을 생성해 줍니다.

샘플 도 한 번 보시고, 직접 적용도 해 보시고, 어떤 점을 개선하면 좋을 지 의견도 주시면 좋겠네요.

IBM developerWorks Interview with Trustin Lee

December 2006, copied from: http://www.ibm.com/developerworks/kr/interview/2006_12.html

최근 아파치 디렉터리 프로젝트의 서브 프로젝트였던 MINA가 TLP (Top Level Project)로 승급되면서 PMC (Project Management Committee) 의장으로 선출됐다고 들었습니다. MINA 프로젝트에 대해 설명해 주세요.

기존의 아파치 프로젝트는 HTTP 서버 관련 프로젝트만 진행했지만, 점차 웹 서버 외에 다른 프로젝트들이 생겨나고 있습니다. 이를 관리하기 위한 조직이 PMC입니다. 제가 의장으로 선출된 MINA 프로젝트는 ‘Multi-purpose Infrastructure for Network Applications’의 약자로, 아파치 디렉터리 프로젝트 하에서 진행되던 프로젝트입니다. 아파치 디렉터리 프로젝트는 오픈 소스 기반의 LDAP 서버 개발 프로젝트인데, LDAP 서버는 프로토콜이 상대적으로 복잡합니다. 복잡한 프로토콜을 갖는 네트워크 애플리케이션들을 신속하면서도 고성능으로 개발할 수 있는 인프라를 마련하기 위한 것이 바로 MINA 프로젝트입니다.

MINA 프로젝트에 공헌한 바가 크다고 알고 있습니다.

5년 전쯤, 네트워크 애플리케이션 프레임워크인 ‘네티 (Netty)’를 직접 개발했습니다. 당시 근무하던 ㈜아레오 커뮤니케이션즈에서 SMS (Short Message Service) 게이트웨이를 개발하면서 네트워크 애플리케이션을 쉽게 작성할 수 있는 툴이 필요해서 만들게 됐죠. 네티는 일정한 지침만 준수하면 네트워크 애플리케이션을 빠르고 쉽게 만들 수 있는 프로그램입니다. 이 프로그램이 알려지면서, 아파치 디렉터리 프로젝트의 PMC 회원이 제게 합류를 권유했습니다. 그래서 아파치 인큐베이팅 프로그램으로 참가하게 됐고, 2년 6개월 전에 네티와 기존 프레임워크의 장점을 결합해보자는 MINA 프로젝트가 탄생하게 됐습니다.

아파치 소프트웨어 재단의 멤버가 아닌 커미터가 PMC 의장이 된 첫 사례라, 그 의의가 자못 크다고 생각되는데요.

아파치 소프트웨어 재단에는 커미터-멤버-이사회 멤버로 구성되는데, 초대의장에 멤버가 아닌 사람을 선출한 것은 전례가 없던 일입니다. 초대의장은 지금껏 멤버 중에서 선출되는 것이 관례였으므로 이번에도 멤버 중에 선출하자는 의견이 없었던 게 아니었습니다. 하지만 프로젝트에 실질적인 공헌을 하고 향후 발전에 도움을 줄 사람으로 뽑자는 의견도 팽팽했다고 들었습니다. 이번 의장 선출은 제게 더욱 잘하라는 믿음과 격려를 보내준 것이라고 생각합니다. 국내에서도 PMC 의장이 된 것은 처음이라 더욱 열심히 해야겠다는 각오를 다지고 있습니다.

오픈소스 개발 활동이 회사 업무에 도움이 되나요.

첫 직장이었던 ㈜아레오 커뮤니케이션즈에서는 현업에 필요한 일반적인 컴포넌트를 오픈 소스로 개발했었고, 그 후 솔라시스에서는 아파치 디렉터리 서버 기반의 사업을 추진했습니다. 첫눈에서는 직접적으로 연관된 업무가 없어서 아쉬웠지만, NHN으로 합병된 후에는 웹플랫폼 개발팀에서 다양한 오픈 소스 소프트웨어를 접목한 ESB (Enterprise Service Bus) 개발을 하고 있습니다. 무겁고 복잡했던 기존의 ESB가 아닌, 초경량 ESB죠. 이처럼 맡았던 업무가 대부분 오픈 소스와 연관돼 있었습니다.

오픈 소스 개발을 시작한 계기는 무엇인지요.

컴퓨터를 처음 접한 것이 초등학교 1학년 때였습니다. 이 때부터 프로그래밍을 시작했습니다. 중학교 때는 게임 제작을 시작했는데, PC통신 동호회 활동을 통해 공개를 하고, 평가 받고, 인정받는 것이 재미있었습니다. 이를 통해 단점도 보완할 수 있었고요. 공유하고 개선하는 것을 자연스레 즐기게 됐다고 할 수 있죠. 고등학교 3학년 때 정보올림피아드에서 동상으로 입상하면서 특기생으로 대학에 진학한 후부터 본격적인 개발을 시작하게 됐습니다. 당시에 국내에 오픈소스 붐이 일었었고, 특히 자바 관련 프로젝트들이 많아서 자연스럽게 오픈소스 개발자가 된거죠.

오픈 소스 개발의 매력이 무엇인지, 설명할 수 있으신가요.

소프트웨어는 한 개인의 뛰어난 능력보다는 여러 사람들의 노력과 검증에 의해 성패가 좌우된다고 생각합니다. 특히 사용자와 함께 개발을 진행해 나간다면, 비판과 보완을 통해 지속적인 발전이 가능하지 않겠습니까? 그 과정에서 다양한 사람들을 만나고 광범위한 지식을 축적할 수 있기 때문에 직접적인 경험에 대한 부족함을 메울 수 있습니다. 소프트웨어의 성능은 처해진 환경에 따라 달라지기 때문에 여러 가지 상황에서의 문제 해결 방식과 의사소통을 통해 발전할 수 있습니다. 지구 반대편 사람들과의 공조도 가능하고, 이를 통해 새로운 일자리 기회도 창출할 수 있다는 매력이 대단한 것 같습니다.

오픈 소스 기반의 ID관리 플랫폼도 개발하셨던데요.

기존의 ID 관리 플랫폼은 너무 비싸고 FOB 기기를 통해서만 인증이 가능한데다가 주기적으로 FOB를 교체해줘야 합니다. 하지만 아파치 디렉터리 기반의 IDM은 휴대전화에 Java ME 기반의 FOB를 장착하기 때문에 간편하고 저렴하게 제공할 수 있습니다. 현재 아파치 디렉터리 프로젝트에 포함돼서 진행하고 있으며 안정성과 완성도를 보강하고 있습니다.

요즘 관심을 두고 있는 이슈나 기술은 어떤 것이 있나요.

ESB 구현, 그리고 MINA 입니다. ESB를 구현하는데 있어서도 MINA를 적극적으로 사용할 예정입니다. 앞으로 MINA를 단순한 프레임워크를 넘어선 플랫폼으로 발전시킬 생각입니다. 이미 정의된 프로토콜 구현체가 있기 때문에, 여기에 구미에 맞는 웹 서버/SMTP 서버와 같은 나만의 맞춤 서버를 구성할 수 있습니다. 프로토콜 설계 시에도 스펙 문서 등을 드래그앤드롭으로 테이블로 만들어서, 스펙 문서와 클라이언트/서버측 코드를 자동 생성할 수 있는 GUI 도구를 제공하고, 또 나아가서는 MINA로 작성된 애플리케이션이라면 일체의 노력 없이 완벽히 JMX를 통해 모니터링할 수 있게 되도록 할 생각입니다.

현재 MINA의 개발은 어느 정도 진행됐나요.

1~2개월 전에 1.0이 공식 발표됐습니다. 프레임워크만 구현된 형태였습니다. 향후 자바5로 마이그레이션된 2.0을 내놓을 계획입니다. 동시성 처리가 월등한 API를 사용한 자바5로 성능을 높이고 1.0에 대한 피드백을 받아 보완해 나갈 것입니다. 1.0에 대해서는 안정성은 좋지만, 문서화의 미숙함이나 API를 개선해야 한다는 요구들이 있었습니다. 현재 EURid, JP모건, 시티그룹, 쌍용정보통신 외에 멀티 플레이어 게임 업체나 POS 단말기 통신, 화물배송추적 시스템, GPS 등에 이미 MINA가 쓰이고 있습니다. 향후 쓰임새는 더욱 늘어날 것으로 보고 있습니다.

향후 계획에 대해 얘기해 주세요.

오픈 소스 활동의 활성화에 기여하고 싶습니다. 우리나라에서도 풀 타임 오픈소스 개발자가 나올 수 있었으면 합니다. 오픈소스가 아직은 초기이지만, 결국 대부분의 소프트웨어가 오픈 소스화될 것이고 전 세계적인 망을 형성하리라 전망하고 있습니다. 다만, ‘개발’은 시간에 비례해 성과가 나오는 것이 아니라, 최대 능력 발휘의 한계를 넘으면 오히려 효율이 떨어지기 때문에 기업들도 ‘일 = 성과’가 아니라 ‘일 = 성과 + 학습 + 즐거움’이 될 수 있도록 기반을 조성해 줬으면 합니다. 그래서 개발자들이 더욱 오픈 소스에 관심을 갖고 참여할 수 있었으면 좋겠습니다. 이것이 상상할 수 없을 정도의 큰 커뮤니티를 형성하게 되고, 기업과 자신을 발전시킬 수 있는 견인차 역할을 해 줄 것이기 때문입니다.

IBM developerWorks의 정보들은 활용하시나요. 개선되었으면 하는 점이 있으시면 말씀 해주세요.

개념적인 설명이 담긴 기술 문서를 선호하는 편이어서, IBM developerWorks를 가끔 찾아봅니다. 활용 예제들은 적용 환경에 따라 차이가 있기 때문에 개념이 명확한 문서가 오히려 도움이 많이 됩니다. 전문주제별로 조금더 세분화되어서 정리가 돼 있으면 좋겠다는 생각을 한 적이 있고, 번역 문서 외에도 국내 기술진의 원고가 더 많아지면 좋을 듯 합니다.

이희승 소개 – Apache MINA, Apache Directory Server, Felix, Yoko 등 다양한 오픈 소스 소프트웨어 프로젝트의 커미터이며, Apache MINA PMC 의장을 맡고 있습니다. 자바 기반 고성능 네트워크 애플리케이션 분야의 전문가로, 경량 ESB, SMS 게이트웨이, 맞춤 HTTP 서버 등을 개발 및 제작한 경험이 있습니다.

혼자 갖는 사색의 시간

/etc/cron.dailylogwatch가 보내 온 메시지가 어느덧 시간이 깊은 밤 속으로 접어들었음을 깨닫게 한다. 오랜만에 혼자서 집을 지키니 왠지 모를 불안감도 들고 대체적으로 기분이 이상하다. 하지만 지금쯤의 시각에 혼자만의 시간을 가져 본 것이 얼마만이냐. 그렇기에 이 때를 틈타 오랫동안 연락하지 못한 지인들에게 밀린 답장도 하면서 이런 저런 생각이 쏟아지듯 밀려 오는 것은 당연지사일 것이다. 익숙한 듯 어색한 사색의 시간이 찾아온 것이다.

하지만 막상 그렇게 퍼붓고 나니 이 글에서는 그닥 할 말이 많지가 않다. 그저 이 사색의 시간이란 것에 대한 반가움을 표현하는 것이야말로 지금이라는 시간에 대한 최고의 대접이 아닐까 한다.

Rewriting everything from ground up

It’s probably my fifth time to write a network application framework from scratch. They were all event-driven. The first and the second one (Netty 1) were based on blocking I/O. The others (Netty 2, MINA and Netty 3) are based on non-blocking I/O.
Five rewrites… I sometimes think it’s time to step away from network application framework and do something on top of that. I always wanted to write a nice build tool or more enterprisy stuff. However, the fact is that I am still working on a network application framework!
On the other hand, I realized that I have been feeling something exciting and freshing for each rewrite. There are many ways to solve the same problem, and it is sometimes better solved when approached from a different angle. It’s probably because I got to understand more aspects of network application development now than before. Yes, there seems to be huge room for improvements in network application design of this world… yet!
There’s also fear lying under the exciting feeling. “Will this fifth rewrite will be a great step forward from the fourth one?”, I ask myself every morning. It’s a diffifult question, but such a question makes me do my best and consider every possible issue I know of.
So? A little bit of pressure and a lot of fun. 🙂

맨땅에서부터 전부 다시 짜기

아마 네트워크 어플리케이션 프레임워크를 처음부터 다시 작성하는 것이 이번이 다섯 번째인 듯 하다. 전부 이벤트 드리븐이었다. 첫재와 둘째 (네티 1)는 블러킹 I/O 기반이었다. 나머지 (네티 2, 미나, 네티 3)는 넌블러킹 I/O 기반이다.
다섯 번의 재작성… 때론 이제 네트워크 어플리케이션 프레임워크는 그만두고 그 위에서 뭔가를 할 시간이라는 생각이 든다. 항상 멋진 빌드 툴이나 좀 더 엔터프라이즈 스타일의 물건을 만들고 싶었으니까. 하지만 현실은 아직도 네트워크 어플리케이션 프레임워크를 만들고 있다는 것!
한편으로는 새로 작성할 때마다 흥미진진하고 신선한 무언가가 느껴진다는 것도 깨닫게 되었다. 같은 문제를 해결하는데는 다양한 방법이 있고, 다른 각도에서 접근했을 때 더 잘 풀리기도 한다. 아마도 네트워크 어플리케이션 개발의 다양한 측면을 전보다 더 잘 이해하게 되었기 때문이 아닌가 싶다. 그렇다. 이 세상의 네트워크 어플리케이션 디자인에는 개선의 여지가 많이 있는 것 같다… 아직은!
흥미진진한 기분 밑에는 두려움도 숨어 있다. 매일 아침 스스로에게 “이 다섯 번째 재작업이 네 번째에 비해 진일보한 것이 될까?” 라고 묻는다. 어려운 질문이지만, 그런 질문은 내가 최선을 다하고 알고 있는 모든 가능한 이슈를 고려하며 작업하도록 해 준다.
그래서? 조금 압박감이 있긴 하지만 정말 재미있다. 🙂

Clarification of the rumors around MINA and me

Since I expressed my mixed feeling into my previous blog post, I heard many rumors around MINA and me. I communicated with persons who contacted me privately, but it seems like more and more people are interested in this issue. Therefore, I’d like to let you know what’s going on.
Before we begin, I’d like to apologize if anyone was offended by my previous post. If MINA PMC asked for help in the early stage, perhaps we could have sorted things out before we reach here. I’d also like to appreciate many people who gave me insightful advices via various channels.
Following MINA PMC’s original plan to rotate the chair position annually, Peter Royal will become a new vice president of the MINA project. Once my resignation is accepted on 28th, I will also remove myself from MINA PMC. Yes, I leave the MINA project. This of course doesn’t mean that I will leave the ASF. I will be back when I feel I am ready.
Currently, I’m working on a new network application framework personally. It is a successor of Netty 2 and is licensed under LGPL for the same reason why Hibernate team chose LGPL. It has been written from scratch instead of forking any other project. It may be hosted under JBoss.org in the future to leverage its infrastructure such as JIRA, FishEye, Hudson and better site design.
I hope pretty many questions were covered in this post, but please feel free to contact me if you have more questions.