본문 바로가기
개발/차근차근 개발일지 TIL

TIL 230414_Node.js 입문1

by 코딩하는짱구 2023. 4. 14.
반응형

TIL 230414_Node.js 입문1

✅입문주차 최종 학습 목표 및 일정

1. Javascript의 기초 문법을 이해할 수 있고, 동기 비동기에 대한 설명을 할 수 있다. 230414

2. Express.js의 Request(req), Response(res)가 무엇인지 이해할 수 있고, REST API를 구현할 수 있다. 230414

3. Mongoose 라이브러리를 이용하여 Schema를 작성하고, MongoDB의 정보를 조회 및 삭제할 수 있다. 230415

4. AWS Web Console을 이용하여 EC2를 생성할 수 있고, Express.js 서버를 배포할 수 있다. 

 

✅오늘 학습 Keyword

서버개발을 하기 전에 기본적인 개념을 정리하고 숙지하기

Node.js, Javascript, 동기&비동기, HTTP, Express.js_Request(req), Response(res), REST API

 

✅오늘 겪은 문제

동기(Sync) & 비동기(Async), Blocking Model & Non-Blocking Model 차이가 불명확. 

 

✅해결 시도, 방법

구글링과 Chat GPT의 도움을 받아 개념을 좀더 자세히 읽어보고, 이해를 하였다.

✅알게된 점

그래서 알아야할 것은

1. 자바스크립트란 결국 Async(비동기) + Non-Blocking Model을 채용하여

현재 실행중인 코드의 실행이 끝나지 않아도 다음 코드를 호출하는 시스템

2. 비동기/동기는 쉽게말해 순서에 촛점이 맞춰져있다면, 블로킹/논블로킹의 관점은 제어권에 있다.

즉 비동기처리가 가능한 환경이여도 제어권을 넘기지 않으면(Blocking), 비동기 처리가 불가능하다.

 

 

✍ Node.js란?

Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임입니다. Node.js는 이벤트 기반, 논 블로킹 I/O 모델을 사용해 가볍고 효율적입니다. Node.js 패키지 생태계인 npm은 세계에서 가장 큰 오픈 소스 라이브러리 생태계이기도 합니다.

 

-Javascript를 브라우저가 아닌 컴퓨터에서 브라우저 없이 실행하게 도와주는 환경

-Node.js는 논 블로킹(Non-blocking) I/O, 싱글 스레드(Single Thread), 이벤트 루프(Event Loop)의 특성이 있다.

a. 논 블로킹(Non-blocking) I/O: 함수가 실행되는 중에도 다른 작업을 동시에 진행할 수 있는 장점이 있다.

b. 싱글 스레드: 

    b-1 연결 요청마다 스레드를 생성하는 체계에 비해 스레드 생성 부하스레드 유지에 대한 부담이 없어 같은

          컴퓨팅 리소스라도 조금 더 효율적으로 사용할 수 있는 특징이 있다.

    b-2 공유하는 자원에 대한 동시접근 문제, 즉 Race condition 상황이 발생하지 않는다는 것을 의미하며

          공유자원이 없으니 여러 스레드가 하나의 오류로 인해 모두 문제를 일으키는 상황도 발생하지 않는다.

    b-3 연결 요청의 부하에 따른 서버 확장이 매우 자유롭다.

 

 

-이벤트 루프(Event Loop):  Javascript가 가지고 있던 싱글 스레드의 약점을 극복하기 위해 효율적으로 작업을 처리할 수 있는 특성

 

✍ Javascript의 특성

01. 동기(Sync) & 비동기(Async), Blocking Model & Non-Blocking Model

02. 객체리터럴

03. Error handling

04. 클래스(Class)

 

 

01.

  • *동기(Sync) & 비동기(Async)

-일반적으로 "동기로 실행된다" 라고 함은, 먼저 실행된 코드의 결과가 나올때까지 대기하는것을 의미

-일반적으로 "비동기로 실행된다" 라고 함은, 실행된 순서와 관계 없이 결과가 나오는것을 의미

 

  • Blocking Model & Non-Blocking Model

-제어권을 넘기면(Non-blocking) 다른 코드도 실행될 수 있으므로 비동기 처리가 가능하지만

-제어권을 넘기지 않으면(Blocking) 비동기 처리가 가능한 환경이어도 비동기 처리가 불가능

 

-예시 (setTimeout은 특정 시간 뒤에 함수를 실행해주는 역할입니다.)function first() {
  console.log('First');
}

setTimeout(first, 1000); // 1000ms(1초) 뒤에 first 함수를 실행해준다.

console.log('Middle');
console.log('Last');

// Print: Middle
// Last
// First

  1. setTimeout(first, 1000) : 1초 뒤에 first() 함수 → console.log(’First’); 가 실행되도록 명령합니다.
  2. console.log('Middle'); : ‘Middle’ 문자열이 출력됩니다.
  3. console.log('Last'); : ‘Last’ 문자열이 출력됩니다.
  4. 1초가 지난 뒤 ‘First’ 문자열이 출력됩니다.
  5. Blocking Model이였다면 1초를 기다린 후 first()함수를 출력한 뒤 Middle, last 순서로 출력

02. 

  • 객체리터럴(Obj)

-Javascript는 객체(Object) 기반의 프로그래밍 언어이고, Javascript를 구성하는 거의 모든 것은 객체로 구성.

-객체(Object) 는 0개 이상의 프로퍼티로 구성된 집합이며, 하나의 프로퍼티는 KeyValue로 구성

-리터럴(literal)은 사람이 이해할 수 있는 문자 또는 약속된 기호를 사용해 값을 생성하는 표기법

-객체 리터럴은 객체를 생성하기 위한 표기법

-예시

a.객체 리터럴로 객체 생성하기 

let objectLiteral = {
    key: 'Value',
    helloWorld: function () {
        return "Hello world";
    }
};

 

b.프로퍼티(Property)란?

const human = {
  // 프로퍼티 키: 'name', 프로퍼티 값: '이용우' 
  name: '이용우',
  // 프로퍼티 키: 'human age', 프로퍼티 값: 28 
  'human age': 28
}

 

c. 메서드(Method)란?

let objectLiteral = {
    key: 'Value', // 프로퍼티
    helloWorld: function () { // 메서드
        return "Hello world";
    }
};

console.log(objectLiteral.helloWorld()); // Hello world


03. 

  • Error handling

-try...catch문으로 코드 전체를 감싼다. 에러가 발생하더라도 프로그램이 멈추지 않고 에러를 기록 할 수 있게함.

-throw 로 프로그램을 멈추기 위해 고의로 에러를 발생시키기도 함. 

-finally 에러가 발생했는지 여부와 상관없이 실행, 자원을 삭제 시킬 때 쓴다.


04.

  • 클래스(Class) - 붕어빵 틀! 

-예시

class User { 
}

const user = new User();
user.name = "이용우";
user.age = 28;
user.tech = "Node.js";

console.log(user.name); // 이용우
console.log(user.age); // 28
console.log(user.tech); // Node.js

 

-생성자(Constructor) : 미리정의한 클래스를 기반으로 인스턴스를 생성

-this : 빵틀 전체의 값을 바꾸는게 아니라 빵 하나의 값만 바꾸는 것 

-메서드(Method) : 프로퍼티 값이 함수인 경우 즉 객체(Object)에 묶여있는 함수

-상속: 부모클래스/자식클래스, 상속을 이용하여 자식클래스 생성

 

✍ HTTP란 무엇인가?

-데이터를 주고 받는 양식을 정의한 "통신 규약"중 하나가 HTTP! (통신 규약: Protocol)

-HTTP에서는 언제나 Request, Response라는 개념이 존재

-웹서버: 인터넷을 통해 HTTP를 이용하여 웹상에서의 클라이언트의 요청을 응답해주는 통신을 하는 컴퓨터 또는 프로그램! 

 

HTTP로 데이터를 주고받는 방식

 

✍ Package, Package Manager

-Package Manager 인 npm이나 yarn에 업로드된 Node.js 모듈

-Package.json: 설치한 패키지들의 버전을 관리할 때 사용하는 파일, npm & yarn 모두 package.json 파일을 참조

-Package-lock.json: npm으로 패키지를 설치, 수정, 삭제할때마다 패키지들의 의존관계를 저장

 

✍ Express.js

*Routing, Module, Request, Response, API, REST API가 핵심 

 

-Node.js로 서버를 빠르고 간편하게 만들 수 있게 도와주는 웹 프레임워크

-API Client : Thunder Client 처럼 개발단계에서 API요청을 확인 & 테스팅 하는 툴

-Routing: 클라이언트의 요청 조건(메서드, 주소 등)에 대응해 응답하는 방식

-Router: 클라이언트 요청 조건에 응답하는 방식

 

Router의 기본적인 구조

router.METHOD(PATH, HANDLER);

router: express의 라우터를 정의

METHOD: HTTP Method 를 나타냄 (ex. get, post, put, delete...)PATH: 실제 서버에서 API를 사용하기 위한 경로HANDLER: 라우트가 일치할 때 실행되는 함수

 

-Module: Javascript 파일 단위로 분리된 코드 (Javascript: 특정한 기능을 가진 함수와 변수들의 집합)

-Request 클라이언트가 서버에게 전달하려는 정보나 메시지를 담는 객체

-Response 서버에서 클라이언트로 응답 메시지를 전송시켜주는 객체

-Express 모듈의 req, res 객체

a. req객체: req.body, req.params, req.query etc....

b. res객체: res.status(코드), res.send(데이터), res.json(JSON) etc...

 

✍ API

-API: 애플리케이션끼리 연결해주는 매개체이자 약속

(키보드의 키를 누르면 글자가 전달됌, 즉 키를 누르는것이 API를 호출하는것)

-API를 작성한다: 웹 어플리케이션(프론트엔드)에서 원하는 기능을 수행하는 URL인터페이스제공한다

 

✍ REST API

REST: Representational State Transfer : 소프트웨서 프로그램 아키텍처의 한 형식

REST API: REST특징을 지키면서 api를 제공하는 것 

 

REST API 구성

a. 자원(Resource) - URL

 

b. 행위 - HTTP method 일명 크루드

Create : 생성(POST)

Read : 조회(GET)

Update : 수정(PUT),(PATCH)

Delete : 삭제(DELETE)

 

c. 표현(JSON, XML etc...)

https://velog.io/@meekukin/RESTful-API-4uk5rtheqv

 

 

**미들웨어 동작 방식

반응형