1. HTTP
- HTTP는 Hypter Text Transfer Protocol의 두문자어로, 인터넷에서 데이터를 주고 받을 수 있는 프로토콜이다.
프로토콜은 규칙이다.
- HTTP는 클라이언크가 요청을 생성하기 위한 연경을 연 다음, 응답을 받을때 까지 대기하는 전통적인 클라이언트-서버 모델을 따른다.
- 방금 말했던 것 같이 HTTP는 클라이언트가 브라우저를 통해 어떠한 서비스에 대해 요청(request)을 하면, 서버에서는 해당 요청에 맞는 결과를 찾아 사용자에게 응답(response)하는 형태로 동작한다.
요청 : client -> server
응답 : server -> client
요청
- 요청을 보낼때는 요청에 대한 정보를 담아 서버로 보낸다. (서버에서 클라이언트가 어떤 것을 원하는지 파악할 수 있게 하기 위함.)
* 요청의 종류 / Request Method *
- GET : 자료를 요청할때 사용
- POST : 자료의 생성을 요청할때 사용
- PUT : 자료의 수정을 요청할때 사용
- DELETE : 자료의 삭제를 요청할떄 사용
응답
- 서버가 요청에 대한 답변을 클라이언트에게 보내는 것.
* 상태 코드 / Status Code *
- 상태 코드에는 모두 숫자 세 자리로 이루어져 있으며, 아래와 같이 크게 다섯 부류로 나뉜다.
자세한 설명은 다음 링크 참조
https://surprisecomputer.tistory.com/47
[Network] HTTP 상태(응답) 코드 정리하기
1. 서론 백엔드 개발자로서 HTTP 기반 서버를 생성할 때 가장 중요한 점 중 하나는 HTTP 상태 코드를 알맞게 사용하는 것이다. HTTP 상태 코드는 매우 잘 정리된 형식으로, 이 상태 코드만 확인하더라
surprisecomputer.tistory.com
- 1XX(조건부 응답) : 요청을 받았으며 작업을 계속한다.
- 2XX(성공) : 클라이언트가 요청한 동작을 수신하여 이해했고 승낙했으며 성공적으로 처리했음을 의미
- 3XX(리다이렉션 완료) : 클라이언트는 요청을 마치기 위해 추가 동작을 취해야 한다.
- 4XX(요청 오류) : 클라이언트에 오류가 있음을 나타낸다.
- 5XX(서버 오류) : 서버가 유효한 요청을 명백하게 수행하지 못했음을 나타낸다.
2. REST
- REST는 Representational State Transfer의 약자로, 자원의 이름으로(자원의 표현) 구분하여 해당 자원의 상태(정보)를 주고 받는 모든 것을 의미한다.
- 자원 : 해당 소프트웨어가 관리하는 모든 것. ex) 문서, 그림, 데이터 등등
- 자원을 표현 : 자원을 표현하기 위한 이름을 지정. ex) DB의 학생 정보가 자원 -> 'students'를 자원의 표현으로 정한다.
- 자원의 상태(정보)를 주고받음 : 데이터가 요청되어지는 시점에서 자원의 정보를 전달하는것. Json, XML을 통해 데이터를 주고받는 것이 일반적.
즉 REST란
1. HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)를 명시하고,
2. HTTP Method(POST, GET, PUT, DELETE, PATCH 등)을 통해
3. 해당 자원(URI)에 대한 CRUD Operation을 적용하는 것을 의미한다.
CRUD Operation이란
CRUD는 대부분의 컴퓨터 S/W가 가지는 기본적인 데이터 처리 기능인 CREAT, READ, UPDATE, DELETE를 묶어서 일컫는 말이다.
Create : 데이터 생성 (Post)
Read. : 데이터 조회 (GET)
Update : 데이터 수정 (PUT, PATCH)
Delete : 데이터 삭제 (DELETE)
REST는 다음과 같은 3가지로 구성되어 있다.
1. 자원(Resource) : HTTP URI
- 모든 자원에는 고유한 ID가 존재하고, 이 자원은 Server에 존재한다.
- Client는 URI 를 이용해 자원을 지정하고 해당 자원의 상태에 대한 조작을 Server에 요청한다.
2.자원에 대한 행위 : HTTP Method
- HTTP 프로토콜의 메소드를 사용함. (GET,POST,PUT,DELETE)
3.표현 : Representation of Resource
- Client가 자원에 상태에 대한 조작을 요청아면 Server는 이에 적절한 응답을 보낸다.
- REST에서 하나의 자원은 JSON, XML, TEXT, RSS등 여러 형태의 Repressentation으로 나타내어질 수 있다.
- JSON, XML로 주고받는게 국룰
REST의 특징
1. 서버-클라이언트 구조로 되어 있다.
- 자원 가진놈이 서버, 자원달라고 떼쓰는놈이 클라이언트
2. 무상태(Stateless)
- HTTP 프로토콜은 Stateless Protocol이므로 REST역시 무상태성을 갖는다.
3. Cacheable(캐시 처리 가능)
- 웹 표준 HTTP 프로토콜을 그대로 사용하므로 웹에서 사용하는 기존의 인프라 그대로 활용 가능
- 그중 캐싱 기능을 적용할 수 있음.
- 대량의 요청을 효율적으로 처리하기 위해 캐시가 요구
- 캐시 사용을 통해 응답시간이 빨라지고, REST Server 트랜잭션이 발생하지 않기 때문에 전체 웅답시간, 성능, 서버의 자원 이용률을 향상시킬 수 있다. (https://manhyuk.github.io/transaction/)
트랜잭션에 대하여
이번에 공부하게 된 트랜잭션에 대해 정리를 해본다.
manhyuk.github.io
4. 계층화
- URI로 지정한 Resource에 대한 조작을 통일되고 한정적인 인터페이스로 수행한다.
- HTTP 표준 프로토콜을 따르는 모든 플랫폼에서 사용이 가능하다. (특정 언어나 기술에 종속되지 X)
API
- 데이터와 기능의 집합을 제공하여 컴퓨터 프로그램간 상호작용을 촉진하여, 서로 정보를 교환가능 하도록 하는것.
RSET API
- REST 기반으로 서비스 API를 구현한 것.
- REST는 HTTP 표준을 기반으로 구현하므로, HTTP를 지원하는 프로그램 언어로 클라이언트 서버를 구현할 수 있다.
RSET API 설계 예시
1. URI는 동사보다는 명사를, 대문자보다는 소문자를 사용하여야 한다.
Bad Example : http://likelion11.com/Running/
Good Example : http://likelion11.com/run/
2. 마지막에 슬래시를 포함하지 않는다.
Bad Example : http://likelion11.com/run/
Good Example : http://likelion11.com/run
3. 언더바 대신 하이폰을 사용한다.
Bad Example : http://likelion11.com/test_api
Good Example : http://likelion11.com/test-api
4. 파일 확장자는 URI에 표함하지 않는다.
Bad Example : http://likelion11.com/lena.jpg
Good Example : http://likelion11.com/lena
5. 행위를 포함하지 않는다.
Bad Example : http://likelion11.com/add-post/1
Good Example : http://likelion11.com/post/1
RESTFUL
- RESTFUL은 일반적으로 REST라는 아키텍쳐를 구현하는 웹 서비스를 표현하기 위해 사용되는 용어.
- 'REST API'를 제공하는 웹 서비스를 'RESTFUL'하다고 할 수 있다.
- 하지만 REST를 사용했다 하여 모두가 RESTFUL한 것은 아니다.
- REST API의 설계 규칙을 올바르게 지킨 시스템을 RESTFUL하다 말할 수 있다.
3. 웹 프레임 워크
프레임 워크
- 프레임 워크란 웹 개발을 보다 쉽고 간편하게 할 수 있도록 도와주는 도구.
- 프론트의 대표적인 프레임워크로는 앵귤려, 리엑트, 뷰
- 백엔드의 대표적인 프레임워크로는 Express, 라라벨, 스프링
'Back-End > Nest.js' 카테고리의 다른 글
내장 로거 (0) | 2023.02.13 |
---|---|
파이프와 유효성 검사 (0) | 2023.02.01 |
동적 모듈을 활용한 환경 변수 구성 (0) | 2023.01.25 |
멋사 2주차 JS decorator, MVC 패턴, Nest.js 찍먹 (0) | 2023.01.11 |
TypeScript (0) | 2023.01.02 |