면접준비(2-2) 네트워크 편 : RESTAPI, HTTP, CORS에러

Edwin·2023년 5월 29일
0

면접준비

목록 보기
3/6
post-thumbnail

REST API(표현상태전의)

Representational State Transfer

REST API는 웹서비스를 위한 아키텍처 스타일 가운데 하나다.

웹서비스를 이해하기 전에 아키텍처 스타일이란 말을 먼저 정의할 필요가 있어보인다. 아키텍처라는 단어가 건축에서 건물을 설계할 때 전제되는 설계와 구조를 의미한다. 이 용어는 프로그램에서는 소프트웨어 시스템의 구조와 설계를 지칭하는 원칙과 모음을 지칭할 때 사용된다.


REST API는 아키텍처 스타일 가운데 하나로, 웹 서비스를 구축하는 방법을 규정한다. 이 개념은 로이 필딩의 박사학위 논문을 통해 2000년에 처음 제안되었다. REST 이전에는 SOAP(Simple Object Access Protocol)와 같은 프로토콜이 주로 사용되었으나, 일관된 아키텍처 스타일의 부재로 인해 호환성 문제와 복잡성이 발생되었다.

그러나 REST API의 등장 이후에는 서비스 설계가 단순화되었으며, 자원과 HTTP메서드를 통한 일관된 인터페이스를 제공하여 개발자들에게 표준화된 웹 서비스 접근 방식을 제공하게 되었다. 여기서 인터페이스란 두 개체 또는 시스템 간에 상호 작용하기 위한 공통의 경계나 접정을 의미한다.

  • 자원 : 사용자, 게시물, 주문 등 서비스에서 관리하는 데이터나 기능에 해당되며, 각 자원은 고유한 식별자인 URI를 가지며, 이를 통해 자원에 접근한다.
  • HTTP : HTTP 프로토콜은 여러 종류의 메서드를 정의한다. GET, POST, PUT, DELETE, PATCH...

REST API는 자원에 대한 동작을 HTTP 메서드를 통해 일관된 방식으로 표현한다. 즉 사용자 정보를 조회하고 싶을 때는 GET 메서드와 해당 사용다의 URI를 사용하여 요청하면 된다.

REST API

클라이언트와 서버 간의 통신을 위한(웹 서비스를 위한) 아키텍처 스타일로, 클라이언트와 서버 간의 통신을 위한 규칙과 제약 조건을 제시한다. REST API는 리소스를 고유한 URI로 표현하고, HTTP 메서드를 사용하여 리소스에 대한 작업을 수행한다.

첫째, 리소스 지향적 : 각 리소스를 고유한 URI로 표현, 각 리소스에 대한 HTTP 메서드 수행
둘째, HTTP 메서드를 사용하여 리소스와 상호작용
셋째, Stateless : 클라이언트의 상태를 저장하지 않는다. 그러기에 요청시 포함해야 한다.

HTTP, HyperText Transfer Protocol, 하이퍼텍스트 전송 프로토콜

REST API는 웹 서비스를 설계하고 구축하는 방법을 정의하는 기술적 설계 구조를 의미한다면,
HTTP는 이러한 설계 구조를 뒷받침하는 통신 규약으로 사용됩니다.

HTTP는 Transmission Control Protocol (TCP, 전송 제어 프로토콜)의 일부로, 클라이언트와 서버 간의 양방향 통신을 위해 데이터를 안전하게 주고받을 수 있는 체계를 구축하는 규약 중 하나이다.TCP는 클라이언트와 서버 간의 연결을 설정하고, 데이터를 나누어 전송하며, 데이터의 손실이나 손상을 감지하고 복구하는 기능을 제공한다. 이를 통해 HTTP는 신뢰성 있는 데이터 통신을 구현할 수 있다.

Cross-Origin Resource Sharing

통신의 과정에서 허용되지 않는 출처가 접근했을 때, 웹 브라우저는 보안 정책 중 하나로 CORS 오류를 발생시킨다. 브라우저는 리소스 요청을 보내기 전에 해당 요청이 안전한지 확인하고, 서버의 응답 헤더에 기반하여 리소스에 접근할지 결정하는데, 이 과정에서 요청, 즉 출처가 올바르지 않는 접근에 대해서는 오류를 발생시킨다. CORS 오류는 주로 브라우저에서 발생하며, 서버 측에서 응답 헤더를 적절하게 설정하여 이를 해결할 수 있다. CORS 오류가 발생한다면, 이는 브라우저가 정책을 위반하는 리소스 접근을 차단했음을 의미하는 것이다. 따라서, CORS 오류는 양방향 통신이 이루어지는 지점인 브라우저에서 발생하며, 브라우저의 보안 정책을 적용하여 리소스 접근을 관리한다.

profile
신학전공자의 개발자 도전기!!

0개의 댓글