자바 네트워크 소녀 네티( 정경석 저 / 이희승 감수, 한빛미디어 ) 를 읽고 정리합니다. 📘2부 6장. 네티 상세 - 바이트 버퍼🔹자바 NIO 바이트 버퍼바이트 데이터를 저장하고 읽는 저장소다.배열을 멤버변수로 가지고 있으며 배열에 대한 읽고 쓰기를 추상화한 메서드를 제공한다. 자바에서 제공하는 버퍼로는 ByteBuffer, CharBuffer, IntBuffer 등이 있고, 각 바이트 버퍼는 저장되는 데이터형에 따라 적당한 클래스를 선택하여 사용한다. 바이트 버퍼 클래스는 내부의 배열 상태를 관리하는 3가지 속성을 가진다.capacity : 버퍼에 저장할 수 있는 최대 데이터 크기. 한번 지정하면 변경 불가position : 읽기 또는 쓰기가 작업 중인 위치limit : 읽고 쓸 수 있는 버..
자바 네트워크 소녀 네티( 정경석 저 / 이희승 감수, 한빛미디어 ) 를 읽고 정리합니다. 📘2부 5장. 네티 상세 - 이벤트 모델🔹이벤트 루프🔸이벤트 기반 애플리케이션이 이벤트를 처리하는 방법이벤트 리스너와 이벤트 처리 스레드를 사용하는 방법 : 이벤트를 처리하는 로직을 가진 이벤트 메서드를 대상 객체의 이벤트 리스너에 등록하고, 객체에 이벤트가 발생했을 때 이벤트 처리 스레드에서 등록된 메서드를 수행한다. (이때 메서드를 수행하는 스레드는 대부분 단일 스레드로 구현한다.)이벤트 큐에 이벤트를 등록하고 이벤트 루프가 이벤트 큐에 접근하여 처리하는 방법: 이벤트 루프가 다중 스레드일 때, 이벤트 큐는 여러개의 스레드에서 공유되며 가장 먼저 이벤트 큐에 접근한 스레드가 첫 번째 이벤트를 가져와서..
자바 네트워크 소녀 네티( 정경석 저 / 이희승 감수, 한빛미디어 ) 를 읽고 정리합니다. 📘2부 4장. 네티 상세 - 채널 파이프라인과 코덱🔹코덱동영상 압축 알고리즘을 코덱이라고 부른다 원본파일을 압축하는 것을 인코딩, 압축된 파일을 원본으로 추출하는 과정을 디코딩이라고 한다.이 과정을 네티의 소켓 채널로 옮기면 인코더는 인바운드, 디코더는 아웃바운드가 된다. 🔸코덱의 구조인바운드와 아웃바운드에 해당하는 이벤트는 ChannelInboundHandler 와 ChannelOutboundHandler 인터페이스로 각각 인코더와 디코더라고 부른다.데이터를 전송할 때 인코더를 사용해 패킷으로 변환하고 데이터를 수신할 떄는 디코더를 사용해 패킷을 데이터로 변환한다. 🔸코덱의 실행과정네티의 코덱은 템..
자바 네트워크 소녀 네티( 정경석 저 / 이희승 감수, 한빛미디어 ) 를 읽고 정리합니다. 📘2부 4장. 네티 상세 - 채널 파이프라인과 코덱🔸네티의 이벤트 실행네티의 이벤트 루프가 채널 파이프라인에 등록된 첫 번째 이벤트 핸들러를 가져온다.이벤트 핸들러에 데이터 수신 이벤트 메서드가 구현되어있으면 실행한다데이터 수신 이벤트가 구현되어있지 않으면 다음 이벤트 핸들러를 가져온다.2를 수행한다.채널 파이프라인에 등록된 마지막 이벤트 핸들러에 도달할 때까지 1을 반복한다.데이터를 처리하는 입출력은 네티가 이벤트로 관리하므로 해당 이벤트에 해당하는 코드만 구현하면 된다. 🔸채널 파이프라인채널 파이프라인은 네티의 채널과 이벤트 핸들러 사이의 연결 통로 역할을 한다.🔹채널 파이프라인 구조 네티는 이..
자바 네트워크 소녀 네티( 정경석 저 / 이희승 감수, 한빛미디어 ) 를 읽고 정리합니다. 📘2부 3장. 네티의 상세 - 부트스트랩🔹부트스트랩부트스트랩은 네티로 작성한 네트워크 애플리케이션이 시작할 때 가장 처음 수행되는 부분으로 애플리케이션이 수행할 동작과 각종 설정을 지정하며 네티 애플리케이션의 기본이 된다. 부트스트랩 설정은 크게 세가지로 나뉟다. 이벤트 루프채널의 전송 모드채널 파이프라인이벤트 루프 / 전송모드이벤트 루프는 소켓 채널에서 발생한 이벤트를 처리하는 스레드 모델을 구현한 부분이다. 부트스트랩에서 설정한 소켓 모드에 따라 블로킹, 논블로킹, 또는 EPOLL 모드를 사용할 수 있다. +) epoll : 입출력 다중화 기법 중 하나로, 리눅스에서 가장 빠른 입출력 방식 채널 파이..
🔹프록시interface Hello{ String sayHello(String name); String sayHi(String name); String sayThankYou(String name);}public class HelloTarget implements Hello{ @Override public String sayHello(String name) { return "Hello "+name; } @Override public String sayHi(String name) { return "Hi "+name; } @Override public String sayThankYou(String name) { ..
자바 네트워크 소녀 네티( 정경석 저 / 이희승 감수, 한빛미디어 ) 를 읽고 정리합니다. 📘1부 2장. 네티의 주요특징 - 이벤트 기반 프로그래밍🔹이벤트 기반 프로그래밍이벤트 기반 프로그래밍은 사용자 인터페이스가 포함된 프로그램에서 많이 사용된다.각 이벤트를 먼저 정의해두고 발생한 이벤트에 따라서 코드가 실행되도록 프로그램을 작성하는 것이 이벤트 기반 프로그래밍이다. 앞서 나온 논블로킹 소켓의 Selector를 사용한 IO이벤트 또한 또한 이벤트 기반 프로그램의 한 종류이다. 추상화 수준이란 이벤트를 나눌 때 단위의 나뉨정도를 의미한다.고수준으로 갈수록 좀 더 세세하게 이벤트를 나눈 것을 의미하며, 저수준일수록 한동작에 대해 많은 이벤트가 발생한다. 사용자 인터페이스가 포함된 애플리케이션은 애..
자바 네트워크 소녀 네티( 정경석 저 / 이희승 감수, 한빛미디어 ) 를 읽고 정리합니다. 📘1부 2장. 네티의 주요특징 - 동기와 비동기, 블로킹과 논블로킹 🦋NettyNetty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients.비동기 이벤트 기반 네트워크 애플리케이션 프레임워크유지보수를 고려한 고성능 프로토콜 서버와 클라이언트를 함께 개발할 수 있다. 🔹동기 비동기동기 / 비동기/ 블로킹/ 논블로킹/ @Async, @EnableAsync과 관련된 내용은 다음 링크에 정리했다.⇒ https..
자바 네트워크 소녀 네티( 정경석 저 / 이희승 감수, 한빛미디어 ) 를 읽고 정리합니다. 📘1. 네티 소개 - 네티 맛보기Netty로 기초적인 네트워크 애플리케이션을 작성한다. 🔹Netty 예제서버는 클라이언트로부터 데이터를 8888번 포트로 수신하는 기능을 수행한다. 데이터만 받을 뿐, 클라이언트에 어떠한 데이터도 보내지 않는다. 이 예제는1. 클라이언트의 입력을 받아들일 포트를 지정하는 메인 서버와2. 클라이언트로부터 받아들인 입력 데이터를 처리하는 핸들러로 구성된다. 메인 서버에는 입력받은 데이터를 처리할 핸들러를 지정하는 부분이 포함된다. 🔹Discard 서버🔸DiscardServerpublic class DiscardServer{ public static void main(..
🔹기본 개념🔸동기(Synchronous)와 비동기(Asynchronous)동기: 요청한 작업을 들어온 순서대로 처리.비동기: 요청한 작업을 순서에 상관없이 처리.🔸Blocking 과 Non-BlockingBlocking: 요청한 작업이 끝날 때까지 제어권을 넘김.Non-Blocking: 요청한 작업이 끝나지 않아도 제어권을 계속 유지.🔸싱글 스레드와 멀티 스레드싱글 스레드: 하나의 프로세스에서 하나의 쓰레드가 작업 수행.멀티 스레드: 하나의 프로세스에서 여러 개의 쓰레드가 작업 수행.Code, Data, Heap 영역 공유은 공유하고 stack 영역은 각 쓰레드가 별도로 관리하기 때문에 동시성 문제가 발생할 수 있어 주의해야한다. 🔸조합에 따른 동작 방식싱글 스레드 - 동기: 하나의 공간에서 순..