728x90 전체 글240 [JAVA] 19. NIO 기반 입출력 및 네트워킹(6) 3. TCP 비동기 채널 NIO는 TCP비동기 채널로 AsynchronousServerSocket과 AsynchronousSocketChannel를 제공한다. 비동기 채널의 특징 connect(), accept(), read(), write()를 호출하면 즉시 리턴한다. 이점은 넌블로킹 방식과 동일하나, 차이점은 이 메소드들을 호출하면 스레드풀에게 작업 처리를 요청하고 이 메소드들은 즉시 리턴된다. 실질적인 작업 처리는 스레드풀의 작업 스레드가 담당한다. 작업 스레드가 작업을 완료하게 되면 콜백(callback) 메소드가 자동 호출되기 때문에 작업 완료 후 실행해야 할 코드가 있다면 콜백 메소드에 작성하면 된다. 비동기 처리 방식 비동기 채널 그룹 비동기 채널 그룹이란 스레드풀을 공유하는 비동기 채널들.. 2022. 4. 6. [JAVA] 19. NIO 기반 입출력 및 네트워킹(5) 2. TCP 넌블로킹 채널 넌블로킹 방식의 특징 자바는 블로킹 방식으로 인한 스레드 증가의 해결책으로 스레드 풀을 사용하였고, 다른 해결책으로 넌블로킹 방식을 지원하고 있다. 넌블로킹 방식은 connect(), accept(), read(), write() 메소드에서 블로킹이 없다. 블로킹되지 않고 바로 리턴하기 때문에 while를 통해서 계속적으로 connect(), accept(), read(), write() 메소드 실행하고 있어야함 그러나 이러한 방법은 CPU를 과도하게 소비하는 문제점이 있다. 이를 해결하기 위해 넌블로킹은 이벤트 리스너 역할을 하는 셀렉터(Selector)를 사용한다.(변화가 생기면 감지한다) 넌블로킹 채널에 Selector를 등록해 놓으면 클라이언트의 연결 요청이 들어오거.. 2022. 4. 6. [JAVA] 19. NIO 기반 입출력 및 네트워킹(4) 1. TCP 블로킹 채널 NIO에서 TCP 네트워크 통신을 위해 사용하는 채널 : java.nio.channels.ServerSocketChannel과 java.nio.channels.SocketChannel ServerSocketChannel과 SocketChannel은 블로킹과 넌블로킹 방식을 모두 지원. 사용 방법은 IO와 큰 차이점이 없다. TCP 블로킹 채널의 서버소켓 채널 생성과 연결 수락 서버를 개발하려면 ServerSocketChannel 객체를 얻어야 한다. ServerSocketChannel 생성 방법 ServerSocketChannel serverSocketChannel = ServerSocketChannel.open(); // ServerSocketChannel 객체 생성 serve.. 2022. 4. 6. [JAVA] 19. NIO 기반 입출력 및 네트워킹(3) 1. 파일 채널 java.nio.channels.FileChannel을 이용하면 파일 읽기와 쓰기를 할 수 있다. FileChannel은 동기화 처리가 되어 있기 때문에 멀티 스레드 환경에서 안전하다. FileChannel 생성과 닫기 FileChannel은 정적 메소드인 open()을 호출해서 채널을 열거나, IO의 FileInputStream,FileOutputStream의 getChannel()메소드 호출 FileChannel fileChannel = FileChannal.open(Path path, OpenOption ... options); FileChannel의 open()메소드의 첫번째 매개값 : Path객체로 생성된 파일의 경로 FileChannel의 open()메소드의 두번째 매개값 : .. 2022. 4. 6. [JAVA] 19. NIO 기반 입출력 및 네트워킹(2) 1.버퍼 NIO에서는 데이터를 입출력하기 위해서 항상 버퍼를 사용한다. 버퍼는 읽고 쓰기가 가능한 메모리 배열이다. Buffer 종류 Buffer는 저장되는 데이터 타입에 따라 분류될 수 있고, 어떤 메모리를 사용하느냐에 따라서 다이렉트(Direct)와 넌다이렉트(NonDirect)로 분류 할 수 있다. 데이터 타입에 따른 버퍼 NIO버퍼는 저장되는 데이터 타입에 따라서 별도의 클래스로 제공 버퍼 클래스들은 Buffer 추상 클래스를 모두 상속 버퍼 클래스의 이름을 보면 어떤 데이터가 저장되는 버퍼 인지 쉽게 알 수 있다. MappedByteBuffer는 ByteBuffer의 하위 클래스로 파일의 내용에 랜던하게 접하기 위해서 파일의 내용을 메모리와 맵핑 시킨 버퍼 넌다이렉트 다이렉트 버퍼 버퍼가 사용하.. 2022. 4. 6. [JAVA] 19. NIO 기반 입출력 및 네트워킹(1) 자바 4부터 새로운 입출력(NIO: Input/Output)이라는 뜻에서 java,nio 패키지가 포함되었는데, 자바 7로 버전업하면서 자바 IO와 NIO 사이의 일관성 없는 클래스 설계를 바로 잡고, 비동기 채널 등의 네트워크 지원을 대폭 강화한 NIO.2 API가 추가되었다. NIO.2는 java,nio2 패키지로 제공되지 않고 기존 java.nio의 하위 패키지(java.nio.channels, java.nio.charset, java.nio.file)에 통합되어 있다. NIO 패키지 포함되어 있는 내용 java.nio 다양한 버퍼 클래스 java.nio.channels 파일 채널, TCP 채널, UDP 채널 등의 클래스 java.nio.channels.spi java.nio.channels 패키지.. 2022. 4. 6. [JAVA] 인텔리제이 오류 해결 인텔리제이를 통해 프로젝트를 실행시키려고 할 때 발생하는 오류 오류명 : "java: warning: source release 8 requires target release 1.8" 해결방법 File > Project Structure... > Project 위와 같이 SDK와 Language level 설정을 바꾸고 Apply해주면 해결된다. 더불어 Language level의 설정은 인식되지 않는 람다식 인식을 가능하게 해준다. 2022. 4. 1. [JAVA] 18 - 4. UDP 네트워킹 UDP(User Datagram Protocol)란? 비연결 지향적 프로토콜이다. 비연결 지향적이란 데이터를 주고받을 때 연결 절차를 거치지 않고, 발신자가 일방적으로 데이터를 발신하는 방식이다. 연결 과정이 없기 때문에 TCP보다는 빠른 전송을 할 수 있지만 데이터 전달의 신뢰성은 떨어진다. *UDP는 발신자가 데이터 패킷을 순차적으로 보내더라도 이 패킷들은 서로 다른 통신 선로를 통해 전달될 수 있다. 먼저 보낸 패킷이 느린 선로를 통해 전송될 경우 나중에 보낸 패킷보다 늦게 도착할 수 있다. 또한 일부 패킷은 잘못된 선로로 전송되어 잃어버릴 수도 있다. 자바에서는 UDP 프로그래밍을 위해 java.net.DatagramSocket(발신점과 수신점에 해당하는 클래스)과 java.net.Datagram.. 2022. 3. 31. [JAVA] 예외(EXCEPTION) 처리 1. 예외(Exception) 프로그램을 실행하다가 보면 어떤 원인때문에 비정상적인 동작을 일으키며 프로그램이 종료될 때 프로그램이 오류가 발생했다고 한다. 에러의 종류는 우리가 컴파일할때 발생할 수 있는 컴파일 오류와 실행 중 발생되는 런타임 오류 두 종류가 있다. 컴파일 오류는 우리가 잡기가 쉽지만, 런타임 오류는 잡기가 까다롭다. 자바에서는 런타임 오류를 두 종류로 보고 있다. 바로 에러(Error)와 예외(Exception)이다. 에러는 프로그램이 코드로 복구될 수 없는 오류를 의미하고 예외는 프로그래머가 직접 예측하여 막을 수 있는 처리가능한 오류라고 보시면 된다. 예를 들어 메모리가 부족한 경우 프로그래머가 직접 제어할 수 없으므로 이런 경우는 메모리 부족(OutOfMemoryError) 에러.. 2022. 3. 31. 이전 1 2 3 4 5 6 ··· 27 다음 728x90