[네트워크] Tech-Interview

JiKwang Jeong·2021년 12월 3일
0
post-custom-banner

HTTP (HyperText Transfer Protocol)

  • 개념

    • 텍스트 기반의 통신 규약으로 웹 상에서 클라이언트와 서버 간에 요청/응답으로 정보를 주고 받을 수 있는 프로토콜
  • 특징

    • 주로 HTML 문서를 주고받는 데에 쓰인다.
    • TCP와 UDP를 사용하며, 80번 포트를 사용한다.
      1. 비연결
        클라이언트가 요청을 서버에 보내고 서버가 적절한 응답을 클라이언트에 보내면 바로 연결이 끊긴다.
      2. 무상태
        연결을 끊는 순간 클라이언트와 서버의 통신은 끝나며 상태 정보를 유지하지 않는다.
  • Request Method

    • GET : 자료를 요청할 때 사용
    • POST : 자료의 생성을 요청할 때 사용
    • PUT : 자료의 수정을 요청할 때 사용
    • DELETE: 자료의 삭제를 요청할 때 사용
    • HEAD : 서버 헤더 정보를 획득
    • OPTIONS : 서버 옵션들을 확인하기 위한 요청. CORS에서 사용
  • HTTP Request의 구조

    1. Starter line
      해당 request가 어떤 action을 의미하는지 정보를 담는다. request target (url) 어떤 곳에다가 요청하는지를 담는다.

    2. Headers
      해당 request에 대한 추가 정보를 담고 있는 부분이다.
      Key:Value 값으로 되어있다.
      Request Target도 주소, Host도 주소, 두개를 합쳐서 보고 서버가 알게 된다.
      Host: 요청이 전송되는 target의 host url
      User-Agent: 요청을 보내는 클라이언트의 대한 정보
      Accept: 해당 요청일 받을 수 있는 응답 타입
      Content-Type: 해당 요청이 보내는 메시지 body의 타입
      Content-Length: 메시지 body의 길이

    3. Body
      데이터가 담겨있는 부분이다.
      POST, PUT의 경우에 요청과 관련된 내용이다.

  • HTTP Response 구조

    1. Status Line
      Response 의 상태를 간략하게 나타내주는 부분
      3부분으로 구성되어 있다.
      • HTTP 버전
      • Status code: 응답 상태를 나타내는 코드
      • Status text: 응답 상태를 간략하게 설명해주는 부분
    2. Headers
      Response의 headers와 동일하다.
      다만 response에서만 사용되는 header 값들이 있다
      예를들어, User-Agent 대신에 Server 헤더가 사용된다.
    3. Body
      Response의 Body와 일반적으로 동일하다.
      Request와 마찬가지로 모든 response가 body가 있지는 않다. 데이터를 전송할 필요가 없을경우 body가 비어있게 된다.

HTTPS

  • 웹 통신 프로토콜인 HTTP의 보안이 강화된 버전
  • HTTPS는 소켓 통신에서 일반 텍스트를 이용하는 대신에, SSL이나 TLS 프로토콜을 통해 세션 데이터를 암호화한다.
  • 따라서 데이터의 적절한 보호를 보장한다.
  • HTTPS의 기본 TCP/IP포트는 443이다.

REST란

  • REST의 정의
    • "Representational State Transger(대표적인 상태 전달)"의 약자
    • 월드 와이드 웹 (WWW)와 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 개발 아키텍처의 한 형식
      • REST는 기본적으로 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에 웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일이다.
      • REST는 네트워크 상에서 Client와 Server 사이의 통신 방식 중 하나이다.
  • REST의 구체적인 개념
    • HTTP URI를 통해 자원을 명시하고, HTTP Method(Post, Get, Put, Delete)를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미한다.
      • 즉, REST는 자원 기반의 구조 설계의 중심에 Resource가 있고 HTTP Method를 통해 Resource를 처리하도록 설계된 아키텍처를 의미한다.
      • 웹 사이트의 이미지, 텍스트, DB 내용 등의 모든 자원에 고유한 ID인 HTTP URI를 부여한다.
  • REST의 장단점
    • 장점
      • 여러가지 서비스 디자인에서 생길 수 있는 문제를 최소화 해준다.
      • Hypermedia API의 기본을 충실히 지키면서 범용성을 보장한다.
      • HTTP 프로토콜의 표준을 최대한 활용하여 여러 추가적인 장점을 함께 가져갈 수 있게 해준다.
    • 단점
      • 브라우저를 통해 테스트할 일이 많은 서비스라면 쉽게 고칠 수 있는 URL보다 Header 값이 왠지 더 어렵게 느껴진다.
      • 구형 브라우저가 아직 제대로 지원해주지 못하는 부분이 존재한다.
        • PUT, DELETE를 사용하지 못하는 점
        • pushState를 지원하지 않는 점
  • REST가 필요한 이유
    • '애플리케이션 분리 및 통합'
    • '다양한 클라이언트의 등장'
    • 즉, 최근의 서버 프로그램은 다양한 브라우저와 안드로이드폰, 아이폰과 같은 모바일 디바이스에서도 통신을 할 수 있어야 한다.
  • REST 구성 요소
    • 자원: URI
      • 모든 자원에 고유한 ID가 존재하고, 이 자원은 Server에 존재한다.
      • 자원ㅇ르 구별하는 ID는 '/groups/:group_id'와 같은 HTTP URI 다.
      • Client는 URI를 이용해서 자원을 지정하고 해당 자원의 상태(정보)에 대한 조작을 Server에 요청한다.
    • 행위: HTTP Method
      • HTTP 프로토콜의 Method를 사용한다.
      • HTTP 프로토콜은 GET, POST, PUT, DELETE, HEAD와 같은 메서드를 제공한다.
    • 표현
      • Client가 자원의 상태에 대한 조작을 요청하면 Server는 이에 적절한 응답을 보낸다.
      • REST에서 하나의 자원은 JSON, XML, TEXT, RSS 등 여러 형태의 Representation으로 나타내어 질 수 있다.
      • JSON 혹은 XML를 통해 데이터를 주고 받는 것이 일반적이다.
  • REST 특징
    • Server-Client 구조
    • Stateless (무상태)
    • Cacheable (캐시 처리 가능)
    • Layered System (계층화)
    • Code-On-Demand (optional)
    • Uniform Interface (인터페이스 일관성)
  • REST API
    • REST API의 정의
      • REST 기반으로 서비스 API를 구현한 것
    • REST API의 특징
      • 사내 시스템들도 REST 기반으로 시스템을 분산해 확장성과 재사용성을 높여 유지보수 및 운용을 편리하게 할 수 있다.
      • REST는 HTTP 표준을 기반으로 구현하므로, HTTP를 지원하는 프로그램 언어로 클라이언트, 서버를 구현할 수 있다.
      • 즉, REST API를 제작하면 델파이 클라이언트 뿐 아니라, 자바, C$, 웹 등을 이용해 클라이언트를 제작할 수 있다.
  • REST API 설계 기본 규칙
    • URI는 정보 자원을 표현해야 한다.
      • resource는 동사보다는 명사를 사용한다.
      • resource는 영어 소문자 복수형을 사용하여 표현한다.
    • 자원에 대한 행위는 HTTP Method로 표현한다.
      • URI에 HTTP Method가 들어가면 안된다.
      • URI에 행위에 대한 동사 표현이 들어가면 안된다.
  • REST API 설계 규칙
    • 슬래시 구분자(/)는 계층 관계를 나타내는데 사용한다.
    • URI 마지막 문자로 슬래시(/)를 포함하지 않는다.
    • 하이픈(-)은 URI 가독성을 높이는데 사용
    • 밑줄(_)은 URI에 사용하지 않는다.
    • URI 경로에는 소문자가 적합하다.
    • 파일확장자는 URI에 포함하지 않는다.
      • Accept header를 사용한다.
    • 리소스 간에 연관 관계가 있는 경우
      • /리소스명/리소스ID/devices
  • RESTful
    • RESTful의 개념
      • RESTful은 일반적으로 REST라는 아키텍처를 구현하는 웹 서비스를 나타내기 위해 사용되는 용어이다.
        • 즉, REST 원리를 따르는 시스템은 RESTful 용어로 지칭된다.
      • RESTful은 REST를 REST답게 쓰기 위한 방법으로, 누군가가 공식적으로 발표한 것이 아니다.
    • RESTful의 목적
      • 이해하기 쉽고 사용하기 쉬운 REST API를 만드는 것
      • RESTful API를 구현하는 근본적인 목적이 퍼포먼스 향상에 있는게 아니라, 일관적인 컨벤션을 통한 API의 이해도 및 호환성을 높이는게 주 동기이니, 퍼포먼스가 중요한 상황에서는 굳이 RESTful API를 구현할 필요가 없다.

JSON이란?

  • JSON
    • JSON은 JavaScript Object Notation의 약자이다.
    • JSON은 좀 더 쉽게 데이터를 교환하고 저장하기 위하여 만들어진 텍스트 기반의 데이터 교환 표준이다.
    • JSON은 자바스크립트를 기반으로 만들어저 자바스크립트에 대한 기초 지식이 있으면 배우기 수월하다.
    • JSON은 XML의 대안으로서 좀 더 쉽게 데이터를 교환하고 저장하기 위하여 고안되었다.
    • JSON은 텍스트 기반이므로 어떠한 프로그래밍 언어에서도 JSON 데이터를 읽고 사용할 수 있다.
  • JSON의 특징
    • JSON은 자바스크립트를 확장하여 만들어졌다.
    • JSON은 자바스크립트 객체 표기법을 따른다.
    • JSON은 사람과 기계가 모두 읽기 편하도록 고안되었다.
    • JSON은 프로그래밍 언어와 운영체제에 독립적이다.
  • JSON의 사용범위
    • XML 문서는 XML DOM을 이용하여 해당 문서에 접근한다.
    • 하지만 JSON은 문자열을 전송받은 후에 해당 문자열을 바로 파싱하므로, XML보다 더욱 빠른 처리 속도를 보여준다. 따라서 HTML과 자바스크립트가 연동되어 빠른 응답이 필요한 웹 환경에서 많이 사용되고 있다.
profile
기억보다 기록, 난리보다 정리
post-custom-banner

0개의 댓글