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

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

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

미나
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) 위키 강좌
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 산골
산골 블로그 소개 저는 하얀머리 개발자와 작가를 꿈꾸는 블로거 산골 입니다. 프로그램 개발자로서 저의 관심사는 개발자의 숨통을 트여준 아이폰 개발, 철학과 같은 깊이가 있는 객체지향 방법론입니다. 글쓰기와 수영을 좋아합니다. 블로그를 통해 관심사를 공유합니다. 제 블로그에 관심 있으시면 아래 RSS나 즐겨찾기로 편하게 구독하세요.

rss Bookmark and Share

댓글을 달아 주세요

  1. BlogIcon 러브네슬리 2008.03.26 01:31 신고  댓글주소  수정/삭제  댓글쓰기

    산골에서도 프로그래밍을 하시는 산골소년님 ㅋㅋㅋ

  2. BlogIcon 2008.03.26 09:37 신고  댓글주소  수정/삭제  댓글쓰기

    미나는 가수 이름 아닌가^^ㅋㅋㅋ

  3. BlogIcon ARMA 2008.03.26 10:22 신고  댓글주소  수정/삭제  댓글쓰기

    다녀감....

  4. BlogIcon Joowonpapa 2008.03.26 11:54 신고  댓글주소  수정/삭제  댓글쓰기

    헐~ 이런 것이 있었군요. 미친듯이 이런 것의 비슷한 것을 구현한 저를 보면서 "know-where"의 중요성을 또 다시 느낍니다. 또한 갈수록 이런 것을 보면서 뛰어난 개발자가 여러 개발자를 행복하게 하지만 파이 넓이는 줄어든다는 생각에 이 짓도 못할 짓이라 새삼 느낍니다.

    뛰어난 개발자가 되고 싶은데, 그것은 포기하고 묻어가야 겠습니다. ^^
    제가 생각한 인생을 성공적으로 보내는 방법은 1. 천재가 되던가 2. 천재한테 묻어가던가 라는 생각을 요즘 합니다. 나이 33이 더욱 그렇네요.

    • BlogIcon 산골 2008.03.27 09:41 신고  댓글주소  수정/삭제

      아..저하고 너무도 비슷한 생각이십니다.
      천재는 정말 따로 있다는 생각이고..저도 가끔
      풀이 죽지만..
      그래도 그속에 희망이 있다는 생각으로 일을 합니다..

      그런데 천재한테 묻어가는 기술도 쉽지 않다는 생각도
      듭니다.

      참고로..위키노믹스라는 책에서는 1% 천재보다 다수의
      평범한 사람들이 힘을 합쳐서 더 위대한 결과물을
      창출한다고 강조하는데요..

      여기에 저는 천재가 아닌 사람들의 희망을 보고는
      합니다. ^ ^

  5. navis 2008.03.26 18:42 신고  댓글주소  수정/삭제  댓글쓰기

    여기 저기 써봤는데, 간단한 통신 게이트웨이 만드는데에는 참 좋습니다. 다만 성능적인 최적화 라던지 도메인 특화된 특수한 기능을 위해 IO 레벨의 이벤트가 필요하다던지 하면 대책이 좀 없더군요.

    • BlogIcon 산골 2008.03.27 09:29 신고  댓글주소  수정/삭제

      navis님 소중한 댓글 정말 정말 감사드립니다.
      일단 먼저 댓글 단것이 더 여쭤볼것이 있는데요.

      우리는 일단 도메인 특화된 기능 보다는..
      동시 접속 부하를 얼마나 잘 견디냐가 궁금합니다.

      혹시 하나의 서버에서 동시 접속 세션 10,000개 정도
      버틸 수 있을까요. ^ ^;

      아니면 얼마정도 버티더라..동시 접속 부하는 뭐..
      잘 견디는 것 같더라..이런 피드백도 괜찮고요..

      부디 다시 이 댓글을 보셨으면 하는 바람입니다. ^ ^

    • navis 2008.03.29 18:00 신고  댓글주소  수정/삭제

      어차피 미나던 그리즐리던 뭐가 됐던 자바의 NIO 로써는 분명히 한계가 있습니다. 한서버에 10000 개라면 C 를 고려해 봐야겠죠. 전혀 도움안될 덧글이네요. -_-

    • BlogIcon 산골 2008.03.30 18:59 신고  댓글주소  수정/삭제

      아..navis님 소중한 피드백 감사드립니다...
      NIO 자체가 C보다는 한계가 있군요.
      이쪽 네트웤 프로그래밍 세계는 참 고수들의 세상
      같아요. 공부를 더 해봐야 겠습니다.

      소중한 피드백 다시한번 감사드립니다. 꾸벅~ ^ ^

  6. BlogIcon troysky 2008.03.27 05:36 신고  댓글주소  수정/삭제  댓글쓰기

    배울게 참 많군요 ^^ 나중에 꼭 써봐야겠어요~~

  7. 2008.03.27 12:36  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  8. BlogIcon Keating 2008.03.27 16:30 신고  댓글주소  수정/삭제  댓글쓰기

    이름 너무 이쁘네요~
    개인적으로 참 좋아하는 이름이에요ㅋ 민아^^

  9. BlogIcon kenu 2008.03.27 17:47 신고  댓글주소  수정/삭제  댓글쓰기

    이희승님이 이번 javaone 2008에서도 MINA 주제로 발표하시더군요.
    https://www28.cplan.com/cc191/session_details.jsp?isid=294814&ilocation_id=191-1&ilanguage=english

    페이지는 잘 보고 갑니다. ^^

    • BlogIcon 산골 2008.03.27 22:10 신고  댓글주소  수정/삭제

      이희승님의 멋진 발표로
      부디 토종 기술의 힘을 보여주길 바랍니다.

      kenu님도 잘 다녀오시고 최신 기술 많이 전파해주셨으면
      합니다. 헤헤

      근데 4월 DW 리뷰 블로거 모임은 오시나요
      그때 뵙고 인사드리고 싶습니다~! ^ ^

  10. BlogIcon 아도니스 2008.03.27 21:23 신고  댓글주소  수정/삭제  댓글쓰기

    댓글을 방금 썼는데 null이라고 뜨네요. 헐~ 댓글이 날라갔어요.

    날라간 댓글 - 조만간 산골소년님 검색 유입어에 산골소녀가 많이 뜨겠군요.^^

  11. BlogIcon 바라크다 2008.07.08 01:49 신고  댓글주소  수정/삭제  댓글쓰기

    얼마전 맨땅에 해딩하는 심정으로 생산자소비자 를 이용해 이벤트드리분한 추상네트워크프레임워크를 거창하게 만들어보려다. 패가 망신한 사람람입니다. ㅜㅜ
    그런데 mina 란놈이 제가 구상하고 있던 부분들을 죄다 만들어 놓았더군요...
    mina 분석중에 있는데 한글관련 문서가 없어서 정말 답답하던차에 좋은 글 보았습니다.
    자주 교류가 있었으면 좋겠습니다.

    • BlogIcon 산골 2008.07.10 15:57 신고  댓글주소  수정/삭제

      바라크다님 반갑습니다~ 프레임워크를 만들고 시도까지
      하셨다니 그래도 네트웍 분야에 전문가신가봐요.
      자도 자주 교류가 있었으면 좋겠습니다. ^ ^

  12. BlogIcon 바라크다 2008.07.09 18:47 신고  댓글주소  수정/삭제  댓글쓰기

    클라이언트를 구현하고있습니다. 서버는 기기의 상태 값을 주기적으로 클라이언트 session 오픈 시 전달하거나 또는 주기적으로 클라이언트가 요청 하면 send 하고 있습니다. 어떠한 명령 A 가 있는데 이명령을 클라이언트에서 보냈을때 또한 이에 대한 상태값(주기적으로 보내지는 메세지와 같을 수도 다를 수도 있습니다.)을 보내옵니다. 문제의 발생은 클라이언트로 리시브된 메세지가 과연 주기적으로 오는 메세지인지..원래보내오는값이니 판별을 할 수없다는 것입니다. 아 그리고 클라이언트는 여러 thread 에서 접근하기 때문에 내가 지금 보낸 메세지에 대해서 상태값이 나의 요청에 의한 응답인지 분간할수가 없습니다... (전송시 고유한 태그들을 사용해서 해결하겠지만 현 서버는 코드및 프로토콜 수정이 불가능한 상태입니다....) 답답한 마음에 이렇게 댓글한번 남깁니다...

    • BlogIcon 산골 2008.07.10 16:00 신고  댓글주소  수정/삭제

      으흠..으흠...미나 기술적인 부분이 아니라..
      업무처리부분을 댓글로 해결방법을 찾기는
      쉽지 않네요..근데 생각해봐도 서버에서 고유 태그
      값을 넘겨줄수 없다면..답이 잘 안떠오르는데..
      으흠..저도 답답해집니다. @@;

    • BlogIcon 산골 2008.07.10 16:01 신고  댓글주소  수정/삭제

      당장 도움이 안되서 죄송합니다. @@;

  13. BlogIcon 바라크다 2008.07.09 18:49 신고  댓글주소  수정/삭제  댓글쓰기

    뒤에 나온 여러 쓰레드에서 접근가능한 하나에 커넥터이기때문에 더 머리가 아픕니다. ㅜㅜ;

  14. 필그림 2008.12.18 19:37 신고  댓글주소  수정/삭제  댓글쓰기

    네트워크 프로그래밍은 거의 하지 않다가 큰믿음다음세대프로젝트에 EAI 업무를 수행하다가 약간 무지막지한 소켓서버를 만들어야 했습니다. 전국지점이 250개 정도이니 세션 4개씩 연결해도 1000개가 될 정도이니까요. 처음에 어떻게 구현해야 할지 몰라서 여러 NIO 프레임워크를 고민하다가 MINA를 사용하게 되었는데 참 많이 고민해서 만들었더라구요. 클라이언트가 모두 C로 구현되었고 이 회사 특유의 프로토콜을 사용하는데도 구현하는데 아주 어렵지는 않았습니다. MINA를 이해하느라 이곳에 몇번 오곤 했었습니다. 참 행복하게 개발하고 있어 보입니다..
    하여튼 반갑습니다..

    • BlogIcon 산골 2008.12.21 12:15 신고  댓글주소  수정/삭제

      필그림님 반갑습니다..
      행복하게 개발은 커녕..푸석푸석하게 개발하고 있는데요. ^ ^;
      미나가 잘돌아가고 있나보군요..
      저희도 인자..미나로 만든 서버가 잘돌아가는지 확인하는 그때가 왔는데..잘돌아갔으면 좋겠습니다. ^ ^
      저도 반갑습니다..다음에는 블로그 주소 남겨주세요~

  15. 필그림 2008.12.22 16:59 신고  댓글주소  수정/삭제  댓글쓰기

    ^^
    블로그는 만들기는 했지만 거의 사용하지 않고 있습니다.
    대신 싸이에 글을 올리곤 합니다.
    근데 기술적인 내용은 거의 없어서리 알려드리기가 좀 거시기 합니다..

    추후에 블로그에 글을 정리하게 되어 부끄럽지 않은 블로그가 되면 그때 오픈을 하지요.