산골 김저자의 책풀이 속풀이

'네트워크 프로그래밍'에 해당되는 글 2건

제목 날짜
  • TCP/IP 책 3종 세트를 읽고 (네트워크 프로그래밍)(27) 2008.04.23
  • 진화하는 아파치 미나(Apache MINA) 위키 강좌(16) 2007.09.04

TCP/IP 책 3종 세트를 읽고 (네트워크 프로그래밍)

2008.04.23 21:48
> 어거지 네트워크 전쟁 스토리

"이지스 서버가 가동됐다. 이지스 시스템은 대용량의 멀티 세션 공격도 방어할 수 있기 때문에 ‘제우스의 방패’ 라는 이름이 붙여졌다고 한다. 최첨단 이지스 시스템은 현재 여러 진영에서 개발되었다.

리눅스 진영의 멀티쓰레드 이지스 시스템, 윈도우 진영의 멀티쓰레드 이지스 시스템이 있고 자바 진영의 NIO 이지스 시스템이 있다. 자바진영의 NIO 이지스 시스템은 고난이도 성능 구현에는 리눅스, 윈도우 진영에 뒤지지만 조작하기가 쉽고 어느 함선이든 탑재하기 쉬운 장점이 있다.

우리 이지스 서버는 리눅스 진영의 아무 함선(서버)이나 개조하여, 자바 진영의 NIO 이지스 시스템을 탑재하고 최근에 가동됐다.

이지스 서버의 IP정보를 획득한 TCP/IP 세션편대가 이진수 상공을 어지럽게 활공하며 공격을 준비하고 있었다.

세션편대의 각각의 세션은 소켓이라 불리는 타겟팅~을 완료해야만 공격 준비를 할 수 있으므로 부지런히 소켓 타겟팅~ 작업을 하고 있었다.

그리고 이지스 서버의 정보 획득을 위해 레이더로 TCP/IP식 3번 탐지(Three Way Handshake)을 완료하고 있었다. 3번 탐지(Three Way Handshake) 완료된 세션 편대 공격~!

세션 편대의 3번 탐지(Three Way Handshake) 를 통해 세션 편대의 공격을 감지한 이지스 서버 역시 무수히 달려드는 세션 편대를 방어하기 위해 NIO 이지스 시스템이 부지런히 작동하기 시작했다.

‘바이트버퍼(ByteBuffer)'가 세션들의 데이터를 신속하게 수집하고 ‘채널(Channel)’이 고 성능의 바이트버퍼를 통해 수집한 데이터를 부지런히 중앙관제센터로 전송한다. 중앙관제센터에는 Reactor 패턴을 정교하게 구현한 ‘셀렉터(Selector)’ 라는 세션 배정 시스템이 있는데 셀렉터가 부지런하게 세션들을 요격할 무기를 지정하고 무기 발사를 제어한다.

NIO 이지스 시스템은 잘 방어하고 있었다. 그래도 이지스 시스템 역시 함선 위에 놓여진 것이고 자원의 한계가 있음에 따라, 서서히 위험에 놓이게 되었다.

곧이어 터지는 리눅스 TOP 관제 시스템의 CPU/Memory 100% Used 경고.. 버벅거리는 이지스 서버의 틈새를 뚫고 세션 한대가 이지스 서버를 향해 고공 강하 하기 시작했다.

그리고 ‘java out of memory’ 라는 토마호크급 미사일을 발사한다. 명중..악~ 자바 진영의 최첨단 NIO 이지스 시스템을 갖춘 함선은 이렇게 다운~되었다."


최근에‘지팡구’라는 일본 애니메이션을 재미있게 보았습니다. ‘지팡구’의 내용은 일본 자위대의 이지스함이 1942년 미드웨이 해전 당시로 시간 이동하게 되었는데 21세기로 돌아가지 못하자 본의 아니게 2차세계대전 태평양 전쟁에 끼어들게 되면서 겪게 되는 이지스 선원들의 가치관의 혼란과 첨단 무기 이지스함의 활약을 그린 애니메이션 입니다.

사용자 삽입 이미지

그래서 군국주의스러운 위험한 발상의 애니메이션 입니다만, 내용 자체는 너무도 흥미진진하여 최근에 재미있게 보았습니다.

그리고 이때 저는 네트워크 프로그래밍을 하고 있었습니다. 그래서 어거지~스럽지만 장난스럽게 비유해 보았습니다.


> TCP/IP 책 3종 세트


저는 네트워크 프로그래밍을 하는데 있어서 거꾸로 배워갔습니다. 일단 실무에 빨리 적용해야 하다 보니 네트워크 프로그래밍 기초가 부족한 상태에서,

1. 아파치 미나(Apache MINA)라는 자바 NIO 기반 네트워크 프레임워크부터 무작정 써봤습니다.

2007/09/03 - [프로그래머/칼럼 쓰기] - 진화하는 아파치 미나(Apache MINA) 위키 강좌
2008/03/25 - [프로그래머/칼럼 쓰기] - Apache MINA(미나)로 프로토콜 로직 만든 후기


2. 그러나 곧 자바 NIO를 이해해야만 해결 할 수 있는 에러가 터져서 바이트버퍼, 채널, 셀렉터등의 자바 NIO를 공부하기 시작했습니다.

자바 I/O & NIO 네트워크 프로그래밍, 한빛미디어


3. 얼마뒤 이번에는 스레드 처리문제, 소켓 클로즈 문제, 대량 데이터 전송 문제 등의 TCP/IP 레벨을 알아야만 처리 할 수 있는 문제가 발생하여 TCP/IP 책을 읽기 시작했습니다.

열혈강의, TCP/IP 소켓프로그래밍, 프리랙
TCP/IP 소켓 프로그래밍 자바버전, SciTech

특히 위의 3가지 책은 자바 네트워크 프로그래밍에 꼭 필요하다고 볼 수 있는데요. 3가지 책을 읽어본 간단한 감상을 적어보겠습니다.


자바 IO & NIO 네트워크 프로그래밍 - 8점
김성박 외 지음/한빛미디어

우리나라 개발자가 자신의 경험을 토대로 썼고, 자바 네트워크 프로그래밍 대부분의 API 영역을 다뤘고, 다른 비슷한 책이 드물기 때문에 한마디로 ‘알찬’ 책이다. 그러나 한국인이 썼는데도 문장이 딱딱한 편이다. 워낙 어려운 주제라서 어쩔 수 없을수도 있겠지만 어려운 주제를 어렵게 풀어 써서 이해하기는 쉽지 않았다.


열혈강의 TCP/IP 소켓 프로그래밍 - 10점
윤성우 지음/이한디지털리(프리렉)

베스트셀러인 것은 다 이유가 있다. 이 책은 네트워크 프로그래밍의 베스트셀러인데 이번에 TCP/IP 지식이 궁금하여 읽었을때 ‘손이 닿지 않은 가려운 곳’ 긁어주는 것처럼 도움이 많이 되었다.

이 책은 TCP/IP 지식을 일반 C, 리눅스 C, 윈도우 C기반으로 알려준다. 역시 우리나라 개발자가 자신의 경험을 토대로 썼고, TCP/IP 네트워크 프로그래밍의 모든 것을 다루었고, 무엇보다 다른 비슷한 책에 비해 알기 쉽게 설명했기 때문에 한마디로 부족함 없이 '알찬' 책이다.

이 책은 비록 C로 설명하고 있지만 자바 네트워크 프로그래밍 개발자도 꼭 읽어볼 것을 추천한다.


TCP/IP 소켓 프로그래밍 - 6점
Michael J. Donahoo & Kenneth L. Calvert 지음, 김영용 옮김/사이텍미디어(희중당)

네트워크 프로그래밍의 전문가인 친한 형이 이 책 읽고 기초부터 쌓은 다음 다시 시작하라~고 하여 산 책인데, 그만큼 TCP/IP 분야에 입문할 때 많이 읽히는 책인 것 같다.

그러나 개인적으로 이 책의 내용을 미리 알았다면 사지 않았다. 일단 문장이 투박한 한문과 영어 가득한 대학 교과서처럼 딱딱하다. 그리고 이 책에 설명한 내용은 방금 전에 설명한 ‘TCP/IP 소켓 프로그래밍’ 에도 다 나와있다. 더구나 같은 내용이라도 ‘TCP/IP 소켓 프로그래밍’이 더 알기 쉽게 알려준다. 그리고 자바쪽 지식은
'자바 I/O & NIO 네트워크 프로그래밍'이 더 자세하게 알려준다.

책이 워낙 얇아 전철안에서 편하게 읽기 좋다는 장점이라도 있을 줄 알았는데 어려운 문장은 그 장점마저 단점이 된 것 같다. 나 같은 경우는 전철안에서도 잘 읽히지 않았다.


제가 항상 쓰던 독후감 형식이 아니라 편하게 소개하는 형식으로 3가지 네트워크 프로그래밍 책을 소개했는데요. 제 주관적인 결론은 이렇습니다.

자바 네트워크 프로그래밍 개발자라면, 자바 네트워크 프로그래밍 API 공부는 '
자바 I/O & NIO 네트워크 프로그래밍'로 하고, TCP/IP 기초 지식은 '열혈강의, TCP/IP 소켓프로그래밍'로 쌓으면 좋을 것 같다~ 라는 것입니다.

요즘 네트워크 프로그래밍은 재미있습니다. 좋은 품질의 서버 개발에 노력하면서,  유익한 정보 있으면 또 포스팅 하겠습니다.


덧1) 이 글을 구독하시는 고수 개발자께서 더 좋은 책이나 다른 평 있으시면 피드백 부탁드립니다. ^ ^
  • 카카오스토리
  • 트위터
  • 페이스북

'' 카테고리의 다른 글

팀원에게 객제지향 개발을 유도하기 (1/3)  (15) 2008.05.19
사람을 위한 자동화, 코드 자동화 관련 이클립스 플러그인 (IBM developerWorks)  (10) 2008.04.29
TCP/IP 책 3종 세트를 읽고 (네트워크 프로그래밍)  (27) 2008.04.23
자바 NIO 네트워크 프로그래밍 공부  (11) 2008.04.17
에러 잡는 마음가짐  (8) 2008.04.09
IBM developerWorks 리뷰 블로거들과의 만남  (10) 2008.04.05
Posted by 산골 김저자
IT, TCP/IP, 개발자, 네트워크 프로그래밍, 독서, 리뷰, 자바, 책
  • BlogIcon 낚시광준초리
    2008.04.24 09:39 신고

    비록 제가 봤던책은 C기준의 책이지만 가장 많이 읽혀지고 저도 그 책을 통해 네트워크 공부를 하여 추천할 만한 서적이 있네요,.,

    1. UNIX Network Programming(STEVENS)책으로 Volume 1부터 Volume2까지의 세트로 구성된 책입니다. 참고로 원서 추천입니다. 이책은 C프로그래밍으로 버클리 소켓에 대해 아주 잘 설명 되어있습니다.
    2. TCP/IP Illustrated(STEVENS)책으로 Volume 1부터 Volume3까지 세트로 구성된 책입니다. 이것 또한 원서로 추천입니다. 이 책은 TCP/IP 구조를 설명 한 책으로 VOLUME2 같은 경우 리눅스 커널을 기준으로 설명 되어있습니다. VOLUME 1은 TCP/IP 기본 구조를 아주 잘 설명 되어있습니다.

    아마 2 책 두권만 읽으면 왠만 네트워킹 프로그램은 다 처리 할 수있습니다.(ARP등 기타 프로토콜도 잘 정의 되어 아주 괜찬은 책이죠..)

    • BlogIcon 산골 김저자
      2008.04.26 18:10 신고

      낚시광준초리님 깊이있는 피드백 감사드립니다.
      말씀하신 책은 저도 얘기 몇번 들은것 같아요.
      정말 이책들만 독파하면 네트웍 프로그래밍의 고수가
      될것 같은데 다만 친절하게 영어로 되어 있네요.. ^ ^;
      그래도 꼭 읽어보겠습니다. ^ ^

  • Green
    2008.04.24 09:44 신고

    글 재밌게 잘 읽었습니다.^^
    마치 밀리터리 소설을 읽는 듯 하군요..
    어려운 개념을 재밌는 소설처럼 풀어서 설명하면 어떨까하는 생각이 드는군요..
    좀 오래된 책이지만 manning에서 나온 Java Network Programming도 훌륭한 책이라고 생각됩니다.
    비록 NIO부분은 안 나왔지만 자바로 네트워크를 다루는 데 있어선 최고의 책이라고 생각됩니다.

    • BlogIcon 산골 김저자
      2008.04.26 18:11 신고

      가끔 찾아주셨던 그린님 안녕하세요~
      오랜만에 뵙네요..^ ^
      말씀하신 책은 저도 읽어봤어요.
      친구한테 빌려서 읽어봤던 기억이 납니다.
      소중한 피드백 감사드립니다. ^ ^

  • BlogIcon ARMA
    2008.04.24 11:43 신고

    앉아있지 못한다고 3일간 병가낸 걸로 알고 있는데....
    블로그 할 때는 안 아픈가 보군..... 헐... 위험한 짓을 한겨.......
    글쓰는데 시간도 꽤 걸렸을듯 싶은데 말이지.... 헐.....

    • BlogIcon 낚시광준초리
      2008.04.24 13:51 신고

      ARMA님 잘지내시죠? ㅎㅎㅎ 그런데 산골님이 지금 병가중인데 이렇게 글쓴다는거죠.. ㅎㅎㅎ 산골님 정말 힘드시겠다 ㅋㅋㅋ 휴가내고 블로깅했다가는 딱 오해 소지가 ㅎㅎㅎㅎ

    • BlogIcon sepial
      2008.04.24 15:49 신고

      알마님 안녕하세요~
      알마님 보고 싶어서 여기로 왔어요~~~
      ^^

      산골/출퇴근용 꽃방석이라도 하나 사서 병문안을 가야될텐데....멀어서 패쓰!

    • BlogIcon 대네브
      2008.04.24 17:10 신고

      머리가 아니라 궁뎅이 쪽이 아픈거라서 괜찮을걸요?
      푸흣

    • BlogIcon 산골 김저자
      2008.04.26 18:13 신고

      이 댓글 보신분께 알려드립니다 ~
      ARMA님의 오해는 제가 누워서 블로깅 하는 모습을
      사진으로 찍어서 직접 보여드림으로서 오해가 해결
      됐음을 알려드립니다. ^ ^

    • BlogIcon sepial
      2008.04.26 19:13 신고

      그 사진 나도 보고싶구먼~~~
      안되면 물리치료실 사진이라도????
      ㅋㅋ

    • BlogIcon 산골 김저자
      2008.04.27 00:26 신고

      에고~ 얄미우신 샛별 큰누나~ ^ ^

  • BlogIcon 데굴대굴
    2008.04.24 13:28 신고

    저는 개발자는 아니지만, TCP/IP에 관련되서 심도있게 배우시고 싶으시다면, 저자가 제프 도일것을 권해드리고 싶네요. 사실 더 어렵고 자세하게 설명된 책도 있지만, 일정 수준만 넘어가면 프로그래밍 하는데 필요한건 API 설명 뿐입니다. 이런 설명이야 도움말 찾는거만 대충 보면 되지요.

    • BlogIcon 산골 김저자
      2008.04.26 18:20 신고

      데굴대굴님 어서오세요~
      저는 데굴대굴님 프로필 맨트의 SQL 보고
      개발자이신지 알았는데 다른일(아마 시스템 엔지니어)
      하시는군요~
      제프도일이란 이름으로 검색해봤더니 시스코 라우터
      책에 나왔는데요..나중에 깊이있게 공부할 필요가 생기면
      읽어봐야겠습니다. 소중한 피드백 감사드립니다. ^ ^

  • Joowonpapa
    2008.04.25 13:07 신고

    위에 어떤 분이 쓰셨네요.
    1. UNIX Network Programming Volume 1
    2. UNIX Network Progrmaming Voluem 2

    3권도 있는데, 글쎄요. 스티브는 2권까지만 쓰고 작고 하셨습니다. 위의 두책의 단점은 쓰레드부분은 약하다입니다. 그래도 최고의 책입니다. 2권을 다 보신후 네트워크 물리적 스택부분을 소프트웨어고 구현해 보시면 왜 대단한지 알 수 있을 것 같아요. 쓰레드 부분은 따로 pthread을 찾아 읽어보시면 좋을 듯 싶군요. (가장 기초)

    3. TCP/IP Illustrated Volume 1

    위의 책도 스티브의 책으로서 2, 3권까지 있지만 1권까지만 읽어도 됩니다.

    4. 열혈강의 TCP/IP 소켓 프로그래밍
    5. 자바 IO/NIO
    위의 두 책은 감동했습니다. 한국사람도 기술서적을 빈틈없이(?) 이렇게 책을 잘 쓸수 있구나라는 생각을 처음 갖게 해준 책중에 하나 인것 같습니다.

    위의 5권을 다독하시면 어떤 네트워크 프로그래밍은 쉽게 하지 않을까요?
    본인인 1, 2, 3까지는 학교 다닐 때 2번씩 본 것 같고, 4-5번은 한 번씩밖에 보진 못했지만 두고두고 볼만한 책이라고 생각합니다. 물론 지금은 네트워크 프로그래밍을 전혀 안하고 필요성을 못 느끼는 환경이지만...

    • BlogIcon 산골 김저자
      2008.04.26 18:23 신고

      주원아빠님 이쪽분야에 고수시군요.
      편하게 이런글을 썼던 제가 부끄러울 정도입니다.
      일단 칭찬하신 4.5.번 책을 제대로 읽어보고..
      좀더 고급 프로그래밍이 요구될때 말씀하신
      책을 읽어봐야겠습니다..
      소중한 피드백 감사드립니다. ^ ^

  • BlogIcon 아도니스
    2008.04.25 19:08 신고

    위에 있는 만화 가와구치 가이지의 작품인데.. 이 인간의 군사적 자료 수집은 그야말로 놀라울 따름입니다. 방대한 군사, 정치, 경제, 역사적 자료를 토대로 만화를 그려나가는데 그 솜씨가 정말 기막히죠. 하지만 군국주의적 발상으로 가득차서 읽는 내내 눈쌀 찌푸리게 하는데에도 재주가 있어서 저는 별로 내키질 않네요.

    침묵의 함대, 태양의 묵시록, 지팡구 같은 거 많은데 요즘 만화책을 못 봐서 슬슬 궁금하네요.

    • BlogIcon 산골 김저자
      2008.04.26 18:27 신고

      아도니스님은 역시 애니의 고수..
      애니에 대한 소중한 피드백? 감사드려유~
      가와구치 가이지란 사람..참 얄미우면서도
      대단한 사람이네요.. 지팡구 엄청 흥미진진하게
      읽었거든요.. 아도니스님 관련 재밌는 애니 있으면
      추천 부탁드려유~ ^ ^

    • BlogIcon 아도니스
      2008.04.26 18:37 신고

      저 사람 작품중 태양의 묵시록 추천합니다. 2명이 주인공으로 나오는데, 시대 상황이 일본이 지진으로 인해 국토가 둘로 쪼개져서 북일본은 중국이, 남일본은 미국이 통치하는 시대입니다. 앞서 언급한 2명중 한명은 북일본에서, 또다른 1명은 남일본에서 커나가게 되구요. 우리 나라의 분단현실과 흡사해 역시 논란의 여지가 있지만 탄탄한 구성만큼은 칭찬해주고 싶어요.

      지팡구는 만화로 알고 있는데 애니메이션도 있나요?

    • BlogIcon 산골 김저자
      2008.04.27 00:28 신고

      헉 아도니스님..바로 정성스러운 답글을 달아주셨군요.
      아도니스님 고마워유~
      태양의 묵시록..흥미가 가요..
      지팡구는 애니가 나왔어요. 근데 완결편은
      아직 안나왔네요..
      그래서 아쉬워요..쩝~ ;

  • BlogIcon Keating
    2008.04.26 00:34 신고

    열혈강의 TCP/IP 소켓프로그래밍은 정말 감동적인 책이죠.
    동영상강의는 더욱 강한 포스의 감동이 있었구요,
    저는 이 책을 필두로 윤성우님의 열혈강의 시리즈 C++, C 프로그래밍을 무턱대고 사서 보았는데요,
    역시나 감동의물결은 여전하더군요. 윤성우님의 열혈팬이 되어버리고 말았다는ㅋ

    • BlogIcon 산골 김저자
      2008.04.26 18:29 신고

      엇~ 강의도 볼만한가봐요..
      꼭 봐야 겠습니다. 키팅님 소중한 피드백
      감사드려유~
      윤성우님 참 대단한 분이네요. ^ ^

  • BlogIcon 맨큐
    2008.04.26 01:44 신고

    어이쿠, 뭔가 어려운 이야기들이 잔뜩..;;;

    • BlogIcon 산골 김저자
      2008.04.26 18:30 신고

      맨큐님 그래서 저도 고민이에유~ ^ ^;

  • 반더빌트
    2008.04.26 08:04 신고

    좋은 내용 잘 보고 갑니다!^^*

    기분좋은 주말 되세요!^^*

    • BlogIcon 산골 김저자
      2008.04.26 18:30 신고

      반더빌트님도 화창한 주말보내세유~ ^ ^

  • BlogIcon DOKS promotion
    2008.04.26 19:49 신고

    개발자체질에 자양강장제 같은 책을 읽으셨군요 ㅎㅎ.. 저는 다른건 모르겠고, 어릴적 보았던 지팡구는 .. ㅎㅎ 생각납니다. ( 산골소년님 읽으시는거 너무 어려워보여요 ㅠ )

    • BlogIcon 산골 김저자
      2008.04.27 00:30 신고

      어이쿠 넷물고기님 반갑습니다.
      이런 포스팅은 개발자만 볼수있기 때문에
      저도 고민이 많습니다. ;
      그래도 내 밥줄 공부 차원에서 올릴 생각이긴 한디..
      지팡구를 어릴적 보셨다면..옛날에 나왔나봐요..
      아닌데..옛날에 이지스함이 나올리가 없는데..
      아니면 넷물고기님 나이가 어리신가..
      그것도 아닌데 넷물고기님 책도 내신분이라..
      좌우지간 넷물고기님 반갑습니다. ^ ^

트랙백

※ 스팸 트랙백 차단중 ...{ ? }

진화하는 아파치 미나(Apache MINA) 위키 강좌

2007.09.04 07:34
  • 이 강좌의 저작권은 mckdh.net에게 있고 아래 저작자표시-비영리-변경금지 의 Creative Commons License 약관을 따라야 합니다.

  • 이 강좌는 위키로 제작되어 문서의 추가, 수정, 삭제가 용이하기 때문에 지속적으로 문서가 진화될 예정입니다.

  • 저의 개인적인 분석이기 때문에 내용이 틀릴수도 있는데, 그럼에도 올리는 이유는 아파치 미나(Apache MINA) 관련 자바 개발자들과 교류하기 위해서 입니다.

Contents

1 아파치 미나(Apache MINA) 이해하기
1.1 아파치 미나(Apache MINA) 전체 구성도
1.2 아파치 미나(Apache MINA) 활용 규칙
1.3 아파치 미나(Apache MINA) 참고 예제 설명
1.4 아파치 미나(Apache MINA) 중요 사이트
1.5 아파치 미나(Apache MINA) 관련 문서 링크
2 아파치 미나(Apache MINA) 활용 경량 통신서버 개발 후기
2.1 구현 기술
2.2 아파치 미나(Apache MINA)
2.3 스프링 프레임워크(Spring Framework)
2.4 JMX(JavaManagement Extensions)
2.5 남은 작업
2.6 위키 문서 개정 예정
2.7 아파치 미나(Apache MINA) 활용 경량 통신서버 개발 후기


1 아파치 미나(Apache MINA) 이해하기 #


1.1 아파치 미나(Apache MINA) 전체 구성도 #

사용자 삽입 이미지

  • 위의 별첨 구성도 확인 (클릭하여 크게 보세요.)

  • 아파치 미나(Apache MINA)는 프레임워크이기 때문에 그림의 아파치 미나(Apache MINA) 구조를 이해하는게 절대적으로 중요하다.

  • 임의로 영역을 4가지로 나눴다. (정식 사상이 아니고 임의로 나눈것임)

  • Network Service 영역에서 서버와 클라이언트의 네트워크 흐름이 이루어지는데, 그 과정에 IoHandler가 각 세션별 이벤트를 제어하고 각 통신간의 모든 정보는 IoSession 객체에 담겨서 관리되며,

  • Service Logic Filter 영역에서 서버와 클라이언트 통신간의 이벤트를 Interceptor하여 입맛에 맞는 프로토콜 단위, 유틸리티 단위별 로직을 제작 및 추가할수 있으며

  • Network Service 영역, Service Logic Filter들의 주요 클래스/인터페이스들은 MINA Common API들의 주요 클래스/인터페이스를 상속, 구현하여 처리하고 있고,

  • 이런 모든 아파치 미나(Apache MINA)의 클래스 관리, 프로퍼티 관리, 모니터링 등은 Spring Framework에서 편리하게 관리 될 수 있다.

  • 자세한 구성/흐름은 아래 아파치 미나(Apache MINA) 관련 문서 참고

1.2 아파치 미나(Apache MINA) 활용 규칙 #


  • 아파치 미나(Apache MINA) 구조를 이해했다면 우리가 다뤄야 되는 영역은 크게 1, 2, 3, 4 영역이다. 1, 2, 3, 4 영역만 우리 입맛에 맞게 개발하고 나머지는 아파치 미나가 알아서 처리하게끔 놔두면 된다고 이해하였다. 우리는 핵심 부분만 집중해서 로직 개발만 하면 되기 때문에 아파치 미나가 (훌륭한) 프레임워크라고 생각하였다.

  • 1. SPRING Framework 영역 :
    스프링을 이용하는 목적은 클래스에서 객체를 생성하지 않고 설정파일에서 객체를 생성하여 쓰고자 하는 클래스에 주입함으로서 동적으로 주요 클래스를 객체지향적으로 관리하고 환경 설정을 별도로 편리하게 관리하게 하기 위함이다. 주요 클래스와 서버 IP:Port등의 동적인 설정들을 1.을 이용하여 관리한다.
    그리고 JMX를 이용한 모니터링 기능도 Spring 연동을 통해 개발할 수 있다.

  • 2. 프로토콜 필터 :
    추가/확장되어야 될 '중요한 기반 로직'은 프로토콜 필터에 추가한다.

  • 3. 일반 IO 필터 :
    추가/확장되어야 될 '주변 유틸리티 로직'은 일반 IO 필터에 추가한다.

  • 4. 통신 제어 영역 :
    주요 통신 서버별 로직은 IoHandler를 이용하여 개발한다.

1.3 아파치 미나(Apache MINA) 참고 예제 설명 #


  • 아파치 미나(Apache MINA)는 문서가 부족하기 때문에 예제를 최대한 이용하여 분석해야 한다.

org.apache.mina.example.chat

  • 채팅 서버의 특징은 메시지를 받아서 등록된 클라이언트에게 동시 전파한다는 것이 주요 특징

  • 스프링 사용법이 나와 있다. SpringMain.java 참고

  • JMX를 이용하는 설정이 있고 그냥 일반 실행 설정이 있다.

  • 일반 실행일 경우 severContext.xml로부터 가져다 쓴다.

org.apache.mina.example.chat.client

  • 스윙을 사용했음을 참고할것

  • 단 스윙 때문에 오히려 로직 분석은 불편하다.

  • 서버와 연동하여 다른 클라이언트의 메시지도 화면에 뿌려준다.

org.apache.mina.example.echoserver

  • 가장 기본이 되는 네트워크 프로그래밍의 예제를 아파치 미나로 구현한 것으로, 기본적인 네트워크 프로그래밍을 이해한다면 쉽게 이해할 수 있다.

org.apache.mina.example.httpserver.codec

  • 작은 HTTP서버, 여기의 request, response 프로토콜 코덱 로직을 이해한다면 아파치 미나를 이용하여 쓸모있는 HTTP서버도 만들수 있겠다.

  • 프로토콜 레이어의 프로토콜 코덱을 활용하는 방법을 알 수 있다.

org.apache.mina.example.httpserver.stream

  • 웹에서 접근시 response 처리방법을 알려준다. 단순히 html만 리턴함

org.apache.mina.example.netcat

  • 클라이언트 전용 예제

org.apache.mina.example.proxy

  • 클라이언트 <-> 프록시 <-> 서버 구조의 예제

  • 클라이언트와의 연결을 제어하는 IoHandler 하나, 서버와의 연결을 제어하는 IoHandler 하나가 별도로 존재하는데, 클라이언트, 서버의 각 세션 객체가 서로간에 밀접하게 연결(attach)되어, 위의 클라이언트, 프록시, 서버간의 통신 흐름을 원할하게 처리하게 된다.

  • 내가 아파치 미나(Apache MINA)를 이용하여 개발한 서버가 프록시 서버를 참고로 개발하였다.

org.apache.mina.example.reverser

  • 클라이언트가 메시지를 전송하면 거꾸로 리턴하는 서버

  • 서버에서 로직을 어디서 어떻게 처리해야 되는지 아이디어를 제공하는 서버

org.apache.mina.example.sumup

  • 인자에 숫자를 넣으면 그것을 서버에서 계산해주는 서버이다.

  • 서버 로직을 코덱/필터로 분리해 내는 아이디어를 제공

  • USE_CUSTOM_CODEC 스위치 변수로 유동적으로 코덱을 쓸수 있게 한 아이디어에 주목

org.apache.mina.example.tennis

  • 굳이 네트워크 부하를 일으키지 않고도 테스트 할수 있는 아이디어를 제공해 준다.

1.4 아파치 미나(Apache MINA) 중요 사이트 #


아파치 미나(Apache MINA) 창시자 이희승님 블로그 : http://www.gleamynode.net

아파치 미나(Apache MINA) 메인 홈페이지 : http://mina.apache.org/index.html

1.5 아파치 미나(Apache MINA) 관련 문서 링크 #


아파치 미나(Apache MINA)메인홈페이지 : http://mina.apache.org/index.html

자바API : http://mina.apache.org/report/1.1/apidocs

파워포인트 소개 : http://www.gleamynode.net/JCO2007.ppt

한글 번역본 : http://cafe.naver.com/deve/1583

2 아파치 미나(Apache MINA) 활용 경량 통신서버 개발 후기 #


2.1 구현 기술 #


네트워크 프레임워크 : 아파치 미나(Apache MINA) (자바 네트워크 오픈소스 프레임워크)

프로그램 관리 차원의 프레임워크 : 스프링 프레임워크(Spring Framework)

네트워크 현황 모니터링 : JMX(Java Management Extension)

2.2 아파치 미나(Apache MINA) #


어셈블러 수준의 고난이도 테크닉을 요구하면서, 해당 플랫폼에 종속적인 네트워크 프로그래밍을, 유지보수와 재사용성 높은 객체지향 수준으로 끌어올려 바람직한 개발 환경 개선 하에 네트워크 프로그래밍 개발을 가능하게 하는 아파치 오픈 소스 중의 하나,

비동기 통신을 지원하는 자바 NIO와 고급 스레드 기법을 써서, 고성능의 안정된 네트워크 통신을 지원한다.

2.3 스프링 프레임워크(Spring Framework) #


대규모(Enterprise) 개발환경에서 요구되는 DB작업, 트랜잭션, 리모팅 객체 연결, 웹 서비스 등의 다양한 개발 요구사항을 지원하기 위해 개발된 프레임워크로 현재 자바 진영의 선택 가능한 기술이 아니라 필수 활용 기술로 채택되고 있으며,

통신서버에는

- 스프링(Spring Framework)의 IoC기능(객체지향 개발을 유도/지원하는 기능)

- 스프링(Spring Framework)의 설정관리 기능

- 스프링(Spring Framework)의 JMX 연동 기능

을 활용하였다.

2.4 JMX(JavaManagement Extensions) #

실행중인 자바 어플리케이션을 외부에서 모니터링하고 관리하는 기능을 제공한다.

자바VM, 서버정보, 기타 별도 제작하여 장착/장탈 가능한 모니터링 정보등의 구현 가능한 모니터링 모듈을 JMX기반으로 구현할 수 있다.

이것이 자바 진영의 모니터링 구현 표준이기 때문에 별도로 개발하거나 별도의 솔루션을 구입하는 대신 얻을 수 있는 효과가 크다.

- 별도의 컨설팅 필요 없이 방대한 자바 진영의 참고 자료 확보

- 공짜로 발전된 자바 표준 기술 획득

2.5 남은 작업 #


삽질을 줄이자, 아파치 미나(Apache MINA) API 독파

JMX 각종 통계 수치 이해 하여 튜닝에 활용

아파치 미나(Apache MINA) 스레드 기법을 통한 튜닝 기법 연구

장착, 장탈 가능한 아파치 미나(Apache MINA)의 필터 적용 연구
(보안 모듈 필터 등)

JMX연구 하여 자체 제작한 JMX 모듈을 붙이자.

스프링의 다양한 유틸리티 활용기법 연구 (나중 서버 개발)

위키 문서등을 통해 습득한 아파치 미나(Apache MINA)와 스프링의 지식 공유

(오픈소스 공유의 혜택을 보고 있으면 똑같이 공유해야 한다.)

2.6 위키 문서 개정 예정 #


  • 스프링 연동하여 IoC 설정, 프로퍼티 설정, JMX 설정 방법

  • 아파치 미나(Apache MINA)로 개발하면서 얻은 팁들

2.7 아파치 미나(Apache MINA) 활용 경량 통신서버 개발 후기 #


  • 아파치 미나(Apache MINA) 문서가 거의 영어로 되어 있는데 내가 영어가 부족하여 저 구성도 하나 완성하는데도 몇주 소요됨

  • 아파치 미나(Apache MINA) 기본적인 흐름 이해하는데 예제들이 절대적으로 도움이 되었다. 에코 서버 예제 -> 체팅 서버 예제 -> HTTP 서버 예제 -> 프록시 서버 예제 등으로 분석하면 도움이 될 것이다.

  • 아파치 미나(Apache MINA) 는 특정 로직 영역만 개발자가 다루고 나머지는 아파치 미나(Apache MINA)가 알아서 처리해주기 때문에 프레임워크 다운 훌륭한 기능을 수행한다고 보았다.

  • 그러나 참고 자료가 부족 하거나 영어로 되어 있는것과(영어는 당연히 알아야 되지만~) 창시자가 한국인임에도 불구하고 관련 커뮤니티가 외국에 비해 부족한 것이 아쉬웠고, 미흡한 문서나마 급하게 올리는 이유도 이것에 있다.

  • 아파치 미나(Apache MINA) 창시자 이희승님은 질문 메일을 보내면 매우 친절하게 답변해 주었다. 단 메일 내용이 최대한 예의를 갖추고 겸손해야 할 것 같다.

  • 질문 메일 작성법에 대하여 http://blog.gleamynode.net/2007/03/i-wont-be-that-kind-anymore.html 참고

  • 아파치 미나(Apache MINA)로 무엇인가 만들면서 내가 네트워크 프로그래밍에 대해 조금은 안다고 생각하기도 했는데, 아파치 미나(Apache MINA)의 복잡한 내부 구성을 보고 네트워크 프로그래밍에 대해 한참 부족하다고 바꿔 생각하게 되었다. 아파치 미나(Apache MINA) 를 '가져다 쓰는 것'과 '직접 만든 것'과의 실력차이는 하늘과 땅차이 였다. 그래서 다시 말하길, 초보 개발자도 아파치 미나(Apache MINA) 가져다 쓰는 방법만 알면 고성능의 서버를 개발할수 있기 때문에 아파치 미나(Apache MINA)가 훌륭하다는 것이다.

  • 특히 개인적으로 NIO를 공부하면서 버퍼까지는 이해되겠는데 채널, 셀렉터 부터는 한번에 이해하기 어려웠다. 이런 어려운 NIO를 아파치 미나(Apache MINA)는 깊게 신경쓸 필요 없이 구현해 주니 훌륭한 프레임워크 라고 생각하며,

    한국인이 창시하여 그 훌륭함을 인정받아 아파치 정식 프로젝트로 올라갔기 때문에 우리나라 자바 개발자 위상을 한단계 높여준 아파치 미나(Apache MINA)가 자바 개발자들한테 널리 전파되고 교류되었으면 하는 바램에 미흡한 문서나마 올리게 되었다.
  • 카카오스토리
  • 트위터
  • 페이스북

'' 카테고리의 다른 글

오픈소스 컨퍼런스 2007 참가 후기 (위키노믹스의 원조 오픈소스)  (32) 2007.10.15
한국스프링사용자모임4회(KSUG) 참가 후기 (AOP)  (9) 2007.09.12
진화하는 아파치 미나(Apache MINA) 위키 강좌  (16) 2007.09.04
무브온21님 개발자 모임 참석 후기 (저도 웃었습니다.)  (30) 2007.08.27
진화하는 홈 리눅스 그리드 컴퓨터 설치 위키강좌  (8) 2007.08.12
진화하는 웹2.0 위키강좌  (10) 2007.08.08
Posted by 산골 김저자
Apache MINA, IT, 개발자, 네트워크, 네트워크 프로그래밍, 스프링, 아파치 미나, 자바, 정성
  • BlogIcon sepial
    2007.09.04 15:10 신고

    신비주의 종교의 경전보다 더 신비롭군요~~~
    >.<

    • BlogIcon 산골 김저자
      2007.09.04 17:57 신고

      저는 샛별님 블루팡오님 영어 잘하시는게 더 신비로와요~

      영어좀 알려주세요~ >.<

  • BlogIcon Bluepango
    2007.09.04 18:10 신고

    내 영어 실력 보시면, 엄청 놀랄겁니다.
    어떻게 저런 실력으로 외국에서 사나 하구요.
    그런데 콩글리시만 잘해도 사는덴 지장 없어요.
    단지 5분 이상 대화가 안되어서 그게 좀 문제지요. ^ ^

    그런데 저거 '미나 ' 이름은 예쁜데 도통...
    우주 왕복선 설계도 라도 되는거 같아요. ^ ^

    • BlogIcon 산골 김저자
      2007.09.04 20:35 신고

      아~ 용기를 주시는 댓글입니다~
      비누아투 진짜 한번 가고 싶어요~!

      아~ 그리고 저 문서의 기술을 진짜 제대로
      익혔으면 좋겠습니다~@@;

      저 문서는 그야말로 걸음마 땐것을 기록한
      문서일 뿐입니다~ ^^;

  • BlogIcon ARMA
    2007.09.04 22:34 신고

    공부 열심히 해놔라... 좀 있으면 정신 없는거 알지!!
    버벅 거리면 죽음이다 ^^


  • 2007.10.13 01:54

    비밀댓글입니다

    • BlogIcon 산골 김저자
      2007.10.17 05:28 신고

      아~ 죄송합니다~ 회사 재산이라 공개는 어렵네요~
      꼭 원하시는 결과물 만드시길 바랍니다~ :)

  • BlogIcon 민재
    2007.10.16 14:33 신고

    안 그래도,, 이번에 바이트스트림(키-밸류가 아닌 포맷을 미리 약속하고 밸류만으로 구성된..)을 TCP/IP 리스너로 받아 자바 객체로 만드는 걸 구현해야 하는데..
    이리저리 고민해 본 결과 MINA에서 힌트를 얻을려고 합니다.

    가이드대로 한번 잘 따라해 봐야겠네요. 감사..

    • BlogIcon 산골 김저자
      2007.10.17 05:29 신고

      민재님 고맙습니다~
      그런데 미나 홈페이지의 정식 메뉴얼을 우선 보시고
      이 문서는 곁가지의 참고문서로만 보시길 바랍니다~
      좋은 결과물 만드시길 바랍니다~ :)

  • BlogIcon 따지크
    2008.03.13 18:23 신고

    좋은 자료네요. MINA가 한글 문서가 많이 부족하죠. 이건 희승씨에게 부탁하기 보다는, 다른 한국 개발자가 번역 작업을 해보면 좋지 않을까 싶네요.

    작년에 MINA 기반으로 서버를 만들었는데, 올해는 좀 더 범용적인 서버 프레임워크를 만들까 하고 있는데, 많이 도움 받았습니다~

    • BlogIcon 산골 김저자
      2008.03.20 17:53 신고

      엇 댓글을 늦게 봤습니다. ^ ^;
      따지크님도 MINA써보셨군요. 저희는 이제 본격적으로
      리얼에 적용하려고 하는데 따지크님쪽은 어떠신지요.
      부디 미나가 잘 돌아갔으면 하는 바람입니다. ^ ^

  • BlogIcon Richpapa
    2009.03.03 14:19 신고

    오랜만이죠. 건강 염려덕에 요즘은 조금 괜찮은 것 같습니다. "MINA" 검색을 했는데, 사진보고 '산골소년'님인줄 알았네요. ㅎㅎㅎ 저도 MINA를 Research 단계에 있는데, 일단 산골소년님이 포스팅을 보고 코드레벨 테스트를 해보겠다고 마음을 굳혔습니다.

    그런데, 서버단 구현에 있어서 쓰레드는 구현은 어떻게 해야 하나요? 문서를 보니 "2.0 이후버전에서는 쓰레드를 모델을 갖지 않을 듯 보입니다." 그래서인지 2.x 에서는 문서가 빠졌더라구요. 아무래도 서버로 구현된다면 많은 클라이언트 처리는 쓰레드가 필수로 보입니다만.. 고민 스럽네요.

    추신: 스프링에 미나에... 공부할게 너무 많아 행복합니다. ㅜㅜ

    • BlogIcon 산골 김저자
      2009.03.15 21:03 신고

      주원아빠님 건강은 회복되셨는지요..
      저는 1점대를 썼는데. 1점대 같은 경우
      스레드는 미나에서 자동으로 처리해주는데요..
      따로 설정도 가능합니다.
      근데 제가 스레드 설정 이것저것 해봤는데
      결국 미나가 자동으로 해주는게 성능이 제일
      좋더라구요.
      저희는 미나로 프로젝트 오픈하여 현재까지
      장애없이 잘 돌리고 있습니다.
      안심하고 사용해보세요.

      아참..그런데 2.0대는..정식버전이 릴리즈 되지
      않은것 같던데..그죠? ^ ^

  • BlogIcon 이희승
    2009.10.09 01:21 신고

    앞으로는 네티를 애용해 주세요 *^^*
    http://www.jboss.org/netty/

    • BlogIcon 산골 김저자
      2009.10.11 20:01 신고

      엇 이희승님 어서오세요~
      에고 제 블로그에 이희승님 댓글도 달리고
      기분 무지 좋네요 ^ ^;
      당시 미나 우여곡절끝에 프로젝트에 잘 적용되어
      아직까지 장애없이 잘 돌아가고 있다는 소식을
      들었습니다.
      네티 얘기도 들었는데 앞으로는 정말 네티를
      써야겠군요. 방문 감사드리고 항상 행복하시고요. ^ ^


  • 2011.10.22 02:56

    비밀댓글입니다

트랙백

※ 스팸 트랙백 차단중 ...{ ? }
이전페이지 다음페이지
블로그 이미지

by 산골 김저자

공지사항

  • 산골 김저자 블로그 소개

    최근...

  • 포스트
  • 댓글
  • 트랙백
  • '한번 읽으면 두번 깨닫는 객체지향..
  • 객체지향 생각의 도구6-한두깨 객체.. (2)
  • 객체지향 생각의 도구5-한두깨 객체..
  • 객체지향 생각의 도구4-한두깨 객체..
  • 객체지향 생각의 도구3-한두깨 객체..
  • 더 보기
  • 예 안녕하세요~ 지금 인쇄소에 넘어..
    김저자 ㆍ 02.13
  • 아직 책이 안나오나요? 나오면 전체..
    카이 ㆍ 02.12
  • 감사합니다. 거의 첫 독자가 되시..
    산골 ㆍ 01.10
  • 네~ 꼭 구매해서 후기 달겠습니다
    카이 ㆍ 01.09
  • 네 정확합니다.~! 포인트를 정확히..
    산골 ㆍ 01.08

태그

  • 독서
  • 프로그래밍
  • ibm developerworks
  • 리뷰
  • 수필 객체지향
  • 여행
  • 음악
  • 책쓰기
  • IT
  • 일상
  • 힙합
  • 객체지향
  • IT개발자
  • IBM
  • 글쓰기
  • 아이폰
  • 프로그래머
  • 비보잉
  • 책
  • 정치
  • DeveloperWorks
  • 자바
  • 개발자
  • 수필
  • 블로그
  • 칼럼
  • 우토로
  • 디자인패턴
  • 수영
  • 비보이

글 보관함


  • 2019/02
    (3)

  • 2019/01
    (8)

  • 2018/12
    (1)

  • 2018/09
    (1)

  • 2018/08
    (2)

  • 2018/07
    (2)
«   2019/02   »
일 월 화 수 목 금 토
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28    

링크

카테고리

전체 보기 (522)
길게 쓰기 (18)
객체지향의 탄생 (공식) (18)
짧게 쓰기 (259)
리뷰 (53)
칼럼 (37)
연습장 (169)
기타 (144)
칸쿤 여행 (2017) (1)
중국 여행 (2015) (6)
객체지향의 탄생(2013) (55)
객체지향 토막글 (24)
캐나다 여행 (2010) (10)
수영 (12)
우토로 운동(07) (21)
비보이 글(02~08) (15)
비공개 글 (0)

카운터

Total
1,876,778
Today
63
Yesterday
78
방명록 : 관리자 : 글쓰기
산골 김저자's Blog is powered by daumkakao
Skin info material T Mark3 by 뭐하라
favicon

산골 김저자의 책풀이 속풀이

  • 태그
  • 링크 추가
  • 방명록

관리자 메뉴

  • 관리자 모드
  • 글쓰기
  • 전체 보기 (522)
    • 길게 쓰기 (18)
      • 객체지향의 탄생 (공식) (18)
    • 짧게 쓰기 (259)
      • 리뷰 (53)
      • 칼럼 (37)
      • 연습장 (169)
    • 기타 (144)
      • 칸쿤 여행 (2017) (1)
      • 중국 여행 (2015) (6)
      • 객체지향의 탄생(2013) (55)
      • 객체지향 토막글 (24)
      • 캐나다 여행 (2010) (10)
      • 수영 (12)
      • 우토로 운동(07) (21)
      • 비보이 글(02~08) (15)
      • 비공개 글 (0)

카테고리

PC화면 보기 티스토리 Daum
  • 페이스북 공유하기
  • 카카오톡 공유하기
  • 카카오스토리 공유하기
  • 트위터 공유하기