본문 바로가기

카테고리 없음

Apache MINA(미나)로 프로토콜 로직 만든 후기

오늘은 프로그래밍 얘기입니다. 블로그를 운영하신다면 자신이 쓴 모든 글들이 사랑스럽겠지만 두고두고 써먹히는 글이 특히 예쁠것입니다.

두고두고 써먹히는 글이라면 검색엔진 유입글을 예로 들 수 있습니다. 계속 검색엔진 상단에 걸려 내 블로그에 유입되는 글들은 기특한 글 들입니다.

제 블로그에도 두고 두고 유입되는
기특한 글이 있는데요. 일단 검색 유입어를 말씀드리면 검색어가 아래와 같습니다.

미나
MINA
산골 MINA
글로 그림 MINA
Apache MINA

미나? MINA? 왠 여자 이름..산골이와 미나와 어떤 관계야? 미나가 산골소녀인가? 이런 의문을 가질 수도 있겠지만.. 사실 저 검색어의 실체는 Apache MINA라는 이름을 가진 자바 NIO 기반 네트워크 프레임워크 오픈소스 입니다.

특이한 것은 오픈소스 분야에 막강한 영향력을 가진 Apache 재단으로부터 정식 인증된 오픈소스인데 창시자가 이희승씨라는 한국인이라는 것입니다. 외국에서 애니콜 핸드폰 또는 현대 자동차를 보는 것처럼 뿌듯한 일이지만 한가지 문제가 있는데요. 한글 문서가 표현 그대로 '바짝 마른 저수지'처럼 없습니다.

저는 작년에 Apache MINA를 이용하여 우리회사 통신 파일럿 프로그램을 제작한적이 있었습니다. 그때 한글 문서가 거의 없는 상태에서 쇳덩어리 바닥에 헤딩하는 식으로 삽질하여 완성했습니다.

이때 어찌나 답답했던지 만사 귀찮아하는 제가 어설프게나마 Apache MINA 강좌를 만들어 제 블로그에 올렸고 이 강좌가 Apache MINA 정식 홈페이지 바로 다음에 구글 랭크 되고 있는 것입니다. (네이버도 최상위 랭크) 그러나 좋아할수도 없는 것이 오죽 한글 문서가 없으면 제 미흡한 강좌가 상위에 랭크될까 라는 생각이 들기도 합니다.

그래도 틈틈이 유입되는 MINA 레퍼러를 보며 흐뭇해 하는 요즘, 상부의 지시가 떨어졌습니다.

우리회사랑 네트웍 연결해야 하는 다른회사 서버가 80포트로 HTTP 통신을 요구할지도 몰라서 HTTP 통신 모듈을 제작하라고 하더군요.

사용자 삽입 이미지
[남의회사 통신서버는 80포트 HTTP통신을 요구할수도 있었다..]


그래서 오랜만에 MINA를 다루게 되었습니다. 저는 어렵게 보지 않은 것이 MINA에 이미 HTTP 프로토콜을 구현한 예제가 있어서 그 예제를 가져다 쓰려고 했습니다. 그런데 무엇인가 아귀가 맞지 않았습니다. 곰곰히 생각해보니 '웹 서버'와 정반대로 움직여야 겠더군요.

사용자 삽입 이미지
[일반적인 인터넷은, 사용자의 인터넷 브라우저로부터 웹서버까지 위의 흐름을 따른다.]


그림을 보시면 제가 만들어야 하는 것은 웹서버가 아니라 브라우저 역할이었습니다. 요청 메시지를 만들고, 응답 메시지를 받으면 파싱하는 역할은, '웹 서버’의 역할이 아니라 ‘브라우저의 역할’이었습니다.

브라우저의 역할 : 1. Request 생성, 4. Response 파싱 <- 우리의 역할
웹 서버의 역할 : 2. Request 파싱, 3. Response 생성

사용자 삽입 이미지
[아하..내가 만들어야 될것은 웹서버 역할이 아니라 브라우저 역할이었구나..]

그래서 처음에 해매 긴 했지만, 어렵지 않게 그리고 재미있게 브라우저 역할을 하는  HTTP 프로토콜 코덱/필터를 제작하여 MINA로 만든 통신서버에 장착할 수 있었습니다.

모처럼 MINA를 다뤄보니 MINA의 장점을 다시 느꼈습니다. 보통 네트웍 프로그래밍은 저 수준 레벨의 프로그래밍 기법과 네트웍 지식이 깊어야 구현 가능한 것으로 알고 있는데, MINA는 저 수준 레벨의 네트웍 작업을 자기가 알아서 다 해주기 때문에 개발자는 일반 프로그래밍 짜듯 로직 구현만 하면 되는 구조로 되어 있습니다. 이런 역할을 하기 때문에 '프레임워크'라는 있어 보이는 단어를 붙일 수 있는 것 같습니다.

이렇게 MINA의 장점을 다시 느끼니 잘 만든 프로그램/프레임워크 가 여러 개발자와 회사를 행복하게 한다는 생각이 들었습니다.

다만 MINA에 대한 불편함은 한글 문서가 없다는 것, 오죽 없으면 제 강좌가 검색엔진 상단에 걸릴까 하는점이고요. 그리고 MINA가 NHN이나 공공기관에 쓰이고 있는 것으로 얼핏 들었습니다만, 과연 리얼환경에서 얼마나 잘 돌아갈 것인가가 확실하게 검증이 안되서 걱정입니다.

오늘 만든 브라우저 역할 비스무리한 프로토콜 코덱은 이것 저것 재미로 써먹을 곳이 있을 것 같습니다. 그렇게 할 생각이 없기에 씁니다만 애드센스 클릭 HTTP요청도 날릴 수 있지 않을까 싶고요. (삐~ 경고~!)

오늘은 모처럼 (한글 문서화와 리얼 검증 요소는 일단 빼고) 잘 만들어진 MINA 덕분에 재미있게 프로그래밍을 할 수 있었습니다.

덧1) 지금 Apache MINA 쓰고 계시는 분 계시면 저랑 자료/경험 교류 했으면 합니다. 특히 리얼 적용 성공담/실패담을 듣고 싶습니다.

덧2) 관련글 : 진화하는 아파치 미나(Apache MINA) 위키 강좌