본문 바로가기

전체 글

(51)
[데이터 중심 애플리케이션 설계] 1. 데이터 시스템에 대한 생각 오늘날 많은 애플리케이션은 계산 중심(compute-intensive) 과는 다르게 데이터 중심(data-intensive) 적이다. 이러한 애플리케이션의 경우 CPU 성능은 애플리케이션을 제한하는 요소가 아니며, 더 큰 문제는 보통 데이터의 양, 데이터의 복잡도, 데이터의 변화 속도이다. 일반적으로 데이터 중심 애플리케이션은 공통으로 필요로 하는 기능을 제공하는 표준 구성 요소 (standard building block) 로 만든다. 예를 들어, 많은 어플리케이션은 다음을 필요로 한다. 구동 애플리케이션이나 다른 애플리케이션에서 나중에 다시 데이터를 찾을 수 있게 데이터를 저장 (데이터베이스) 읽기 속도 향상을 위해 값비싼 수행 결과를 기억(캐시) 사용자가 키워드로 데이터를 검색하거나 다양한 방법으로..
[NIO] Selection 네트워크 프로그래밍을 위한 새 I/O API 의 두 번째 부분은 준비된 것을 선택하는 것이다. 준비된 채널을 선택함으로써 읽고 쓸때 블록하지 않아도 된다. 이 내용은 주로 서버의 관심사이지만, 여러 개의 창을 띄워서 동시에 여러 연결을 시도하는 웹 스파이더나 브라우저 같은 클라이언트 프로그램에서도 활용할 수 있다. 준비된 것을 선택하기 위해서는 서로 다른 채널들이 Selector 객체에 등록되어야 하며, 이때 각 채널에 할당되는 SelectionKey 가 사용된다. 그리고 나서 프로그램은 Selector 객체에게 작업을 수행할 준비가 된 채널 키의 세트를 요청한다. Selector class 셀렉터에 있는 유일한 생성자는 protected 로 선언되어 있다. 일반적으로 새로운 셀렉터는 정적 팩토리 메소드..
[NIO] Socket Channel 채널은 파일, 소켓, 데이터그램 등과 같은 다양한 I/O 소스로부터 데이터 블록을 버퍼로 쓰거나 읽어온다. 네트워크 프로그래밍을 위해서는 SocketChannel, ServerSocketChannel, DatagramChannel 세개가 가장 중요하다. 그리고 TCP 연결을 위해서는 이 중에서도 앞의 두 개의 채널만 필요하다. 1. SocketChannel class SocketChannel 클래스는 TCP 소켓에 대해 읽고 쓴다. 읽고 쓸 데이터는 ByteBuffer 객체로 먼저 인코딩 되어야 한다. 각각의 SocketChannel 은 Socket 객체와 연결되어 있다. 연결하기 SocketChannel 클래스는 public 으로 선언된 생성자를 제공하지 않는다. 대신에 다음 두 정적 open() 메소..