HTTP 1.1(2)

nana·2023년 1월 24일
0

네트워크

목록 보기
8/12

HTTP가 영상을 스트리밍하는 방법?

하나의 파일은 해상도마다 짧은 재생 시간(초 단위)을 가지는 여러 개의 동영상 파일로 구성되어 있다.
HTTP GET 요청이 오면 서버에서 특정 시점부터 몇 초 단위의 영상들을 여러 개 response로 보내는 방식으로 동영상을 재생할 수 있도록 한다.
만약 응답 속도가 네트워크 속도 등에 의해 지연되면, 낮은 해상도의 영상들을 전송한다.(반대로 네트워크 상황이 좋을 경우에는 높은 해상도의 영상들을 전송한다)

Monolithic vs SOA vs Microservice

Monolithic

한 대의 컴퓨터 내에서 하나의 실행 프로그램 내의 함수, 클래스 등이 정보를 주고 받는 구조

SOA (Service Oriented Architecture)

서버들이 기능별로 분화된 구조. 클래스, 함수 레벨에서 통신을 통해 정보를 주고 받을 수 있도록 여러 컴퓨터에 기능 별로 나눈 구조 (서비스 지향적)

Microservice

서비스에 맞춰서 서버들을 분할하여 서버 간의 통신을 통해 정보를 주고 받는 구조
(Serverless ; 서비스 단위(함수 단위)로 돌아가기 때문에 서버가 없다고 보는 것, Cloud Native)

  • OpenStack : Virtual machine 기반. Host OS위에 가상머신을 띄워 그 위에 Guest OS를 설치하고 프로그램을 돌리는 방식. (Host OS와 Guest OS가 같은 상황 발생 => 성능 저하)
  • Docker(Container) : Container 기반
    • < Host OS가 Linux인 경우 >
      Host Linux 위에 Docker 엔진을 실행시킨 다음 그 위에서 필요한 만큼의 자원을 할당하고 프로그램을 실행하도록 하는 방식
    • < Host OS가 Linux가 아닌 경우 >
      Host OS위에 가상화를 위한 엔진인 Hypervisor(호스트 컴퓨터에서 여러 운영체제를 실행시키기 위한 플랫폼. VMM; Virtual Machine Monitor/Virtual Machine Manager)를 실행시킨 후 그 위에 Guest Linux를 올려 그 위에 Docker 엔진을 실행시키는 방식.
  • Kubernetes(Orchestrator) : Docker 위에 여러 개의 프로그램들을 실행시키기 위해 자동으로 자원을 할당하고 프로그램을 실행하도록 해 주는 웹 응용프로그램.

SOAP vs REST

  • SOAP (Simple Object Access Protocol) : HTML과 같은 방식의 태그 기반의 문서 형태(xml)로 정보를 전달하는 방식.

  • REST (Representational State Transfer) & RESTful : 컴퓨터가 잘 이해할 수 있는 형태의 데이터(JSON)를 HTTP 위에서 실어서 컴퓨터 간의 정보를 주고 받을 수 있도록 하는 방식

JSON (JavaScript Object Notation)

  • 자바스크립트 언어의 데이터 표현 방식
  • 웹 브라우저는 자바스크립트 번역기를 내장하고 있기 때문에 웹 서비스에 유리하다.
  • 확장자 .json을 사용하며, 별도의 파일로 저장하여 파일의 형태로 보낼 수 있다. (문자열로도 전송 가능)
  • 무상태(전후 관계가 없음을 의미. 이전의 요청과 현재의 요청은 관계가 없으며 독립적), 실시간 서버 대 브라우저 통신 프로토콜(HTTP 기반의 서버)로 많이 활용된다.
  • 기본적인 프로그래밍 언어의 데이터 형태를 지원한다.
    • 정수, 실수 (고정/부동 소수점), 문자열
    • 배열 : [a, b, c]
    • 객체 : {“member1” : “value1”, “member2” : “value2”}
  • 순수한 ‘데이터 포맷’으로 메서드를 표현할 수 없다.
  • 문자열과 프로퍼티의 이름 작성시 큰 따옴표만을 사용해야 한다.

REST & RESTful

REST 구조에 대한 제한 조건

  • 인터페이스 일관성 : 일관적인 인터페이스로 분리되어야 한다. 미리 정의한 인터페이스(api) 호출 방식을 지켜야 한다.
  • 무상태(Stateless) : 각 요청 간 클라이언트의 Context는 서버에 저장하지 않는다. 이전의 요청과 현재의 요청은 무관하다.
  • 캐시 처리 가능(Cacheable) : 클라이언트는 응답을 캐싱할 수 있어야 한다.
  • 계층화 (Layered System) : 클라이언트는 보통 대상 서버에 직접 연결되었는지, 또는 중간 서버를 통해 연결되었는지를 알 수 없다. 중간 서버는 로드 밸런싱 기능이나 공유 캐시 기능을 제공함으로써 시스템 규모 확장성을 향상시키는 데 유용하다. 클라이언트 입장에서 서버가 여러 개 존재하더라도 REST가 잘 동작할 수 있어야 한다.
  • Code on demand (optional) : 자바 애플릿(웹 브라우저 환경에서 실행되는 특정한 작업을 수행하는 작은 프로그램)이나 자바스크립트의 제공을 통해 서버가 클라이언트가 실행시킬 수 있는 로직을 전송하여 기능을 확장 시킬 수 있다. 서버가 응답을 처리하는 코드를 클라이언트에게 제공하는 것을 의미한다.
  • 클라이언트/서버 구조 : 아키텍처를 단순화시키고 작은 단위로 분리 (decouple)함으로써 클라이언트-서버의 각 파트가 독립적으로 개선될 수 있도록 한다. 클라이언트는 서버의 자세한 사항을 신경쓰지 않고 제공되는 인터페이스를 통해 접근하여 응답을 받고 자신의 Context를 관리한다. 서버는 클라이언트의 상태를 신경쓰지 않고 제공한 인터페이스에 대한 처리만 담당하여 요청이 들어올 때 그에 맞는 응답을 제공한다.

REST와 RESTful

  • REST는 HTTP Request/Response 메시지를 통한 Client/Server 간 정보 송수신을 의미한다.

RESTful한 api

  • 예를 들어 http://localhost/ 서버를 개발한다면
    • http://localhost/my_api : 서버가 my_api 기능(함수)을 호출한다 (my_api는 파일의 경로 개념이 아님)
    • http://localhost/my_api/{문자열} : 서버는 {문자열}을 입력 파라미터로 받고, GET/POST/PUT/DELETE에 상응하는 기능을 수행하고 결과를 클라이언트에게 전달한다.
  • GET : Read로 간주하며, {문자열}을 key 값으로 하여 클라이언트가 요구하는 데이터를 찾아 해당 데이터(value)를 리턴한다.
  • PUT : Create로 간주하며, {문자열}을 key 값으로 하여 HTTP Request의 Body에 해당하는 값을 value로 하는 record를 생성한다.(저장한다)
  • 통상 CRUD(Create, Read, Update, Delete)를 따른다.
profile
언젠가 개발자

0개의 댓글

관련 채용 정보