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
- setTimeout(first, 1000) : 1초 뒤에 first() 함수 → console.log(’First’); 가 실행되도록 명령합니다.
- console.log('Middle'); : ‘Middle’ 문자열이 출력됩니다.
- console.log('Last'); : ‘Last’ 문자열이 출력됩니다.
- 1초가 지난 뒤 ‘First’ 문자열이 출력됩니다.
- Blocking Model이였다면 1초를 기다린 후 first()함수를 출력한 뒤 Middle, last 순서로 출력
02.
- 객체리터럴(Obj)
-Javascript는 객체(Object) 기반의 프로그래밍 언어이고, Javascript를 구성하는 거의 모든 것은 객체로 구성.
-객체(Object) 는 0개 이상의 프로퍼티로 구성된 집합이며, 하나의 프로퍼티는 Key와 Value로 구성
-리터럴(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를 이용하여 웹상에서의 클라이언트의 요청을 응답해주는 통신을 하는 컴퓨터 또는 프로그램!
✍ 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...)
**미들웨어 동작 방식
'개발 > 차근차근 개발일지 TIL' 카테고리의 다른 글
TIL 230419_Node.js 입문3 (0) | 2023.04.19 |
---|---|
WIL & TIL 230414_Node.js 입문2 (0) | 2023.04.18 |
WIL 230410_Node.js : JavaScript의 ES란?, ES5/ES6 문법 차이 (0) | 2023.04.10 |
TIL 230407 날짜에 따른 요일 반환 진짜 중요한 개념정리★★ (0) | 2023.04.07 |
230406 TIL 문법 종합반 1주차 테스트 (0) | 2023.04.06 |