[CS 스터디] REST API,Web Server

한주영·2023년 4월 6일
0

CS

목록 보기
10/19

REST API

(Representiational State Transfer API)

1️⃣REST는 자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든것을의미
=> 즉 자원의 표현에 의한 상태 전달
자원 기반의 구조(ROA ,Resource Oriented Architrcture) 설계의 중심에 리소스가있고
Http method를 통해 리소르를 처리하도록 설계된 아키텍쳐

2️⃣HTTP URI를 통해 자원(리소스)를 명시하고
HTTP Method(POST,GET,PUT,DELETE,PATCH)를 통해
해당 자원에 대한 CRUD Opreation을 적용하는것
=> 데이터가 요청되는 시점에서 자원의 상태(정보)를 전달한다
=>JSON,XML을 통해 데이터를 주고받는 것이 일반적이다

✔️CRUD Opreation➡️ 대부분의 컴퓨터 소프트웨어가 가지는 기본적인 데이터 처리인
Create, Read, Update, Delete를 묶어서 일컫는 말이다

REST의 장단점

장점

•HTTP프로토콜 인프라를 그대로 사용하기때문에 별도의 인프라를 구축할 필요가없다
•HTTP프로토콜의 표준을 최대한 활용하여 여러 추가적인 장점을 함께 가져갈수있게해준다
•HTTP프로토콜에 따르는 모든 플랫폼에서 사용이가능하다
•Hypermedia API의 기본을 충실히 지키면서 범용성을 보장한다
•REST API메세지가 의도하는 바를 명확하게 나타내므로 의도하는 바를 쉽게 파악할수있다
•여러가지 서비스 디자인에서 생길수있는 문제를 최소화 한다
•서버와 클라이언트의 역할을 명확하게 분리

단점

•표준이 존재하지않는다
•사용할수있는 메서드가4가지밖에없고 형태가 제한적이다
•브라우저를 통해 테스트할일이 많은 서비스라면 쉽게 고칠수있는 URI보다 Header값이 더 어렵게느껴진다
•구형브라우저가 아직 제대로 지원해주지 못하는 부분이 존재
=>PUT,DELETE를 사용하지못하는점
=>PushState를 지원하지않는점

REST가 필요한 이유

•애플리케이션 분리 및 통합
•다양한 클라이언트이 등장
•최근의 서버 프로그램은 다양한 브라우저 안드로이드폰,아이폰과같은 모바일 디바이스에솓 통신할수있어야함.

REST의 구성요소

1.자원(Resource): URI
•모든 자원에 고유한 ID가 존재하고, 이 자원은 Server에 존재한다.
•자원을 구별하는 ID는 ‘/groups/:group_id’와 같은 HTTP URI 다.
•Client는 URI를 이용해서 자원을 지정하고 해당 자원의 상태(정보)에 대한 조작을 Server에 요청한다.

2.행위(Verb):HTTP Method
•HTTP 프로토콜의 Method를 사용한다.
•HTTP 프로토콜은 GET, POST, PUT, DELETE 와 같은 메서드를 제공한다.

3.표현(Representation of Resource)
•HTTP 프로토콜의 Method를 사용한다.
•HTTP 프로토콜은 GET, POST, PUT, DELETE 와 같은 메서드를 제공한다.

REST 특징

1.서버 클라이언트 구조
2.Stateless(무상태)=> HTTP프로토콜은 무상태프로토콜 이여서 REST역시 무상태성을가짐
3.캐시처리가능
4.계층화
5.Code-On-Demand(optional)=> 서버로부터 스크립트를 받아서 클라이언트에서 실행

REST API의 개념

API
데이터와 기능의 집합을 제공하여 컴퓨터 프로그램간 상호작용을 촉진하며 서로 정보를 교환가능하도록 하는것
REST API의 정의
REST기반으로 서비스API를 구현한것
최근 OpenAPI,마이크로서비스의 큰 애플리케이션을 여러개의 작은 애플리케이션으로 쪼개어 변경과 조합이 가능하도록 만든 아키텍쳐들을 제공하는 업체의 대부분은 RESTAPI를 사용

특징
사내 시스템들도 REST기반으로 시스템을 분산해 확장성과 재사용성을 높여 유지보수 및 운용을 편리하게 할수있다
REST는 HTTP표준을 기반으로 구현하므로 클라이언트 서버를 구현할수있다

RESTAPI 설계 기본규칙

1.URI는 정보의 자원을 표현해야한다
-리소스는 동사보다는 명사를,대문자보다는 소문자를 사용
-리소스의 도큐먼트 이름으로는 단수명수를 사용
-리소스의 컬렉션 이름으로는 복수 명사를 사용
2.자원에 대한 행위는 HTTP Method로 표현한다
-URI에 http메서드가 들어가면 안된다
-URI에 행위에 대한 동사 표현이 들어가면 안된다
-경로부분중 변하는 부분은 유일한 값으로 대체한다

Web Server vs WAS

웹서버란?

-웹서버 (소프트웨어):웹브라우저 클라이언트로부터 HTTP요청을 받아들이고, HTML문서와 같은 웹페이지에서 흔히 찾아볼수있는 자료 콘텐츠에 따라 HTTP에 반응하는 컴퓨터 프로그램
-웹서버(하드웨어): 위에 언급한 기능을 제공하는 컴퓨터 프로그램을 실행하는 컴퓨터

웹 애플리케이션 서버란?
웹서버+웹 컨테니어
-인터넷 상에서 HTTP를 사용해 컴퓨터나 장치에 애플리케이션을 수행해주는 미들웨어이다
웹 애플리케이션 서버는 동적 서버 컨텐츠를 수행하는 것으로
일반적인 웹서버와 구별외 되며, 주로 데이터베이스 서버와 같이수행히된다
웹서버+웹컨테이너로 웹상에서 사용하는 컴포넌트를 올려놓고 사용하게 되는 서버
=>웹컨테이너란 JSP와 서블릿을 실행히시킬수있는 SW를 말함

기본기능
1.프로그램 실행환경과 데이터베이스 접속기을 제공
2.여러개의 트랜잭션을 관리
3.업무를 처리하는 비즈니스로직을 수행
4.웹서비스 플랫폼으로서의역할

Web과 WAS의 비교
웹 컨테이너의 유뮤로 WEB과 WAS를 나눌수있으며
웹서버는 HTML문서같은 정적 컨텐츠를 처리하는것이고
WAS서버는 asp,php,jsp등 개발언어를 읽고 처리하여 동적컨텐츠,웹 응용프로그램 서비스를 처리하는것이다

차이점
웹서버는 정적인 데이터를 처리하는 서버이다 이미지나 단순 html파일과 같은 리소스를 제공하는
웹서버를 이용하면 WAS를 이용하는것보다 빠르고 안정적이다
WAS는 동적인 데이터를 처리하는 서버이다 DB와 연결되어 데이터를 주고받거나 프로그램으로
데이터 조작이 필요한 경우는 WAS를 활용해야한다

CORS

CORS동작원리

브라우저는 다른 Origin으로 요총을 보낼때 헤더에 자신의 Origin을 설정하고,
서버로부터 응답을 받으면 Access-Control-Allow-Origin헤더에 설정된
Origin목록의 요청에 헤더값이 포함되는지를 검사하는것
즉, CORS요청을 위해서는 서버에서 응답의 Access-Control-Allow-Origin 헤더에 허용되는 Origin의 목록 혹은 와일드카드(*)를 설정해주면됨.

단순요청

메소드가 GET,HEAD,POST중 하나야여한다

User Agent가 자동으로 설정한 헤더를 제외하면 아래와같은 헤더들만 사용할수있다
Accept
Accept-Language
Content-Language
Content-Type
DPR
Downlink (en-US)
Save-Data
Viewport-Width
Width
Content-Type 헤더에는 아래와 같은 값들만 설정할 수 있다.
application/x-www-form-urlencode
multipart/form-data
text/plain

위와같은 조건을 만족하는 단순 요청은 안전한 요청으로 취급되어
프리플라이트 요청이 필요없이 단 한번의 요청만을 전송한다

프리플라이트 요청

단순요청의 조건에 벗어나는 요청의 경우, 서버에 실제 요청을 보내기전에 예비요청에 해당하는 프리플라이트 요청을 먼저 보내서 실제 요청이 전송하기에 안전한지 확인
안전한 요청이라고 확인이 된다면 그때서야 실제 요청을 서버에게 보낸다
따라서 총 두번의 요청을 전송

프라플라이트 요청의 특징

-메소드로 OPTION을 사용
-Origin헤더에 자신의 Origin을 설정
-Access-Control-Request-Method 헤더에 실제 요청에 사용할 메소드를 설정한다.
-Access-Control-Request-Headers 헤더에 실제 요청에 사용할 헤더들을 설정한다.

서버는 이러한 프리플라이트 요청에 의해 다음과 같은 특징을 가진 응답을 제공해야함

Access-Control-Allow-Origin 헤더에 허용되는 Origin들의 목록 혹은 와일드카드()를 설정한다.
Access-Control-Allow-Methods 헤더에 허용되는 메소드들의 목록 혹은 와일드카드(
)를 설정한다.
Access-Control-Allow-Headers 헤더에 허용되는 헤더들의 목록 혹은 와일드카드(*)를 설정한다.
Access-Control-Max-Age 헤더에 해당 프리플라이트 요청이 브라우저에 캐시 될 수 있는 시간을 초 단위로 설정한다.

인증정보를 포함한 요청

인증정보란 쿠기 혹은 Authorization헤더에 설정하는 토큰값을 의미

우선, 쿠키등의 인증정보를 보내기위해서는 클아이언트 단에서 요청시 별도의 설정이 필효
AJAX요청을 위해 어떠한 도구를 사용하느냐에 따라 달라짐
만약 XMLHttpRequest,jQuery의 ajax 또는 axios를 사용한다면
withCredential옵션을 true로 설정해주고,
fetch API를 사용한다면 credentials 옵션을 include로 설정해줘야 한다

이러한 별도의 설정을 해주지않으면 쿠기등의 인증정보는 절대로 자동서버에게 전송되지않는다

profile
백엔드개발자가 되고싶은 코린이:)

0개의 댓글