728x90

Base/개념정리 26

Netty

웹플럭스는 프로젝트 리액터와 네티로 구성된다. 이중 네티로 논블로킹-비동기 처리를 지원하고 덕분에 적은 스레드로 많은 트래픽을 처리할 수 있다. 이에 네티에 대해 간단하게 정리해본다. 네티는 각각의 요청을 채널로 받고 채널에서 발생하는 이벤트들을 이벤트 큐에 쌓아놓는다. 그리고 이벤트 루프가 이를 가져와서 처리하는 구조이다. 여기에서 이벤트 루프란 이벤트를 실행하기 위한 무한루프 스레드를 말한다. 이벤트 루프는 지원하는 스레드 종류에 따라 단일 스레드 이벤트 루프와 다중 스레드 이벤트 루프로 나뉘고 이벤트 루프가 처리한 결과를 돌려주는 방식에 따라 콜백 패턴과 퓨처 패턴으로 나뉜다. 여기에서는 단일 스레드 이벤트 루프와 콜백 패턴은 생략하고 웹플럭스에서 사용되는 다중 스레드 이벤트 루프와 퓨처패턴 위주로..

Base/개념정리 2022.07.21

리액티브 프로그래밍

일단 블로킹에 대해 정확히 집고 넘어가자. 블로킹 상태는 스레드가 CPU 자원은 점유하고 있지만 무언가 일을 하는게 아니고 다른 무언가의 응답을 기다리는 대기상태를 의미한다. 예를 들어 수백번의 for문을 돌리는 로직을 수행하는 동안은 스레드가 열심히 일을 하고 있는 상태이기 때문에 블로킹 상태가 아니다. 일하는 만큼 CPU 자원을 사용하는 것이기 때문에 비효율도 없다. 반면, DB/API 통신과 같은 I/O 작업의 경우 스레드는 응답결과를 기다리는 동안 대기상태가 되고 일은 하지 않으면서 CPU 자원을 점유하고 있는 비효율이 발생한다. 또한 톰캣에서는 스레드풀 지정된 스레드를 만들어 놓고 재사용하는데 이러한 블로킹 상태가 오래 지속되는 스레드가 많아진다면 가용한 스레드 부족으로 요청을 제대로 처리하지 ..

Base/개념정리 2022.07.19

C10K

C10K는 Current 10 thousand clients 의 약자로 1만개의 클라이언트를 동시에 처리할 수 있는 네트워크 I/O 모델을 설계 방법을 묻는 말이다. 여기서 동시 처리의 기준이 되는 시간은 정확히 명시하지 않았지만, 보통은 1초를 뜻한다. 과거에는 하드웨어가 비싸고 스펙도 낮아서 수 많은 동시접속을 처리해야 하는 웹사이트를 구축함에 앞서 C10K 는 꼭 집고 넘어가야 하는 문제였다. 과거에 비해 하드웨어가 싸고 스펙도 좋아졌지만 과거에 비해 인터넷이 더 활성화된 지금 10만개 또는 100만개의 클라이언트를 처리해야 할 수 있기 때문에 이 문제는 여전히 유효하다. 그렇다면 네트워크 I/O 모델에는 어떤 것들이 있을까? 블로킹과 논블로킹, 동기와 비동기, 싱글스레드와 멀티스레드 방식이 존재한..

Base/개념정리 2022.06.14

서로 다른 사설 네트워크 서버끼리 통신하기

기본적으로 동일 네트워크 내에 구성된 서버는 아무것도 하지 않더라도 서로 통신이 가능하다. 선으로 직접 연결되어 있기 때문이다. 동일 네트워크란 한 회사의 건물이라고 생각하면 된다. 그런데 네트워크 보안에서 우리가 사용하는 인터넷은 어떠한 자료가 오고갈지 모르는 위험한 공간으로 인식되기 때문에 동일 네트워크 내에 있는 서버라고 할지라도 일부 서버만 인터넷에 연결을 해 놓는다. 예를들어 건물에서 서버가 있는 층이 1~3층 이라고 한다면 3층에 있는 서버들만 인터넷에 연결을 해놓는 것을 말하며 이 경우 1, 2층은 내부망 3층은 외부망이라고 부르며 이러한 환경을 망분리 환경이라고 한다. 외부망에는 공인IP가 할당된 OpenApi 서버 혹은 프록시 서버들이 위치하게 될 것이고 내부망에는 사설IP가 할당된 비즈..

Base/개념정리 2022.04.27

ResponseTimeout, ReadTimeout, WriteTimeout

네트워크 통신을 담당할 클라이언트를 구성하다보면 위와 같은 타임아웃 설정을 필수로 하게 된다. 대충 알겠으나 항상 헷갈려서그 의미를 명확하게 정리해 놓는다. 일반적으로 통신은 그 요청이 Read 인지 Write 인지에 따라 아래와 같이 수행된다. ReadRequest 1. 클리이언트에서 서버로 읽기 요청을 전송 2. 서버에서 요청을 받아 클라이언트로 응답값 전송의 시작을 알림 3. 서버에서 응답 데이터 전송 시작 4. 서버에서 응답 데이터 전송 종료 WriteReeust 1. 클리이언트에서 서버로 쓰기 요청을 전송 2. 서버에서 요청을 받아 클라이언트로 데이터를 보내라고 알림 3. 클라이언트에서 쓰기 데이터 전송 시작 4. 클라이언트에서 쓰기 데이터 전송 종료 ResponseTimeout은 위에서 공통으..

Base/개념정리 2022.04.19

URI, URL

일단 URI가 URL 보다 상위 개념이다. URI 는 특정 http 서버에서 원하는 자원을 얻거나 특정 처리를 위해 서버에 보내는 식별자이고 그 중 URL은 서버에 실제하는 자원의 위치를 정확하게 명시하는 방법이다. 이에 http://localhost:8080/index.html 처럼 특정 자원의 위치를 나타낸다면 URL 이고 http://localhost:8080/user/123 처럼 실제 있는 자원은 아닌데 사전에 협의된 식별자를 호출하는 것이므로 URI 이다. URI는 특정 자원을 직접 호출하는 것이 아니기 때문에 일반적으로 서버에서 요청을 받아서 별도의 추가작업을 수행한다. 간단하게 말해 URL 외에는 모두 URI라고 보면 된다. RestApi Endpoint 는 일반적으로 URI 라고 생각하면 ..

Base/개념정리 2021.12.16

슬라이딩 윈도

슬라이딩 윈도(Sliding window)는 두 개의 네트워크 호스트간의 패킷의 흐름을 제어하기 위한 방법이다. TCP와 같이 데이터의 전달을 보증하는 프로토콜에서는 패킷 하나 하나가 정상적으로 전달되었음을 알리는 확인 신호(acknowledgement, 이하 ACK)를 받아야하며, 만약 패킷이 중도에 잘못되었거나 분실되어 확인받지 못하는 경우, 해당 패킷을 재전송해야하는 필요가 있다. 슬라이딩 윈도는 일단 '윈도(메모리 버퍼의 일정 영역)'에 포함되는 모든 패킷을 전송하고, 그 패킷들의 전달이 확인되는대로 이 윈도를 옆으로 옮김(slide)으로서 그 다음 패킷들을 전송하는 방식이다. 슬라이딩 윈도는 아직 확인을 받지 않고도 여러 패킷을 보내는 것을 가능케 하기 때문에, 매번 전송한 패킷에 대해 확인을 ..

Base/개념정리 2021.07.09

동기/비동기, 블로킹/논블로킹, 동시성/병렬성

Spring 환경에서 역사가 깊고 가장 흔하게 사용되는 @Async 를 생각해보자. 우리는 이를 통해 논블로킹/비동기 로직을 만들 수 있다. 사실 비동기라는 표현이 대중적으로 사용되지만 논블로킹이라는 표현도 적지 않게 사용된다. 일반적으로 블로킹==동기, 논블로킹==비동기 공식은 성립하지만 용어가 다른만큼 각각이 의미하는 바도 다르므로 이를 정확하게 이해하고 넘어갈 필요가 있다. 일반적으로 어떠한 test_1(), test_2(), test_3() 이라는 메소드를 순차적으로 호출하면 직전 메소드의 실행이 종료된 뒤에야 다음 메소드가 실행되고 이를 블로킹 방식이라 한다. 하지만 @Async를 사용하면 별도의 스레드에서 작업을 처리하기 때문에 직전 메소드의 종료와 무관하게 곧바로 다음 메소드가 실행되도록 할..

Base/개념정리 2021.07.08

SPOF(Single Point Of Failure)

시스템 구성 요소 중에서, 동작하지 않으면 전체 시스템이 중단되는 요소를 말한다. 예를 들어 이더넷 케이블과 전원, 이더넷 허브(HUB), 접속 단말들의 NIC(Network Interface Card) 등으로 이루어진 간단한 이더넷(Ethernet) 네트워크 시스템에 있어서 네트워크 허브(HUB) 장치의 전원은 SPOF이다. 허브의 전원이 차단됨과 동시에 나머지 모든 요소들은 네트워크를 사용할 수 없다. 높은 가용성을 추구하는 네트워크, 소프트웨어 애플리케이션, 상용 시스템에 단일 장애점이 있는 것은 바람직하지 않다. 단일 고장점, 단일 실패점이라고도 한다. https://ko.wikipedia.org/wiki/%EB%8B%A8%EC%9D%BC_%EC%9E%A5%EC%95%A0%EC%A0%90

Base/개념정리 2021.04.26
728x90