01. 준비하기
- Express.js의 이해
- 일반적인 웹 서버와 Node.js로 만든 웹 서버는 다르지 않다. 기능이 다른 웹 서버는 존재할 수 있지만 기반이 되는 개념자체가 다른 웹서버는 존재하지 않다.
- Express.js란?
==> Node.js로 서버를 빠르고 간편하게 만들 수 있게 도와주는 웹 프레임워크
==> 다양한 웹 프레임워크가 존재하지만 오늘날 가장 많은 Node.js 웹서버가 Express.js 프레임워크를 통해 개발. - 웹 서버와 Express.js의 차이
==> 웹서버와 Express.js는 동일하지 않다
==> Node.js를 위한 웹 프레임워크로 웹서버를 구현하기 위해 사용 되는 것이 Express.js 프레임워크
- API Client 학습
- API Client란? ==> 개발단계에서 작성한 API의 요청을 확인하거나 테스팅 할 때 도움을 주는 툴, API Client를 사용함으로 개발 속도를 높이거나 치명적인 에러를 예방하는데 도움이 된다.
- Postman, Insomnia, Thunder Client 등이 있다.
- POST, PATCH, PUT, DELETE, HEAD 등의 다양한 Method에 대한 API를 개발하고 테스트하기 위해서는 반드시 필요한 도구
- VS Code - 확장 - Thunder Client 설치
- Thunder Client 활용
- Collections:
==>특별한 프로젝트마다 API 목록을 정리해서 사용 가능
==> 여러가지의 API를 그룹화 시킬 수 있다. - Env
==> 여러번 사용되는 값들을 환경변수(Environment)로 설정할 때 사용
==> Token, URL, 개인 키 등 다양한 자격증명을 저장 및 사용할 수 있다.
- Collections:
02. 시작하기
- Routing 이해 및 Router 학습
- Routing이란? ==> 클라이언트의 요청 조건(메소드, 주소 등)에 대응해 응답하는 방식
- Router란? ==> 클라이언트의 요청을 쉽게 처리 할 수 있게 도와주는 Express.js 기본 기능중 하나
router.METHOD(PATH, HANDLER);
- ==> 일반적인 Router 구조
- router: expree의 라우터를 정의
- METHOD: HTTP Method(GET, POST, PUT, DELETE...)
- PATH: 실제 서버에서 API를 사용하기 윈한 경로
- HANDLER: 라우트가 일치할 떄 실행되는 함수
- 미들웨어(Middleware)란?
==> 웹 서버에서 요청을 받을 때 모든 요청에 대해 공통적인 처리를 하고싶은 경우가 생길 수 있다. 이때 미들웨어를 이용하여 웹 서버의 요청/응답에 대해 공통적으로 관리가 가능하다.
- Module의 이해
- Module이란? ==>JS 파일 단위로 분리된 코드/ JS파일이란? ==> 특정한 기능을 가진 여러 개의 함수와 변수들의 집합
- 하나의 모듈에서 다른 모듈을 호출하여 사용할 수 있다.
- 모듈은 그 자체로도 하나의 프로그램이면서 다른 프로그램의 부품으로도 사용할 수 있다.
- 1개의 파일이 1개의 모듈이 된다.
- 모듈이 필요한 이유
- 코드 베이스 분리를 통해 코드를 구조적으로 관리할 수 있다.
- 코드를 재사용 가능하게 만들어준다. 즉, 모듈화(modularize)된다.
- 모듈의 인터페이스(Interface) 이외에는 모든 정보를 은닉하는 정보은닉(information hidinh)을 구현 할 수 있다.
- 종속성을 관리할 수 있다.
- CommonJS
==> 브라우저 이외의 환경에서 모듈을 사용할 수 있도록 고안된 명세.
==> 설정을 따로 추가하지 않은 이상, Node.js에서는 CommonJS를 기본으로 사용.
==> CommonJS는 전역 스코프에 정의 되어있는 require 함수로 대표된다.
==> require함수는 경로 혹은 문자열을 가지고 내부 알고리즘을 통해 모듈을 가져오고 종속성을 처리한다. - ECMA Script Module(ESM)
==> 모든 JS 환경에서 통합적인 인터페이스를 제공하기 위해 시작된 체계
==> CommonJS와는 다르게 정적으로 모듈을 가져오며 비동기적 모듈 로딩과 순환 종속을 처리한다.
- Module이란? ==>JS 파일 단위로 분리된 코드/ JS파일이란? ==> 특정한 기능을 가진 여러 개의 함수와 변수들의 집합
- Module 사용방법
- export 명령어를 변수나 함수 앞에 붙이면 외부 모듈에서 해당 변수나 함수에 접근할 수 있다.
- import,reauire 명령어를 사용하면 외부 모듈의 기능을 가져올 수 있다.
==> require은 CommonJS로 모듈 시스템을 관리
==> import는 ES6로 모듈 시스템을 관리
- Module 사용하기
1. modules 폴더를 생성(math.js, run.js)
2. 2가지의 인자를 입력 받았을 때 값을 더해주는 함수를 생성
// modules/math.js
function add(a, b) {
return a + b;
// 작성한 함수를 다른 모듈로 내보내주기 위한 코드
module.exports = add;
3. run.js에서 불러들인 add함수를 사용하도록 작성
// modules/run.js
const add = require("./math");
console.log(add(3, 4)); // Print: 7
- Module을 export하는 다양한 방법
1. 화살표 함수 exports
/** 화살표 함수 exports **/
// 모듈을 호출했을 때, add 키 값에는 add 변수 함수가 가지고 있는 값이 할당된다.
const add = (a, b) => {
return a + b;
}
exports.add = add;
2. 익명 함수 exports
/** 익명 함수 exports **/
// 모듈을 호출했을 때, add 키 값에는 (a,b){return a + b;} 익명 함수가 할당되는 방법
exports.add = function (a, b) {
return a + b;
}
3. module.exports = Object
/** module.exports = Object **/
// 모듈을 호출했을 때, add 키 값에는 add 함수가 들어가는 방법이다.
function add(a, b) {
return a + b;
}
module.exports = { add: add };
4. module.exports = Function
/** module.exports = Function **/
// 모듈 그 자체를 add 함수로 할당
function add(a, b) {
return a + b;
}
module.exports = add;
- Request와 Response
- Request란? ==> 클라이언트가 서버에게 전달하려는 정보나 메시지를 담는 객체
- Response란? ==> 서버에서 클라이언트로 응답 메시지를 전송시켜주는 객체
- 서버 모듈
- Node.js의 서버 모듈에는 대표적으로 HTTP 모듈과 Express모듈이 존재
- Express모듈은 HTTP 모듈을 확장하여 제공
- Express 모듈은 HTTP 모듈의 메서드도 사용, Express가 추가 제공하는 메소드나 속성들도 사용 가능
- 현재는 Express의 메서드가 더욱 편리하기에 기존 HTTP 모듈의 메서드는 잘 사용되고 있지 않다.
- Express 모듈의 req, res 객체
- req 객체
1. req.app : req 객체를 통해 app 객체에 접근
2. req.ip : 요청한 Client의 ip 주소가 담겨 있다.
3. req.body : Request를 호출할 때 body로 전달된 정보가 담긴 객체
==> express.json() Middleware를 이용하여야 해당 객체를 사용할 수 있다.
==> Key-Value의 데이터 형식을 가지고 있으며, 대표적으로 JSON형태를 띄고 있다.
==> URL만을 가지므로 어떤 데이터를 전달하였는지 확인할 수 없다.
==> 데이터를 생성하거나 수정이 필요한 데이터의 전달을 위해 사용(ex/ 사용자의 ID, 사용자의 Password, 게시글 제목 등)
==> POST, PUT과 같은 HTTP Method에서 사용
4. req.params : 라우터 매개 변수에 대한 정보가 담긴 객체
==> URL에 원하는 데이터를 삽입하여 전달
==> URL 특정 결로를 매개 변수로써 사용
==> 특정 게시글을 선택하거나 명확한 리소스를 지정해야할 때 사용한다.
5. req.query : Request를 호출할 때 쿼리 스트링으로 전달된 정보가 담긴 객체
==> URL에 원하는 Key-Value를 삽입하여 데이터를 전달
==> URL의 마지막에 ?기호를 이용해 Query String을 사용할 수 있다.
==> 특정 콘텐츠의 위치를 표시하거나 웹 페이지에 특정한 옵션을 설정할 때 사용
==> GET과 같은 HTTP Method에서 사용된다.
6. req.cookies : Request를 호출할 때 Cookie 정보가 담긴 객체
==>cooki-parser Middleware를 이용하여야 해당 객체를 사용할 수 있다.
7. req.get(Header) : 헤더에 저장된 값을 가져오고 싶을 때 사용 - res 객체
1. res.app : res 객체를 통해 app 객체에 접근
2. res.status(코드) : Response에 HTTP 상태 코드를 지정
3. res.send(데이터) : 데이터를 포함하여 Response를 전달
4. res.json(JSON) : JSON 형식으로 Response를 전달
5. res.end() : 데이터 없이 Response를 전달
6. res.direct(주소) : 리다이렉트할 주소와 함께 Response를 전달
7. res.cookie(Key, Value, Option) : 쿠키를 설정할 때 사용
8. res.clearCookie(Key, Value, Option) : 쿠키를 제거할 때 사용
- req 객체
- API와 REST API의 개념
- API(Application Programming Interface)란? ==> 애플리케이션끼리 연결해주는 매개체이자 약속
- API를 작성한다?
==> 웹 애플리케이션(프론트엔드)에서 원하는 기능을 수행하는 URL과 인터페이스를 제공한다는 의미
==> 작성 할 API에서 원하는 데이터를 받아 데이터베이스에 데이터를 저장하고, 저장되어 있는 데이터를 읽어서 웹 애플리케이션(프론트 엔드)에 데이터를 제공하는 행위를 통해 사용자가 원하는 목적을 이룰 수 있게 한다. - REST API란?
==> REST(Representational State Transfer) - 월드 와이드 웹과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처의 한 형식이다.
==> URL, Headers, Method 등 네트워크 표현 수단을 사람이 봐도 이해하기 쉬운 표현으로 정의
==> REST 아키텍처는 사람이 봐도 쉽게 이해할 수 있도록 자원을 정의하고 자원을 중심으로 표현을 구성하는 원칙을 제공
- ==> REST API 구조
- REST API 구성
1. 자원(Resource) - URL
==> 우리가 만들 소프트웨어가 관리하는 모든 것을 자원이라 할 수 있다.
2. 행위 - HTTP Method
==> GET, POST 등으로 해당 자원에 대한 행위를 표현할 수 있다.
==> CRUD 자원에 대한 생성/조회/수정/삭제를 각각의 method로 나누어 놓은 것
==> 대체로 CRUD가 일반적이고 상황에 따라 달라지기도 한다.
3. 표현
==> 해당 자원을 어떻게 표현할지에 대한 설명, 보통 JSON,XML같은 형식을 이용해서 자원을 표현
==> HTTP에서는 Content-Type이라는 헤더를 통해 표현 방법을 서술 - REST API 예시
- REST API 구성
router.get('/books', (req, res) => {
res.json({ success: true, data: getAllBooks() });
});
- ==> /books라는 URL을 통해 전체 책 목록을 불러와 응답해 주는 역할을 하는 API
- REST API의 관점: URL로 리소스를 구분, 다른 표현 X, 따라서 전체 리스트를 불러오는 것을 짐작할 수 있음, 또한 CRUD중 Read를 담당하는 HTTP 메소드로 표현하여 REST한 API라고 볼 수 있다.
'JavaScript Dev. > Node.js' 카테고리의 다른 글
Git 이용하기 (0) | 2023.04.24 |
---|---|
MongoDB, mongoose (0) | 2023.04.24 |
Package Manager 란? (0) | 2023.04.22 |
HTTP / Web Server (0) | 2023.04.22 |
JavaScript 란? (0) | 2023.04.22 |