# 1회차

이제부터 정리할 내용은 학원에서 배웠던 수업 내용을 정리하고 개인적인 의견을 첨부하였다. 목차는 수업 목차 순서를 그대로 인용할 예정이다.

## 프로젝트의 최종 구성

서버 : Ubuntu (AWS) 배포 : Docker 웹서버 : NGINX API 서버 : Node.js DB : MongoDB 로 구성될 예정이다.

## Node.js 란 무엇인가?

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

* node.js 출처

Node.js는 실질적으로 서버사이드 자바스크립트 실행환경과 라이브러리, 이렇게 두 가지로 이루어져 있다.

## Node.js 특징

### 이벤트 기반

대부분의 웹 서버는 사용자가 이벤트를 발생하기까지를 기다리면서 '자원'(대기시간/메모리)을 계속 소비하게 된다. 하지만 event-driven은 이벤트에만 웹서버가 연결해주기 때문에 자원을 최소화 시킬수 있으며 스레드를 하나만 이용해도 이벤트를 사용하여 빠른 일처리가 가능하다.

기존 Apache와 같은 웹서버는 웹 리소스가 요청될 때마다 요청을 처리하기 위해 매번 별도의 스레드를 생성하거나, 새 프로세스를 호출한다.

request가 많은 경우, 병목구간이 흔히 발생하는데 이를 해결하기 위해 멀티쓰레드에 스케일아웃하고 로드밸런싱을 한다.

하지만 Node와 같이 비동기로 처리하게 될 경우, 훨씬 가벼우면서도 빠른데, 요청 처리가 완료되기전에 제어권을 다음 요청으로 넘긴다.

적절한 예를 제시한 자료가 있어서 링크를 공유한다.

<http://bitnori.tistory.com/entry/Nodejs%EC%9D%98-%EB%B0%A9%EC%8B%9D-%EB%B0%8F-%ED%8A%B9%EC%A7%95>

### 비동기 방식 I/O

동기방식의 처리는 하나의 요청이 처리되는 동안 다른 요청이 처리되지 못하며 요청이 완료되어야만 다음 처리가 가능한 방식이다. 동기 방식은 IO 처리를 Blocking 하는데 지금까지는 이 문제를 Thread로 처리하였다.

비동기 방식은 하나의 요청 처리가 완료되기전에 제어권을 다음 요청으로 넘길 수 있다. 따라서 IO 처리인 경우 Blocking 되지 않으며 다음 요청을 처리할 수 있는 것이다.

### 단일 스레드

단일 스레드의 장점은 적은양의 자원으로 일을 처리할 수 있다. 다중 스레드기반의 서버는 일반적으로 클라이언트의 요청마다 스레드를 생성한다. 이말은 동시 접속자 수가 많을 수록 스레드가 많이 발생한다는 의미이며 그만큼 메모리 자원도 많이 소모한다는 것을 나타낸다. 서버의 자원은 제한되어 있으므로 일정 수 이상의 스레드는 발생시킬 수 없기 때문에 다중 스레드는 한계가 되는 부분이 있다. 그러나 단일 스레드에도 단점은 있다. 스레드 하나당 한가지 일만 수행하므로 어느 한곳에 예외상황 및 에러가 발생 한다면 어플리케이션 전체에 영향이 미치게 된다. (그러나 이러한 단점도 cluster 모듈을 사용한다면 해결이 가능하다.)

### V8 엔진

v8 엔진은 JIT(Just In Time)으로 구동되어 기존 컴파일러의 장점과 인터프리터의 장점을 섞은 형태이다. ( 컴파일러 : 한번 컴파일 하게 되면 별도 생성된 목적 파일을 통해 빠르게 실행할 수 있다. 대용량 소스에 적합 인터프리터 : 목적 파일 산출 과정이 없이 실행과 동시에 줄 단위로 번역이 된다. 저용향 소스에 적합 )

따라서 V8의 구동 방식은 이너프리터의 장점인 실행과 동시에 번역 + 목적 파일 생성인 JIT 컴파일을 내장하고 있다.

## HTML 이란 무엇인가?

HTML 이란 Hyper Text Markup Language 의 약자로써 WWW 문서를 작성하는 마크업 언어이다.

HTML은 인터넷에서 문서를 교환하기 위한 규약으로 사용되고 있다.

## 웹표준이란?

특정 브라우저에서만 잘 보이거나 하지 않고 모든 브라우저에서 잘 동작하도록 하는 표준 W3C 권고안에 맞춰 작성해야 한다. (<https://www.w3.org/>)

## 웹접근성이란?

접근성이란 “보다 많은 사람이 이용할 수 있는 보편적 접근정도”를 의미 장애인뿐만 아니라 모든 사람이 정보통신 기기나 서비스를 손쉽게 활용할 수 있게 하는 것 - 다음웹표준화개발팀

## CSS란?

HTML은 웹페이지 정보 CSS(Cascading Style Sheets)는 웹 페이지를 디자인
