API - application programming interface
- 응용 프로그램들간의 매개체와 기능 제어 즉, 인터페이스다.
- 웹에 있어서는 그 응용 프로그램들이 클라이언트와 데이터베이스 사이다
- API 이외 인터페이스는 HUI, GUI, WUI
- HUI는 하드웨어 즉 키보드, 마우스 등..., GUI는 우리가 화면에 보여지는 폴더모양, 마우스포인터 등...,
- WUI는 웹 유저 인터페이스로서 유저와 웹브라우저간의 소통으로서 배너라던가 아이콘, 검색버튼등...
Node.js
- 비동기 이벤트 기반 크롬 브라우저의 v8 자바스크립트 엔진을 탑재한 서버사이드 오픈소스 런타인 환경이다.
- 웹개발에 있어서 클라이언트, 즉, 브라우저에서 돌아갈수 있는 것은 html,css, 자바스크립트뿐
- 거기에서 자바스크립트를 브라우저 만이 아닌 백엔드 환경에서 관리할 수 있게끔 한것이 node.js
- 또한 자바스크립트로 백엔드 환경을 관리하고 서버를 구축하기에, 자바스크립트 기반인 프론트엔드와 기술 스택 통합 가능
- 네트워크 서버 구축에 특화되어 있다. MSA 구조에 특화
- Apache(네트워크 서버 구축 서비스)에서는 만개 이상의 트래픽을 처리할 수 없지만 node는 그 이상 다 핸들링 가능
V8 javascript engine
구글에서 브라우저에서 자바스크립트가 동작하도록 만든 것
MSA - MicroServicesArchitecture
웹사이트에서의 다양한 기능들을 세분화해서 서버를 여러개 띄우는 것
NPM
node package manager에 줄임말로, 일종의 오픈소스 라이브러리다. 우리가 흔히하는 여러 내장함수들을 개발자들이 만들고 npm이 올려서 우리가 그 함수를 사용할수 있게되는것이다.
repl 명령어
node - 노드를 실행하여 바로 그 다음부터 자바스크립트 문법을 쓰고 실행이 가능
.exit - 노드를 종료
node js 파일명 - 현재 디렉토리에서 해당 js 파일 실행
npm명령어
npm install 모듈명 - 해당 모듈 설치, 예로 fetch는 npm install --save node-fetch@2
npm uninstall 모듈명 - 해당 모듈 삭제
npm uninstall --save 모듈명 - 해당 모듈 삭제하고 package.json에 반영
- pacakage.json은 spring에서 환경변수 설정해줬듯이 해당 프로젝트의 npm 모듈들을 관리,즉 프로젝트마다 모듈이 따로 설치되는것
- commonjs기반의 모듈과 es6기반의 모듈은 서로 공존하기 힘들다.따로 타입 설정안해주면 기본 타입은 es6기반이다. 별도 commonjs로 바꿀려면 type: commonjs로 해줘야한다.
- httpie 모듈은 프로젝트가 아닌 시스템 자체에 설치http -v GetorPost방식 실행할 네트워크
Node에 http모듈로 서버 생성 - express(x)
//노드에 http 패키지를 받아온다. - require는 import랑 동일
//import를 사용해도 require로 변형되서 실행됨
const http = require("http");
const { sendPosts } = require("./sendPosts");
//서버 만들기
//req, res는 함수로서 request와 response, 요청과 응답
const server = http.createServer((req, res) => {
//request에서 url과 method 정보 가져옴
const { url, method } = req;
//헤더 타입 설정 res.setHeader("Content-Type", "application/json");
//end 안에 값이 실제로 클라이언트가 받는 응답
if (url === "/") return res.end(JSON.stringify({ message: "/ endpoint" }));
if (url === "/signup" && method === "POST") return res.end(JSON.stringify({ message: "회원가입 완료!" }));
if (url === "/login" && method === "POST") return res.end(JSON.stringify({ message: "로그인 완료!" }));
if (url === "/products" && method === "GET") return sendPosts(res); //만든서버 호출 - 매개변수는 포트 번호와 실행할 함수 총 두개
res.end(JSON.stringify({ message: "this response answers to every request" })); });
server.listen(8000, () => {
console.log("server is running on PORT 8000");
}); //ctrl + c하면 서버 꺼짐
express.js
- 노드 백엔드 프레임워크
- express없이 노드만으로 서버를 만들려면 순수 자바스크립트로 노드에 패키지만을 이용해서 직접 구현해야한다.
- npm install express --save
- 위에 express없이 만든 서버를 express로 만들었을때 아래와 같이
Node에 http모듈로 서버 생성 - express(o)
const http = require("http");
const express = require("express");
// 다른 js파일을 불러올때 활용, 즉 자바로 치면 클래스를 상속받는 개념
const { sendPosts } = require("./sendPosts");
const app = express();
app.get("/", (req, res) => {
res.json({ message: "/ endpoint" });
});
app.post("/signup", handleSignUp);
app.post("/login", handleLogin);
app.get("/products", sendPosts);
const server = http.createServer(app);
server.listen(8000, () => {
console.log("server is running on PORT 8000");
});
function handleSignUp(req, res) {
res.json({ message: "회원가입 완료!" });
}
function handleLogin(req, res) {
res.json({ message: "로그인 완료!" });
}
// express객체 변수 생성 - get,post를 지정할때 바로 변수명이 붙임 - stringify과정이 필요없이 바로 핸들링됨 - 그리고 마지막에 express 객체 변수로 서버를 만듬
kill terminal 이후 new terminal로 첫 경로를 해당 프로젝트로 지정할 수 있다.
노드의 프론트엔드 프레임워크는 react, 백엔드 프레임워크는 express - 정확히는 react는 노드 기반이라기보다는 노드가 가지고 있는 npm을 활용하는 프레임워크다.
'Monthly I Learned > 2022.08' 카테고리의 다른 글
| 8/11 - CORS와 구조분해할당 (0) | 2022.08.11 |
|---|---|
| 8/10 - http (0) | 2022.08.11 |
| 8/5 - 상수, mock 데이터, fetch함수 (0) | 2022.08.08 |
| 8/4 코드 컨벤션과 preventDefault, classList 메소드 (0) | 2022.08.08 |
| 8/3 리눅스 용어 (0) | 2022.08.03 |