[TIL #11]

이상현·2024년 8월 12일

[ TIL ]

목록 보기
11/38

서버에 관한 공부를 하기 전에 Node.js와 서버에 대한 것들을 정리해보고 넘어가자.

1. 서버(server)

🖥️ 서버(Server)란?

  • 서버의 사전적의미는 '서비스(service)를 제공하는 사람'이라는 뜻이다.
    그러나 현대의 '서버'는 광범휘하게 변해 인터넷 네트워크 환경에서 다른 컴퓨터에게 "다양한 기능, 데이터, 서비스를 제공하는 컴퓨터나 소프트웨어 전반"을 가리키는 의미로 발전하게 되었다.

🖥️ 서버의 종류

  • 웹 서버 : 웹사이트 서비스를 제공하기 위한 서버
  • 도메인 서버 : 도메인을 관리하기 위한 서버
  • 게임 서버 : 게임을 제공하기 위한 서버

'서버'라는 같은 단어로 통칭되지만, 수없이 많은 기능들을 제공하는 컴퓨터와 소프트웨어들이 존재한다.

또한, 서버는 '하드웨어'에만 존재하는 것이 아닌 '소프트웨어'까지도 서버라는 개념에 포함된다.

🖥️ Web server

Web

  • 인터넷을 기반으로 한, 정보를 공유하고 검색할 수 있게 만드는 서비스
  • 웹은 3가지 요소 , URL(주소), HTTP(통신규칙), HTML(내용) 으로 구성되어있다.

Server

  • 클라이언트에게 네트워크를 통해 정보나 서비스를 제공하는 컴퓨터 시스템
  • 서버는 일종의 역할로서, 컴퓨터가 인터넷을 이용해 정보나 기능을 제공하는지, 제공받는지에 따라 서버와 클라이언트로 나눠진다.
  • 즉, 서버라는 것도 기본적으로는 컴퓨터이며, 서버나 클라이언트 모두 다 본체 안에 CPU와 메모리, 저장 장치, 운영체제가 설치되어 있다.
  • 역할의 관점에서 바라봤을 때 개인용 컴퓨터도 서버의 역할을 할 수 있다. 다만 제대로 된 서비스를 운영하기에 제약이 있기 때문에 보통 서버를 따로 둔다.

웹과 서버라는 두 단어를 합쳤을 때 웹서버는 인터넷을 기반으로 클라이언트에게 웹 서비스를 제공하는 컴퓨터라고 할 수 있다.


🖥️ 게임 서버
  • TCP Server, Binary Server, Stateful Server 라고도 불린다.
  • 클라이언트가 패킷을 서버에 전송해도 서버에서 응답을 꼭 보내주지 않아도 된다.
  • 서버에서 클라이언트로 패킷을 전송할 수 있다.
  • 실시간 통신이 중요하다.

2. Node.Js

node.js는 V8으로 빌드된 자바스크립트 Runtime(실행환경)이다.

  • 원래 기존 자바스크립트는 웹 브라우저 내에서만 작동하던 언어였는데 node.js를 통하여 런타임을 확장 시켰다.
  • node.js를 설치하면 터미널에서 브랑우저 없이 자바스크립트를 실행 가능하다.

특징

  1. Node.js는 단일 스레드(Single-Thread)의 논 블로킹(Non-blocking I/O) 이벤트 기반 비동기 방식으로 처리되어 높은 처리 성능을 가지고 있다.
  2. 내장 HTTP 서버 라이브러리를 포함하고 있어 웹 서버에서 아파치 등의 별도의 소프트웨어 없이 동작하는 것이 가능하며 이를 통해 웹 서버의 동작에 있어 더 많은 통제를 가능케 한다.
  3. Javascript 언어로 Front-end 뿐만 아니라 Back-end 개발 환경을 구성할 수 있기에 생산성이 높고 러닝 커브가 줄어든다.
  4. 다양한 패키지 매니저(npm: node Package Manager)를 기반으로 다양한 모듈(패키지)을 제공하며 필요 라이브러리에 대해 설치하고 사용할 수 있기에 효율성이 좋다.

하나씩 자세히 알아보자

❗️ 이벤트 기반

  • 이벤트 기반(Event-driven)이란 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식을 의미한다.
  • 이벤트 기반 시스템에서는 특정 이벤트가 발생할 때 무엇을 할지 미리 등록해두고, 이를 이벤트 리스너에 콜백함수를 등록한다.
  • 이후 이벤트가 발생하면 리스너에 등록해둔 콜백함수를 호출하며, 이벤트가 끝난 후 노드는 다음 이벤트가 발생할 때까지 대기한다.
  • 여러 이벤트가 발생했을 때 어떤 순서로 콜백함수를 호출 할지는 이벤트 루프가 판단한다.
    [LINK] 이벤트 기반 비동기 방식에 대해 쉽게 알아보는 예시

❗️ I/O (Input/Output)란?

  • 입출력

❗️ 블로킹 (blocking I/O)란?

  • I/O가 동작되고 있는 동안에 다른 일을 처리하지 못하는 상태를 의미하며, 함수가 모든 일을 마무리될 때까지 다음 처리가 안되는 것을 의미한다.

❗️ 논 블로킹(Non-blocking I/O)란?

  • I/O가 동작을 하면서 request를 받으면 바로 다음 처리에 요청을 보내 놓고 다른 작업을 처리하다가 먼저 요청한 작업이 끝나면 이벤트를 받아서 응답을 보내는 것을 의미한다.

❗️ 러닝 커브(Learning Curve)란?

  • ’학습 곡선’이라고도 하며 특정 기술 또는 지식을 실제 필요한 업무와 같은 환경에서 효율적으로 사용하기 위해 드는 학습 비용을 의미한다.

단점

  1. Node.js 모든 API는 ‘비동기 기반의 처리 방식’이라 서버의 로직이 복잡한 경우에 ‘콜백 함수 늪(callback hell)'에 빠질 수 있다.
  2. 단일 스레드(Single Thread)이기 때문에 하나의 작업이 오래 걸리는 웹 서비스에 경우 애플리케이션의 성능이 저하될 수 있다.
  3. 해당 코드를 수행이 되어야지 코드에서 에러가 났는지 확인이 가능하며 에러 갈 날 경우 프로세스 자체가 내려갈 수 있다.

❗️ 콜백 함수(callback) 란?

  • 함수를 등록하면 어떤 이벤트가 발생했거나 특정 시점에 도달했을 때 시스템에서 호출하는 함수를 말한다

3. 언제 사용하는게 효율적인가

  • 하나의 언어로 Front/Back-end 개발환경을 구성할 때 유용하다
  • 간단한 로직으로 구성하는 서비스에 사용하는 것이 좋다.
  • 입출력(I/O)이 자주 발생하는 작고 빈번한 요청을 처리하는 서비스에 어울린다. ex) 알림 혹은 채팅 서비스
  • 비동기 방식에 어울리는 서비스(네트워크 스트리밍 서비스, 채팅 서비스 등)에 유용하다.
  • 빠르게 환경 구성을 하여 개발을 해야 하는 경우에 유용하다.
profile
Node.js_6기

0개의 댓글