네트워크 Interview 대비

HTTP, HTTPS, SSL, Handshake, REST, DNS, TCP, UDP, OSI7, TCP/IP

Posted by iheese on July 03, 2023 · 12 mins read

HTTP 프로토콜이란 무엇인가요?

  • HTTP(Hyper Text Transfer Protocol)이란 데이터를 주고 받기 위한 프로토콜이며 서버,클라이언트 모델을 따릅니다.
  • 주요한 특징 :
    • 비연결성(Connectionless) : 클라이언트가 요청하고 서버가 해당 요청에서 적합한 응답하고 바로 끊는 성질
    • 무상태(Stateless) : 비연결적인 특성으로 연결 해제되면서 서버와 클라이언트는 요청한 결과에 대해서 잊어버린다. 같은 답을 원해도 다시 서버에 연결해서 요청 시도해야한다.
  • 장점
    • 연결 상태 처리, 상태 정보를 관리할 필요가 없어 서버 디자인이 간단하다.
    • 각각의 HTTP 요청에 독립적으로 응답한다.
  • 단점
    • 이전 통신의 정보를 모르기 때문에 매번 인증이 필요하고 이를 해결하기 위해 세션과 쿠키를 이용한다.


HTTP1 vS HTTP2 차이는 어떻게 되나요?

  • HTTP1은 기본적으로 연결당 하나의 요청과 응답을 처리하기 때문에 동시 전송 문제와 다수의 리소스를 처리하기에 속도와 성능 이슈를 가지고 있습니다.
    • HOL(Head Of Line) Blocking - 특정 응답 지연
    • RTT(Round Trip Time) 증가
    • 헤비한 Header 구조
  • HTTP2는 성능 뿐만 아니라 속도면에서 월등합니다.
    • Multiplexed Streams : 한 커넥션에 여러 개의 메세지를 동시에 주고 받을 수 있습니다.
    • Stream Prioritization : 요청 리소스 간의 의존 관계를 설정
    • Server Push : HTML 문서 상에 필요한 리소스를 클라이언트 요청없이 보내줄 수 있습니다.
    • Header Compression : Header 정보를 HPACK 압축 방식을 이용해 압축 전송합니다.
  • HTTP1.1 vs 2


HTTP와 HTTPS의 차이점에 대해서 설명해보세요.

  • HTTP는 평문 데이터를 전송하는 프로토콜이므로 중간에 정보를 가로챌 수 있습니다. 이를 보완하기 위해 나온 것이 HTTPS입니다.
  • HTTPS는 SSL(Secure Socket Layer, 인터넷을 통해 전달되는 정보를 보호하기 위해 개발한 통신 규약)으로 암호화한 HTTP를 의미합니다.
    • TCP를 기반으로 만들어진 패킷이 HTTP이다.


HTTPS에 대해서 설명하고 SSL Handshake에 대해서 설명해보세요.

  • HTTP에 SSL 보안 계층을 추가한 것을 의미한다. HTTPS는 인증, 공개키 암호화, 비밀키 암호화를 사용한다.
  • 공개키로 암호화되면 개인키로 복호화 가능, 개인키로 암호화되면 공개키로 복호화 가능하다.
  • 대칭키(비밀키) 하나의 키로 암호화, 복호화 모두 처리한다.
  • SSL Handshake 단계
    • 클라이언트는 TCP 3way handshake를 수행하고 Client Hello를 전송한다, 암호화 알고리즘 목록 전달 -> 서버
    • 클라이언트 <- Server Hello, 암호화 알고리즘 선택, 인증서 전달
      • 인증서에는 서버가 발행한 공개키가 들어 있고, CA(Certificate Authority, 인증기관)의 개인키로 암호화되어 있다.
      • 클라이언트는 CA의 공개키로 인증서 검증을 한다.
    • 검증 후 클라이언트 대칭키(비밀키) 생성하고 SSL 인증서 내부에 있던 공개키로 암호화하여 대칭키를 전달 -> 서버
    • 이 후 대칭키를 통해 암호화하여 통신한다.


GET과 POST의 차이점에 대해서 설명해보세요.

  • GET 요청은 서버에 존재하는 정보를 요청합니다. 일반적으로 Body에 값을 입력하지 않고 헤더에 입력하는 것이 일반적이며, URL에 데이터가 노출되므로 보안이 중요한 데이터는 GET으로 요청하면 안된다.
    • 캐싱 가능, 멱등성 보장
  • POST 요청은 서버에 정보를 생성하는 것을 요청합니다. 일반적으로 Body에 데이터를 추가하여 전송합니다. URL에 데이터가 노출되지 않아 비교적 안전합니다.
    • 캐싱 불가능, 멱등성 보장X


HTTP 메서드와 이것이 하는 역할에 대해서 설명해보세요.

  • GET : 데이터 조회
  • POST : 데이터 등록
  • PUT : 데이터 변경, 존재하지 않으면 생성
  • PATCH : 일부 데이터만 변경
  • DELETE : 데이터 삭제


세션과 쿠키란 무엇인가요?

  • 쿠키 : 클라이언트에 저장되는 작은 기록 정보 파일이다. HTTP에서 클라이언트의 상태 정보를 저장했다가 필요시 참조하거나 재사용할 수 있다.
    • text로 저장, 쿠키 저장시 만료 안되면 삭제 안됨, 세션보다 빠름, 보안에 취약
  • 세션 : 일정 시간 동안 같은 사용자로부터 들어오는 일련의 요구를 하나로 보고, 그 상태를 유지시키는 것이다.
    • Object로 저장, 브라우저 종료시 삭제, 쿠키보다 느림, 보안에 비교적 좋음


String user = httpSession.getAttribute("user"); 여기서 session의 값을 가져오는 key는 “user”입니다. 사용자 A가 접속해도 “user”로 값을 가져오고, 사용자 B가 접속해도 “user”로 가져오는데 어떻게 A와 B가 접속했을때 서로 다른 결과값을 받을수 있나요?

  • 세션은 쿠키를 이용하기 때문에 다른 결과값을 받을 수 있습니다. 웹 브라우저가 서버에 요청을 하면 서버는 세션을 생성하면서 세션아이디를 응답할 때 전달합니다. 웹 브라우저는 이 세션 아이디를 쿠키에 저장해두고 매 요청마다 세션 아이디와 함께 요청합니다. 서버는 세션 아이디를 바탕으로 사용자를 식별하고 사용자의 데이터를 서버에 저장하여 관리합니다.


RESTful이란 무엇이며, 이것에 대해서 아는대로 설명해보세요.

  • HTTP URI를 통해 자원을 표시하고, HTTP Method를 통해 자원에 대한 처리를 표현하며, 자원의 상태(정보) 전달한다.(JSON or XML)
  • REST(Representational State Transfer) 아키텍처 스타일을 모두 고수하는 것은 매우 어려운 일이다. (무상태, 계층화 시스템, 캐시 가능성, 온디맨드 코드), 분산 환경에 적합하지 않다, 표준이 존재하지 않는다.


세션은 Stateless을 위반하는가?

  • 세션은 서버에 저장이 되므로 stateful 하게 된다.
  • RESTful 제약 조건과 http의 장점인 Stateless 은 클라이언트에 의해서만 저장되어야 함을 나타낸다. 그러므로 위반한다 할 수 있다.
    • 즉 클라이언트의 컨텍스트를 서버에 저장하지 않는다.
    • 서버에 상태를 저장해야하기 때문에 해당 서버를 늘리고 싶을 때(Scale out) 늘리기 전의 서버에만 존재하므로 문제가 생길 수 있다.
  • stateless 를 포기하고 세션을 사용함으로서 얻는 이점은 분명하다.
    • 쿠키도 클라이언트 쪽에 저장되어 있고 역시 헤더에 해당 값을 보내면 상태가 유지되므로 stateless 하다고 할 수 없다.
  • 이 단점들을 해결한 것이 JWT 토큰이다.
    • 서버에 별도의 세션 저장소가 없어도 되고, Stateless하고 signature를 통한 보안성을 가지고 있다.


웹 통신의 큰 흐름: https://www.google.com/ 을 접속할 때 일어나는 일

  • 사용자가 브라우저에 URL 입력
  • DNS 서버에서 도메인 네임으로 서버의 진짜 주소 찾음
    • DNS(Domain Name System) : 도메인 이름을 실제 네트워크 상에서 사용하는 IP 주소로 바꿔주는 시스템, 계층 구조를 가지는 분산 데이터베이스 구조를 가진다.
  • IP 주소로 웹서버에서 TCP 3 handshake로 연결 수립
  • 클라이언트는 웹 서버로 HTTP 요청 메시지를 보냄
  • 웹 서버는 HTTP 응답 메세지를 보냄
  • 도착한 HTTP 응답 메세지는 웹 페이지 데이터로 변환되고 웹 브라우저에 의해 출력


TCP와 UDP의 차이점에 대해서 설명해보세요.

  • TCP(Transmission Control Protocol), 가상 회선을 이용하는 연결형 서비스로 3 way handshaking 과정을 통해 연결을 설정합니다. 높은 신뢰성을 보장하지만 속도가 비교적 느리다는 단점이 있다.
    • 순서 보장, 1:1 통신, 수신 여부 확인, 신뢰성 높음, 속도 느림
    • 흐름 제어, 혼잡 제어, 오류 제어
      • 파일 교환, 문자 등
  • UDP(User Datagram Protocol), 데이터그램 방식을 사용하는 비연결형 서비스로 스트리밍, RTP(Real-time Transport Protocol)와 같이 실시간 연속성이 더 중요한 서비스에 사용된다. 비교적 속도가 빠르다.
    • 순서 보장X, 1:1 or 1:N or N:N 통신, 수신 여부 확인X, 신뢰성 낮음, 속도 빠름


TCP 3, 4 way handshake에 대해서 설명해보세요.

  • TCP 3 way handshake는 가상회선을 수립하는 단계입니다. 클라이언트는 서버에 요청을 전송할 수 있는지, 서버는 클라이언트에게 응답을 전송할 수 있는지 확인하는 과정입니다.
  • SYN (Synchronization): 동기화, 연결 요청 플래그
  • ACK (Acknowledgement): 응답
    • 접속 요청 : 클라이언트 SYN -> 서버
    • 요청 수락 : 클라이언트 <- SYN + ACK 서버
    • 연결 : 클라이언트 ACK -> 서버
  • TCP 4 way handshake는 TCP연결을 해제하는 단계입니다. 클라이언트는 서버에게 연결해제를 통지하고 서버가 이를 확인하고 클라이언트에게 이를 받았음을 전송하고 최종적으로 연결이 해제됩니다.
  • FIN (finish): 연결 종료 요청
    • 연결 종료 요청 : 클라이언트 FIN플래그 -> 서버
    • 요청 확인 : 클라이언트 <- ACK 서버
    • 연결 종료 : 클라이언트 <- FIN플래그 서버
    • 연결 종료 확인 : 클라이언트 ACK -> 서버


OSI7계층과 그 존재 이유, TCP/IP 4계층에 대해 설명해보세요.

  • OSI7 계층은 네트워크 통신을 구성하는 요소들을 7개의 계층으로 표준화한 것입니다. 통신이 일어나는 과정을 단계별로 파악할 수 있다는 장점이 있습니다.

OSI7 계층

  • 7 Application Layer : 사용자에게 통신하기 위한 서비스 제공, 인터페이스 역할 (ex : HTTP, FTP, SMTP, POP3, IMAP, Telnet)
  • 6 Presentation Layer : 데이터의 표현방식을 결정하는 계층 (문자 코드, 압축, 암호화, 데이터 변환 담당)
  • 5 Session Layer : 주 지점 간의 프로세스 및 통신하는 호스트 간의 연결 유지, TCP/IP 세션 체결, 포트번호 기반으로 통신 세션 구성 (ex : API, Socket)
  • 4 Transport Layer : 최종 수신 프로세스로 데이터의 전송을 담당, 데이터 손실 확인, 포트로 식별을 담당, 패킷생성, TCP,UDP 헤더 붙음 (단위 : Segment, ex : TCP, UDP)
  • 3 Network Layer : 다른 네트워크와 통신을 위한 경로 설정, 논리 주소 결정(IP), IP 헤더 붙음 (단위 : Packet, ex : Router)
  • 2 DataLink Layer : 물리계층을 통해 데이터 송수신하고 정보의 오류와 흐름을 관리, 물리 주소 결정 (단위 : Frame, ex: 이더넷, 브리지, 스위치)
    • 물리적인 주소로 MAC을 사용
  • 1 Physical Layer : 물리적 연결, 데이터를 전기 신호로 바꿔 주고 받는 기능을 하는 계층 (단위 : bit, 장비 : 케이블, 리피터, 허브)

  • 아A 파P 서S 탈T 났N 다D 픽PHY
  • 7 -> 1 캡슐화(하나씩 쌓임), 1 -> 7 역캡슐화


TCP/IP 4계층

  • 우리가 실제로 사용하는 네트워크는 TCP/IP입니다.

  • 4 Application Layer : 세션, 프레젠테이션, 어플리케이션 계층에 해당한다.(5, 6, 7) (프로토콜 : HTTP, FTP, Telnet, DNS, SMTP)
    • 프로그램(브라우저)이 직접 상호작용하는 레이어, 어플리케이션이 데이터를 교환하기 위해 사용하는 프로토콜을 정의
  • 3 Transport Layer : 전송 계층(4), 네트워크 양단의 송수신 호스트 사이에서 신뢰성 있는 전송 기능을 제공한다. (프로토콜 : TCP, UDP)
    • IP와 Port를 통해 프로세스와 통신, 어플리케이션 계층과 데이터그램 통신서비스 제공, 통신 노드 간의 연결 제어, 신뢰성 있는 데이터 전송 담당
  • 2 Internet Layer : 네트워크 계층(3), 상위 트랜스포트 계층으로부터 받은 데이터에 IP패킷 헤더를 붙여 IP 패킷을 만들어 전송하는 역할을 한다.(프로토콜 : IPv4, IPv6)
    • 네트워크 상 최종 목적지까지 정확하게 연결되도록 연결성을 제공
  • 1 Network Layer : 물리, 데이터링크(1, 2) 계층에 해당한다. 하드웨어적인 요소, (프로토콜 : Ehternet(이더넷), Token Ring, PPP)
    • TCP/IP 패킷을 네트워크 매체로 전달하는 것과 네트워크 매체에서 TCP/IP 패킷을 받아들이는 과정을 담당
    • 물리적인 주소로 MAC을 사용


CORS란 무엇이며 이것에 대해서 설명해보세요.

  • Cross Origin Resource Sharing, 교차 출처 리소스 공유를 뜻합니다.
  • 대게 프론트엔드 개발시 로컬에서 API 서버에 요청을 보낼 때 흔하게 발생합니다.
  • 서로 다른 도메인 간에 자원을 공유하는 것을 뜻한다. 대부분 브라우저에서 이를 차단하며, 서버 측에서 헤더를 통해서 사용 가능한 자원을 알려줍니다.
  • Preflight request는 실제 요청을 보내도 안전한지 판단하기 위해 사전에 보내는 요청입니다. OPTIONS 메소드로 요청하며 COSR를 허용하는지 확인합니다. CORS가 허용된 웹서버라면 사용 가능한 리소스를 헤더에 담아 응답합니다.


추가 학습할 것


Reference: