201004_TIL

oh_ji_0·2020년 10월 4일
1

TIL

목록 보기
42/61

Today I leanred

  • 서버
  • Node.js
    • 모듈

@@ 오늘은 가볍게 노드프로그래밍 서적을 읽으며 node.js 서버 스프린트 때 배웠던 서버와 node.js 의 개념에 대해 복습하는 시간을 가졌다. 서버의 종류와 node.js 의 특성 및 장점 등을 살펴보았고, v8 엔진과 Common.js에 대한 개념도 다시 읽어보며 복습했다.

서버

  • 채팅 서버

    • 웹 서버에서 기능을 추가한 형태로 구성
    • 일대일 채팅과 그룹 채팅 기능을 제공
    • 채팅을 위해 채팅 서버에 접속, 로그인 후 친구 목록을 가져올 수 있다.
  • JSON-RPC 서버

    • 서버 쪽에 함수를 만들어 두고 클라이언트에서 함수를 호출 하듯 데이터를 요청하면 응답하는 서버
    • 웹문서가 아닌 데이터만 주고 받을 때 주로 사용
    • 표준 데이터 포맷
    • RPC 방식으로 데이터를 주고 받는다.
    • JSON과 RPC 표준을 함께 사용하면 서버 쪽에 구축해야 하는 기능을 함수별로 명확하게 구분하여 만들 수 있다.
    • 서버의 유지관리가 쉽다
    • 웹문서가 아닌 데이터만 요청하는 경우에도 JSON-RPC 서버 이용
    • 서버에 등록된 함수를 보통 핸들러라고 부른다.
  • 위치 기반 서비스 서버

    • 위치정보는 위도,경도 좌표 사용

    • 위도와 경도 두가지 숫자 값을 데이터베이스에 그대로 저장하면 데이터 양이 늘어난다.

    • 또한 두개 값을 한번에 비교하여 조회하면 검색 속도가 많이 떨어진다.

    • 위치정보는 공간 데이터라고도 한다.

      • 공간 데이터

        지구상에 있는 집, 도로 등을 점이나 선 등의 형태로 나타낸 위치 데이터

    • 위치 기반 서비스는 검색속도가 떨어지지 않도록 공간 인덱싱 방법을 사용 (일반 데이터는 데이터베이스에서 B-Tree 인덱싱 방법 사용)

    • 공간 인덱싱

      데이터 베이스에서 2차원 공간 데이터를 빠르게 조회하기 위해 만든 2차원 인덱싱 방법 (R-Tree, R*Tree 등)

  • 모바일 서버

    • 웹서버 기능 만으로도 앱에서 서버에 데이터를 보내 저장하거나 서버의 데이터를 조회하는 기능을 충분히 만들 수 있다.
    • 그러나 사용자가 어떤 모바일 단말을 사용하는지 알고 싶거나 모바일 단말로 푸쉬 메시지를 보내고 싶은 경우 모바일 전용 기능을 ㅏㅅ용할 수 있도록 모바일 서버라는 이름으로 서버 기능을 만들음.

Node

  • 자바스크립트를 이용해서 서버를 만들 수 있는 개발 도구

  • 배경

    웹 서버 파일을 업로드 할 때 업로드 완료되기 까지 웹서버에서 데이터를 조회하거나 하는 등의 다른 작업이 불가

    이 문제에 대한 해결을 위해 새로운 방식의 서버 개발 도구 시작.

    (웹 서버 파일 업로드 핸들러가 하나의 요청이 끝날 때까지 다른 요청을 대기시켜, 서버에서 처리해야하는 요청 수가 증가하면 CPU, 메모리 사용도 크게 증가하는 문제 발생)

  • 비동기 입출력 방식

  • 비동기 입출력(논블로킹 입출력, Non-Blocking IO)방식

    • 비동기(논블로킹) , 동기(블로킹)
  • 콜백함수

    • 파라미터로 전달된 함수를 다른 함수의 내부에서 호출하는 것
  • 데이터 처리 방식을 비동기로 바꾸어도 자바스크립트 코드를 실행하는 속도가 느리면 효율성이 떨어질 수 있다.

  • 자바스크립트는 코드를 한줄씩 해석하면서 실행하는 인터프리터 방식을 사용하므로 속도가 느려 문제가 됐으나 V8 엔진이 나오면서 해결됨.

  • V8엔진은 자바스크립트 코드를 네이티브 코드로 바꾼 후 실행

    • 자바스크립트 엔진

      자바스크립트 코드를 마이크로프로세서가 이해할 수 있는 더 낮은 수준의 언어 혹은 기계어로 변환해주는 역할

      v8 엔진 참고글 여기

  • 노드는 이 v8엔진을 이용해 자바스크립트 코드를 빠르게 실행 할 수 있다.

  • 노드를 설치 후 노드로 프로그램을 만들어 실행하면 크롬 v8엔진 위에서 실행된다.

  • v8엔진에는 필요한 기능을 병렬로 실행하는 스레드 풀과 이벤트를 받아 처리하는 이벤트 루프 등 기본 기능이 있고 그 위에
    네트워킹 기능을 담당하는 소켓, http라이브러리 들이 있다. 그리고 그 위에 표준 라이브러리가 구현되어있다. 개발자들이 각자의 목적에 맞게 만든 노드 프로그램은 그 라이브러리 위에서 동작한다.

  • 노드 프로그램이 동작할 수 있도록 만든 이 아키텍처에서 가장 중요한 부분 중 하나가 이벤트를 받아 처리하는 기능.

  • 특히 노드는 서버 쪽에서 동작하는 프로그램을 만드는 것이 주 임무이기 때문에 기본 기능인 소켓이나 http 프로토콜을 사용해 데이터를 송수신하는 기능을 포함하고 있다.

  • 따라서 이벤트 처리 방식을 그대로 사용할 수 있다.

  • http객체는 HTTP 프로토콜로 웹 서버에 데이터를 요청할 수 있는 기능이 있다.

  • 자바스크립트엔 on이라는 메소드를 통해 이벤트를 콜백함수와 바인딩 할 수 있다.

  • 따라서 response객체의 on 메소드를 이용해 data이벤트와 콜백함수를 바인딩하면 data 라는 이름의 이벤트를 받았을 때 등록한 콜백 함수가 실행된다. 이벤트 이름이 data이고 응답으로 받은 데이터는 chunk변수에 들어있다.

노드 모듈

  • 노드에서도 필요 기능을 별도의 파일로 만들면 코드를 분리해서 관리할 수 있다.

  • 그 형태는 Common js 표준 스펙을 따른다.

    • Common.js

      자바스크립트를 브라우저뿐 아니라 서버쪽 프로그램이나 PC용 프로그램에서도 사용하려고 조작한 자발적인 워킹그룹.

      Common.js 표준스펙은 자바스크립트 코드를 별도의 모듈 파일로 분리시키고 필요할 때 불러와 사용할 수 있는 방식을 정의한 표준.

  • 여러개의 모듈을 합쳐서 하나의 패키지로 만들어 두면 다른 프로그래머들도 npm 프로그램으로 손쉽게 패키지를 설치하여 사용할 수 있다.

  • 자바스크립트 프로그래밍 주요 특징

    • 모듈과 패키지
    • 비동기 입출력
    • 이벤트 기반 입출력
  • 노드의 장점

    • 이미 만들어놓은 모듈들의 활용성
    • 대기업의 사용 등으로 검증된 안정성
    • 서버 구축 때 필수로 배워야 할 플랫폼으로의 성장
profile
기본에 충실하고 싶습니다. #Front-end-developer

0개의 댓글