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

hj·2021년 8월 5일
0

Dev-Immersion

목록 보기
1/5
post-thumbnail

01. Node.js란 무엇인가

이벤트 기반 자바스크립트 런타임이다. 웹 서버와 같이 확장성 있는 네트워크 프로그램 제작을 위해 고안되었다. 이벤트 기반이기 때문에 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식으로 작동한다.

Node.js는 V8 + libuv으로 이루어져 있다.

  • v8: 자바스크립트 엔진으로 자바스크립트로 작성된 코드를 C++로 바꿔주는 역할을 한다.
  • libuv: 비동기 작업을 처리하는 라이브러리이다. 운영체제 수준에서 비동기로 처리될 수 없는 작업을 위한 스레드 풀도 포함하고 있다. 이 라이브러리는 브라우저가 아닌 곳에서도 자바스크립트가 실행될 수 있도록 개발되었다.

자바스크립트의 역할
(Node.js 환경) 임의의 파일을 읽거나 쓰고, 네트워크 요청
(브라우저 환경) 웹페이지 조작, 클라이언트와 서버의 상호작용

쓰레드 기반 vs 비동기 이벤트 기반
참고

02. npm이란 무엇인가

npm(node package manager)는 자바스크립트 런타임 환경인 Node.js의 기본 패키지 관리자이다. 명령 줄 클라이언트, 그리고 공개 패키지와 지불 방식의 개인 패키지의 온라인 데이터베이스로 이루어져 있다.

  • npm install
    package.json파일의 의존성에 있는 패키지들을 로컬에 있는 node_modules 폴더에 설치된다.
  • npm install <package name>
    작성한 패키지가 node_modules 폴더에 설치된다.

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

크게 2가지 차이점이 있다.

  1. 정적 타입 언어는 컴파일 타임에 변수 타입 체크를 수행하고, 동적 타입 언어는 런타임에 변수 타입을 체크 한다.
  2. 정적 타입 언어는 변수를 사용하기 전에 데이터 타입을 선언해야 한다. 하지만, 동적 타입 언어는 아니다.
// 자바(정적 타입 언어)
boolean boolVar = true;
int numVar = 1;
char c = 'C';
// 자바스크립트(동적 타입 언어)
let boolVar = true;
let numVar = 1;
let strVar = 'string';

동적 타입 언어인 자바스크립트는 데이터 타입을 명시하지 않아도 되지만 정적 타입 언어인 자바는 데이터 타입을 명시해야 한다.

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

두 개를 구분하기 위해서는 누가 누구를 호출(컨트롤)하냐이다.

  • 라이브러리: 우리의 코드가 라이브러리를 호출한다. 우리가 필요할 때마다 라이브러리를 호출한다.

  • 프레임워크: 프레임워크가 우리의 코드를 호출한다. 프레임워크를 사용할 때는 프레임워크의 규칙을 따라야 한다.

05. 'REST API'란 무엇인가

REST API는 REST(representational state transfer)의 아키텍쳐를 따르는 API이다. 이런 이유로 REST API를 RESTful API라고 부른다.

REST 구성

  • 자원(RESOURCE) - URI
  • 행위(Verb) - HTTP METHOD
  • 표현(Representations)

REST 아키텍쳐 규칙

  1. 인터페이스 일관성(Uniform interface). 동일한 리소스에 대한 모든 API 요청은 요청의 출처에 관계없이 동일하게 표시되어야 한다. REST API는 사용자의 이름이나 이메일 주소와 같은 동일한 데이터가 하나의 URI에만 속하도록 해야 한다.

  2. 클라이언트/서버 구조(Client-server decoupling). REST API 설계에서 클라이언트와 서버는 서로 완전히 독립적이어야 한다.

    • 클라이언트가 알아야 하는 유일한 정보는 요청된 리소스의 URI이다. 다른 방식으로 서버와 상호 작용할 수 없다.
    • 서버는 HTTP를 통해 요청된 데이터에 전달하는 것 외에는 클라이언트 응용 프로그램을 수정해서는 안된다.
  3. 무상태(Statelessness). REST API는 상태를 저장하지 않는다. 즉, 각 요청에는 처리에 필요한 모든 정보가 포함되어야 한다.

  4. 캐시 처리 가능(Cacheability).

    • 가능한 경우 클라이언트 또는 서버 측에서 리소스를 캐시할 수 있어야 한다.
    • 서버 응답에는 전달된 리소스에 대해 캐싱이 허용되는지 여부에 대한 정보도 포함되어야 한다. 클라이언트 측의 성능을 개선하는 동시에 서버 측의 확장성을 높이기 위해서이다.
  5. 계층화(Layered system architecture). REST API에서 호출과 응답은 서로 다른 계층을 거친다. 일반적으로 클라이언트와 서버가 서로 직접 연결되어 있다고 생각하면 안된다. REST API는 클라이언트나 서버가 최종 애플리케이션 또는 중간 매체와 통신하는지 여부를 알 수 없도록 설계해야 한다.

  6. Code on demand (optional). REST API는 일반적으로 정적 리소스를 보내지만 어떤 경우에는 응답에 실행 코드(ex. Java 애플릿)도 포함될 수 있다.

06. FE Library / Framework

React

페이스북에서 만든 리액트는 UI를 개발하기 위한 자바스크립트 라이브러리이다. UI 기능만 제공하기 때문에 전역 상태 관리, 라우팅, 컴파일, 빌드, 테스트 등은 개발자의 몫이다.

리액트의 특징

  • 선언적이다.
  • 컴포넌트 기반.

Vue

Evan You가 만든 자바스크립트 프레임워크입니다. 컨트롤러 대신 뷰 모델을 가지는 MVVM(Model-View-ViewModel) 패턴을 기반으로 디자인되었고, 재사용이 가능한 UI들을 묶어서 사용할 수 있다.

Vue의 특징

  • MVVM 패턴을 사용한다.
  • Template과 Componenet를 사용하여 재사용이 가능한 사용자 인터페이스를 묶고 View Layer를 정리하여 사용한다.

reference

0개의 댓글