본문 바로가기

JAVA38

NIO SAMPLE SOURCE NIO 소개 DOC파일 2개, 샘플 소스 -출처 [okjsp.pe.kr] 2007. 3. 29.
[NIO] 1부, 버퍼와 채널 #2 Channel 이제 버퍼가 실제로 사용되는 채널(channel)에 대해서 살펴볼 차례이다. 간단하게 말해서 채널은 데이터가 통과하는 쌍방향 통로라고 생각하면 되는데, 채널에서 데이터를 주고 받을 때 사용되는 것이 바로 버퍼이다. 채널에는 소켓과 연결된 SocketChannel, 파일과 연결된 FileChannel, 파이프와 연결된 Pipe.SinkChannel과 Pipe.SourceChannel 등이 존재하며, 서버소켓과 연결된 ServerSocketChannel도 존재한다. 채널은 기존에 존재하는 Socket, ServerSocket, FileInputStream, FileOutputStream 등은 그와 관련된 채널을 리턴해주는 getChannel() 메소드를 제공하고 있다. 모든 채널 클래스들은 p.. 2007. 3. 29.
[NIO] 1부, 버퍼와 채널 #1 자바2 1.4에는 기존해 확장 API로 존재했던 보안 관련 API를 비롯하여 다양한 API가 포함되었으며, 정규표현식이나 로깅, 설정과 같이 어플리케이션을 개발하는 데 필요로 하는 다양한 기능들이 새롭게 추가되었다. NIO(New IO) API는 이렇게 1.4 버전에 새롭게 추가된 API 중의 하나인데, 반드시 알고 있어야 할 매우 중요한 API라 할 수 있다. NIO API는 자바 1.3 버전까지 사용해왔던 기존 IO API와는 비교가 안될 정도로 성능, 확장성 등에서 뛰어나게 설계되어 있다. 특히 논-블럭킹(Non-blocking) 입출력과 데이터 버퍼링 기능을 사용하여 기존 버전에서는 상상도 할 수 없을 정도의 뛰어난 성능을 지닌 서버 프로그램을 개발할 수 있게 되었다. 본 글에서는 NIO API를.. 2007. 3. 29.
[NIO] 2부, Charset을 이용한 인코딩/디코딩처리 Charset 클래스와 캐릭터셋변환 지난 1부에서는 NIO API의 버퍼와 채널에 대해서 살펴보았다. NIO의 채널은 자바 1.3 까지의 입출력스트림(또는 Reader와 Writer)라는 것을 알게 되었을 것이며, 이 채널은 버퍼를 데이터 저장소로 사용한다는 것도 알게 되었을 것이다. 이번 2부에서는 채널을 통해서 읽어온 데이터의 캐릭터셋을 변환할 때 사용되는 Charset과 논블럭킹 데이터 입출력을 위해서 사용되는 Selector에 대해서 살펴보도록 하겠다. 자바는 애초에 나올때부터 유니코드를 지향해왔다. 하지만, 자바가 제 아무리 유니코드를 지향한다해도 모든 곳에서 유니코드가 통용되는 것은 아니다. 예를 들어, 우리가 매일같이 접속하는 인터넷만하더라도 유니코드 보다는 각 페이지에 알맞은 캐릭터셋을 사.. 2007. 3. 29.
[NIO] 3부, 블럭킹 IO와 논블럭킹 IO #2 논블럭킹 IO를 이용한 웹 서버 구축 마지막으로 논블럭킹 IO를 이용하여 간단한 웹 서버를 구현해보도록 하겠다. 여기서 구현할 웹 서버는 다음과 같이 4개의 클래스로 구성되어 있다. ClientAcceptor - 클라이언트의 연결을 대기하는 쓰레드. 클라이언트로부터 연결 요청이 들어올 경우 관련 SocketChannel을 SocketChannelQueue에 저장한다. ClientProcessor - 클라이언트의 요청을 처리하는 쓰레드. SocketChannelQueue로부터 처리할 SocketChannel을 읽어오며 각 SocketChannel로부터 데이터를 읽어와 알맞은 작업을 수행한다. SocketChannelQueue - ChannelSocket을 연결된 순서대로 임시적으로 저장하는 큐 NIOWeb.. 2007. 3. 29.
[NIO] 3부, 블럭킹 IO와 논블럭킹 IO #1 블럭킹 IO와 논블럭킹 IO 자바 1.5가 조만간 정식 버전이 출시될 것으로 기대되고 있기는 하지만, 필자가 앞서 썻던 자바 1.4의 새로운 입출력 API인 NIO와 관련된 글을 끝맺음하고자 NIO API의 마지막 주제인 'Selector'와 '논블럭킹 IO'에 대해서 살펴보고자 한다. 먼저 1.4 이전의 입출력 코드에 대해서 살펴보도록 하자. 1.4 이전의 입출력 프로그램에서의 기본적인 입출력 메소드는 모두 블럭킹되었다. 예를 들어, ServerSocket의 accept() 메소드의 경우 클라이언트로부터의 연결 요청이 들어올 때 까지 블럭킹된다. Socket socket = serverSocket.accept(); // 블럭킹됨!! 뿐만 아니라 클라이언트가 전송한 데이터를 입력받을 때에도 다음과 같이 .. 2007. 3. 29.