Tech Interview - Network


Tech Interview 준비 - Network


📌 HTTP

➜ 텍스트 기반의 통신 규약으로 인터넷에서 데이터를 주고받을 수 있는 프로토콜이다.
클라이언트가 어떠한 서비스 url을 통해서 요청(request)하면 서버에서는 해당 요청사항에 맞는 결과를 클라이언트에게 응답(response)하는 형태로 동작한다.

  • TCP/IP를 이용하는 프로토콜
  • 비연결성 프로토콜


📌 HTTPS

➜ HTTP에 암호화나 인증 등의 구조를 더한 것으로 HTTP Secure의 줄임말이다.

  • TCP와 직접 통신하지 않고 SSL이나 TLS 라는 프로토콜로 대체해서 사용한다.
    HTTPS를 사용하기 위해서는 CA에서 인증서를 가져와야 한다.
    저는 let’s encrypt를 이용해서 무료 인증서를 발급받았습니다. - let’s encrypt : 사용자에게 무료로 TLS 인증서를 발급해주는 비영리기관


📌 REST

➜ URI를 통해 자원을 표시하고, HTTP METHOD를 이용해서 자원을 행위를 정해주고 결과를 받는 것

  • 자원(Resource): URI
  • 행위(Verb): HTTP METHOD
  • 표현(Representations)


📌 REST API

➜ Rest 기반의 규칙들을 지켜서 설계된 API를 Rest API 혹은 Restful API이라고 한다.
➜ 리소스와 행위를 명시적이고 직관적으로 분리해서 사용하는 것

  1. URI는 정보의 자원을 표현해야한다.
    • 자원의 이름은 동사보다는 명사를 사용한다.
    • URI는 자원을 표현하는데 중점을 두어야 하기 때문에 행위에 대한 표현이 들어가면 안된다.
  2. 자원에 대한 행위는 HTTP METHOD로 표현한다. (GET, POST, PUT DELETE)
    GET /users/321 321 ID를 가진 유저 정보를 가져오기 DELETE /users/321 321 ID를 가진 유저 정보를 삭제하기 POST /users 유저를 생성하기
  3. 슬래시 (/)는 계층 관계를 나타내는데 사용한다.
    http://restapi.test.com/users/rooms http://restapi.test.com/users/board
  4. URI 마지막은 슬래시(/)를 사용하면 안된다.
    http://restapi.test.com/users/rooms/ [X] http://restapi.test.com/users/rooms [O]
  5. 하이픈 (-)은 URI의 가독성을 높이는데 사용한다.
    • 불가피하게 긴 URI를 사용하게 될 경우 하이픈을 이용하여 가독성을 높인다.
  6. 언더바(_) 혹은 밑줄은 URI에 사용하지 않는다.
    • 밑줄은 보기 어렵거나 밑줄 때문에 문자가 가려지기도 한다.
  7. URI는 경로에는 소문자가 적합하다.
  8. 파일 확장자는 URI에 포함하지 않는다.
  9. API 버전을 관리한다.
  10. 서버와 클라이언트가 같은 방식을 사용해서 요청하도록 한다.


📌 HTTP 응답 코드

  1. 2xx 성공
    • 200: 클라이언트의 요청을 정상적으로 수행함.
    • 201: 클라이언트에게 생성 작업을 요청 받았고, 생성 작업을 성공함.
    • 204: 요청은 성공 했지만 응답할 콘텐츠가 없음.
  2. 3xx 리다이렉션
    • 301: 클라이언트가 요청한 리소스에 대한 URI가 영구적으로 변경되었을 때 사용함.
    • 302: 301과 같으나 임시적으로 주소가 바뀌었을 경우 사용함.
    • 304: 이전에 방문했을 때의 요청 결과와 다르지 않을 경우 사용함. 캐시된 페이지를 그대로 사용.
    • 307: 임시 페이지로 리다이렉트.
  3. 4xx 클라이언트 오류
    • 400: 클라이언트가 올바르지 못한 요청을 보냄.
    • 401: 로그인을 하지 않아 페이지를 열 권한이 없음.
    • 403: 금지된 페이지, 로그인을 하든 안하든 접근할 수 없음. (관리자 페이지)
    • 404: 찾을 수 없는 페이지, 주소를 잘 못 입력했을 때 사용함.
    • 403 대신에 사용할 수도 있음.(해커들의 공격을 방지하고자 페이지가 없는 것처럼 위장함)
    • 408: 요청 시간이 초과됨.
    • 409: 서버가 요청을 처리하는 과정에서 충돌이 발생한 경우. (회원가입 중 중복된 아이디인 경우)
    • 410: 영구적으로 사용할 수 없는 페이지.
  4. 5xx 서버 오류
    • 501: 해당 요청을 처리하는 기능이 만들어지지 않음.
    • 502: 서버로 가능 요청이 중간에서 유실된 경우.
    • 503: 서버가 터졌거나 유지 보수 중
      (유지 보수 중일때는 유지 보수중이라는 것을 알려주는 페이지로 전송해주는 것이 좋음)
    • 504: 서버 게이트웨이에 문제가 생겨 시간 초과가 된 경우.
    • 505: HTTP 버전이 달라 요청이 처리할 수 없음.


📌 REST API 장점

  1. 쉬운 사용
    ➜ REST API 메시지를 읽는 것 만으로도 메시지가 의도하는 바를 명확하게 파악할 수 있다.
    ➜ Stateless한 특징 때문에 수행 문맥이 독립적으로 진행됨으로써 이전에 서버(호스트)에서 진행된 내용들에 대해 클라이언트가 알 필요가 없다. 즉, 해당 URI와 원하는 메소드 자체만 독립적으로 이해하면 된다.
  2. Client-Server가 분리된다.
    ➜ Stateless 한 특징에 따라, 서버는 클라이언트의 문맥을 유지할 필요가 없다. ➜ HTTP 프로토콜만 서비스 하면 되기 때문에 플랫폼과도 독립적이어서 플랫폼 상황에서 서비스를 쉽게 개발할 수 있게 해준다.
  3. 원하는 데이터 표현을 사용할 수 있다.
    ➜ 헤더 부분에 URI에 대한 처리 메소드를 명시하고, 필요한 실제 데이터는 body부분에 표현하도록 분리시켜서 페이로드 부분을 JSON, XML, YAML 등 원하는 언어로 사용할 수 있다.


📌 REST API 단점

  1. HTTP 메소드의 한계에 묶인다.
    ➜ 간단한 수준의 메소드만 지원할 수 있다.
  2. 표준이 없다.
    ➜ REST API는 API 설계 가이드일 뿐이지 표준이 아니라서 관리가 어렵다.
  3. HTTP 통신 모델에 대해서만 지원한다.


📌 TCP VS UDP

  • TCP
    • 연결형 서비스로 가상 회선 방식을 제공한다.
    • 3-way handshaking과정을 통해 연결을 설정하고 4-way handshaking을 통해 해제한다.
    • 흐름 제어 및 혼잡 제어
    • 높은 신뢰성 보장
    • UDP보다 속도가 느리다.
      ➜ 파일 전송과 같은 연속성보다 신뢰성 있는 전송이 중요할 때에 사용하는 프로토콜
  • UDP
    • 비연결형 서비스로 데이터그램 방식을 제공한다.
    • 정보를 주고받을 때 정보를 보내거나 받는다는 신호 절차를 거치지 않는다.
    • UDP헤더의 CheckSum 필드를 통해 최소한의 오류만 검출한다.
    • 신뢰성이 낮다.
    • TCP보다 속도가 빠르다.
      ➜ 실시간 서비스와 같이 속도가 빠르고 신뢰성보다는 연속성이 중요한 서비스에 사용하는 프로토콜


📌 브라우저에서 주소창에 url 입력시 어떤일이 일어나는가?

  1. 브라우저의 주소창에 url 입력
  2. 브라우저 캐시에서 DNS 레코드를 확인하여 IP주소를 찾음 (없다면 DNS resolver를 통해 IP주소를 알아냄)
  3. 브라우저가 서버와 TCP 연결을 시작함
  4. 브라우저가 웹 서버에 HTTP 요청을 보냄
  5. 서버가 요청을 처리하고 응답을 되돌려보냄
  6. 브라우저는 서버가 보낸 HTML 내용을 표시


📌 OSI 7 Layer

  • Physical layer: 전기적, 기계적 특성을 바탕으로 비트 흐름을 전송한다. 이 계층은 데이터를 전달만 할 뿐, 데이터가 무엇인지 전혀 신경쓰지 않는다. (케이블, 리피터, 허브 등)
  • DataLink layer: 안전한 정보 전달을 보장한다. 물리 계층에서 전달 받은 프레임의 오류를 찾고 필요시 재전송을 요청한다.
  • Network layer: 오류 없는 패킷을 목적지까지 안전하고 빠르게 전달하는 경로 (라우팅)를 찾는 계층이다.
  • Transport layer: 전송을 통해 통신을 활성화하는 계층이다. 패킷의 전송이 유효한지 확인하고 실패한 패킷을 재전송한다. end-to-end 통신의 신뢰성을 보장하고, 오류 검출, 흐름제어, 중복 검사를 수행한다.
  • Session layer: 그 전까진 물리적 측면의 통신이었다면 포트를 연결하여 논리적인 통신을 가능케하는 계층이다.
  • Presentation layer: 응용 프로그램을 위해 형식상 차이를 갖는 데이터를 인코딩하여 일관된 형태의 데이터를 표현하는 계층이다.
  • Application layer: 사용자와 직접 상호작용하는 계층이다. 크롬, 파이어폭스가 대표적 예시이다.


📌


📌


📌






© 2021.01. by gayeon

Powered by gayeon