반전을 조심해야 한다. 겪어보면 기분이 착잡하면서 쓴 약이 되는 반전이 있다. 어제까지만 해도 ‘이 정도면 이 분야 잘아는 것 아닌가~’ 라는 생각을 가지고 있었는데 ‘기초도 모르는구나~’ 라는 착잡한 반전을 경험했다.

어느정도 안다고 생각한 분야의 프로그램에 에러가 발생했는데 하루종일 매달려도 잡히지가 않았다. 그 분야에 정통한 아는 형에게 전화했는데 형이 조언해줘도 내가 못 알아들으니깐 형이 참다가 한마디 던진다.

‘너 기초도 몰라서 얘기가 안 된다. 책좀 읽고 다시 물어봐~!’ 형다운 충고였는데 틀린말이 아니었다. 내가 해결해야될 에러는 까마득한 바다속에 빠진 소중한 물건과 같은데, 까마득한 바다속 길은 깜깜하여 알 수가 없었다. 그래도 해결해야 되니 방법을 찾아보자”


지금 문제가 터진 분야가 ‘네트워크 프로그래밍’ 입니다. 가끔씩 제가 아파치 미나(Apache MINA)를 이용하여 서버 모듈을 만들고 있다고 얘기한적이 있는데요. 오늘 제대로 문제가 터졌습니다. 그런데 이 문제는 자바 NIO와 TCP/IP의 기초 지식을 알아야만 접근가능한 문제였습니다.

기초가 부족한 저는 오늘 문제를 해결 못하고 집에 왔습니다. 마침 IBM developerWorks 리뷰를 쓰려고 했는데 자바 NIO 기사가 있으면 ,공부하면서 에러 접근에 실마리를 찾으면 좋겠다는 생각이 들더군요. 마침 자바 NIO 기사가 있어서 소개합니다.



NIO는 Blocking I/O의 단점을 보완하기 위해 자바1.4부터 추가되었다.

Blocking I/O의 단점은 말 그대로 하나의 작업이 끝날때까지 동시에 다른 작업을 할 수 없다는 것이다.

이 문제를 해결하는 방법은 스레드를 여러 개 생성하는 방법이 있는데 대신 스레드 과부하 등의 치명적인 문제가 발생한다.

Blocking I/O의 문제를 해결한 NIO의 새로운 접근 방법은 Reactor 패턴이다.

Reactor 패턴은
1. 이벤트 중심의 애플리케이션이,
2. 하나 이상의 클라이언트로부터,
3. 하나의 애플리케이션으로 ‘동시에’ 전달되는 요청들을 나눠
4. 각 요청이 원하는 목적지로 보내주는 역할을 수행한다.

좀더 기술적인 관점에서 설명하면,
1. 클라이언트의 모든 요청을 우선 큐에 저장하고,
2. 큐를 모니터링하는 스레드에 신호를 보낸다.
3. 신호를 받은 큐 모니터링 스레드는 큐에 저장된 요청의 목적지를 분석해서 해당 목적지로 보내준다. – 한빛미디어 자바IO/NIO 네트워크 프로그래밍 참고

NIO의 구성요소에는 3가지가 있고 각각의 역할을 단순하게 다음과 같이 정리했다.
1. 버퍼(데이터 그릇)
2. 채널(연결 파이프)
3. 셀렉터(요청 큐 관리자)

사용자 삽입 이미지

이제 실제 NIO 프로그래밍을 구성할 때는
1. 셀렉터를 생성하고,
2. 셀렉터에 채널을 등록한다.
3. 채널 양 끝단의 데이터 교환은 버퍼를 사용한다.

일단 IBM developerWorks의 기사와 NIO 관련책을 공부하면서 위와 같이 정리했는데요. 미흡한 부분은 피드백 해주시고, 자세한 내용은 아래의 IBM developerWorks 링크를 참고해 주시길 바랍니다.


부디 내일은 에러 해결했으면 좋겠습니다.
신고
Posted by 산골
산골 블로그 소개 저는 하얀머리 개발자와 작가를 꿈꾸는 블로거 산골 입니다. 프로그램 개발자로서 저의 관심사는 개발자의 숨통을 트여준 아이폰 개발, 철학과 같은 깊이가 있는 객체지향 방법론입니다. 글쓰기와 수영을 좋아합니다. 블로그를 통해 관심사를 공유합니다. 제 블로그에 관심 있으시면 아래 RSS나 즐겨찾기로 편하게 구독하세요.

rss Bookmark and Share

댓글을 달아 주세요

  1. BlogIcon 데굴대굴 2008.04.17 12:11 신고  댓글주소  수정/삭제  댓글쓰기

    저도 이런 경험 있습니다. 제 경우는 MS사 제품을 다루는데, MS에서도 방화벽이 있습니다. ISA라는 놈인데, 이놈을 평범한 방화벽으로 보고 설계하면 나중에 처음부터 다시 넷떡을 고쳐줘야하는 즐거운 현상(?)이 발생합니다.

    꼭 이렇게 사이에 낀 놈들이 많아질수록 알아야 할 것이 많아져서 피곤해지더군요. -_-

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

      지금 저 같은 경우 이렇게 불편한 피드백을
      경험하면서 발전할수 있다는 긍정적인 생각을
      가지기로 했습니다..
      근데 데굴대굴님 MS일 하시면 나중에 우리회사에
      꼭 오세요~ 헤헤
      여기 알마님도 같이 있어요~ ^ ^

  2. BlogIcon 맨큐 2008.04.17 20:49 신고  댓글주소  수정/삭제  댓글쓰기

    해당 분야에 대해 어느 정도는 알고 있기에 가볍게 여겼지만, 어느 순간부터 그것에 대해 아무것도 몰랐던 것은 아닐까 하는 생각 때문에 당황스러운 느낌.
    뭔지 알 것 같아요.
    저도 여러 번 느껴봤거든요. ^^;
    막힌 부분 얼른 해결하시길!
    전 전혀 도움이 안 되는 분야로군요. ㅎㅎ

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

      맨큐님의 자상한 댓글과 공감에 기분이
      좋아졌어요~!
      덕분에 에러는 해결 실마리를 찾았습니다.
      겨우 찾았죠..휴우..
      자만하지 말고 열심히 해야 될것 같아요.
      블로그도 마찬가지겠죠.. ^ ^

  3. BlogIcon sepial 2008.04.19 16:13 신고  댓글주소  수정/삭제  댓글쓰기

    프로그래밍은 잘 모르지만....
    "기초도 모르는구나"라는 생각을 했을 때라야, 정말 성장할 수 있다는 건 알아요.
    넘어지면서 큰다는........홧팅이삼@!

  4. BlogIcon 달룡.. 2008.04.19 18:07 신고  댓글주소  수정/삭제  댓글쓰기

    프로그래밍의 세계는 항상 저에겐 어렵게만 느껴집니다..잘 지내시죠..토요일 오늘 날씨 참 좋네요..여기저기 돌아다니다가..이제 들어왔습니다..주말 잘 보내세요..

  5. 2008.04.19 18:08  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  6. BlogIcon Ikarus 2008.04.28 06:56 신고  댓글주소  수정/삭제  댓글쓰기

    잘 모를때는 단순해 보이고 간단해 보이지만 정작 깊이 알면 알 수록 눈앞을 막아선 아스라히 높은 벽이 하나도 아니고 온 사방을 막고 있다는 느낌을 많이 받습니다. 비록 분야는 다르지만 저 또한 저 자신의 한계를 실감하는 일이 많다보니 하신 말씀이 꼭 제 이야기를 하는 것 같습니다. 저는 그런 한계를 느꼈다는 자체를 그나마 발전한 거라 자위하며 살고 있답니다.

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

      흠~ 이카루스님 미국에서 무슨일 하시는지
      궁금합니다. ;
      그래도 자신의 일로 미국까지 가신분이면 실력
      대단하실건데..제가 볼때 겸손하신것 같아요.
      일단 영어부터 부러워유~ ^ ^