SlideShare uma empresa Scribd logo
1 de 35
Baixar para ler offline
Java NIO
전성욱 (allnewangel@gmail.com)
JBoss User Group
12년 10월 10일 수요일
Agenda
• IO 와 NIO
• Buffer
• Channel
• Selector
• NIO2 소개
12년 10월 10일 수요일
자바는 느리다
• JVM위에서 동작하는 추상화된 고수준 언어로
시스템콜을 직접 사용하지 못함
• 선입견을 만들어 준 스윙
• IO (블록킹 IO)
12년 10월 10일 수요일
기존 자바 IO의 흐름
12년 10월 10일 수요일
NIO(New IO) 란?
• 기존 자바의 IO를 개선
• 포인트 버퍼 도입
• 네이티브 IO서비스를 제공해주는 채널 도입
• 셀렉터 도입
12년 10월 10일 수요일
버퍼 (Buffer)
• 직접 시스템 메모리를 사용
할수 있는 클래스
• 기본 데이터 타입을 저장
할 수 있는 저장소
• 배열과 마찬가지로 제한된
크기에 순서대로 데이터를
저장
• 채널을 통해 읽기, 쓰기를
할 때 사용
12년 10월 10일 수요일
Buffer 추상클래스
ByteBuffer
byte데이터를 저장.Direct/NonDirect버퍼가 존재.
ReadableByteChannel과 WritableByteChannel를 통해서 데이터를
입출력
MappedByteBuffer
byte를 저장하는 버퍼로 항상 Direct. 파일의 특정영역을 메모리에
맵핑 시킬때 사용
CharBuffer char를 저장하며 Direct/NonDirect일수 있다. 채널에 쓸수 없다
DoubleBuffer double을 저장하며 Direct/NonDirect일수 있다. 채널에 쓸수 없다
FloatBuffer float을 저장하며 Direct/NonDirect일 수 있다
IntBuffer int 데이터를 저장하며 Direct/NonDirect일 수 있다.
LongBuffer long 데이터를 저장하며 Direct/NonDirect일 수 있다.
ShortBuffer short 데이터를 저장하며 Direct/NonDirect일 수 있다.
NIO API는 한 개의 추상클래스와 8개의 버퍼를 제공
12년 10월 10일 수요일
버퍼의 기본속성
position
버퍼에서 현재 읽거나 쓸 위치값. limit를 초과하지 못함.
초기값은 0
limit
버퍼에서 읽거나 쓸 수 있는 한계값.capacity를 초과하지 못함.
초기값은 capacity값
capacity
버퍼의 크기를 나타냄. 메모리 크기라고 생각하면 됨. 한번 생성하면
크기를 변경할 수 없음.
mark
현재의 position을 표시할 때 사용. reset() 메소드를 호출해서
mark위치로 position을 바꿀 수 있음.
12년 10월 10일 수요일
버퍼 입출력
상대주소를 이용한 입출력
절대주소를 이용한 입출력
12년 10월 10일 수요일
버퍼클래스가 제공하는 메소드
clear() 메소드
12년 10월 10일 수요일
버퍼클래스가 제공하는 메소드
rewind() 메소드
12년 10월 10일 수요일
버퍼클래스가 제공하는 메소드
flip() 메소드
12년 10월 10일 수요일
버퍼 하위클래스가 제공하는 메소드
compact() 메소드
12년 10월 10일 수요일
버퍼 하위클래스가 제공하는 메소드
duplicate() / asReadOnlyBuffer메소드
12년 10월 10일 수요일
버퍼 하위클래스가 제공하는 메소드
slice() 메소드
12년 10월 10일 수요일
버퍼 생성
• Buffer의 모든 클래스는 추상클래스이기 때문에
생성자를 통한 객체생성이 안됨
• 팩토리 메소드를 이용하는 방법
• ByteBuffer.allocate();
• ByteBuffer.allocateDirect();
• 존재하는 배열을 이용하는 방법
• ByteBuffer.wrap(new Byte[]);
12년 10월 10일 수요일
다이렉트 버퍼
• ByteBuffer는 시스템 메모리를 직접 사용하는 다이렉트
버퍼를 만들 수 있는 유일한 버퍼
• 운영체제가 이용하는 가장 기본적인 데이터 단위,
시스템메모리 또한 순차적인 바이트집합
• 자바의 바이트 배열은 순차적인 바이트의 집합이
아니라 객체 내에 바이트들을 저장하고 있는 형태
• 이런 한계점을 극복하기 위해 다이렉트버퍼가 도입,
ByteBuffer만이 시스템 메모리를 사용할 수 있는
다이렉트 버퍼로 생성
12년 10월 10일 수요일
채널 (Channel)
• 데이터가 통과하는 쌍방향 통로
• 채널에서 데이터를 주고 받을 때 사용되는 것이 버퍼
• 모든 채널 클래스는 public 생성자를 제공하지 않음
• 채널을 생성하기 위해서는 기존의 스트림, 소켓, 서버
소켓클래스의 getChannel()을 사용
• SocketChannel, ServerSocketChannel의 경우
static메소드인 open() 메소드를 제공
12년 10월 10일 수요일
채널의 종류
• FileChannel - 파일에 대한 입출력 채널
• Pipe.SinkChannel - 파이프에 데이터를 출력하는 채널
• Pipe.SourceChannel - 파이프로 부터 데이터를
입력받는 채널
• ServerSocketChannel - 클라이언트의 연결 요청을
처리하는 서버 소켓 채널
• SocketChannel - 소켓과 연결된 채널
• DatagramChannel - DatagramSocket과 연결된 채널
12년 10월 10일 수요일
FileChannel
• 항상 블록킹 모드며 비블록킹 모드로 설정
할 수 없다
• 파일채널 객체는 직접 만들수 없다.
• 대부분의 채널처럼 파일채널도 가능하면
네이티브IO서비스를 사용하기 위해 노력한다
• 쓰레드에 안전하다
12년 10월 10일 수요일
FileChannel과 MappedByteBuffer
• 세가지 Map모드 지원
(READ_ONLY, READ_WRITE, PRIVATE)
• 파일채널이 닫혀도 매핑버퍼는 해제되지 않고
GC가 될 때까지 남아있게 된다
12년 10월 10일 수요일
SocketChannel
• 비블록킹 모드의 지원
• Selector와 함께 멀티플렉스IO가 가능
• ServerSocketChannel과 SocketChannel을
이용하여 TCP네트워크 프로그램에 이용
12년 10월 10일 수요일
셀렉터 (Selector)
• Reactor패턴의 구현체
• 채널이나 스트림처럼 데이터전송을 위한
클래스가 아님
• 등록된 채널들이 발생시킨 이벤트에 대해
적절한 처리 핸들러로 그 요청을 분기하는
컨트롤러 역할을 하는 클래스
12년 10월 10일 수요일
Reactor 패턴
• 이벤트 중심의 어플리케이션이
• 하나 이상의 클라이언트로부터
• 하나의 어플리케이션으로 ‘동시에’ 전달되는
요청들을 나눠
• 각 요청이 원하는 목적지로 보내주는 역할을
수행하는 것
12년 10월 10일 수요일
Reactor 패턴
• 클라이언트의 모든요청을 우선 큐에 저장하고
• 큐를 모니터링하는 스레드에 신호를 보낸다
• 신호를 받은 큐 모니터링 스레드는 큐에
저장된 요청의 목적지를 분석해서 해당
목적지로 보내준다
12년 10월 10일 수요일
기존의 네트워크 프로그래밍 모델
• 많은 스레드 생성에 따른 스레드 컨텍스트 스위칭 부하
• 스레드 자체가 CPU와 고유스택을 갖는데 따른 컴퓨터
리소스 부하
• 클라이언트의 빈번한 접속과 종료에 따른 많은 가비지가
생성되는 문제점
• 클라이언트가 접속할 때마다 매번 스레드를 새로 생성하는
부담
• 서버의 메모리가 부족해서 OOM이 발생 할 수 있는
가능성
12년 10월 10일 수요일
비블록킹 모델
• 채널을 Selector에 등록하면 이 등록에 관련된 채널과
Selector사이의 관계를 캡슐화한 SelectionKey가
Selector에 저장
• 어떤 채널이 자신이 등록한 모드에 대해 동작할
준비가 되면 SelectionKey는 그 준비상태를
내부적으로 저장
• Selector가 select()메소드를 호출해서 자신에게
등록된 모든 SelectionKey들을 검사하는데 바로
동작할 준비가 되어 있는지 아닌지를 검사
12년 10월 10일 수요일
비블록킹 모델
12년 10월 10일 수요일
NIO 구성요소
12년 10월 10일 수요일
NIO2
• JDK에 두번째로 추가되는 새로운 I/O API
• 크게 파일시스템 API와 비동기채널로 나눔
12년 10월 10일 수요일
Path
• File 클래스를 직접 대체하는 java.nio.file.Path
• 파일보다는 경로 자체에 초점을 맞춘 클래스
12년 10월 10일 수요일
FileSystem
• 파일시스템은 플랫폼에 따라 다른 모습을 가지고
있음
• 경로를 가리키는 문자열, 즉 Path를 생성하는 경로
표기법도 제각각임.
• 플랫폼마다 적절하게 경로를 해석하는 방법을
제공
• FileSystem 추상클래스가 제공하는 getPath() 팩토
리 메소드를 이용하여 Path를 생성
12년 10월 10일 수요일
Files
• Path에는 파일 관련 메소드는 없고, 오직 경로
와 관련된 메소드만 제공
• NIO.2에는 파일을 다루는 메소드는 모두
java.nio.file.Files에서 제공됨
• Files에서 제공하는 메소드 종류
(파일연산,I/O,파일속성, 디렉터리탐색,기타)
12년 10월 10일 수요일
비동기 I/O
• AsynchronousFileChannel
• AsynchronousServerSocketChannel
• AsynchronousSocketChannel
• 비동기채널은 두가지 패턴으로 사용
(Future사용, CompletionHandler사용)
12년 10월 10일 수요일
• javacan.tistory.com
• mckdh.net 산골블로그
• helloworld.naver.com NHN개발자블로그
• 자바I/O & NIO 네트워크프로그래밍
(한빛미디어)
참고자료
12년 10월 10일 수요일

Mais conteúdo relacionado

Semelhante a Java nio

NDC 2015 마비노기 듀얼 패치 시스템
NDC 2015 마비노기 듀얼 패치 시스템NDC 2015 마비노기 듀얼 패치 시스템
NDC 2015 마비노기 듀얼 패치 시스템
tcaesvk
 
숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인
숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인
숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인
VMware Tanzu Korea
 
서버인프라를지탱하는기술2_1-2
서버인프라를지탱하는기술2_1-2서버인프라를지탱하는기술2_1-2
서버인프라를지탱하는기술2_1-2
HyeonSeok Choi
 

Semelhante a Java nio (20)

NDC 2015 마비노기 듀얼 패치 시스템
NDC 2015 마비노기 듀얼 패치 시스템NDC 2015 마비노기 듀얼 패치 시스템
NDC 2015 마비노기 듀얼 패치 시스템
 
CouchDB - Introduction - Korean
CouchDB - Introduction - KoreanCouchDB - Introduction - Korean
CouchDB - Introduction - Korean
 
Kubernetes on Premise
Kubernetes on PremiseKubernetes on Premise
Kubernetes on Premise
 
숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인
숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인
숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인
 
오픈 소스 클라우드 플랫폼 분석
오픈 소스 클라우드 플랫폼 분석오픈 소스 클라우드 플랫폼 분석
오픈 소스 클라우드 플랫폼 분석
 
KT 안재석 박사 - 오픈 소스 기반 클라우드 컴퓨팅 솔루션 open stack 이야기 (2011Y05M28D)
KT 안재석 박사 - 오픈 소스 기반 클라우드 컴퓨팅 솔루션 open stack 이야기 (2011Y05M28D)KT 안재석 박사 - 오픈 소스 기반 클라우드 컴퓨팅 솔루션 open stack 이야기 (2011Y05M28D)
KT 안재석 박사 - 오픈 소스 기반 클라우드 컴퓨팅 솔루션 open stack 이야기 (2011Y05M28D)
 
Atom package part1
Atom package part1Atom package part1
Atom package part1
 
쓰레드.pdf
쓰레드.pdf쓰레드.pdf
쓰레드.pdf
 
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
 
서버인프라를지탱하는기술2_1-2
서버인프라를지탱하는기술2_1-2서버인프라를지탱하는기술2_1-2
서버인프라를지탱하는기술2_1-2
 
빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x
 
[OpenStack] 공개 소프트웨어 오픈스택 입문 & 파헤치기
[OpenStack] 공개 소프트웨어 오픈스택 입문 & 파헤치기[OpenStack] 공개 소프트웨어 오픈스택 입문 & 파헤치기
[OpenStack] 공개 소프트웨어 오픈스택 입문 & 파헤치기
 
Tajo and SQL-on-Hadoop in Tech Planet 2013
Tajo and SQL-on-Hadoop in Tech Planet 2013Tajo and SQL-on-Hadoop in Tech Planet 2013
Tajo and SQL-on-Hadoop in Tech Planet 2013
 
Kubernetes
Kubernetes Kubernetes
Kubernetes
 
[OpenInfra Days Korea 2018] K8s workshop: with containers & K8s on OpenStack ...
[OpenInfra Days Korea 2018] K8s workshop: with containers & K8s on OpenStack ...[OpenInfra Days Korea 2018] K8s workshop: with containers & K8s on OpenStack ...
[OpenInfra Days Korea 2018] K8s workshop: with containers & K8s on OpenStack ...
 
Backend Master | 3.4.5 Deploy - Docker Principal
Backend Master | 3.4.5 Deploy - Docker PrincipalBackend Master | 3.4.5 Deploy - Docker Principal
Backend Master | 3.4.5 Deploy - Docker Principal
 
[Solr 스터디] Solr 설정 및 색인 (2017)
[Solr 스터디] Solr 설정 및 색인 (2017)[Solr 스터디] Solr 설정 및 색인 (2017)
[Solr 스터디] Solr 설정 및 색인 (2017)
 
Warp
WarpWarp
Warp
 
[스프링 스터디 3일차] 데이터엑세스기술
[스프링 스터디 3일차] 데이터엑세스기술[스프링 스터디 3일차] 데이터엑세스기술
[스프링 스터디 3일차] 데이터엑세스기술
 
An overview of kubernetes & (very) simple live demo
An overview of kubernetes & (very) simple live demoAn overview of kubernetes & (very) simple live demo
An overview of kubernetes & (very) simple live demo
 

Mais de 성욱 전 (6)

Arquillian 소개
Arquillian 소개Arquillian 소개
Arquillian 소개
 
Sonar설치매뉴얼
Sonar설치매뉴얼Sonar설치매뉴얼
Sonar설치매뉴얼
 
Nexus
NexusNexus
Nexus
 
Maven
MavenMaven
Maven
 
Cassandra
CassandraCassandra
Cassandra
 
Sentry
SentrySentry
Sentry
 

Último

파일 업로드(Kitworks Team Study 유현주 발표자료 240510)
파일 업로드(Kitworks Team Study 유현주 발표자료 240510)파일 업로드(Kitworks Team Study 유현주 발표자료 240510)
파일 업로드(Kitworks Team Study 유현주 발표자료 240510)
Wonjun Hwang
 
Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)
Wonjun Hwang
 

Último (6)

클라우드 애플리케이션 보안 플랫폼 'Checkmarx One' 소개자료
클라우드 애플리케이션 보안 플랫폼 'Checkmarx One' 소개자료클라우드 애플리케이션 보안 플랫폼 'Checkmarx One' 소개자료
클라우드 애플리케이션 보안 플랫폼 'Checkmarx One' 소개자료
 
파일 업로드(Kitworks Team Study 유현주 발표자료 240510)
파일 업로드(Kitworks Team Study 유현주 발표자료 240510)파일 업로드(Kitworks Team Study 유현주 발표자료 240510)
파일 업로드(Kitworks Team Study 유현주 발표자료 240510)
 
Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)
 
오픈소스 위험 관리 및 공급망 보안 솔루션 'Checkmarx SCA' 소개자료
오픈소스 위험 관리 및 공급망 보안 솔루션 'Checkmarx SCA' 소개자료오픈소스 위험 관리 및 공급망 보안 솔루션 'Checkmarx SCA' 소개자료
오픈소스 위험 관리 및 공급망 보안 솔루션 'Checkmarx SCA' 소개자료
 
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
 
[OpenLAB] AWS reInvent를 통해 바라본 글로벌 Cloud 기술동향.pdf
[OpenLAB] AWS reInvent를 통해 바라본 글로벌 Cloud 기술동향.pdf[OpenLAB] AWS reInvent를 통해 바라본 글로벌 Cloud 기술동향.pdf
[OpenLAB] AWS reInvent를 통해 바라본 글로벌 Cloud 기술동향.pdf
 

Java nio

  • 1. Java NIO 전성욱 (allnewangel@gmail.com) JBoss User Group 12년 10월 10일 수요일
  • 2. Agenda • IO 와 NIO • Buffer • Channel • Selector • NIO2 소개 12년 10월 10일 수요일
  • 3. 자바는 느리다 • JVM위에서 동작하는 추상화된 고수준 언어로 시스템콜을 직접 사용하지 못함 • 선입견을 만들어 준 스윙 • IO (블록킹 IO) 12년 10월 10일 수요일
  • 4. 기존 자바 IO의 흐름 12년 10월 10일 수요일
  • 5. NIO(New IO) 란? • 기존 자바의 IO를 개선 • 포인트 버퍼 도입 • 네이티브 IO서비스를 제공해주는 채널 도입 • 셀렉터 도입 12년 10월 10일 수요일
  • 6. 버퍼 (Buffer) • 직접 시스템 메모리를 사용 할수 있는 클래스 • 기본 데이터 타입을 저장 할 수 있는 저장소 • 배열과 마찬가지로 제한된 크기에 순서대로 데이터를 저장 • 채널을 통해 읽기, 쓰기를 할 때 사용 12년 10월 10일 수요일
  • 7. Buffer 추상클래스 ByteBuffer byte데이터를 저장.Direct/NonDirect버퍼가 존재. ReadableByteChannel과 WritableByteChannel를 통해서 데이터를 입출력 MappedByteBuffer byte를 저장하는 버퍼로 항상 Direct. 파일의 특정영역을 메모리에 맵핑 시킬때 사용 CharBuffer char를 저장하며 Direct/NonDirect일수 있다. 채널에 쓸수 없다 DoubleBuffer double을 저장하며 Direct/NonDirect일수 있다. 채널에 쓸수 없다 FloatBuffer float을 저장하며 Direct/NonDirect일 수 있다 IntBuffer int 데이터를 저장하며 Direct/NonDirect일 수 있다. LongBuffer long 데이터를 저장하며 Direct/NonDirect일 수 있다. ShortBuffer short 데이터를 저장하며 Direct/NonDirect일 수 있다. NIO API는 한 개의 추상클래스와 8개의 버퍼를 제공 12년 10월 10일 수요일
  • 8. 버퍼의 기본속성 position 버퍼에서 현재 읽거나 쓸 위치값. limit를 초과하지 못함. 초기값은 0 limit 버퍼에서 읽거나 쓸 수 있는 한계값.capacity를 초과하지 못함. 초기값은 capacity값 capacity 버퍼의 크기를 나타냄. 메모리 크기라고 생각하면 됨. 한번 생성하면 크기를 변경할 수 없음. mark 현재의 position을 표시할 때 사용. reset() 메소드를 호출해서 mark위치로 position을 바꿀 수 있음. 12년 10월 10일 수요일
  • 9. 버퍼 입출력 상대주소를 이용한 입출력 절대주소를 이용한 입출력 12년 10월 10일 수요일
  • 10. 버퍼클래스가 제공하는 메소드 clear() 메소드 12년 10월 10일 수요일
  • 11. 버퍼클래스가 제공하는 메소드 rewind() 메소드 12년 10월 10일 수요일
  • 12. 버퍼클래스가 제공하는 메소드 flip() 메소드 12년 10월 10일 수요일
  • 13. 버퍼 하위클래스가 제공하는 메소드 compact() 메소드 12년 10월 10일 수요일
  • 14. 버퍼 하위클래스가 제공하는 메소드 duplicate() / asReadOnlyBuffer메소드 12년 10월 10일 수요일
  • 15. 버퍼 하위클래스가 제공하는 메소드 slice() 메소드 12년 10월 10일 수요일
  • 16. 버퍼 생성 • Buffer의 모든 클래스는 추상클래스이기 때문에 생성자를 통한 객체생성이 안됨 • 팩토리 메소드를 이용하는 방법 • ByteBuffer.allocate(); • ByteBuffer.allocateDirect(); • 존재하는 배열을 이용하는 방법 • ByteBuffer.wrap(new Byte[]); 12년 10월 10일 수요일
  • 17. 다이렉트 버퍼 • ByteBuffer는 시스템 메모리를 직접 사용하는 다이렉트 버퍼를 만들 수 있는 유일한 버퍼 • 운영체제가 이용하는 가장 기본적인 데이터 단위, 시스템메모리 또한 순차적인 바이트집합 • 자바의 바이트 배열은 순차적인 바이트의 집합이 아니라 객체 내에 바이트들을 저장하고 있는 형태 • 이런 한계점을 극복하기 위해 다이렉트버퍼가 도입, ByteBuffer만이 시스템 메모리를 사용할 수 있는 다이렉트 버퍼로 생성 12년 10월 10일 수요일
  • 18. 채널 (Channel) • 데이터가 통과하는 쌍방향 통로 • 채널에서 데이터를 주고 받을 때 사용되는 것이 버퍼 • 모든 채널 클래스는 public 생성자를 제공하지 않음 • 채널을 생성하기 위해서는 기존의 스트림, 소켓, 서버 소켓클래스의 getChannel()을 사용 • SocketChannel, ServerSocketChannel의 경우 static메소드인 open() 메소드를 제공 12년 10월 10일 수요일
  • 19. 채널의 종류 • FileChannel - 파일에 대한 입출력 채널 • Pipe.SinkChannel - 파이프에 데이터를 출력하는 채널 • Pipe.SourceChannel - 파이프로 부터 데이터를 입력받는 채널 • ServerSocketChannel - 클라이언트의 연결 요청을 처리하는 서버 소켓 채널 • SocketChannel - 소켓과 연결된 채널 • DatagramChannel - DatagramSocket과 연결된 채널 12년 10월 10일 수요일
  • 20. FileChannel • 항상 블록킹 모드며 비블록킹 모드로 설정 할 수 없다 • 파일채널 객체는 직접 만들수 없다. • 대부분의 채널처럼 파일채널도 가능하면 네이티브IO서비스를 사용하기 위해 노력한다 • 쓰레드에 안전하다 12년 10월 10일 수요일
  • 21. FileChannel과 MappedByteBuffer • 세가지 Map모드 지원 (READ_ONLY, READ_WRITE, PRIVATE) • 파일채널이 닫혀도 매핑버퍼는 해제되지 않고 GC가 될 때까지 남아있게 된다 12년 10월 10일 수요일
  • 22. SocketChannel • 비블록킹 모드의 지원 • Selector와 함께 멀티플렉스IO가 가능 • ServerSocketChannel과 SocketChannel을 이용하여 TCP네트워크 프로그램에 이용 12년 10월 10일 수요일
  • 23. 셀렉터 (Selector) • Reactor패턴의 구현체 • 채널이나 스트림처럼 데이터전송을 위한 클래스가 아님 • 등록된 채널들이 발생시킨 이벤트에 대해 적절한 처리 핸들러로 그 요청을 분기하는 컨트롤러 역할을 하는 클래스 12년 10월 10일 수요일
  • 24. Reactor 패턴 • 이벤트 중심의 어플리케이션이 • 하나 이상의 클라이언트로부터 • 하나의 어플리케이션으로 ‘동시에’ 전달되는 요청들을 나눠 • 각 요청이 원하는 목적지로 보내주는 역할을 수행하는 것 12년 10월 10일 수요일
  • 25. Reactor 패턴 • 클라이언트의 모든요청을 우선 큐에 저장하고 • 큐를 모니터링하는 스레드에 신호를 보낸다 • 신호를 받은 큐 모니터링 스레드는 큐에 저장된 요청의 목적지를 분석해서 해당 목적지로 보내준다 12년 10월 10일 수요일
  • 26. 기존의 네트워크 프로그래밍 모델 • 많은 스레드 생성에 따른 스레드 컨텍스트 스위칭 부하 • 스레드 자체가 CPU와 고유스택을 갖는데 따른 컴퓨터 리소스 부하 • 클라이언트의 빈번한 접속과 종료에 따른 많은 가비지가 생성되는 문제점 • 클라이언트가 접속할 때마다 매번 스레드를 새로 생성하는 부담 • 서버의 메모리가 부족해서 OOM이 발생 할 수 있는 가능성 12년 10월 10일 수요일
  • 27. 비블록킹 모델 • 채널을 Selector에 등록하면 이 등록에 관련된 채널과 Selector사이의 관계를 캡슐화한 SelectionKey가 Selector에 저장 • 어떤 채널이 자신이 등록한 모드에 대해 동작할 준비가 되면 SelectionKey는 그 준비상태를 내부적으로 저장 • Selector가 select()메소드를 호출해서 자신에게 등록된 모든 SelectionKey들을 검사하는데 바로 동작할 준비가 되어 있는지 아닌지를 검사 12년 10월 10일 수요일
  • 29. NIO 구성요소 12년 10월 10일 수요일
  • 30. NIO2 • JDK에 두번째로 추가되는 새로운 I/O API • 크게 파일시스템 API와 비동기채널로 나눔 12년 10월 10일 수요일
  • 31. Path • File 클래스를 직접 대체하는 java.nio.file.Path • 파일보다는 경로 자체에 초점을 맞춘 클래스 12년 10월 10일 수요일
  • 32. FileSystem • 파일시스템은 플랫폼에 따라 다른 모습을 가지고 있음 • 경로를 가리키는 문자열, 즉 Path를 생성하는 경로 표기법도 제각각임. • 플랫폼마다 적절하게 경로를 해석하는 방법을 제공 • FileSystem 추상클래스가 제공하는 getPath() 팩토 리 메소드를 이용하여 Path를 생성 12년 10월 10일 수요일
  • 33. Files • Path에는 파일 관련 메소드는 없고, 오직 경로 와 관련된 메소드만 제공 • NIO.2에는 파일을 다루는 메소드는 모두 java.nio.file.Files에서 제공됨 • Files에서 제공하는 메소드 종류 (파일연산,I/O,파일속성, 디렉터리탐색,기타) 12년 10월 10일 수요일
  • 34. 비동기 I/O • AsynchronousFileChannel • AsynchronousServerSocketChannel • AsynchronousSocketChannel • 비동기채널은 두가지 패턴으로 사용 (Future사용, CompletionHandler사용) 12년 10월 10일 수요일
  • 35. • javacan.tistory.com • mckdh.net 산골블로그 • helloworld.naver.com NHN개발자블로그 • 자바I/O & NIO 네트워크프로그래밍 (한빛미디어) 참고자료 12년 10월 10일 수요일