클라이언트 : 서버를 통해 접속할 수 있는 응용프로그램이나 서비스
서버 : 클라이언트에게 네트워크를 통해 정보나 서비스를 제공하는 시스템
IP
는 클라이언트와 서버가 접속되는 인터넷 전송의 근거
문제점
:
1. 서비스 불능 상태여도 그냥 데이터 전송한다.
2. 전송 도중 패킷이 사라져도 모른다.
3. 패킷에 대한 순서가 보장되어 있지 않는다.
4. 관리가 힘들다.
5. IP를 갈취(스누핑 / 스푸핑 / 스니핑) 당해 개인정보 유출 가능성이 있다.
6. IP는 하나로 여러개 프로그램 실행 시킬 때 데이터 처리에 문제가 발생한다.
해결책
: IP 안에 TCP를 내장한다.
TCP 특징 : 쓰리엔드 쉐이크
1. 접속요청(클라이언트 -> 서버)
2. 접속 역요청 + 접속 수락 (서버 -> 클라이언트)
3. 접속 재요청(클라이언트 -> 서버) / 데이터 전송하기도 한다.
4. 데이터 전송
장점
: 데이터 보장되고, 패킷 순서가 보장되며 다중 작업이 가능하다.
DNS : Domain Name Service - IP를 도메인 이름으로 변환하여 기억하기 쉽다.
구성 : IP 변환 + 포트(https: 443) + http 요청 메세지(주소 + http Method) 생성
socket 라이브러리를 통해 TCP/IP 연결 및 데이터를 전달하고 랜카드를 통해 인터넷 타고 서버에 도착한다.
특징
:
1. 안전 - 여러번 호출해도 리소스 변경안됨
2. 멱등성 - 한번 호출이던 여러번 호출이던 결과가 달라지지 않는 특성
3. 캐시가능 - 값 저장 가능
GET / POST / PATCH / PUT / DELETE
1. GET - 데이터 조회시 사용하고 링크가 남는다.
2. POST - 요청 데이터의 처리로 활용하고, 게시글 작성, 회원가입 등에 사용된다.
3. PATCH / PUT - 데이터를 수정할 때 사용한다. PATCH(부분수정) , PUT(덮어쓰기)
4. DELETE - 데이터 삭제
HTTP 내장 모듈 활용해서 노드로 서버를 만들 수 있다. 하지만, 서버 특화 프레임워크인 express를 주로 사용한다.
LocalHost
: 127.0.0.1 - 노드를 통해 내 컴퓨터를 테스트용 서버 컴퓨터로 만들어 내가 접속할 수 있다.
서버
: 원격 컴퓨터로 서비스를 하는 컴퓨터를 뜻합니다.
NPM
: Node Package Manager으로 라이브러리를 CLI로 가져온다. 내 프로그램을 깔기 위해서 필요한 다른 프로그램인 Dependency(의존성)
을 자동으로 관리해줍니다.
npm init -y
를 통해 테스트용도로 자동 생성해준다. package.json
이 생성된다. 이 파일에서 dependency를 관리한다.
서버 특화 프레임워크 : Node.js는 만능키이고 좀 더 세부적인 동작을 하기위한 프레임워크
Express를 통해 API를 제작한다.
API
: 내가 지시하면 실행하는 프로그램 - 리모콘
프레임워크
: 개발을 좀더 용이하게 하는 규칙이 있는 틀
npm i express
를 통해 설치한다. i는 install의 준말이다. 설치를 하게되면 package.json
에 기입된다.
코드를 수정하면 서버를 껐다가 켜는 것이 기본인데, 코드를 수정하면 서버를 자동을 재시작
하게 해주는 LIB
npm i nodemon -g
: g는 global의 약자로 다른 프로젝트에서도 실행되도록 전역으로 설치한다.
server.js
// express 모듈 가져오기
const express = require("express");
// 가져온 모듈 app에 지정
const app = express();
app.use(express.json());
// post 통신과 관련
app.use(express.urlencoded({ extend: true }));
// ---- 상부는 express를 사용하기 위한 default 문
app.get("/", (req, res) => {
// hello : hello라는 객체 만들어주고 보내주기
return res.json({ hello: "hello" });
});
// 8080이라는 곳으로 들어가야한다는 걸 명시
app.listen(8080, () => console.log("this app listening on 8080 Port"));
nodemon server.js
를 통해 서버를 킬 수 있습니다.