본문 바로가기

카테고리 없음

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

> 어거지 네트워크 전쟁 스토리

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

리눅스 진영의 멀티쓰레드 이지스 시스템, 윈도우 진영의 멀티쓰레드 이지스 시스템이 있고 자바 진영의 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 기반 네트워크 프레임워크부터 무작정 써봤습니다.



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) 이 글을 구독하시는 고수 개발자께서 더 좋은 책이나 다른 평 있으시면 피드백 부탁드립니다. ^ ^