HTTP와 HTTPS의 차이점은 무엇인가요?
RESTful API에 대해 설명해보세요.

 

 

1. HTTP와 HTTPS의 차이점은 무엇인가요?

 

HTTP와 HTTPS - 전송 프로토콜 비교 - AWS (amazon.com)

[Web] HTTP와 HTTPS의 개념 및 차이점 - MangKyu's Diary (tistory.com)

 

  HTTP(Hypertext Transfer Protocol)는 클라이언트와 서버 간 통신을 위한 통신 규칙 세트 또는 프로토콜이다.

웹 사이트를 방문하면 사용자 브라우저가 웹 서버에 HTTP 요청을 전송하고 웹 서버는 HTTP 응답으로 응답한다.

웹 서버와 사용자 브라우저는 데이터를 일반 텍스트로 교환한다.

 

간단히 말해 HTTP 프로토콜은 네트워크 통신을 작동하게 하는 기본 기술이다.

 

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

 

이름에서 알 수 있듯이 HTTPS(Hypertext Transfer Protocol Secure)는 HTTP의 확장 버전 또는 더 안전한 버전이다.

HTTPS에서는 브라우저와 서버가 데이터를 전송하기 전에 안전하고 암호화된 연결을 설정한다.

 

 

HTTP 프로토콜 작동법은?


  HTTP는 OSI(Open Systems Interconnection) 네트워크 통신 모델의 애플리케이션 계층 프로토콜이다. 

HTTP는 여러 유형의 요청과 응답을 정의한다. 

예를 들어, 웹 사이트의 일부 데이터를 보려는 경우 HTTP GET 요청을 전송한다. 

연락처 양식 작성과 같은 일부 정보를 전송하려는 경우 HTTP PUT 요청을 전송한다.

마찬가지로, 서버는 숫자 코드 및 데이터 양식으로 다양한 유형의 HTTP 응답을 전송합니다. 다음은 몇 가지 예다.

200 - OK(정상)
400 - Bad request(잘못된 요청)
404 - Resource not found(리소스를 찾을 수 없음)
이러한 요청 및 응답 통신은 일반적으로 사용자에게 보이지 않는다. 

브라우저와 웹 서버가 사용하는 통신 방식이므로 World Wide Web은 모든 사용자에게 일관되게 작동한다.

 

 

HTTPS 프로토콜 작동법은?

 


  HTTP는 암호화되지 않은 데이터를 전송한다.

즉, 브라우저에서 전송된 정보를 제3자가 가로채고 읽을 수 있다.

이는 이상적인 프로세스가 아니었기 때문에, 통신에 또 다른 보안 계층을 추가하기 위해 HTTPS로 확장되었다.

HTTPS는 HTTP 요청 및 응답을 SSL 및 TLS 기술에 결합한다.

  HTTPS 웹 사이트는 독립된 인증 기관(CA)에서 SSL/TLS 인증서를 획득해야 한다. 

이러한 웹 사이트는 신뢰를 구축하기 위해 데이터를 교환하기 전에 브라우저와 인증서를 공유한다.

 SSL 인증서는 암호화 정보도 포함하므로 서버와 웹 브라우저는 암호화된 데이터나 스크램블된 데이터를 교환할 수 있다.

프로세스는 다음과 같이 작동한다.

사용자 브라우저의 주소 표시줄에 https:// URL 형식을 입력하여 HTTPS 웹 사이트를 방문한다.
브라우저는 서버의 SSL 인증서를 요청하여 사이트의 신뢰성을 검증하려고 시도한다.
서버는 퍼블릭 키가 포함된 SSL 인증서를 회신으로 전송한다.
웹 사이트의 SSL 인증서는 서버 아이덴티티를 증명한다.

브라우저에서 인증되면, 브라우저가 퍼블릭 키를 사용하여 비밀 세션 키가 포함된 메시지를 암호화하고 전송한다.
웹 서버는 프라이빗 키를 사용하여 메시지를 해독하고 세션 키를 검색한다.

그런 다음, 세션 키를 암호화하고 브라우저에 승인 메시지를 전송한다.
이제 브라우저와 웹 서버 모두 동일한 세션 키를 사용하여 메시지를 안전하게 교환하도록 전환한다.

 

 

2.RESTful API에 대해 설명해보세요.

 

 

RESTful API란 무엇인가요? - RESTful API 설명 - AWS (amazon.com)

REST API 제대로 알고 사용하기 : NHN Cloud Meetup

 

  RESTful API는 두 컴퓨터 시스템이 인터넷을 통해 정보를 안전하게 교환하기 위해 사용하는 인터페이스입니다.

대부분의 비즈니스 애플리케이션은 다양한 태스크를 수행하기 위해 다른 내부 애플리케이션 및 서드 파티 애플리케이션과 통신해야 합니다.

예를 들어 월간 급여 명세서를 생성하려면 인보이스 발행을 자동화하고 내부의 근무 시간 기록 애플리케이션과 통신하기 위해 내부 계정 시스템이 데이터를 고객의 뱅킹 시스템과 공유해야 한다.

RESTful API는 안전하고 신뢰할 수 있으며 효율적인 소프트웨어 통신 표준을 따르므로 이러한 정보 교환을 지원합니다.

 

Representational State Transfer(REST)는 API 작동 방식에 대한 조건을 부과하는 소프트웨어 아키텍처입니다.'

REST는 처음에 인터넷과 같은 복잡한 네트워크에서 통신을 관리하기 위한 지침으로 만들어졌습니다.

REST 기반 아키텍처를 사용하여 대규모의 고성능 통신을 안정적으로 지원할 수 있습니다.

쉽게 구현하고 수정할 수 있어 모든 API 시스템을 파악하고 여러 플랫폼에서 사용할 수 있습니다.

 

API 개발자는 여러 아키텍처를 사용하여 API를 설계할 수 있다.

REST 아키텍처 스타일을 따르는 API를 REST API라고 합니다.

REST 아키텍처를 구현하는 웹 서비스를 RESTful 웹 서비스라고 한다.

 

 REST 구성
쉽게 말해 REST API는 다음의 구성으로 이루어져 있다. 

자원(RESOURCE) - URI
행위(Verb) - HTTP METHOD
표현(Representations)


 REST 의 특징


1) Uniform (유니폼 인터페이스)


Uniform Interface는 URI로 지정한 리소스에 대한 조작을 통일되고 한정적인 인터페이스로 수행하는 아키텍처 스타일을'

말한다.

2) Stateless (무상태성)


REST는 무상태성 성격을 갖는다. 다시 말해 작업을 위한 상태정보를 따로 저장하고 관리하지 않는다. 

세션 정보나 쿠키정보를 별도로 저장하고 관리하지 않기 때문에 API 서버는 들어오는 요청만을 단순히 처리하면 된다.

때문에 서비스의 자유도가 높아지고 서버에서 불필요한 정보를 관리하지 않음으로써 구현이 단순해진다.

3) Cacheable (캐시 가능)


REST의 가장 큰 특징 중 하나는 HTTP라는 기존 웹표준을 그대로 사용하기 때문에, 웹에서 사용하는 기존 인프라를 그대로 활용이 가능합니다. 따라서 HTTP가 가진 캐싱 기능이 적용 가능합니다. HTTP 프로토콜 표준에서 사용하는 Last-Modified태그나 E-Tag를 이용하면 캐싱 구현이 가능합니다.

4) Self-descriptiveness (자체 표현 구조)


REST의 또 다른 큰 특징 중 하나는 REST API 메시지만 보고도 이를 쉽게 이해 할 수 있는 자체 표현 구조로 되어 있다는 것입니다.

5) Client - Server 구조


REST 서버는 API 제공, 클라이언트는 사용자 인증이나 컨텍스트(세션, 로그인 정보)등을 직접 관리하는 구조로 각각의 역할이 확실히 구분되기 때문에 클라이언트와 서버에서 개발해야 할 내용이 명확해지고 서로간 의존성이 줄어들게 된다.

6) 계층형 구조


REST 서버는 다중 계층으로 구성될 수 있으며 보안, 로드 밸런싱, 암호화 계층을 추가해 구조상의 유연성을 둘 수 있고 PROXY, 게이트웨이 같은 네트워크 기반의 중간매체를 사용할 수 있게 한다.

 

 REST API 디자인 가이드

 

REST API 설계 시 가장 중요한 항목은 다음의 2가지로 요약할 수 있다.

첫 번째, URI는 정보의 자원을 표현해야 한다.
두 번째, 자원에 대한 행위는 HTTP Method(GET, POST, PUT, DELETE)로 표현한다.

이 두가지는 핵심이라 잊으면 안된다

 

 

REST API 중심 규칙


1) URI는 정보의 자원을 표현해야 한다. (리소스명은 동사보다는 명사를 사용)
    GET /members/delete/1
위와 같은 방식은 REST를 제대로 적용하지 않은 URI다. URI는 자원을 표현하는데 중점을 두어야 한다.

delete와 같은 행위에 대한 표현이 들어가서는 안된다.

2) 자원에 대한 행위는 HTTP Method(GET, POST, PUT, DELETE 등)로 표현
위의 잘못 된 URI를 HTTP Method를 통해 수정해 보면

    DELETE /members/1  으로 수정할 수 있겠다.
회원정보를 가져올 때는 GET, 회원 추가 시의 행위를 표현하고자 할 때는 POST METHOD를 사용하여 표현한다.

회원정보를 가져오는 URI

    GET /members/show/1     (x)
    GET /members/1          (o)
회원을 추가할 때

    GET /members/insert/2 (x)  - GET 메서드는 리소스 생성에 맞지 않다.
    POST /members/2       (o)


[참고]HTTP METHOD의 알맞은 역할
POST, GET, PUT, DELETE 이 4가지의 Method를 가지고 CRUD를 할 수 있다.

 

다음과 같은 식으로 URI는 자원을 표현하는 데에 집중하고 행위에 대한 정의는 HTTP METHOD를 통해 하는 것이

REST한 API를 설계하는 중심 규칙이다.

 

 

URI 설계 시 주의할 점

 


1) 슬래시 구분자(/)는 계층 관계를 나타내는 데 사용


    http://restapi.example.com/houses/apartments
    http://restapi.example.com/animals/mammals/whales

 

2) URI 마지막 문자로 슬래시(/)를 포함하지 않는다.


URI에 포함되는 모든 글자는 리소스의 유일한 식별자로 사용되어야 하며 URI가 다르다는 것은 리소스가

다르다는 것이고, 역으로 리소스가 다르면 URI도 달라져야 한다.

REST API는 분명한 URI를 만들어 통신을 해야 하기 때문에 혼동을 주지 않도록 URI 경로의 마지막에는

슬래시(/)를 사용하지 않는다.

    http://restapi.example.com/houses/apartments/ (X)
    http://restapi.example.com/houses/apartments (0)

 

3) 하이픈(-)은 URI 가독성을 높이는데 사용


URI를 쉽게 읽고 해석하기 위해, 불가피하게 긴 URI경로를 사용하게 된다면 하이픈을 사용해 가독성을 높일 수 있습니다.

4) 밑줄(_)은 URI에 사용하지 않는다.


글꼴에 따라 다르긴 하지만 밑줄은 보기 어렵거나 밑줄 때문에 문자가 가려지기도 한다.

이런 문제를 피하기 위해 밑줄 대신 하이픈(-)을 사용하는 것이 좋다.(가독성)

5) URI 경로에는 소문자가 적합하다.


URI 경로에 대문자 사용은 피하도록 해야 한다. 대소문자에 따라 다른 리소스로 인식하게 되기 때문이다.

RFC 3986(URI 문법 형식)은 URI 스키마와 호스트를 제외하고는 대소문자를 구별하도록 규정하기 때문.


6) 파일 확장자는 URI에 포함시키지 않는다.


    http://restapi.example.com/members/soccer/345/photo.jpg (X)


REST API에서는 메시지 바디 내용의 포맷을 나타내기 위한 파일 확장자를 URI 안에 포함시키지 않는다. 

Accept header를 사용하도록 합시다.

    GET / members/soccer/345/photo HTTP/1.1 Host: restapi.example.com Accept: image/jpg

 


4-3. 리소스 간의 관계를 표현하는 방법


REST 리소스 간에는 연관 관계가 있을 수 있고, 이런 경우 다음과 같은 표현방법으로 사용한다.

    /리소스명/리소스 ID/관계가 있는 다른 리소스명

    ex)    GET : /users/{userid}/devices (일반적으로 소유 ‘has’의 관계를 표현할 때)


만약에 관계명이 복잡하다면 이를 서브 리소스에 명시적으로 표현하는 방법이 있다.

예를 들어 사용자가 ‘좋아하는’ 디바이스 목록을 표현해야 할 경우 다음과 같은 형태로 사용될 수 있다.

    GET : /users/{userid}/likes/devices (관계명이 애매하거나 구체적 표현이 필요할 때)

 


4-4. 자원을 표현하는 Colllection과 Document

 

Collection과 Document에 대해 알면 URI 설계가 한 층 더 쉬워진다.

DOCUMENT는 단순히 문서로 이해해도 되고, 한 객체라고 이해하셔도 될 것 같다.

컬렉션은 문서들의 집합, 객체들의 집합이라고 생각하시면 이해하시는데 좀더 편하실 것 같다.

컬렉션과 도큐먼트는 모두 리소스라고 표현할 수 있으며 URI에 표현된다.

    http:// restapi.example.com/sports/soccer


위 URI를 보면 sports라는 컬렉션과 soccer라는 도큐먼트로 표현되고 있다고 생각하면 된다. 좀 더 예를 들어보자면

    http:// restapi.example.com/sports/soccer/players/13


sports, players 컬렉션과 soccer, 13(13번인 선수)를 의미하는 도큐먼트로 URI가 이루어지게 된다.

여기서 중요한 점은 컬렉션은 복수로 사용하고 있다는 점이다.

좀 더 직관적인 REST API를 위해서는 컬렉션과 도큐먼트를 사용할 때 단수 복수도 지켜준다면

좀 더 이해하기 쉬운 URI를 설계할 수 있다.

 

'이력서 스터디' 카테고리의 다른 글

4/14(금) 데일리 과제  (0) 2023.04.14
4/13(목) 데일리 과제  (0) 2023.04.13

+ Recent posts