Moon Blog

1주차 개념 스터디 본문

웹 개념 스터디

1주차 개념 스터디

문블룸 2021. 7. 29. 02:57

Node.js란 무엇인가?

Node.js는 확장성 있는 네트워크 애플리케이션(특히 서버 사이드) 개발에 사용되는 소프트웨어 플랫폼이다. 작성 언어로 javascript를 활용하며 Non-blocking I/O단일 스레드 이벤트 루프를 통한 높은 처리 성능을 가지고 있다.

내장 HTTP 서버 라이브러리를 포함하고 있어 웹 서버에서 아파치 등의 별도의 소프트웨어 없이 동작하는 것이 가능하며 이를 통해 웹 서버의 동작에 있어 더 많은 통제를 가능케 한다. 또한, Node.js 사용자는 잠금이 없기 때문에 프로세스가 교착 상태에 빠질 염려가 없다. Node.js의 기능은 거의 I/O를 직접 수행하지 않으므로 프로세스가 차단되지 않는다. 아무것도 차단하지 않기 때문에 확장성 있는 시스템은 Node.js에서 개발하기에 매우 적합하다.

    1. Non-blocking I/0이란? 전송이 완료되기 전에 다른 처리를 계속할 수 있도록 하는 입력/출력 처리의 한 형태
    2. 단일 스레드 이벤트 루프란? 단일 스레드는 자바스크립트의 특징 중 하나로 동시에 하나의 작업만을 처리할 수 있다는 것을 뜻한다. 이벤트 루프는 Callback Event Queue에서 하나씩 꺼내서 동작시키는 Loop를 말한다. 자바스크립트는 이벤트 루프를 이용해서 Non-blocking I/O로 동시성을 지원한다. 이 덕분에 자바스크립트는 단일 스레드인데도 불구하고 멀티 스레드처럼 보인다. 참고로 자바스크립트 엔진에서 제공되는 것이 아닌 브라우저나 node.js의 libuv 라이브러리에서 제공된다.
    3. Callback Event Queue란? 콜백 큐는 비동기 코드가 들어가고, 실행을 위해 대기하는 곳이다. 자바스크립트 코드가 실행 중에 이벤트를 만나면 해당 이벤트들은 차곡 차곡 콜백 큐에 쌓인다. 콜 스택(Call Stack)과 다르게 콜백 큐이므로, 선입선출된다는 특징이 있다.
    4. Call Stack이란? 콜 스택은 인터프리터가 프로그램을 읽을 때 하나씩 쌓여들어가고, 실행되며, 실행이 완료되면 비워지는 곳이다. 호출된 순서와 반대로 실행이 되는 구조라 '스택'이라고 부른다. 개발자가 실수로 재귀 함수 등을 썼을 때 콜스택에 올라간 함수가 또 자기 자신을 불러 스택을 채우고 점점 브라우저별 최대 호출 스택을 초과할 경우 Uncaught RangeError: Maximum call stack size exceeded 같은 에러 메세지를 띄운다. 만일 실행하는 코드가 비동기적이라고 할 때 코드는 이벤트 테이블로 향하고, 이 테이블은 지정된 시간 이후에 비동기 코드를 Callback Event Queue로 옮기는 역할을 한다.

Ref)

https://nodejs.org/en/about/                                                                      https://en.wikipedia.org/wiki/Asynchronous_I/O 

https://zereight.tistory.com/855 

https://uiyoji-journal.tistory.com/100

 

About | Node.js

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

nodejs.org


  • npm(yam)이란 무엇인가?

npm과 yarn은 Node.js에서 주로 사용하는 패키지 관리자 툴이다. 

npm yarn
온라인 데이터베이스로 이루어져 있으며 이는 클라이언트를 통해 접근되며 사용 가능한 패키지들은 npm 웹 사이트에서 찾아보고 검색할 수 있음 페이스북에서 개발한 자바스크립트의 패키지 매니저로 더욱 빠르게 패키지를 인스톨하는 방법과 의존성 관리를 다양한 디바이스에서 일관성 있게 할 수 있음
순차적 패키지 설치  병렬적 패키지 설치
잠금 파일을 생성하지 않음 항상 yarn.lock 파일을 생성하고 업데이트 함
다른 패키지가 즉시 포함될 수 있도록 하는 코드를 자동으로 실행하므로 보안 시스템에 여러 취약점 발생함 yarn.lock 또는 package.json 파일에서만 해당 파일 설치함
npm보다 보안성 뛰어남

여러 면에서 yarn은 npm보다 효율적으로 보인다. 그러나 yarn은 용량을 많이 차지하는 단점이 있다.

 

Ref)

https://cntechsystems.tistory.com/34  

https://javascript.plainenglish.io/npm-vs-yarn-choosing-the-right-package-manager-a5f04256a93f  

https://www.npmjs.com/ 

https://classic.yarnpkg.com/en/

 

npm

Bring the best of open source to you, your team, and your company Relied upon by more than 11 million developers worldwide, npm is committed to making JavaScript development elegant, productive, and safe. The free npm Registry has become the center of Java

www.npmjs.com

 

Yarn

Fast, reliable, and secure dependency management.

classic.yarnpkg.com


  • 정적 타입 언어 vs 동적 타입 언어 (Javascript는 동적 타입 언어에 해당)
  정적 타입 언어 동적 타입 언어
특징 컴파일 시 변수의 타입이 결정되는 언어로 자료형을 컴파일 시에 결정함
컴파일 시에 자료형에 맞지 않는 값이 들어있으면 컴파일 에러가 발생함
컴파일 시 자료형을 정하는 것이 아닌 런타임 시 결정함
타입 없이 변수만 선언하여 값을 지정할 수 있음

장점 1)타입 에러로 인한 문제점을 초기에 발견할 수 있어 타입의 안정성이 높음

2)컴파일 시에 미리 타입을 결정하기 때문에 실행속도가 빠름
1)런타임까지 타입에 대한 결정을 끌고 갈 수 있기 때문에 유연성이 높음

2)컴파일시 타입을 명시해주지 않아도 되기 때문에 빠르게 코드를 작성할 수 있음
단점 매번 코드 작성시 변수형을 결정해줘야 하는 번거로움 실행 도중에 변수에 예상치 못한 타입이 들어와 타입에러가 발생할 수 있음
예시 Java, C, C++, C#, Scala,  Fortran,
Haskell, ML, Pascal 등
Groovy, Python, JavaScript, Ruby, Smalltalk, Lisp, Objective-C, PHP, Prolog

Ref)

https://devuna.tistory.com/82 

https://stackoverflow.com/questions/1517582/what-is-the-difference-between-statically-typed-and-dynamically-typed-languages#


  • 라이브러리와 프레임워크의 차이
  라이브러리 프레임워크
특징 단순 활용가능한 도구들의 집합, 개발자가 만든 클래스에서 호출하여 사용, 클래스들의 나열로 필요한 클래스를 불러서 사용하는 방식
코딩 효율성을 높이고 향상시키기 위해 설계된 특정 프로그래밍 규칙 및 모범 사례의 집합
차이점 <자유도>
프레임워크로 프로그램을 만들기 시작하면 어떤 규약을 꼭 지키면서 만들어야함 그러나 라이브러리는 단순 도구이기에 규약을 지키면서 하는 것이 아닌 자유롭게 사용이 가능함

Ref)

https://webclub.tistory.com/458

https://engkimbs.tistory.com/673


  • REST API란 무엇인가?

REST API(RESTful API)란 REST 아키텍처의 제약 조건을 준수하는 애플리케이션 프로그래밍 인터페이스를 뜻한다. 이때, REST는 Representational State Transfer의 줄임말이고 API는 Applicaiton Programming Interface의 줄임말이다. 

 

API애플리케이션 소프트웨어를 구축하고 통합하는 정의 및 프로토콜 세트이다. 때때로 API는 정보 제공자와 정보 사용자 간의 계약으로 지칭되며 소비자에게 필요한 콘텐츠(호출)와 생산자에게 필요한 콘텐츠(응답)를 구성한다. 즉, 컴퓨터나 시스템과 상호 작용하여 정보를 검색하거나 기능을 수행하고자 할 때 API는 사용자가 원하는 것을 시스템에 전달할 수 있게 지원하여 시스템이 이 요청을 이해하고 이행하도록 한다. API를 사용자 또는 클라이언트, 그리고 사용자와 클라이언트가 얻으려 하는 리소스 사이의 조정자로 생각하면 된다. API는 조직이 보안 및 제어를 유지관리(누가 무엇에 액세스 할 수 있는지 결정)하면서 리소스와 정보를 공유할 수 있는 방법이기도 하다. 

 

REST는 프로토콜이나 표준이 아닌 아키텍처 원칙 세트입니다. API 개발자는 REST를 다양한 방식으로 구현할 수 있다.

REST API를 통해 요청이 수행될 때 REST API는 리소스 상태에 대한 표현을 요청자에게 전송합니다. 이 정보 또는 표현은 HTTP: JSON(Javascript Object Notation), HTML, XLT 또는 일반 텍스트를 통해 몇 가지 형식으로 전송된다. JSON은 그 이름에도 불구하고 사용 언어와 상관이 없을 뿐 아니라 인간과 머신이 모두 읽을 수 있기 때문에 가장 널리 사용된다. 

 

요약) REST API란 HTTP 프로토콜을 더 유연하게 사용해 서버의 자원을 추가, 수정, 삭제, 업데이트할 수 있도록 하는 것

 

Ref)

https://www.redhat.com/ko/topics/api/what-is-a-rest-api 

https://haejun0317.tistory.com/242

 

REST API(RESTful API, 레스트풀 API)란 - 서버, 구현, 사용법

REST API(RESTful API)란 REST 아키텍처의 제약 조건을 준수하는 애플리케이션 프로그래밍 인터페이스를 뜻합니다. api 서버, rest api 구현 및 사용법을 설명합니다.

www.redhat.com


  • Node.js의 BE Library / Framework에 대해서 알아보기 

<Library>

Body-parser Request body 파싱 미들웨어
Cors CORS 허용을 위한 Connect/Express 미들웨어
Multer multipart/form-data 제어를 위한 미들웨어
주로 파일 업로드에서 사용
multipart/form-data 외에서는 동작하지 않음
Axios Promise 기반 HTTP 클라이언트
Morgan HTTP Request Logger Middleware
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 배열, 숫자, 객체, 문자열 등을 손쉽게 다루기 위한 모듈화된 메소드 모음
배열, 객체, 문자열 반복
값 조작 & 검사
합성Composit 함수 생성
chalk 터미널 문자열 스타일링
사용하기 쉬운 composable API 제공
연결chain 및 중첩nest 스타일 가능
validator 문자열 유효성 검사
Helmet 다양한 HTTP 헤더 설정, Express 앱 보호
Cypto-js 암호화 표준 자바스크립트 라이브러리

<Framework>

1. Hapi.js 

Hapi.js는 안전한 실시간 확장 가능한 소셜 미디어 애플리케이션 개발에 이상적이다. 대부분의 모바일 앱 개발자는 프록시 및 API 서버를 만드는 데 Hapi.js를 선호한다고 한다. 또한, Hapi.js를 사용하여 오버헤드를 최소화하고 즉시 사용 가능한 기능을 갖춘 확장 가능하고 강력한 애플리케이션을 만들 수 있다. 

 

2.Express.js

Express.js는 쉽게 사용할 수 있는 API 생성 도구가 있으므로 웹 애플리케이션 및 서비스를 빠르게 생성하는 데 이상적이다. MEAN 소프트웨어 스택이라는 JavaScript 기반 기술의 일부이다. 즉, Express.js를 사용하여 엔터프라이즈급 브라우저 기반 앱을 만들 수 있다.

 

3. Nest.js

Nest.js는 확장 가능하고 테스트 가능하며 느슨하게 결합된 애플리케이션을 작성하는 데 주로 사용된다. Node.js에 확장 가능성을 완전히 새로운 수준으로 추가한다. 대규모 프로젝트의 코드를 효율적으로 관리할 수 있도록 구조와 유연성의 적절한 균형을 제공하면서도 따라야 할 구조 감각이 있다.

 

4. Koa.js

Koa.js는 동일한 Express.js 작성자가 만든 오픈 소스 Node 웹 프레임워크이다. Koa.js는 웹 애플리케이션 및 API를 위한 더 작고 표현력이 뛰어나고 강력한 플랫폼을 만드는 것을 목표로 한다. 서버를 더욱 흥미롭게 만드는 과정을 효율적으로 다양하게 제공합니다.

 

5. Socket.io

Socket.io는 클라이언트와 서버 간의 실시간 양방향 통신을 설정하는 데 사용된다. 이것을 작동하려면 클라이언트의 브라우저에 Socket.io가 있어야 하고 서버도 Socket.io 패키지를 통합해야 한다. 이를 통해 수백만 가지 형식으로 데이터를 공유할 수 있다. 실시간 양방향 통신 덕분에 실시간 분석 기능을 필요로 하는 분야에 유용하다. 

 

6. Meteor.js

Meteor.js는 JavaScript가 다른 목적을 위해 다른 장소에서 실행되는 오픈 소스 풀 스택 JavaScript 플랫폼이다. JavaScript는 웹 브라우저 내에서 실행이 된다. 이후 JavaScript는 Node.js 컨테이너 내부의 Meteor 서버에서 실행되고 HTML 조각, 정적 자산 및 CSS 규칙을 지원한다.

 

Ref)

https://javascript.plainenglish.io/top-node-js-frameworks-to-use-in-2021-4951ee5940b8

http://lucablaq.com/wp/

 

 

>>> 잘못된 부분이 있다면 댓글 달아주세요!_!

'웹 개념 스터디' 카테고리의 다른 글

4주차 개념 스터디  (0) 2021.08.25
3주차 개념 스터디  (0) 2021.08.19
CSS 레이아웃  (0) 2021.08.12
2주차 개념 스터디  (0) 2021.08.12
Visual Studio Code 유용한 Plugin  (0) 2021.08.09