[Dev-immersion] 개념 스터디 1주차

1. Node.js 란 무엇인가

Node.js는 확장성 있는 네트워크 애플리케이션(특히 서버 사이드) 개발에 사용되는 소프트웨어 플랫폼이다. 작성 언어로 자바스크립트를 활용하며 Non-blocking I/O와 단일 스레드 이벤트 루프를 통한 높은 처리 성능을 가지고 있다. 내장 HTTP 서버 라이브러리를 포함하고 있어 웹 서버에서 아파치 등의 별도의 소프트웨어 없이 동작하는 것이 가능하며 이를 통해 웹 서버의 동작에 있어 더 많은 통제를 가능케 한다.

Node.js란?

Node.js는 Javascript 런타임(프로그램을 실행할 수 있는 환경)으로, 서버를 만들 수 있다. Node.js의 가장 중요한 특징은 단일 스레드(Single Thread) 이벤트 루프(Event Loop) 기반 비동기방식(Non-Blocking I/O)이라는 점이다. 그래서 이 특징을 중심으로 Node.js에 대해 알아보고자 한다.

📌 단일스레드 이벤트 루프 기반 비동기방식
하나의 스레드가 request를 받으면 바로 다음 처리에 request를 보내놓고 다른 작업을 처리하다가 먼저 요청한 작업이 끝나면 이벤트를 받아서 응답을 보낸다. 동시 request가 와도 처리가 완료될 때까지 기다릴 필요가 없기 때문에 서버 부하가 적다.

참고 : 스레드 기반 동기방식 (Blocking I/O)
하나의 스레드가 request를 받으면 모든 처리가 완료될 때까지 기다리다가 처리가 완료되면 다시 응답을 보낸다. 기존 업무 처리가 완료되기 전에 또 다른 request가 발생하면 새로운 스레드가 업무를 처리한다. 동시 request가 많은 경우 많은 스레드가 필요하기 때문에 서버 과부하가 발생한다.

이벤트 루프 (Event Loop)

이벤트 기반 (Event-driven)
이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식으로, 특정 이벤트가 발생할 때 무엇을 할지 미리 등록해두고 이벤트 리스너에 콜백함수를 등록한다. 이후에 이벤트가 발생하면 리스너에 등록해놓은 콜백함수가 호출되며, 이벤트가 끝난 후 노드는 다음 이벤트가 발생할 때까지 대기한다.

여러 이벤트가 동시 발생했을 때 어떤 순서로 콜백함수를 호출할지 이벤트 루프가 판단한다. 노드는 이벤트가 종료될 때까지 이벤트 처리를 위한 작업을 반복하므로 루프(loop)라고 부른다.

비동기방식 (Non-Blocking I/O)

Non-Blocking이란 이전 작업이 완료될 때까지 대기하지 않고 다음 작업을 수행하는 것을 의미한다. 반면, Blocking은 이전 작업이 끝나야만 다음 작업을 수행한다.

이벤트 루프를 잘 활용하면 오래 걸리는 작업을 효율적으로 처리할 수 있지만, 싱글 스레드라는 한계 때문에 Javascript의 모든 코드가 시간적 이득을 볼 수 있는 것은 아니기 때문에 주로 I/O 작업이 시간적 이득을 많이 본다. 파일 시스템 접근, 네트워크를 통한 요청 작업 등이 Input/Output의 일종이며, 이러한 작업을 할 때 노드는 Non-Blocking 방식으로 처리한다.

싱글 스레드 (Sigle Thread)

  • 프로세스(Process) : 운영체제에서 할당하는 작업의 단위. 노드나 웹 브라우저 같은 프로그램이 개별적인 프로세스.
  • 스레드(Thread) : 프로세스 내에서 실행되는 흐름의 단위.

싱글 스레드는 하나의 스레드가 한 번에 한 가지 일만 처리하는 것이다. 멀티 스레드 방식보다 컴퓨터 자원을 적게 사용하는 장점이 있지만, CPU 코어를 하나밖에 사용하지 못하는 단점이 있다.

Node.js는 하나의 스레드가 일을 처리하므로 하나의 작업 자체가 많이 걸리는 웹서비스에는 어울리지 않는다. 노드는 V8과 더불어 libuv라는 라이브러리를 사용해 I/O 작업을 논블로킹 방식으로 처리하기 때문에, 게시판 형태와 같이 가벼운 I/O가 많은 웹서비스에 어울린다.

Node.js가 어울리는 웹서비스와 어울리지 않는 웹서비스

Node.js가 어울리는 웹서비스

  • 간단한 로직
  • 동시에 여러 request를 처리하는 대용량 웹서비스
  • 빠른 응답시간을 요구하는 웹서비스
  • 빠른 개발 시간을 요구하는 웹서비스
  • 개수는 많지만 크기는 작은 데이터를 실시간으로 주고받는 웹서비스
    (Single Thread, Non-Blocking I/O)
    : 네트워크 스트리밍 서비스, 데이트베이스, 디스크 작업 같은 I/O
    실시간 채팅 애플리케이션, 주식 차트 등

Node.js가 어울리지 않는 웹서비스

  • 단일 처리가 오래 걸리는 경우 (Single Thread)
  • 서버 체크 로직이 많은 경우 (Non-Blocking I/O이므로 콜백함수 늪/CallBack Hell에 빠지지 않기 위해)
  • 업무 복잡도/난이도 높은 경우 (에러 나면 서버가 죽기 때문에 코드 품질 중요)
  • CPU 부하가 큰 작업

2. npm(yarn) 이란 무엇인가

npm

npm이란 노드 패키지 매니저(Node Package Manager)를 의미한다. npm은 Javascript 런타임 환경인 Node.js의 기본 패키지 관리자 역할을 한다. Node.js에서 사용할 수 있는 모듈들을 패키지화하여 모아둔 저장소 역할과 패키지 설치 및 관리를 위한 CLI(Command Line Interface)를 제공한다. 그래서 npm을 통해 패키지(package) 또는 모듈(module)이라고 불리는 자바스크립트 소프트웨어를 자신의 프로젝트에 설치할 수 있고, 또한 자신의 프로젝트에서 사용 중인 패키지들의 버전 업데이트도 package.json을 통해 관리할 수 있다.

📖 package.json
설치한 패키지들과 저마다의 고유한 버전들을 기록하고 관리해야 할 필요가 있는데, 그 파일이 바로 package.json이다. package.json의 dependencies를 보면 설치한 패키지의 목록과 버전을 볼 수 있다. 패키지 외에도 프로젝트의 name, version, main, scripts 등을 package.json에서 관리한다.

자주 사용하는 npm 명령어

  • 패키지 설치
# 로컬 설치
npm install <package_name>
# 전역 설치
npm install -g <package_name>
# package.json의 모든 패키지 설치
npm install
  • package.json 생성
npm init
# 기본 설정
npm init -y
  • 패키지 제거 / 업데이트
# 로컬/개발 패키지 제거
npm uninstall <package_name>
# 전역 패키지 제거
npm uninstall -g <package_name>
# 패키지 업데이트
npm update <package_name>
  • package.json scripts 프로퍼티 실행
# start 실행
npm start
# start 이외의 scripts 실행
npm run <script_name>

yarn

yarn이란 Facebook에서 만든 새로운 Javascript 패키지 매니저이다. npm의 동작방식과 비슷하나, npm의 단점을 보완해 성능과 속도를 개선한 라이브러리 관리 도구이다.

자주 사용하는 yarn 명령어

  • yarn 설치 /새 프로젝트 시작(package.json 생성)
# yarn 설치(npm 사용)
npm install -g yarn
# 새 프로젝트 시작
yarn init
  • 패키지 설치
yarn add [package]
yarn add [package]@[version]
yarn add [package]@[tag]
# devDependencies에 추가
yarn add [package] --dev/-D
# peerDependencies에 추가
yarn add [package] --peer/-P
# optionalDependencies에 추가
yarn add [package] --optional/-O
  • 패키지 업그레이드 / 제거
# 패키지 업그레이드
yarn upgrade [package]
# 패키지 제거
yarn remove [package]
  • 다른 command
# npm에서의 --global과 비슷한 기능
yarn global [add/ls/remove/upgrade]
# 설치된 패키지 의존성 분석하여 불필요한 파일 제거
yarn clean
# package.json scripts 실행
yarn run [script] [--<args>]

3. 정적 타입 언어 vs 동적 타입 언어

  • 타입 (Type)
    int형, short형, float형, String형, bool형, 객체 등 변수의 자료형을 뜻한다.

정적 타입 언어 (Statically Typed Language)

정적 타입 언어컴파일 시 변수의 타입이 결정되는 언어를 말한다. 변수에 들어갈 값의 형태에 따라 직접 변수의 타입을 명시해줘야 한다. 컴파일 시에 자료형에 맞지 않은 값이 들어있으면 컴파일 에러가 발생한다. 정적 타입 언어에는 C, C++, C#, Java, Scala, Fortran, Haskell, ML, Pascal 등이 있다.

int num = 1; // 컴파일 성공
float num2 = 1.03; // 컴파일 성공
bool num3 = 1; // 컴파일 에러
  • 장점
    컴파일 시에 타입에 대한 정보를 결정하기 때문에 실행속도 빠름
    타입 에러로 인한 문제점을 초기에 발견할 수 있어 타입의 안정성이 높음

  • 단점
    매번 코드 작성 시 변수 타입(변수형)을 결정해줘야 하는 번거로움이 있음

동적 타입 언어 (Dynamically Typed Language)

동적 타입 언어는 컴파일 시 자료형을 정하는 것이 아닌 런타임 시(실행 시) 결정하는 언어를 말한다. 타입 없이 변수만 선언하여 값을 지정할 수 있다. 동적 타입 언어에는 Python, Javascript, Ruby, Smalltalk, Groovy, Lisp, Objective-C, PHP, Prolog 등이 있다.

num1 = 123;
num2 = "일이삼";

위 예시에서 두 개의 변수 선언에서 모두 타입이 선언되어 있지 않았지만, num1은 숫자로, num2는 String으로 타입 에러 없이 선언된다.

  • 장점
    런타임까지 타입에 대한 결정을 끌고 갈 수 있기 때문에 유연성 높음(많은 선택의 여지가 있음)
    컴파일 시 타입을 명시해주지 않아도 되기 때문에 빠르게 코드를 작성할 수 있음

  • 단점
    실행 도중에 변수에 예상치 못한 타입이 들어와 타입 에러가 발생할 수 있음

참고
동적 타입 언어는 런타임 시 타입을 확인할 수 밖에 없기 때문에 코드가 길고 복잡해지면 타입 에러를 찾기가 어려워진다. 이러한 불편함을 해소하기 위해 Typescript나 Flow 등을 사용할 수 있다.


4. 라이브러리 VS 프레임워크

라이브러리(Library)란?

개발에서 자주 사용하게 되는 코드를 하나의 함수나 클래스라는 단위로 묶어 재사용하게 되는데, 이러한 함수 또는 클래스들을 모아 라이브러리(Library) 또는 모듈(module)이라고 한다. 라이브러리는 개발자가 직접 만들 수도, 다른 사람이 만든 것을 설치해 사용할 수도 있다. 다시 말해, 라이러리는 재사용이 가능한 코드의 집합을 뜻한다.

프레임워크(Framework)란?

라이브러리(혹은 모듈)을 공통적으로 사용하기 위한 부품이라 하면 프레임워크는 개발을 할 때 필요한 기본 뼈대와 기반 구조를 갖추기 위한 여러 클래스와 인터페이스, 컴포넌트들의 집합을 뜻한다. 개발자가 처음부터 모든 것을 개발할 수 있지만, 프레임워크를 사용하면 원하는 기능에만 집중하여 구현할 수 있다. 프레임워크 안에는 기본적으로 필요한 기능을 갖추고 있으므로 라이브러리가 포함되어 있다.

라이브러리와 프레임워크의 차이점

라이브러리와 프레임워크의 차이점은 흐름(Flow)에 대한 제어 권한을 누가 지니고 있냐의 차이이다. 라이브러리는 프로그래머가 전체적인 흐름을 가지고 있어 자신이 원하는 기능을 구현하고 싶을 때 라이브러리를 가져다 사용할 수 있는 반면, 프레임워크는 전체적인 흐름을 자체적으로 가지고 있어 프로그래머가 그 안에서 필요한 코드를 작성한다는 차이점이 있다.

다시 말해, 라이브러리는 라이브러리를 사용하고 호출하는 측에 전적으로 주도성이 있으며 프레임워크는 그 틀 안에 이미 제어 흐름에 대한 주도성이 내재되어 있다. 프레임워크는 라이브러리와 달리 가져다가 사용한다는 개념보다는 그 안에 들어가 사용한다는 관점에 가깝다.

제어의 역전 (Inversion Of Control)
프레임워크에는 제어의 역전(Inversion Of Control)이 적용되어 있다. 제어의 역전이란 어떠한 일을 하도록 만들어진 프레임워크에 제어의 권한을 넘김으로써 클라이언트 코드가 신경써야 할 것을 줄이는 전략이다. 실행의 흐름을 프레임워크 자체가 가지고 있고 코드를 프레임워크 안에 넣어 개발을 진행하는 식으로 일반적으로 프로그래머가 가지고 있어야 하는 제어의 권한을 프레임워크에 넘겨주었기 때문에 제어의 역전이라고 말한다.


5. REST API 란 무엇인가

REST 란?

REST는 'Representational State Transfer'의 약자로, 자원의 이름으로 구분하여 해당 자원의 상태(정보)를 주고받는 모든 것을 의미한다.

즉, REST란

  • HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource) 명시
  • HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원(URI)에 대한 CRUD Operation을 적용하는 것의 의미한다.

📖 CRUD Operation
CRUD는 대부분의 컴퓨터 소프트웨어가 가지는 기본적 데이터 처리 기능인 Create(생성), Read(읽기), Update(갱신), Delete(삭제)를 묶어서 읽컫는 말이다. REST에서의 CRUD Operation은

  • Create: 데이터 생성 (POST)
  • Read: 데이터 조회 (GET)
  • Update: 데이터 수정 (PUT)
  • Delete: 데이터 삭제 (DELETE)

REST의 구성 요소

  • 자원(Resouce): HTTP URI
  • 자원에 대한 행위(Verb): HTTP Method
  • 자원에 대한 행위의 내용(Representations): HTTP Message Pay Load

REST의 특징

  • Server-Client (서버-클라이언트 구조)
  • Stateless (무상태)
  • Cacheable (캐시 처리 가능)
  • Layered System (계층화)
  • Uniform Interface (인터페이스 일관성)
  • Self-descriptiveness (자체 표현 구조)

REST API 란?

REST API란 REST의 원리를 따르는 API를 의미한다.

📖 API (Application Programming Interface)
데이터와 기능의 집합을 제공하여 컴퓨터 프로그램 간 상호작용을 촉진하며, 어떠한 응용 프로그램에서 서로 데이터(정보)를 주고 받기 위한 방법을 의미한다.

REST API의 특징

  • REST 기반으로 시스템을 분산해 확장성과 재사용성을 높여 유지 보수 및 운용을 편리하게 함
  • REST가 HTTP 표준을 기반으로 구현하므로 HTTP를 지원하는 프로그램 언어로 클라이언트, 서버를 구현할 수 있다.

REST API 설계 예시

  • URI는 정보의 자원을 표현해야 함
    GET /members/1
    • resource는 동사보다는 명사를, 대문자보다는 소문자를 사용
    • resource의 도큐먼트 이름으로는 단수 명사를 사용
    • resource의 컬렉션 이름으로는 복수 명사를 사용
    • resource의 스토어 이름으로는 복수 명사를 사용
  • 자원에 대한 행위는 HTTP Method(GET, POST, PUT, DELETE)로 표현함
  • URI에 HTTP Method가 들어가면 안됨
    GET /books/delete/1 -> DELETE /books/1
  • URI에 행위에 대한 동사 표현이 들어가면 안됨 (즉, CRUD 기능을 나타내는 것은 URI에 사용하지 않음)
    Get /books/show/1 -> GET /books/1
    GET /books/insert/2 -> Post /books/2
  • 경로 부분 중 변하는 부분은 유일한 값으로 대체 (즉, id는 하나의 특정 resource를 나타내는 key값을 의미)
    book을 생성하는 URI: POST /students
    id=10인 book을 삭제하는 URI: DELETE /students/10
  • 슬래시 구분자(/)는 계층 관계를 나타내는 데 사용함
    http://restapi.example.com/courses/java
  • URI 마지막 문자로 슬래시(/)를 포함하지 않음
    http://restapi.example.com/courses/java/ (X)
  • URI에 포함되는 모든 글자는 리소스의 유일한 식별자로 사용되어야 하며, URI가 다르다는 것은 리소스가 다르다는 것이고 역으로 리소스가 다르면 URI도 달라져야 함
  • 하이픈(-)은 URI 가독성을 높이는 데 사용할 수 있음
  • 언더바(_)는 URI에 사용하지 않음
  • URI 경로에는 소문자가 적합함
  • 파일 확장자는 URI에 포함하지 않음 Accept header를 사용하도록 함
    http://restapi.example.com/files/java.jpg (X)
    GET /files/jdk18.exe HTTP/1.1 Host: restapi.example.com Accept: image/jpg (O)
  • 리소스 간에 연관 관계가 있는 경우 다음과 같은 방법으로 표현함
    /리소스명/리소스 ID/관계가 있는 다른 리소스명
    GET: /books/{bookid}/viewers (일반적으로 소유 'has'의 관계를 표현할 때)
  • 자원을 표현하는 컬렉션(Collection)과 도큐먼트(Document)
    컬렉션은 객체의 집합, 도큐먼트는 객체라고 생각하면 된다. 컬렉션과 도큐먼트 모두 리소스로 표현할 수 있으며 URI로 표현할 수 있다.
    http://restapi.example.com/courses/1
    courses는 컬렉션을 나타내므로 복수이고, courses/1은 courses 중 id가 1인 도큐먼트를 의미한다.

RESTful 이란?

RESTful은 일반적으로 REST라는 아키텍처를 구현하는 웹 서비스를 나타내기 위해 사용되는 용어로, 'REST API'를 제공하는 웹 서비스를 'RESTful'하다고 할 수 있다. 즉, REST 원리를 따르는 시스템은 RESTful이라는 용어로 지칭된다. RESTful의 목적은 이해하기 쉽고 사용하기 쉬운 REST API를 만드는 것이고, RESTful한 API를 구현하는 근본적인 목적이 성능 향상에 있는 것이 아니라 일관적인 컨벤션을 통한 API의 이해도 및 호환성을 높이는 것이 주 동기이니, 성능이 중요한 상황에서는 굳이 필요하지 않다.

RESTful 하지 못한 경우

  • CRUD 기능을 모두 POST로만 처리하는 API
  • route에 resouce, id 외의 정보가 들어가는 경우
    /students/updateName

6. Node.js의 BE Library / Framework

Node.js 라이브러리 (BE)

  • Body-parser: Request body 파싱 미들웨어
  • Cors: Cors 허용을 위한 Connect/Express 미들웨어
  • Passport: Express 호환 인증 미들웨어
  • Multer: multipart/form-data 제어를 위한 미들웨어. 주로 파일 업로드에서 사용.
  • Axios: Promise 기반 HTTP 클라이언트
  • Morgan: HTTP Request Logger 미들웨어
  • Http-errors: HTTP 에러를 생성. Express, Koa, Connect 지원.
  • Dotenv: .env 파일에서 process.env 환경 변수를 만드는 종속성이 없는 모듈. 코드와 별도의 환경을 통해 구성을 저장.
  • Faker: 엄청나게 많은 양의 가짜 데이터를 만듬.
  • Nodemailer: Node.js에서 e-mail을 보냄.
  • Sequelize: Promise 기반 ORM. Postgres, MySQL, MariaDB, SQLite, Microsoft SQL Server 지원. 견고한 트랜잭션, 관계, eager, lazy loading, read replication 등의 기능 지원.
  • Mongoose: 비동기 환경에서 MongoDB 객체 모델링 도구. Promise와 Callback 모두 지원.
  • Moment: 가벼운 날짜 라이브러리. 파싱, validating, manipulating(조작), formating 기능 지원.
  • Lodash: 배열, 숫자, 객체, 문자열 등을 손쉽게 다루기 위한 모듈화된 메소드 모음.
  • Chalk: 터미널 문자열 스타일링. 사용하기 쉬운 composable API 제공. 연결(chain) 및 중첩(nest) 스타일 가능.
  • Validator: 문자열 유효성 검사. (sanitizer)
  • Cheerio: HTML, 마크업 파싱하고 결과 자료 구조를 탐색 및 조작.
  • JSDoc: API 문서 생성
  • Helmet: 다양한 HTTP 헤더 설정. Express 앱 보호.
  • Crypto-js: 암호화 표준 자바스크립트 라이브러리

Node.js 프레임워크 (BE)

  • Express.js
    Express는 웹 및 모바일 애플리케이션 개발을 이한 강력한 기능 모음을 제공하는 인기 있고 빠르며 최소한의 유연한 MVC(Model-View-Controller) Node.js 프레임워크이다. 기존 Node.js 기능에 추가되는 얇은 기본 웹 애플리케이션 기능을 제공하는 라우팅 라이브러리 세트로, Express에서 지원되는 HTTTP 유틸리티 메솓, 함수 및 미들웨어로 개발자가 강력한 API를 쉽고 빠르게 만들 수 있다.

  • Socket.io
    Socket.io는 실시간 애플리케이션 구축을 위한 빠르고 안정적인 풀스택 프레임워크이다. 자동연결, 단절 감지, 바이너리, 멀티플렉싱 및 룸을 지원하며, 간단하고 편리한 API를 가지고 있다. 모든 플랫폼, 브라우저 또는 장치에서 작동한다.

  • Meteor.js
    Meteor.js는 최신 웹 및 모바일 애플리케이션을 구축하기 위한 초소형 풀스택 Node.js 프레임워크이다. 웹, iOS, Android 또는 데스크톱과 호환된다. 연결된 클라이언트 반응형 애플리케이션, 빌드 툴 및 Node.js 및 일반 Javascript 커뮤니티의 선별된 패키지 세트를 빌드하기 위한 주요 기술 컬렉션을 통합한다.

  • Koa.js
    Koa.js는 Express 개발자가 구축한 새로운 웹 프레임워크이며, ES2017 비동기 기능을 사용한다. 웹 응용 프로그램 및 API 개발을 위한 보다 작고 표현력이 뛰어나고 견고한 기반이 되어야 한다. Callback 지옥의 앱을 제거하고 오류 처리를 단순화하기 위해 약속 및 비동기 기능을 사용한다.

  • Sails.js
    Sails.js는 Express에 구축된 Node.js를 위한 실시간 MVC 웹 개발 프레임워크이다. MVC 아키텍처는 Ruby on Rails와 같은 프레임워크와 유사하다. 그러나 보다 최신의 데이터 중심 스타일의 웹 앱 및 API 개발을 지원한다는 점에서 다르다.

  • Nest.js
    Nest.js는 효율적이고 안정적이며, 확장 가능한 서버 측 애플리케이션을 구축하기 위한 유연하고 다재다능한 Node.js REST API 프레임워크이다. 최신 Javascript를 사용하며, Typescript로 빌드된다. 내부적으로 Express를 사용하는 한편 광범위한 다른 라이브러리와의 호환성을 제공한다.

  • Lookback.io
    Looback은 코딩이 거의 또는 전혀 없이 동적 엔드-투-엔드 REST API를 작성할 수 있는 확장성이 뛰어난 Node.js 프레임워크이다. 개발자가 몇 분 안에 모델을 쉽게 설정하고 REST API를 작성할 수 있도록 설계되어 있다.

  • Keystone.js
    Keystone.js는 Express 및 MongoDB에 구축된 가볍고 유연하며, 확장 가능한 오픈 소스 Node.js 풀스택 프레임워크이다. 데이터베이스 기반 웹사이트, 응용 프로그램 및 API를 구축하도록 설계되었다.

  • Feathers.js
    Feathers.js는 최신 애플리케이션을 작성하기 위한 실시간, 최소 및 마이크로 서비스 REST API 프레임워크이다. 확장 가능한 REST API 및 실시간 웹 애플리케이션을 처음부터 쉽게 작성할 수 있도록 설계된 다양한 도구 및 아키텍쳐이다. Express에도 구축되어 있다. 애플리케이션 프로토 타입을 신속하기 구축하고 며칠 내에 실시간 백엔드를 제작할 수 있다.

  • Hapi.js
    Hapi.js는 애플리케이션과 서비스를 구축하기 위한 단순하면서도 안정적인 MVC 프레임워크이다. 인프라 구축과 반대로 재사용 가능한 애플리케이션 로직을 작성하기 위한 것이다.

  • Strapi.io
    Strapi는 웹 사이트 및 앱 또는 모바일 애플리케이션을 위한 효율적이고 안전한 API를 개발하기 위한 MVC Node.js 프레임워크이다. 기본적으로 안전하고 플러그인 지향적이며(모든 새 프로젝트에서 기본 플러그인 세트가 제공됨) 프론트엔드와 무관하다.

  • Restify.js
    Restify는 연결 스타일 미들웨어를 활용하는 Node.js REST API 프레임워크이다. 프로덕션 환경에서 대규모로 사용할 수 있는 의미 있는 올바른 RESTful 웹 서비스를 구축할 수 있도록 최적화되어 있다. (특히, 검사 및 성능에 적합)

  • Adonis.js
    Adonis는 또 다른 대중적인 Node.js 웹 프레임워크로, 확장 가능한 서버 측 웹 애플리케이션을 처음부터 작성할 수 있도록 안정적인 에코 시스템을 제공하는 MVC 프레임워크이다. 모듈식으로 설계되었으며, 일관된 API를 통해 풀스택 웹 애플리케이션 또는 마이크로 API 서버를 구축할 수 있다.


👉🏻 참고 사이트
Node.js 위키백과
[Node.js] 개념 이해하기
[Node.js] npm 이란
YARN, 새로운 Package Manger
정적타입 언어 vs. 동적타입 언어 특징 비교하기
프레임워크와 라이브러리의 차이
프레임워크와 라이브러리의 차이점
REST API란, HTTP Method
[Network] REST란? REST API란? RESTful이란?
[요약] 2020년 알아야할 미친듯이유용한 NodeJs 라이브러리들
개발자를 위한 14가지 최고의 NodeJS 프레임 워크

좋은 웹페이지 즐겨찾기