HTTP와 HTTPS/RESTful API

·2023년 4월 17일
0

study

목록 보기
56/81
post-thumbnail

HTTP와 HTTPS의 차이점

HTTP (HyperText Transfer Protocol)

인터넷에서 하이퍼텍스트를 교환하기 위한 텍스트 기반의 통신 규약으로 TCP/IP 위에서 작동하는 인터넷에서 데이터를 주고받을 수 있는 프로토콜, 80번 포트를 사용하고 있다.

따라서 HTTP 서버가 80번 포트에서 요청을 기다리고 있으며, 클라이언트는 80번 포트로 요청을 보내게 된다.

HTTP, 통신 규약을 정해두었기 때문에 모든 프로그램이 이 규약에 맞춰 개발해서 서로 정보를 교환할 수 있게 되었다.

클라이언트 즉, 사용자가 브라우저를 통해서 어떠한 서비스를 url을 통하거나 다른 것을 통해서 요청(request)을 하면 서버에서는 해당 요청사항에 맞는 결과를 찾아서 사용자에게 응답(response)하는 형태로 동작한다.

HTTP는 상태를 가지고 있지 않는 Stateless 프로토콜이며 Method, Path, Version, Headers, Body 등으로 구성된다.

HTTP는 암호화가 되지 않은 평문 데이터를 전송하는 프로토콜이였기 때문에, HTTP로 비밀번호나 주민등록번호 등을 주고 받으면 제3자가 정보를 조회할 수 있었다.

이러한 문제를 해결하기 위해 HTTPS를 사용하게 되었다.

HTTPS(Hyper Text Transfer Protocol Secure)
HyperText Transfer Protocol over Secure Socket Layer, HTTP over TLS, HTTP over SSL, HTTP Secure 라고도 불림.

HTTPS는 SSL(Secure Socket Layer)을 이용한 HTTP 통신 방식

HTTPS는 HTTP와 다르게 443번 포트를 사용하며, 네트워크 상에서 중간에 제3자가 정보를 볼 수 없도록 암호화를 지원하고 있다.

HTTP는 보안에 취약하기 때문에 HTTP 통신을 하는 소켓 부분을 SSL이나 TLS (Transport Layer Security) 프로토콜로 대체

  • SSL(TLS)을 사용하면 암호화를 할 수 있고, 통신하려는 상대를 보증할 수 있습니다.
  • 최근에는 SSL대신 TLS를 많이 사용함.
  • TLS는 SSL의 업데이트 버전이며 명칭만 다르다고 볼 수 있다.
  • TLS는 최신 암호화 프로토콜로, SSL 암호화로 혼용해서 부르는 경우도 많다.
  • Client Server 통신에 앞서 Server는 CA, 공인된 기관에서 믿을 수 있는 서버인지 보증하는 인증서(SSL 보증서)를 받음.

HTTPS는 대칭키 암호화 방식과 비대칭키 암호화 방식을 모두 사용하고 있다.

  • 대칭키 암호화
    클라이언트와 서버가 동일한 키를 사용해 암호화/복호화를 진행함
    키가 노출되면 매우 위험하지만 연산 속도가 빠름
  • 비대칭키 암호화(공개키/개인키 암호화 방식)
    1개의 쌍으로 구성된 공개키와 개인키를 암호화/복호화 하는데 사용함
    키가 노출되어도 비교적 안전하지만 연산 속도가 느림

HTTPS의 암호화 방식을 하이브리드 암호 시스템이라고 하는데,
하이브리드 암호 시스템을 이용해 대칭키의 단점 (1개의 키를 공유하면서 해킹당할 수 있는 위험), 공개키의 단점 (속도가 느리고, 많은 컴퓨팅 파워가 필요) 모두를 보완함.

HTTP와 HTTPS의 차이점

  1. 암호화
    HTTP는 암호화가 추가되지 않았기 때문에 보안에 취약한 반면, HTTPS는 안전하게 데이터를 주고받을 수 있다. 하지만 HTTPS를 이용하면 암호화/복호화의 과정이 필요하기 때문에 HTTP보다 속도가 느리다. (거의 차이를 못느낌.) 또한 HTTPS는 인증서를 발급하고 유지하기 위한 추가 비용이 발생한다.
    따라서
    개인 정보와 같은 민감한 데이터를 주고 받아야 한다면 HTTPS를 이용해야 하지만, 노출이 되어도 괜찮은 단순한 정보 조회 등 만을 처리하고 있다면 HTTP를 이용하면 된다.

  2. 포트번호
    HTTP : 80번 포트
    HTTPS : 443번 포트

  3. 검색 엔진 최적화에 좋음.
    구글이 HTTPS 웹사이트에 가산점을 줘서 구글의 검색 결과 페이지에서 상위권으로 노출

  4. 가속화된 모바일 페이지 콘텐츠를 만들 수 있음.
    구글의 검색 결과 페이지에서 상위권으로 노출

RESTful API

Application Programming Interface(API)

응용프로그램 간에 데이터를 주고 받는 방법
프로그램 혹은 시스템 간의 통신하는 창구, 즉 프로그램들이 서로 상호작용하는 것을 도와주는 매개체라 할 수 있다.

REST의 정의

REpresentational State Transfer

자원을 이름(자원의 표현)으로 구분해 해당 자원의 상태(정보)를 주고 받는 모든 것을 의미.
즉, 자원(resource)의 표현(representation)에 의한 상태 전달을 뜻함.

  • 자원 : 해당 소프트웨어가 관리하는 모든 것 ( 문서, 그림, 데이터, 해당 소프트웨어 자체 등 )
  • 표현 : 그 자원을 표현하기 위한 이름 ( DB의 학생 정보가 자원이면, 'students'를 자원의 표현으로 정함 )
  • 상태 전달 : 데이터가 요청되는 시점에 자원의 상태를 전달. ( JSON 혹은 XML을 통해 데이터를 주고 받는 것이 일반적 )

REST는 기본적으로 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에,
웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일.
REST는 네트워크 상에서 Client와 Server 사이의 통신 방식 중 하나.

REST의 구성 요소

  1. 자원(Resource) - URI

모든 자원에는 고유한 ID가 존재하고, 이 자원은 Server에 존재합니다.
자원을 구별하는 ID는 '/exgroups/:exgroup_id'와 같은 HTTP URI 입니다.
Client는 URI를 이용해 자원을 지정하고 해당 자원의 상태(정보)에 대한 조작을 Server에 요청합니다.

  1. 행위(Verb) - Method

HTTP 프로토콜의 Method를 사용합니다.
HTTP 프로토콜은 GET, POST, PUT, PATCH, DELETE의 Method를 제공합니다. ( CRUD )

  1. 표현 ( Representation of Resource )

Client와 Server가 데이터를 주고받는 형태로 JSON, XML, TEXT, RSS 등이 있습니다.
JSON, XML을 통해 데이터를 주고 받는 것이 일반적입니다.

REST의 특징

  1. Server-Client 구조
  2. Stateless : HTTP 프로토콜은 Stateless Protocol 이므로 REST 역시 무상태성을 갖는다. Client의 context를 Server에 저장하지 않는다.
    Server는 각각의 요청을 완전히 별개의 것으로 인식하고 처리한다.
  3. Cacheable : Http의 특징인 캐싱 기능을 적용할 수 있다. 캐시 사용을 통해 응답 시간이 빨라진다.
  4. Layered System : Client는 REST API Server만 호출하고, REST Server는 다중 계층으로 구성될 수 있다.
  5. Uniform Interface : URI로 지정한 Resource에 대한 조작을 통일되고 한정적인 인터페이스로 수행한다.
  6. Self-descriptiveness : REST API 메세지만 보고도 이를 쉽게 이해할 수 있는 자체 표현 구조로 되어있다.
profile
개발자 꿈나무

0개의 댓글