저자 서문 ... 4 이 책의 주요 내용 ... 6 Chapter 1 네트워크 기초 현장 Point ... 22 01 네트워크와 네트워킹 ... 23 02 네트워크 통신 방법 ... 24 03 OSI 7계층 ... 25 04 인터넷 프로토콜 ... 27 05 인터넷 애플리케이션 프로토콜 ... 31 O6 TCP/IP 스택 ... 32 07 소켓과 포트 ... 34 08 보안 ... 35 생각해볼 문제 ... 38 Chapter 2 스레드 현장 Point ... 40 01 스레드란 ... 41 02 스레드의 생성과 시작 ... 44 white-box ... 45 black-box ... 46 상속 vs 합성 ... 47 03 스레드의 종료 ... 50 04 데몬스레드와 join() ... 54 05 스레드 그룹 ... 57 O6 스레드 우선순위 ... 60 07 멀티스레드와 동기화 ... 63 자바의 런타임 데이터 영역들과 공유 데이터 ... 64 lock, monitor, synchronized ... 67 wait, notify, notifyAll ... 69 ThreadLocal ... 69 08 생성자-소비자 패턴 ... 72 생각해볼 문제 ... 78 Chapter 3 자바 IO 현장 Point ... 80 01 자바 IO에 대한 선입견 ... 81 02 자바 IO도 객체다 ... 81 03 재사용되기 위해서 설계된 자바 IO ... 82 04 특수한 IO 객체 ... 89 05 자바 IO란 ... 90 06 생성자가 중요한 자바 IO 관련 클래스 ... 92 07 자바 IO 프로그래밍을 잘하려면 ... 92 생각해볼 문제 ... 97 Chapter 4 바이트 스트림 : 바이트 단위 IO 클래스 현장 Point ... 100 01 File 클래스 ... 101 File 클래스를 이용한 파일의 정보 구하기 ... 102 File 클래스를 이용한 파일 삭제 ... 104 File 클래스를 이용한 디렉토리의 파일 목록 출력 ... 105 File 클래스를 이용한 임시 파일의 생성과 삭제 ... 107 02 바이트 단위 IO 클래스 ... 109 InputStream과 OutputStream ... 110 FileInputStream과 FileOutputStream ... 113 DataInputStream과 DataOutputStream ... 120 ByteArrayInputStream과 ByteArrayOutputStream ... 126 PipedInputStream과 PipedOutputStream ... 132 생각해볼 문제 ... 137 Chapter 5 문자 스트림 : 문자 단위 IO 클래스 현장 Point ... 140 01 문자 단위 IO 클래스 ... 141 02 Reader와 Writer ... 142 03 InputStreamReader와 OutputStreamWriter ... 143 문자 단위로 파일 내용을 읽어 들여 화면에 출력하기 ... 145 04 Filereader와 FileWriter ... 146 FileReader와 FileWriter를 이용한 텍스트 파일 복사 ... 147 05 BufferdReader와 BufferedWriter ... 149 앞서 작성한 파일 복사 프로그램 개선 ... 150 O6 PrinterWriter ... 152 키보드로부터 한 줄씩 입력 받아 파일에 저장하기 ... 153 07 CharArrayReader와 CharArrayWriter ... 155 Char 배열 형태로 만든 후, 이 내용을 화면에 출력하기 ... 156 08 StringReader와 StringWriter ... 158 생각해볼 문제 ... 160 Chapter 6 객체 스트림 현장 Point ... 162 01 영화 '플라이'로 살펴본 객체 스트림 ... 163 02 첫 번째 예제 : 생각해볼 문제와 간단한 예제 ... 164 03 객체 스트림 소개 ... 169 04 두 번째 예제 : 나의 책 목록 ... 171 05 마샬링하고 싶지 않은 필드에 대한 처리 ... 177 06 세 번째 예제 : 윈도우 저장과 읽기 ... 177 07 ObjectOutputStream 클래스의 생성자와 메소드 ... 181 08 ObjectInputStream 클래스의 생성자와 메소드 ... 182 09 객체 스트림의 예외 ... 183 생각해볼 문제 ... 184 Chapter 7 네트워크 프로그래밍 기초 현장 Point ... 186 01 소켓이란 ... 187 소켓의 세 가지 형식 ... 188 인터넷 주소와 포트 ... 189 02 InetAddress 클래스를 활용한 도메인과 IP 변환 ... 190 InetAddress 클래스를 이용한 nslookup 명령 구현 ... 191 InetAddress 클래스를 이용한 로컬 컴퓨터명과 IP 구하기 ... 194 생각해볼 문제 ... 196 Chapter 8 TCP 프로그래밍 현장 Point ... 198 01 TCP 프로그래밍 기본 ... 199 클라이언트의 접속 대기 ... 201 클라이언트 접속 ... 201 Socket으로부터 InputStream과 OutputStream 구하기 ... 202 접속 끊기 ... 203 02 간단한 에코 클라이언트/서버 프로그래밍 ... 204 에코 서버 프로그래밍 ... 205 에코 클라이언트 프로그래밍 ... 207 에코 서버와 에코 클라이언트 실행 ... 208 에코 클라이언트와 에코 서버의 문제점 ... 209 03 멀티스레드를 이용한 에코 서버 ... 209 멀티스레드 에코 서버 프로그래밍 ... 210 멀티스레드 에코 서버 실행 ... 213 04 간단한 웹 서버 프로그래밍 ... 214 브라우저의 요청정보 출력 ... 214 SimpleWebServerBasic 실행 ... 216 간단한 웹 서버 프로그래밍 : SimpleWebServer ... 217 index.html 파일 작성 ... 220 브라우저를 이용해서 요청정보를 보내고 응답 받기 ... 221 SimpleWebServer의 문제점 ... 221 05 간단한 채팅 클라이언트/서버 프로그래밍 ... 222 채팅 서버 프로그래밍 : ChatServer ... 224 채팅 클라이언트 프로그래밍 : ChatClient ... 230 채팅 클라이언트와 서버의 실행 ... 234 채팅 클라이언트/서버에서 아쉬운 부분 ... 235 O6 윈도우용 채팅 클라이언트 작성 ... 235 윈도우용 채팅 클라이언트 작성 개요 ... 236 윈도우용 채팅 클라이언트 실행 ... 241 윈도우용 채팅 클라이언에서 개선해야 할 부분 ... 242 07 객체 직렬화를 이용한 네트워크 프로그래밍 ... 243 직렬화 가능 객체 : SendData ... 244 계산 서버 : ObjectCalculatorServer ... 244 계산 클라이언트 : ObjectCalculatorClent ... 247 객체 직렬화를 이용한 계산 서버와 계산 클라이언트 실행 ... 249 객체 직렬화는 편리하지만 무겁다 ... 250 생각해볼 문제 ... 251 Chapter 9 UDP 프로그래밍 현장 Point ... 254 01 UDP를 이용한 프로그래밍 방법 ... 255 02 UDP를 이용한 에코 클라이언트/서버 프로그래밍 ... 257 에코 서버 프로그래밍 ... 257 에코 클라이언트 프로그래밍 ... 259 에코 클라이언트와 서버의 실행 ... 262 03 UDP를 이용한 타임 서버와 클라이언트 작성 ... 263 타임 서버 프로그래밍 ... 263 타임 클라이언트 프로그래밍 ... 265 클라이언트와 서버 프로그래밍 실행 ... 267 타임 서버와 클라이언트 프로그래밍 응용 ... 268 생각해볼 문제 ... 269 Chapter 10 URL 관련 클래스 현장 Point ... 272 01 URL이란 ... 273 02 URL 클래스 ... 274 URL 클래스의 사용 목적 ... 274 URL 클래스를 이용한 URL 주소 분석 : URLlnfo ... 274 URL 주소를 분석하는 URLlnfo 실행 ... 276 03 URL 클래스를 이용해서 웹사이트 읽어 오기 ... 276 웹사이트의 내용을 긁어오는 WebSpider ... 278 WebSpider 실행 ... 280 URL 클래스의 문서 호출 방식 ... 281 04 URLConnection 클래스로 웹 페이지 읽기 ... 282 웹 페이지를 읽어 오는 WebSpiderWithURLConnection ... 283 WebSpiderwithURLConnection 애플리케이션 실행 ... 285 05 GET 방식으로 URL 주소 호출하기 ... 285 GET 방식으로 사용자 쿼리 전달 : DaumSerch ... 287 DaumSerch 실행 ... 289 06 POST 방식으로 URL 주소 호출하기 ... 290 POST 방식으로 사용자 쿼리 전달 : PostConnection ... 291 PostConnection 실행 ... 294 07 URLEncoder를 이용한 문자열 변환 ... 294 아스키 코드가 아닌 문자열을 특수한 문자열로 변환하기 ... 295 URLEncoderTest 실행 ... 296 08 URLDecoder 클래스를 이용한 디코딩 ... 296 URLDecoder를 이용해서 디코딩하기 ... 296 URLDecoderTest 실행 ... 297 생각해볼 문제 ... 298 Chapter 11 멀티캐스트 현장 Point ... 300 01 멀티캐스트 방식이란 ... 301 02 멀티캐스트 백본 : MBone ... 302 03 간단한 인터넷 방송 클라이언트와 서버 구현 ... 302 방송 서버 구현 : MulticastServer ... 303 방송 클라이언트 구현 : MulticastClient ... 304 방송 서버와 클라이언트 실행 ... 306 04 채팅 프로그램 작성 ... 306 채팅 클라이언트 작성 : MulticastchatClient ... 307 채팅 클라이언트 실행 ... 313 생각해볼 문제 ... 314 Chapter 12 NIO 개요 현장 Point ... 316 01 자바 IO는 느리다? ... 317 02 블록킹 자바 IO ... 317 03 IO 향상을 위한 운영체제 수준의 기술 ... 319 버퍼 ... 319 Scatter/Gather ... 324 가상 메모리 ... 325 메모리 맵 파일 ... 326 파일 락 ... 327 04 자바의 새로운 변화 ... 329 자바의 포인터 버퍼 도입 ... 329 네이티브 IO 서비스를 제공해주는 채널 도입 ... 330 셀렉터 도입 ... 330 생각해볼 문제 ... 332 Chapter 13 버퍼 현장 Point ... 334 01 버퍼 개요 ... 335 02 버퍼의 네 가지 기본 속성 ... 336 03 버퍼에서 데이터 읽고 쓰기 ... 339 상대적 위치를 이용해서 1바이트씩 읽고 쓰기 ... 340 절대적 위치를 이용해서 1바이트씩 읽고 쓰기 ... 342 배열을 이용해서 한꺼번에 많은 데이터를 읽고 쓰기 ... 345 버퍼 자체를 파라미터로 받아서 쓰기 ... 349 04 Buffer 클래스가 제공하는 유틸리티 메소드 ... 350 clear() 메소드 ... 350 rewind() 메소드 ... 351 flip() 메소드 ... 352 05 Buffer 하위 클래스 유틸리티 메소드 ... 352 compact() 메소드 ... 352 duplicate() 메소드 ... 353 asReadOnlyBuffer() 메소드 ... 356 slice() 메소드 ... 356 06 버퍼 만들기 ... 359 07 ByteBuffer ... 362 다이렉트 버퍼 ... 362 뷰 버퍼 ... 364 다른 데이터 형식으로 읽고 쓰기 ... 366 바이트 순서 ... 368 08 CharBuffer ... 370 09 채널에서 버퍼 사용하기 ... 374 채널의 데이터를 버퍼로 읽어들이기 ... 374 버퍼에 저장된 데이터를 채널에 쓰기 ... 375 생각해볼 문제 ... 376 Chapter 14 채널 현장 Point ... 378 01 채널 개요 ... 379 02 채널의 기본 인터페이스 ... 381 Channel, InterruptibleChannel ... 382 ReadableByteChannel, WritableByteChannel, ByteChannel ... 384 ScatteringByteChannel, GatheringByteChannel ... 386 03 파일채널 ... 391 기본 속성 ... 394 파일 락킹 ... 398 메모리 매핑 ... 403 채널 간 직접 전송 ... 412 04 소켓채널 ... 420 비블록킹 모드 ... 422 서버소켓채널 ... 424 소켓채널 ... 426 데이터그램채널 ... 430 생각해볼 문제 ... 437 Chapter 15 셀렉터 현장 Point ... 440 01 셀렉터 개요 ... 441 02 기존의 네트워크 프로그래밍 모델 ... 442 03 비블록킹 모델 ... 445 04 SelectableChannel ... 448 05 SelectionKey ... 452 06 Selector ... 456 07 비블록킹 서버 만들기 ... 460 생각해볼 문제 ... 474 Chapter 16 향상된 서버 만들기 현장 Point ... 476 01 들어가기에 앞서 ... 477 02 효율적인 메모리 사용 ... 477 03 비효율적인 데이터 전송에 대한 고려 ... 478 04 동시성을 이용한 성능 극대화 ... 479 Accept, Process의 분리 ... 479 SelectiorPool 사용 ... 480 ThreadPool 사용 ... 481 05 향상된 서버 만들기 ... 482 생각해볼 문제 ... 506 Chapter 17 RMI 현장 Point ... 508 01 RMI란 ... 509 02 RMI 구조 ... 510 03 RMI는 어떻게 동작하는가 ... 511 04 로컬 객체를 원격 객체로 변경하기 ... 512 로컬 객체를 이용한 Hello 출력 애플리케이션 ... 512 원격 객체를 이용한 Hello 애플리케이션으로 수정 ... 514 05 RMI를 이용한 계산기 애플리케이션 ... 522 계산기 원격 인터페이스 작성 ... 523 원격 인터페이스를 구현하는 원격 객체 작성 ... 523 계산기 원격 객체를 등록하는 CalculatorBind 작성 ... 524 원격 객체를 찾아서 사용하는 CalculatorClient 작성 ... 525 컴파일 ... 526 스텁과 스켈레톤 생성 ... 527 rmiregistry 실행과 계산기 원격 객체 등록 ... 527 계산기 클라이언트 실행 ... 528 06 RMI를 이용한 채팅 애플리케이션 ... 529 클라이언트 쪽의 원격 인터페이스 작성 ... 530 서버 쪽의 원격 인터페이스 작성 ... 531 ChatServer 원격 인터페이스를 구현한 서버 쪽 원격 객체 작성 ... 531 ChatClent 원격 인터페이스를 구현하는 채팅 클라이언트 작성 ... 533 컴파일 ... 536 스텁과 스켈레톤 생성 ... 536 채팅 애플리케이션 실행 ... 537 07 RMI-IIOP ... 538 RMI-IIOP란 ... 538 RMI-IIOP와 RMI의 개발 방법 차이 ... 539 08 RMI-IIOP 예제 ... 540 원격 인터페이스 작성 ... 540 원격 인터페이스를 구현하는 원격 객체 작성 ... 541 원격 객체를 등록하기 위한 애플리케이션의 작성 ... 541 원격 객체를 실제로 이용하는 클라이언트 프로그램 작성 ... 543 컴파일과 스텁, 타이의 생성 ... 545 tnameserv 실행과 원격 객체 등록 ... 546 원격 객체를 이용하는 클라이언트 실행 ... 546 생각해볼 문제 ... 547 찾아보기 ... 548