SERVER/Node.js 17

💻Node.js의 논 블로킹 IO, 싱글스레드, 이벤트 루프

💻Node.js의 논 블로킹 IO, 싱글스레드, 이벤트 루프 Block IO vs Non-Block IO & Sync vs Async에 대한 설명은 여기를 참고해주세요. Node.js의 모든 I/O 메서드는 논블로킹인 비동기 방식을 제공하고 콜백 함수를 받는다. 일부 메서드는 같은 작업을 하는 블로킹 메서드도 가지는데 이름 마지막에 Sync가 붙는다. Node.js의 non-blocking I/O Node.js에서의 논블로킹 I/O 모델은 블로킹 작업(Input, Output과 관련된 작업 / http, Database CRUD, third party api, filesystem)들을 백그라운드(libuv의 스레드 풀)에서 수행하고, 이를 비동기 콜백함수로 이벤트 루프에 전달하는 것을 말한다. Node...

SERVER/Node.js 2022.06.29

Block IO vs Non-Block IO & Sync vs Async

Block IO vs Non-Block IO & Sync vs Async IO란? IO는 데이터의 입력(Input)과 출력(Output)을 함께 일컫는 말이다. 어떤 데이터가 CPU에서 처리되기 위해서는 자신이 있는 위치부터 메모리 계층의 최상위에 있는 레지스터까지 전달되어야 한다. 몇몇 데이터 소스는 실행을 심각하게 늦추지 않는 선에서 레지스터까지의 데이터 전달을 보장한다. 하지만 대부분의 데이터 소스는 데이터를 요청했을 때 일정 시간 안에 데이터를 받을 수 있을 거라는 보장이 없기 때문에, 프로그램은 어떤 방식으로든 데이터를 받기까지 실행이 심각하게 늦춰진다고 느껴질 만큼 대기하는 시간이 생긴다. Blocking IO 블로킹 IO는 IO 작업시 프로그램의 실행을 막는다는 뜻으로 해석될 수 있다. 2개..

SERVER/Node.js 2022.06.28

💻 webRTC Process

💻 webRTC Process webRTC 수행과정 p2p 영상 및 음성 통신을 하는 webRTC application 을 구성한다면, 다음 작업을 수행합니다. Fetching : 상대 peer 에게 보낼 사용자의 음성 및 영상 데이터를 수집합니다. Signaling : 상대 peer 와 연결을 맺기 위해서, 상대 peer 의 정보를 탐색합니다. 다음 과정을 수행합니다. Exchanging session descriptions(세션 설명 교환) : offer, answer Exchanging ICE candidates(ICE 후보자 교환) : ICE candidates 1. Fetching webRTC API 인 MediaStream, getUserMedia 를 이용해 사용자의 영상 및 음성 정보를 가져..

SERVER/Node.js 2022.06.22

📌동시성과 병렬성

📌동시성과 병렬성이란? 동시성과 병렬성의 차이가 없는 것처럼 보일 수도 있지만, 이는 질문의 본질을 이해하지 못하기 때문입니다. 그들이 어떻게 다른지 이해하려고 노력합시다. 동시성(Concurrency) 동시성은 적어도 두 개의 스레드가 진행 중일 때 존재하는 조건이며, 가상 병렬 처리의 한 형태로 시간 분할(time-slicing)을 포함한다. 우리가 흔히 ‘동시’라고 이야기 하지만 컴퓨터(코어)는 한번에 하나의 명령어만 처리할 수 있다. 즉, 두개 이상의 알고리즘이 하나의 코어내에서 스레드간에 빠르게 교차되면서 실행되기 때문에 ‘동시’라고 느끼는 것이다. 위의 그림은 싱글 코어내에서 다중스레드들이 실행되는 동시성을 나타내고 있다. 참고로 Thread A와 Thread B가 교차되며 실행되는 부분을 C..

SERVER/Node.js 2022.06.11

📌Observer Pattern이란?

Observer Pattern이란? 디자인 패턴이라는 건 소프트웨어 개발을 하면서 발생하는 다양한 이슈들을 해결하는데 도움을 주는 기술들입니다. 많은 개발자들의 경험들을 바탕으로 만들어진 증명된 기술들이죠. 개발에 난항을 겪는 사람들에게는 참조할 수 있는 솔루션이 됩니다. 오늘은 Observer 패턴을 살펴보도록 하겠습니다. Observer Pattern 정의 옵저버 패턴은 감시자들이 한곳을 계속해서 바라보고있고, 이벤트가 발생했을때 이벤트를 바라보고 있는 감시자들이 바로 반응할 수 있는 패턴입니다. 만약 이러한 옵저버 패턴을 가지지 않는다면 이 이벤트를 체크해야 하는 오브젝트들은 1시간, 1분, 1초마다 계속해서 확인해야해서 필요없는 리소스가 발생하기도 하고, 1시간만다 체크하게될 경우 1시간 내에 이..

SERVER/Node.js 2022.05.11

SOA, MSA 아키텍처란?

SOA, MSA 아키텍처란? 📌SOA SOA(Service Oriented Architecture)는 1990년대에 정의되어, 2008년에 유행했던 아키텍처 스타일이다. 현대의 서버 아키텍처는 SOA 사상에 많은 영향을 받았고 많은 분산 아키텍처가 거의 이 SOA 사상에 기인한다고 해도 될 만큼 중요한 아키텍처이다. SOA의 기본 개념 SOA란 기존 애플리케이션들의 기능을 비즈니스적인 의미가 있는 기능 단위로 묶고, 표준화된 호출 인터페이스를 통해 서비스라는 소프트웨어 컴포넌트 단위로 재조합한 후, 이 서비스들을 서로 조합(Orchestration)하여 업무 기능을 구현한 애플리케이션을 만들어내는 소프트웨어 아키텍처이다. 기존의 시스템이 각각 독립된 업무 시스템으로 개발되어왔던 반면에 SOA는 기업의 전..

SERVER/Node.js 2022.05.10

💻 웹 서비스 성능 올리기(처리량, 응답시간)

웹 서비스 성능 올리기(처리량, 응답시간) 서버 성능 기본 짚 2개: 응답 시간, 처리량 TPS(Transaction Per Second): 초당 몇개 클라이언트 요청을 처리하는지를 나타냅니다. 📌 TPS를 높이려면 가장 쉬운 방법 : 서버 늘리기 단순하게 서버 1대가 10TPS면 2대면 20TPS가 됩니다. 비슷한 방법으로 쓰레드 풀+DB 커넥션 풀 늘리기 동시 처리할 수 있는 개수 쓰레드 풀 5, 처리 시간 1초 => TPS 5 쓰레드 풀 10, 처리 시간 1초 => TPS 10 📌 처리 시간을 줄이려면 처리 시간에서 비중이 높은 대상을 찾아 줄여햐 함 비중이 높은 대상 DB 연동 API 호출 데이터 집계/계산 1.DB 처리 시간 줄이기 보통 세 가지 방법 : 퀴리 튜닝, 캐시 서버 이용, 하드웨어 ..

SERVER/Node.js 2022.04.24

🖋서버 확장을 위한 두가지 방법

서버 확장을 위한 두 가지 방법 서버를 운영하다 보면, 갑작스러운 이용자의 증가, 사업 확장 등의 이유로 더 많은 서버 용량과 성능이 필요하게 됩니다. 이럴 때에는 '스케일 아웃'과 스케일 업' 두 가지 방법으로 시스템을 확장시킬 수 있습니다. Scale-out 스케일 아웃이란 서버를 여러대 추가하여 시스템을 확장하는 방법입니다. 서버가 여러 대가 되기 때문에 각 서버에 걸리는 부하를 균등하게 해주는 로드밸런싱이 필수적으로 동반되어야 합니다. 스케일 아웃의 경우, 서버 한대가 장애로 다운되더라도 다른 서버로 서비스 제공이 가능하기 때문에 전면 장애의 가능성이 적습니다. 수평적 확장이며 지속적 확장이 가능합니다. 비교적 저렴한 서버를 사용하므로 일반적으로 비용 부담이 적습니다. 반면 모든 서버가 동일한 데..

SERVER/Node.js 2022.04.24

💻 WebRTC란

WebRTC 프로토콜 소개 1. WebRTC란 WebRTC(Web Real-Time Communication)는 웹 브라우저 간에 플러그인의 도움 없이 서로 통신할 수 있도록 설계된 API이다. W3C에서 제시된 초안이며, 음성 통화, 영상 통화, P2P 파일 공유 등으로 활용될 수 있다. 공개 웹 표준으로 구현되며 모든 주요 브라우저에서 일반 JavaScript API로 제공한다. (Apple, Google, Microsoft 및 Mozilla가 지원) 2. WebRTC의 프로토콜 소개 처음에 peer 간의 서로의 위치를 알지 못하기 때문에 서버를 사용해야하고 그 서버는 peer의 위치를 각 peer들에게 위치 정보를 알려주는 역할을 한다. 2-1. ICE(Interactive Connectivity ..

SERVER/Node.js 2022.04.17

💻Socket.Io 이해하기

💻Socket.Io 이해하기 📌Socket.IO란? Socket.IO란 이벤트를 기반한 서버와 브라우저 간의 양방향 통신을 돕는 라이브러리이다. http는 일반적으로 양방향 통신이 불가능한데, polling, long-polling, WebSocket 등의 시스템 디자인을 사용하여 양방향 통신이 가능한 것처럼 구현할 수 있다. Socket.IO는 일반적으로 위 모델 중 long-polling 방식을 사용한다. Polling polling 방식에서는 클라이언트에서 주기적으로 서버에 데이터를 요청한다. 클라이언트에서 요청이 오면 서버에서는 변경이 없거나 새로운 데이터가 없더라도 응답을 보낸다. 따라서 주기적으로 정해진 시간마다 데이터를 확인해야 하는 서비스에 적합할 수 있지만, 불필요한 요청이 많아질 수 있..

SERVER/Node.js 2022.04.17