헬창 개발자

Node.js 첫걸음 본문

공부방

Node.js 첫걸음

찬배 2022. 7. 26. 17:15

 

 

1. 웹 서버와 Node.js의 관계

1.1 클라이언트와 서버

 

    • 클라이언트 : 사용자가 보는 컴퓨터
    • 서버 : 웹 서비스 할 리소스가 저장되어 있는 컴퓨터
    • 웹 서버 : 클라이언트에서 보내는 요청을 처리하고 적절한 결과를 보여주는 프로그램

    1.2 웹 서버의 종류

    • Django : 기본적으로 제공하는 기능이 있어 편리하고 데이터 조작을 많이하는 서비스(*CRUD)를 만들 경우 좋은 선택지일 수 있다.

    *CRUD : 데이터의 처리의 기본 기능인 생성, 조회 수정, 삭제(Create, Read, Update, Delete)

    • Spring : 안정적이고 정형화된 패턴이 있지만 자유도가 낮아 내가 특정한 어떤 기능을 만들고 싶은데 스프링으로만으로 만들지 못하는 상황이 있을 수도 있다.
    • Node.js : 자유도가 높은 웹 서버를 개발 할 수 있다.

    1.3 Node.js

    • Node.js : 웹 브라우저 밖에서 우리가 작성할 자바스크립트 서버 코드를 실행해 주는 환경, 자바스크립트를 돌리는 엔젠은 브라우저 내에 저장되어있다. Node.js는 브라우저에서 돌릴 수 있는 자바스크립트 코드를 우리의 컴퓨터 환경에서 돌릴 수 있도록 밖으로 빼놓은 것, 그러므로 Node.js 덕분에 자바스크립트를 사용하기 위해 꼭 브라우저를 사용해야 할 필요는 없다.

    브라우저 내에서 자바스크립트 코드 실행

    이점은 다음과 같다.

    • 내가 만들 웹이 *리얼타임이다. (리얼타임 : 애플리케이션에서 어떤 요청을 신속하게 처리하여 응답해야 하는 것)
    • 커스터마이징이 많이 필요하다.
    • 자바스크립트 API를 사용해아한다.
    • 빠른 실행과 성능이 중요하다.

    2. Node.js가 동작하는 방식

    2.1 동기적 처리와 비동기적 처리

      • 동기적 처리 방법은 하나씩 순차적으로 일을 해결해 나가는 것이고, 비동기적 처리는 한번에 여러일을 시작하고 보는 방법이다.
      • 만약 동기적 처리 방법을 채택한다면 안정적이므로 스켈줄을 다루기 쉽겠지만 총 소요시간이 길어진다.
      • 비동기적 처리 방법을 사용한다면 한번에 시작한 일의 관리를 어떻게 해야 할지 머리가 아프지만 효율적으로 다루면 짧은 시간 내에 일을 끝낼 수 있다.
      • Node.js는 비동기적 처리 방법을 이용한다.

      2.2 Node.js는 어떻게 여러 작업을 처리할 수 있을까?

      시나리오 1

      아이들에게 아직 심부름을 맡기기가 불안한 엄마는 카트 한개를 가지고 다같이 과일 코너에 가서 아이 1이 사과를 담게하고 다시 다같이 채소 코너에 가서 아이 2가 당근을 담게하고 다시 다같이 과일 코너에 가서 아이 3이 배를 가져오게 한다.

      시나리오 2

      아이들의 독립심을 키우기 위해 엄마는 아이들에게 각자 카트를 한 개씩 가지고 각자 맡은 물건을 담고 다시 자기 카트에 넣으라고 지시한다. 아이들은 각자 맡은 물건을 가지고 오는 대로 엄마의 카트에 담는다.

      • 시나리오 1에서 엄나는 카트를 한개만 가지고 아이 한 명의 심부름이 끝날 때까지 다른 아이게게 심부름할 기회를 주지 않는다. 바로 이렇게 제어권을 넘겨 주지않고 대기하게 만드는 것을 블로킹(Bloking) 방식이라고 한다. 또 아이들에게 한 명씩 심부름을 시켰는데 이는 작업의 흐름이 순차적인 동기적 방식이다.
      • 시나리오 2에서는 엄나는 심부를 하는 아이들에게 별다른 제제를 하지 않았다. 이는 다른 작업과 관계없이 일을 수행할 수 있게 한 논블로킹(NonBloking) 방식이다. 이는 작업의 흐름이 순차적이지 않은 비동기적 방식이다. → Node.js는 이 방식으로 응답을 기다리지 않고 바로 다음 작업을 실행한다.

      2.3 싱글 스레드와 이벤트 루프

      • 스레드 : 경령화된 프로세스라고함, 인터넷 브라우저를 실행한것이 프로세스이며 그 브라우저 내에서 이동, 검색, 등 다른 작업을수행하는 것이 스레드이다.
      • 그렇다면 Node.js가 싱글 스레드, 논블로킹/비동기 방식을 택하면서 어떻게 하나의 스레드를 가지고 빠르게 일을 처리할 수 있는거지??????????????????????? 비밀은 이벤트 루프이다.

      콜백 큐 : 이벤트 발생 후 호출되어야 할 작업을 기다리는 자료구조, 이벤트 큐라고 함

      콜 스택 : 함수의 호출을 기록하는 자료구조이며 현재 실행 중인 작업이 끝났을 때 어느 실행 부분으로 돌아갈지 보관한다.

      • Node.js는 응답을 기다리는 대신 작업이 종료되면 이벤트를 발생시키고 콜백 큐에 등록하는 방법을 택했다. 응답을 기다리는 대신 다른 작업을 먼저 수행하는 쪽을 택한것이다.
      • 이벤트 루프가 계속 감시를 하기 때문에 콜 스택이 비어있는지 체크를한다. 콜 스택이 비어있으면 콜백 큐의 작업을 콜 스택으로 밀어 넣는다.

      1. 이벤트 루프는 일종의 감시자라고 생각하면 어떤 이벤트가 있는지 계속 감시하고 이벤트가 감지 되면 그 작업을 위해 작업 스레드를 생성한다.
      2. 작업 스레드는 일종의 작업공간 이며 이벤트를 처리하기 위해 이벤트 루프는 처리 작업을 작업 스레드에게 맡겨버리고 다른 이벤트가 없나 다시 감시하기 시작한다.
      3. 작업 스레드가 작업을 받을 때, 콜백 함수라는 것을 받는데 콜백 함수란 작업이 끝나면 실행 되는 함수이다.
      4. 응답을 받은 이벤트 루프는 콜백 함수의 결과를 클라이언트에 전송하여 우리가 볼 수 있는 결과로 바꿔 준다.
      5. 작업 스레드는 작업을 마치면 이 콜백 함수를 실행하고 싶다고 최고 감시자인 이벤트 루프에게 응답을 보낸다.

      3. 실습을 위한 개발환경 구축

      https://nodejs.org/ko/

      설치 과정은 생략

      Comments