Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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 29 30 31
Archives
Today
Total
05-10 01:36
관리 메뉴

zyint's blog

자바 IO & NIO 네트워크 프로그래밍 본문

예전글들

자바 IO & NIO 네트워크 프로그래밍

진트­ 2008. 12. 29. 21:30

자바 IO & NIO 네트워크 프로그래밍

  • 4205455.jpg저자:       김성박,송지훈 공저
  • 출판사:    한빛미디어   
  • 출판일:    2004년 09월
  • ISBN-10 : 8979142935
  • 페이지수:  552

 

책소개

이 책에서는 각 장별로 IO와 NIO의 큰 줄기를 먼저 다룬 후 구체적인 클래스 사용 방법과 해당 예제를 제시한다. 따라서 네트워크 프로그래밍은 할 줄 알지만 기본 개념에 약했던 독자나, 기본 개념은 있지만 응용이 약했던 독자 모두에게 IO와 NIO의 기본부터 응용까지 체계적으로 배울 수 있다. 바로 옆에서 과외를 해주는 듯한 친절한 설명이 독자들의 학습 시간을 대폭 줄여주며, 저자의 경험과 노하우를 생생하게 얻을 수 있다.

 

[주요 내용]
- 내공이 깊으면 연공이 자유롭다: 네트워크 기초 지식과 개념
- 재사용성과 확장성을 고려하자: 스레드 구현 방법
- 자바 IO에 대한 선입견을 버리자: 자바 IO의 기본 개념
- 모든 데이터는 바이트 단위로 구성된다: 바이트 스트림
- 이제 세계의 중심은 2바이트 문화권이다: 문자 스트림
- 프로그램은 손쉽게 작성해야 한다: 객체 스트림
- 속도보다는 신뢰성이 더 중요하다: TCP 프로그래밍
- 신뢰성보다는 속도가 더 중요하다: UDP 프로그래밍
- 특정 웹 페이지의 정보를 처리하자: URL 관련 클래스
- 멀티미디어 데이터를 가볍게 전송하자: 멀티캐스트와 MBone
- IO의 단점을 보완한 새로운 IO가 필요하다: NIO 개요와 필요성
- 데이터를 효율적으로 다루기 위해 새롭게 태어났다: 버퍼
- 다양한 곳에서 훌륭한 캐싱 컴포넌트로 사용한다: 채널과 셀렉터
- 응용력을 높이자: 에코 서버, 타임 서버, 채팅 프로그램, 인터넷 방송 서버, 비블록킹 서버

 

목차

1장. 네트워크 기초
현장 포인트
01. 네트워크와 네트워킹
02. 네트워크 통신 방법
03. OSI 7계층
04. 인터넷 프로토콜
05. 인터넷 애플리케이션 프로토콜
06. TCP/IP 스택
07. 소켓과 포트
08. 보안
생각해볼 문제

2장. 스레드
현장 포인트
01. 스레드란
02. 스레드의 생성과 시작
03. 스레드의 종료
04. 데몬스레드와 join()
05. 스레드 그룹
06. 스레드 우선순위
07. 멀티스레드와 동기화
08. 생성자-소비자 패턴
생각해볼 문제

3장. 자바 IO
현장 포인트
01. 자바 IO에 대한 선입견
02. 자바 IO도 객체다
03. 재사용되기 위해서 설계된 자바 IO
04. 특수한 IO 객체
05. 자바 IO란?
06. 생성자가 중요한 자바 IO 관련 클래스
07. 자바 IO 프로그래밍을 잘하려면
생각해볼 문제

4장. 바이트 기반 스트림: 바이트 단위 IO 클래스
현장 포인트
01. File 클래스
02. 바이트 단위 IO 클래스
생각해볼 문제

5장. 문자 스트림: 문자 단위 IO 클래스
현장 포인트
01. 문자 단위 IO 클래스
02. Reader와 Writer
03. InputStreamReader와 OutputStreamWriter
04. Filereader와 FileWriter
05. BufferdReader와 BufferedWriter
06. PrinterWriter
07. CharArrayReader와 CharArrayWriter
08. StringReader와 StringWriter
생각해볼 문제

6장. 객체 기반 스트림
01. 영화 플라이로 살펴본 객체 기반 스트림
02. 첫 번째 예제: 생각해볼 문제와 간단한 예제
03. 객체 기반 스트림 소개
04. 두 번째 예제: 나의 책 목록
05. 마샬링하고 싶지 않은 필드에 대한 처리
06. 세 번째 예제: 윈도우 저장과 읽기
07. ObjectOutputSteam 클래스의 생성자와 메소드
08. ObjectInputSteam 클래스의 생정자와 메소드
09. 객체 기반 스트림의 예외
생각해볼 문제

7장. 네트워크 프로그래밍 기초
현장 포인트
01. 소켓이란
02. InetAddress 클래스를 활용한 도메인과 IP 변환
생각해볼 문제

8장. TCP 프로그래밍
현장 포인트
01. TCP 프로그래밍 기본
02. 간단한 에코 클라이언트/서버 프로그래밍
03. 멀티스레드를 이용한 에코 서버
04. 간단한 웹 서버 프로그래밍 작성
05. 간단한 채팅 클라이언트/서버 프로그래밍
06. 윈도우용 채팅 클라이언트 작성
07. 객체 직렬화를 이용한 네트워크 프로그래밍

9장. UDP 프로그래밍
현장 포인트
01. UDP를 이용한 프로그래밍 방법
02. UDP를 이용한 에코 클라이언트/서버 프로그래밍
03.UDP를 이용한 타임 서버와 클라이언트 작성
생각해볼 문제

10장. URL 관련 클래스
현장 포인트
01. URL이란
02. URL 클래스
03. URL 클래스를 이용해서 웹사이트 읽어 오기
04. URLConnection 클래스로 웹 페이지 읽기
05. GET 방식으로 URL 주소 호출하기
06. POST 방식으로 URL 주소 호출하기
07. URLEnCoder를 이용한 문자열 변환
08. URLDecoder 클래스를 이용한 디코딩
생각해볼 문제

11장. 멀티캐스트
현장 포인트
01. 멀티캐스트 방식이란
02. 멀티캐스트 백본: MBone
03. 간단한 인터넷 방송 클라이언트와 서버 구현
04. 채팅 프로그램 작성
생각해볼 문제

12장. NIO 개요
현장 포인트
01. 자바 IO는 느리다?
02. 블록킹 자바 IO
03. IO 향상을 위한 운영체제 수준의 기술
04. 자바의 새로운 변화
생각해볼 문제

13장. 버퍼
현장 포인트
01. 버퍼 개요
02. 버퍼의 네 가지 기본 속성
03. 버퍼에서 데이터 읽고 쓰기
04. Buffer 클래스가 제공하는 유틸리티 메소드
05. Buffer 하위클래스 유티리티 메소드
06. 버퍼 만들기
07. ByteBuffer
08. CharBuffer

14장. 채널
현장 포인트
01. 채널 개요
02. 채널의 기본 인터페이스
03. 파일 채널
04. 소켓 채널
생각해볼 문제

15장. 셀렉터
현장 포인트
01. 셀렉터 개요
02. 기존의 네트워크 프로그래밍 모델
03. 비블록킹 모델
04. SelectableChannel
05. SelectionKey
06. Selector
07. 비블록킹 서버 만들기
생각해볼 문제

16장. 향상된 서버 만들기
현장 포인트
01. 들어가기에 앞서
02. 효율적인 메모리 사용
03. 비효율적인 데이터 전송에 대한 고려
04. 동시성을 이용한 성능 극대화
05. 향상된 서버 만들어보기
생각해볼 문제

17장. RMI
현장 포인트
01. RMI란?
02. RMI 구조
03. RMI는 어떻게 동작하는가
04. 로컬 객체를 원격 객체 예로 변경하기
05. RMI를 이용한 계산기 애플리케이션
06. RMI를 이용한 채팅 애플리케이션
07. RMI-IIOP
생각해볼 문제

 

내용소개

1장. 네트워크 기초
항상 어떤 기술을 공부할 때에는 그 배경이 되는 원리 또는 기반 지식에 대해서도 충분한 이해가 반드시 필요하다고 생각한다. 따라서 1장에서는 네트워크와 네트워킹의 기본이 되는 OSI 7계층, 인터넷과 인터넷 관련 프로토콜, 그리고 네트워크 프로그래밍에서 주로 다루게 될 TCP/IP 스택, 소켓과 포트 등에 대해 살펴본다.

2장. 스레드
네트워크 프로그램에서 기초적으로 알고 있어야 할 부분이면서 또한 가장 중요한 부분인 스레드에 대해서 살펴본다. 스레드의 기본적인 개념들로부터 시작해서 재사용성과 확장성을 고려한 바람직한 스레드 구현법, 효과적인 종료기법에 대해 알아본다. 또한 데몬 스레드와 스레드 그룹, 스레드 우선순위에 대해서도 간략하게 알아보고 멀티 스레드를 사용할 때의 동기화 문제점 및 자바에서의 해결책에 대해서도 배운다.

3장. 자바 IO
자바 IO와 관련된 기본적인 클래스들은 java.io 패키지에 존재한다. 따라서 이 장에서는 java.io 패키지에 존재하는 클래스를 사용해서 자바 IO를 사용하는 방법을 살펴본다. 하지만 단순하게 자바 IO만을 가지고 설명하지는 않는다. 자바 IO를 공부하는 방법, 객체지향에서의 상속에 대한 중요 문법에 대한 설명을 함께 얘기한다.

4장. 바이트 스트림: 바이트 단위 IO 클래스
모든 데이터는 바이트 단위로 구성되기 때문에 java.io 패키지에 있는 클래스 중에서 바이트 스트림을 가장 자주 사용한다. 그렇지만 많은 개발자들이 바이트 스트림 클래스의 사용 방법에 대해서 어려워하는 것을 많이 봤다. 바이트 스트림 클래스의 사용 원리를 이해하지 못하기 때문이다. 따라서 이 장에서는 바이트 스트림 클래스의 사용 원리를 예제와 함께 구체적으로 다룬다.

5장. 문자 스트림: 문자 단위 IO 클래스
문자 단위 IO 클래스와 바이트 단위 IO 클래스의 사용법은 비슷하다. 굳이 다른 점을 찾자면바이트 단위로 입출력을 하느냐, 문자 단위로 입출력을 하느냐의 차이가 있을 뿐이다. 따라서 이 장에서는 문자 단위 IO 클래스를 바이트 단위 IO 클래스와 비교하면 설명한다. 참고적으로 바이트 단위의 대표적인 사용 예는 텍스트를 데이터베이스에 저장하고 읽어오고자 할 경우다.

6장. 객체 스트림
객체 안에 저장된 내용을 파일로 저장하거나 네트워크로 전송하려면 많은 노력이 필요한데, 이를 해결하기 위한 기술이 객체 스트림이다. 객체 스트림의 사용 방법은 기능은 엄청나게 강력하다. 객체 스트림을 명확하게 이해할 필요가 있다. 그리고 한 가지 더! 객체 스트림은 자바 RMI의 기반 기술이 되므로 자바 RMI를 이해하려면 객체 기반 스트림에 대한 확실한 이해가 필요하다.
7장. 네트워크 프로그래밍 기초
네트워크 프로그래밍의 기초를 다룬다. 네트워크의 프로그래밍의 기본적인 개념과 IP, 도메인에 대해서 살펴보고 InetAddress 클래스를 이용해서 IP를 도메인으로 변경하는 예제도 작성해본다. 그렇지만 지면 관계로 아주 자세하게는 설명하지 않는다. 따라서 네트워크 프로그래밍을 전혀 모르는 독자는 네트워크 프로그래밍을 전문적으로 다룬 다른 서적을 참고하기 바란다.

8장. TCP 프로그래밍
TCP 프로그래밍을 잘하려면 자바 IO에 대한 확실한 이해가 필요하다. TCP 프로그래밍을 학습해보면 알겠지만, 네트워크로부터 전송받고 전송하는 일들이 마치 파일로부터 읽고 쓰는 것과 같은 방식으로 작성되기 때문이다. 이 장에서는 이처럼 네트워크 프로그래밍 중에서 가장 기본이라고 할 수 있는 TCP 프로그래밍에 대해 배운다.

9장. UDP 프로그래밍
이 장의 주인공은 UDP 프로그래밍이다. UDP 프로그래밍은 보통 근거리 네트워크 프로그래밍에 적합하다. 근거리 네트워크의 경우에는 패킷이 유실될 확률이 거의 없기 때문이다. 패킷이 유실될 확률이 높다는 단점만 제외하면 UDP 프로그래밍에는 속도 면에서 큰 장점이 있다. 그리고 UDP는 다음 장에 배우게 될 멀티캐스팅을 이해하기 위한 선수 조건이다. 멀티캐스팅의 경우, 내부적으로 UDP를 사용하기 때문이다. 멀티캐스팅이 UDP를 사용한다는 것은 멀티캐스팅이 UDP의 장점을 활용한다는 의미와 같다.

10장. URL 관련 클래스
WWW(World Wide Web)은 아마 대부분의 사람들이 알 것이다. 이 장에서는 이 WWW와 관련 있는 몇 개의 클래스에 대해서 알아볼 것인데, 특정 웹 페이지의 정보를 구하거나 웹 페이지의 내용을 읽어 들이는 방법 등을 학습할 것이다. 특히 URLConnection 클래스는 HTTP 프로토콜을 완전히 모르더라도 웹 페이지의 내용을 읽어오는 등의 기능을 할 수 있게 해주므로 더욱 중요하다.

11장. 멀티캐스드
이 장에서는 서버가 필요 없는 채팅 프로그램 등 예제를 통해 멀티캐스트에 대해 알아본다. 그렇지만 채팅 프로그램은 멀티캐스트의 기능에 대해서 알아보기 위한 예제였고, 멀티캐스트가 실제로 적용되고 사용될 부분은 인터넷을 이용한 방송 부문이 될 것이다. 적은 자원으로 많은 사람에게 멀티미디어 자료를 전송할 수 있기 때문이다. 따라서 멀티캐스트를 이용한 멀티미디어 방송의 확산은 매우 빨라질 것이며 이런 의미에서 멀티캐스트 프로그래밍은 매우 중요하다.

12장. NIO 개요
NIO를 공부하기 위해서 필요한 제반 지식이라 할 수 있는 것들에 대해 간단하지만 모두 살펴본다. 간단히 요약하면 IO의 흐름을 살펴보면서 자바 IO가 왜 느렸는지에 대해 배우고 운영체제에서 IO 성능 향상을 위해 사용하는 버퍼, Scatter/Gather, 가상 메모리, 메모리 맵 파일, 파일 락킹에 대해서 공부한다. 또한 앞으로 공부하게 될, 자바에서 새롭게 도입된 NIO의 핵심적인 부분들에 대해서도 간략하게 소개한다.
13장. 버퍼
이 장에서는 다룰 주제는 데이터를 효율적으로 다루기 위해 새롭게 탄생한 버퍼(Buffer)다. 이 버퍼를 공부하면서 버퍼 API가 얼마나 사용하기 쉽고, 다루기 쉽게 설계되었는지도 함께 생각해보기 바란다. 이런 생각을 통해 앞으로 여러분들의 코드가 좀 더 우아해지고 세련되어 질 것이다.

14장. 채널
이 장에서는 채널에 대해 자세히 배운다. 본문에서 자세히 다루겠지만 채널 안의 파일 매핑을 통해서 가상 메모리를 이용하는 것은 엄청난 성능 향상을 가져다 준다. 또한 파일 매핑의 성격상 잦은 업데이트가 발생하는 큰 데이터를 유지하는 경우에도 적합하다. 따라서 채널을 사용하면 다양한 곳에서 사용할 수 있는 훌륭한 캐싱 컴포넌트가 될 수 있을 것이 생각한다.

15장. 셀렉터
우리는 이 장을 통해서 멀티플렉스 모델의 서버를 만들기 위해 필요한 내용인 셀렉터를 중점적으로 살펴본다. 그리고 마지막으로 멀티플렉스 모델의 간단한 채팅서버와 클라이언트를 만들어서 실전에서 응용할 수 있게 했다.

16장. 향상된 서버 만들기
기존의 네트워크 프로그래밍 모델의 한계점을 지적하면서 독자들의 응용력을 키우게 하기 위해서 앞서 15장에서 만들어 본 예제 코드를 업그레이드한 AdvancedChatServer를 만든다. 그렇지만 비즈니스 로직 측면이 아닌 향상된 서버를 만들기 위한 해법을 찾아본다. 이미 채팅에 관련된 소스는 인터넷만 찾아봐도 굉장히 많이 있고 그런 로직은 개발자라면 당연히 스스로 분석해서 작성할 수 있어야 하기 때문이다.

17장. RMI
RMI는 마치 로컬에 있는 객체를 사용하는 것처럼 원격의 객체를 사용할 수 있게 해준다. 원격의 객체를 사용한다는 것은 네트워크 통신이 내부적으로 이뤄진다는 것을 의미하며, 더 이상 프로토콜을 신경 쓰지 않아도 된다는 것이다. RMI는 속도보다는 작업의 편의성을 높이고 싶거나, 프로토콜의 복잡도에서 해방되고 싶은 경우에 사용하는 것이 좋다.

 

참고자료

YES24

 

 

이 글은 스프링노트에서 작성되었습니다.

Comments