CORS, WEB, API, HTTP

임소윤·2022년 9월 1일
0

WIL

목록 보기
5/5

CORS(Cross Origin Resource Sharing)

CORS는 클라이언트 애플리케이션과 다른 origin을 가진 서버 애플리케이션이 서로 통신할 수 있도록 허용하는 프로토콜이다.

다른 origin이란 예를 들어 클라이언트 애플리케이션은 www.mysite.com 으로 올라가 있는 반면 서버 애플리케이션은 www.serverapi.com 으로 올라가 있다고 했을 때 클라이언트와 서버 애플리케이션은 다른 origin을 가졌다고 말한다.



Q1. API란 무엇인가?

API(Application Programming Interface)
API는 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 Interface를 뜻한다. 즉, 프로그램들이 서로 상호작용하는 것을 도와주는 매개체이다.

Interface란?
컴퓨터 시스템끼리 정보를 교환하는 공유 경계를 의미한다. 즉, 기계간의 장치끼리 정보를 교환하기 위한 수단이나, 방법을 뜻한다.



Q2. Client와 Sever란 무엇인가?

Client
서버의 서비스를 받아 사용하는 장치, 프로그램을 말한다.

클라이언트는 서버에서 받은 서비스를 사용하는 사용자로, 크게 장치 또는 프로그램이 될 수 있다. 클라이언트 장치는 최종 사용자가 웹에 접속하는데 사용하는 시스템으로 데스크톱, 노트북, 스마트폰, 태블릿 등을 예로 들 수 있다. 클라이언트 프로그램은 사용자가 웹을 통해 요청할 수 있게 해주는 프로그램으로 웹 브라우저를 예로 들 수 있다.

Sever
네트워크를 통해 클라이언트에게 서비스를 제공하는 시스템이다.

서버는 일반적으로 클라이언트의 요청에 대해 응답해주는 시스템으로, 간단하게 무엇을 제공해 주는 입장이라고 생각하면 된다. 우리가 컴퓨터를 할 때 일반적으로 웹 브라우저를 통해 정보를 볼 수 있는데 이것은 서버로 부터 정보를 받아 우리가 볼 수 있는 것이다.



Q3. WAS란 무엇인가? Web Server와 차이점은 무엇인가?

WAS(Web Application Server)

웹 어플리케이션 서버는 흔히 WAS, 와스, 컨테이너, 웹 컨테이너, 서블릿 컨테이너로 불리우며 DB 조회 및 다양한 로직 처리 요구시 동적인 컨텐츠를 제공하기 위해 만들어진 애플리케이션 서버로, 동적 컨텐츠를 제공하는 서버이다.

컨테이너란?
JSP, Servlet을 실행시킬 수 있는 소프트웨어. 즉, WAS는 JSP, Servlet 구동 환경을 제공해준다.

WAS는 WS와 웹 컨테이너가 결합한 형태라고 볼 수 있다. 웹 서버의 기능들을 구조적으로 분리하여 처리하는 역할을 한다.

WAS의 기능

  • 프로그램 실행 환경 및 DB 접속 기능 제공
  • 여러 트랜잭션 관리 기능
  • 업무를 처리하는 비즈니스 로직 수행

Web Server

웹 서버는 정적 컨텐츠(HTML, CSS, JS, 이미지 등)을 사용자에게 제공하는 서버이며 크게 소프트웨어와 하드웨어적 관점으로 구분 할 수 있다.

소프트웨어적 관점
웹 브라이저에서 Client(사용자)로 부터 HTTP Request를 받은 후 HTML, CSS, JS 등과 같은 정적 컨텐츠들을 제공해주는 프로그램이다.

하드웨어적 관점
위 소프트웨어적 관점에서 본 프로그램을 탑재한 컴퓨터 시스템이다.

Client의 요청에서 가장 앞에서 요청에 대한 데이터를 만들어 응답해준다.

WS의 기능
Http 프로토콜을 기반으로, 클라이언트의 요청을 서비스하는 기능을 담당한다.
요청에 맞게 두가지 기능 중 선택해서 제공해야 한다.

  • 정적 컨텐츠 제공
    • WAS를 거치지 않고 바로 자원 제공
  • 동적 컨텐츠 제공을 위한 요청 전달
    • 클라이언트 요청을 WAS에 보내고, WAS에서 처리한 결과를 클라이언트에게 전달


Q4. HTTP 프로토콜이란 무엇인가?

HTTP(Hypertext Transfer Protocol)

  • 서버와 클라이언트가 인터넷상에서 데이터를 주고 받기 위한 프로토콜
  • 애플리케이션 레벨의 프로토콜로 TCP/IP위에서 작동한다.
  • HTTP는 어떤 종류의 데이터든지 전송할 수 있도록 설계되어 있다.
  • HTTP로 보낼 수 있는 데이터는 HTML문서, 이미지, 동영상, 오디오, 텍스트 문서 등 여러종류가 있다.
  • 하이퍼텍스트 기반으로(Hypertext) 데이터를 전송하겠다(Transfer) = 링크기반으로 데이터에 접속하겠다는 의미이다.
  • 클라이언트
    서버에 요청하는 클라이언트 소프트웨어(IE, Chrome, Firefox, Safari ...)가 설치된 컴퓨터를 이용한다.
    클라이언트는 URI를 이용해서 서버에 접속하고, 데이터를 요청할 수 있다.
  • 서버
    클라이언트의 요청을 받아서, 요청을 해석하고 응답을 하는 소프트웨어가 설치된 컴퓨터(Apache, nginx, IIS, lighttpd) 등이 서버 소프트웨어다. 웹서버는 보통 표준포트인 80번 포트로 서비스한다.


Q5. Restful API는 무엇인가?

REST API

  • REST API 에서 REST는 Representational State Transfer 의 약자로 소프트웨어 프로그램 아키텍처의 한 형식 입니다.
  • 즉, 자원을 이름 (자원의 표현) 으로 구분하여 해당 자원의 상태 (정보)를 주고 받는 모든 것을 의미한다.
  • 월드 와이드 웹 (WWW) 과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 개발 아키텍처의 한 형식
  • REST는 기본적으로 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에 웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일이다.

RESTful

  • HTTP와 URI 기반으로 자원에 접근할 수 있도록 제공하는 애플리케이션 개발 인터페이스이다. 기본적으로 개발자는 HTTP 메소드와 URI 만으로 인터넷에 자료를 CRUD 할 수 있다.
  • 'REST API'를 제공하는 웹 서비스를 'RESTful' 하다고 할 수 있다.

RESTful API 개발 원칙

  • 자원을 식별할 수 있어야 한다.
    • URL (Uniform Resource Locator) 만으로 내가 어떤 자원을 제어하려고 하는지 알 수 있어야 한다. 자원을 제어하기 위해서, 자원의 위치는 물론 자원의 종류까지 알 수 있어야 한다는 의미이다.
    • Server가 제공하는 정보는 JSON 이나 XML 형태로 HTTP body에 포함되어 전송 시킨다.
  • 행위는 명시적이어야 한다.
    • REST는 아키텍쳐 혹은 방법론과 비슷하다. 따라서 이런 방식을 사용해야 한다고 강제적이지 않다. 기존의 웹 서비스 처럼, GET을 이용해서 UPDATE와 DELETE를 해도 된다.
    • 다만 REST 아키텍쳐에는 부합하지 않으므로 REST를 따른다고 할 수는 없다.
  • 자기 서술적이어야 한다.
    • 데이터에 대한 메타정보만 가지고도 어떤 종류의 데이터인지, 데이터를 위해서 어떤 어플리케이션을 실행 해야 하는지를 알 수 있어야 한다.
    • 즉, 데이터 처리를 위한 정보를 얻기 위해서, 데이터 원본을 읽어야 한다면 자기 서술적이지 못하다
  • HATEOS (Hypermedia as the Engine of Application State)
    • 클라이언트 요청에 대해 응답을 할 때, 추가적인 정보를 제공하는 링크를 포함할 수 있어야 한다.
    • REST는 독립적으로 컴포넌트들을 손쉽게 연결하기 위한 목적으로도 사용된다. 따라서 서로 다른 컴포넌트들을 유연하게 연결하기 위해선, 느슨한 연결을 만들어줄 것이 필요하다.
    • 이때 사용되는 것이 바로 링크이다. 서버는 클라이언트 응용 애플리케이션에 하이퍼 링크를 제공한다.
    • 클라이언트는 이 하이퍼 링크를 통해서 전체 네트워크와 연결되며 HATEOAS는 서버가 독립적으로 진화할 수 있도록 서버와 서버, 서버와 클라이언트를 분리 할 수 있게 한다.


<참고자료>
https://medium.com/@su_bak/cors%EB%9E%80-f7e1447e97d8
https://velog.io/@jihyelee/API%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80
https://velog.io/@hahan/%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8Client-vs-%EC%84%9C%EB%B2%84Server
https://velog.io/@gillog/Web-Server%EC%99%80-Web-Application-Server%EC%9D%98-%EC%B0%A8%EC%9D%B4
https://shlee0882.tistory.com/107
https://velog.io/@somday/RESTful-API-%EC%9D%B4%EB%9E%80

0개의 댓글