외부활동/CS 면접 끝장내기 - 컴퓨터 네트워크 4기

컴퓨터 네트워크 2주차 스터디 정리

dohyeon2 2024. 1. 16. 14:16

지난주 면접 스터디에서 받았던 피드백은 다음과 같습니다.

 

좋았던 점

  • 답변할 때 발성이 안정적이어서 듣기 편했다.
    : 저는 항상 답변에 앞서 생각을 정리하고 답변하는 연습을 해오고 있습니다. 왜냐하면 학회에서 제 발표 녹화본을 본적이 있는데 답변 와중에 생각을 하면 말이 끊기고 버벅이는 느낌을 받았기 때문입니다. 이번 면접 스터디에서도 최대한 생각을 정리하고 답변하고자 하였을 때 이와같은 피드백을 받을 수 있었던 것 같습니다. 앞으로도 조금 시간이 걸리더라도 답변에 앞서 생각을 정리한 뒤 "두괄식"으로 답변하는 연습을 계속할 예정입니다.

부족했던 점

  • 답변 과정에서 L2, L3, L7 스위치의 개념에 대해서 잘 답변하지 못했습니다. 머리로는 이해했지만 버벅인 것으로 보아 완벽하게 이해하지 못했던 것으로 판단됩니다. 다시 한번 L2,L3,L7 스위치의 개념에 대해서 정리해보았습니다.

    연결된 모든 포트로 데이터를 전달하는 허브와 달리 스위치는 MAC 주소, IP 주소, 세션 프로토콜 등의 주소정보를 이용하여 특정 포트로 데이터를 1:1 교환합니다. 이러한 1:1 전송 과정을 스위칭이라고 합니다. 
    L2 스위치란 데이터링크 계층에서 동작하는 기기로서, MAC 주소를 기반으로 데이터를 교환하는 스위치를 말합니다.
    L3 스위치란 네트워크 계층에서 동작하는 기기로서, IP 주소를 기반으로 데이터를 교환하는 스위치를 말합니다.
    L7 스위치란 응용 계층에서 동작하는 기기로서, L4 스위치와 마찬가지로 서버들의 로드밸런싱을 위해 사용됩니다. L4 스위치와 달리 L7 스위치는 OSI 7 Layer의 3~7 계층에 속하는 IP정보, TCP/UDP 포트정보, 패킷내용까지 전부 보고 스위칭을 진행합니다.

 

⭐️ HTTP 프로토콜에 대해서 설명해주세요.

더보기

HTTP는 웹에서 텍스트와 같은 리소스를 전송하기 위해 개발된 프로토콜로서, 웹서버와 웹브라우저가 데이터를 주고받는 용도로 주로 사용되는 프로토콜입니다. 

 

HTTP의 요청/응답 모델에 대해 설명해주세요.

더보기

HTTP 요청 메세지는 클라이언트(예: 웹브라우저)가 웹서버에 데이터를 요청할 때 사용합니다. 요청은 다음과 같이 구성됩니다. 

  • 리퀘스트 라인: 서버에 어떤 동작을 요청할지 나타내는 메서드(GET, POST, PUT, DELETE 등)와 리소스 식별자를 나타내는 요청 URI(Request Uniform Resource Identifier)와 HTTP 버전을 나타내는 HTTP 버전으로 구성됩니다. 
  • 헤더(Headers): 요청을 제어하는데 필요한 메타 정보를 포함합니다.
  • 본문(Body): 이미지 파일, 동영상 파일 등 실제로 보내고자하는 애플리케이션 데이터의 본문을 저장합니다.

클라이언트는 임의의 HTTP 버전에서 URI로 식별된 웹서버상의 리소스에 대해 메서드를 사용해 처리를 요청합니다.

 

HTTP 응답 메세지는 웹서버가 클라이언트에게 요청에 대한 결과를 전달할 때 사용됩니다. 응답은 다음과 같이 구성됩니다.

  • Status 라인: HTTP 버전, 스테이터스 코드, 리즌 프레이즈로 구성되어 있습니다. 이때, 스테이터스 코드와 리즌 프레이즈는 묶여서 반환됩니다. 예를들어 웹브라우저로 웹사이트에 엑세스 했지만 리소스가 존재하지 않는 경우, 404 Not Found 와 같은 메세지가 반환됩니다.
  • 헤더(Headers): 응답을 제어하는데 필요한 메타 정보를 포함합니다.
  • 본문(Body): 이미지 파일, 동영상 파일 등 실제로 보내고자하는 애플리케이션 데이터의 본문을 저장합니다.

Reference

  • 미야타 히로시, "그림으로 공부하는 TCP/IP 구조", p295-298

 

HTTP 메서드중 GET과 POST의 차이점에 대해 설명해주세요.

더보기

GET 메서드는 클라이언트가 서버로부터 데이터를 다운로드 하기 위해 사용하는 메서드이고,

POST 메서드는 클라이언트에서 서버로 데이터를 전송하기 위해 사용하는 메서드입니다.  

 

Reference

  • 미야타 히로시, "그림으로 공부하는 TCP/IP 구조", p296

 

HTTP 메서드중 PUT과 PATCH의 차이점에 대해 설명해주세요.

더보기

PUT은 모든 리소스를 업데이트하고, PATCH는 리소스의 일부분만 업데이트 한다는 점이 다릅니다. 

예를들어 클라이언트가 PUT 메서드로 리소스의 일부분만 재정의하여 요청을 보내면 정의하지 않은 부분은 null 값으로 채워집니다. 그러나 PATCH 메서드로 리소스의 일부분만 재정의하여 요청을 보내면 재정의하지 않은 부분은 그대로 유지됩니다. 

 

Reference

 

HTTP 상태 코드가 뭔가요? 알고 있는 상태 코드 몇가지 설명해주세요.

더보기

HTTP 상태 코드란 웹서버가 웹브라우저의 요청에 대한 처리결과 상태를 숫자로 나타낸 것을 말합니다. 

예를들어, 404 Not found(리소스가 존재하지 않습니다), 200 OK(정상적으로 처리를 종료하였습니다) 등이 있습니다.

 

Reference

  • 미야타 히로시, "그림으로 공부하는 TCP/IP 구조", p299

 

HTTP 헤더가 뭘까요? 알고 있는 헤더 몇 가지 설명해주세요.

더보기

HTTP 헤더란 메세지 송수신을 제어하는데 필요한  KEY-VALUE 쌍 형태의 메타데이터를 말합니다.

  • 요청 헤더: 리퀘스트 메세지를 제어하기 위한 헤더
  • 응답 헤더: 리스폰스 메세지를 제어하기 위한 헤더
  • 일반 헤더: 리퀘스트 메세지, 리스폰스 메세지 모두에서 범용으로 사용되는 헤더
  • 엔티티 헤더: 리퀘스트 메세지와 리스폰스 메세지에 포함되는 메세지 바디에 관한 제어 정보를 포함하는 헤더
  • 기타 헤더: 위에 설명한 헤더로 분류되지 않지만 자주 사용되는 헤더

Reference

  • 미야타 히로시, "그림으로 공부하는 TCP/IP 구조", p299-312

 

⭐️ HTTP의 무상태성(Stateless)에 대해서 설명해주세요.

더보기

HTTP의 무상태성이란 서버가 클라이언트의 상태를 저장하지 않는 특징을 말합니다. 클라이언트가 이전에 요청했던 내용을 서버에 저장했다가 다음 요청이 왔을 때 이어서 응답하는 방식이 아닌, 클라이언트가 매 요청마다 모든 내용을 포함하여 요청하기 때문에 아무 서버에 요청을 보내더라도 처리가 가능합니다. 때문에 서버의 수평적 확장이 용이하다는 장점이 있습니다.

 

예상질문 1. 모든 경우에 서비스를 무상태성으로 설계할 수 있나요? 

: 아닙니다. 로그인이 필요없는 단순한 경우 서비스를 무상태로 설계할 수 있지만, 사용자의 상태를 꼭 저장해야하는 로그인이 필요한 경우 서비스를 상태유지로 설계해야 합니다.

 

HTTP Keep-Alive에 대해서 설명해주세요.

더보기

HTTP 킵얼라이브는 HTTP/1.1에서 새로 도입된 기능으로, 한번 만들어진 TCP 커넥션을 재사용 하는 기능을 말합니다.

 

HTTP 파이프라이닝에 대해서 설명해주세요.

더보기

HTTP 파이프라이닝은 HTTP/1.1에서 새로 도입된 기능으로, 요청에 대한 응답을 기다리지 않고 다음 요청을 송신하는 기능을 말합니다. 그러나 HTTP/1.1은 같은 TCP 커넥션 안에서 요청과 응답을 병렬처리 할 수 없었기 때문에 HoL 블로킹 문제가 발생하였습니다. 

 

HTTP/1.1, HTTP/2, HTTP/3 각각의 특징에 대해 설명해주세요.

더보기

HTTP/1.1은 HTTP/1.0 버전에 킵얼라이브 기능과 파이프라이닝 등 TCP 레벨에서 퍼포먼스 향상을 목표로 하는 기능이 추가된 HTTP 버전을 말합니다. 

킵얼라이브와 파이프라인

: 킵얼라이브는 한번 만들어진 TCP 커넥션을 재사용 하는 기능을 말하고, 파이프라인은 요청에 대한 응답을 기다리지 않고 다음 요청을 송신하는 기능을 말합니다. 그러나 HTTP/1.1은 같은 TCP 커넥션 안에서 요청과 응답을 병렬처리 할 수 없었기 때문에 HoL 블로킹 문제가 발생하였습니다. 

 

HTTP/2는 이때까지 텍스트 형식의 메세지 단위로 교환하는 애플리케이션 데이터를 프레임이라고 부르는 바이너리 형식 단위로 교환해 오버헤드 감소와 성능 향상을 위한 다양한 기능들이 추가된 HTTP 버전을 말합니다. 멀티플렉싱, HPACK, 서버푸시 등 TCP 레벨뿐만 아니라 애플리케이션 레벨에서의 성능 향상을 위한 기능이 추가된 HTTP 버전입니다.

멀티플렉싱, HPACK, 서버푸시

: 멀티플렉싱은 1개의 TCP 커넥션 안에 스트림이라는 가상 채널을 만들고, 스트림별로 요청과 응답을 교환하게 함으로써 HoL 블로킹 문제를 해결한 기능을 말합니다. HPACK은 메세지 헤더를 압축하는 기능을 말합니다. 서버푸시는 클라이언트가 최초로 요청한 콘텐츠를 해석하고 다음에 올거라고 예상되는 요청에 대한 응답을 요청이 오기 전에 미리 캐시에 보내놓는 기능을 말합니다.

 

HTTP/3은 TCP가 아니라 UDP를 사용하여 3way handshake에 걸리는 시간을 줄이고, 더 많은 HTTP 데이터를 보낼 수 있도록 한 HTTP 버전을 말합니다.

 

 

HTTPS에 대해서 설명해주세요.

더보기

HTTPS란 SSL 계층을 거쳐 데이터를 암호화하여 보안 통신을 제공하는 HTTP 프로토콜의 확장된 버전을 말합니다.

 

SSL/TLS이 뭔가요?

더보기

기존 웹에서는 평문(plane text) 형태로 데이터를 주고받았기 때문에 중간에 데이터를 가로채면 누구나 데이터를 읽을 수 있었습니다. SSL(Secure Socket Layer)은 이러한 보안상의 문제점을 해결하기 위해 개발된 표준화된 암호화 프로토콜입니다. 

TLS(Transport Layer Security)는 SSL의 여러 단점을 보완한 최신 암호화 프로토콜입니다. 오늘날 사용되는 암호화 프로토콜은 대부분 TLS 방식을 사용합니다.

 

Reference

  • 미야타 히로시, "그림으로 공부하는 TCP/IP 구조", p330

 

대칭키 암호화 방식에 대해 설명해주세요.

더보기

데이터를 암호화하기 위해서는 데이터를 암호화하기 위한 암호화키와 암호화를 풀기 위한 복호화 키가 필요합니다. 이러한 암호화키와 복호화키를 갖는 방식에 따라 크게 "대칭키 암호화 방식"과 "공개키 암호화 방식" 2가지로 나눌 수 있습니다. 대칭키 암호화 방식은 암호화키와 복호화키로 동일한 키를 사용하는 암호화 방식을 말합니다. 클라이언트와 서버는 미리 같은 키를 공유하고 암호화와 복호화를 진행합니다.

 

Reference

  • 미야타 히로시, "그림으로 공부하는 TCP/IP 구조", p334

 

비대칭키(공개키) 암호화 방식에 대해서 설명해주세요.

더보기

공개키 암호화 방식은 암호화키와 복호화키로 다른 키(공개키, 비밀키)를 사용하는 암호화 방식입니다. 

  • 웹서버는 공개키와 비밀키로 이루어진 키 페어를 만들어서 공개키는 모두에게 배포하고 비밀키만 보관합니다.
  • 클라이언트는 공개키를 암호화키로 사용해서 데이터를 암호화한 뒤 웹서버로 전송합니다.
  • 웹서버는 비밀키를 복호화키로 사용해서 데이터를 복호화합니다.

 

예상질문 1. 대칭키 암호화 방식과 공개키 암호화 방식의 장단점을 설명해주세요.

: 대칭키 암호화 방식은 구조 자체가 간단해서 암호화와 복호화 속도가 빠르다는 장점이 있습니다. 하지만 서버와 클라이언트가 공통의 키를 가지고 암호화와 복호화를 진행하기 때문에 보안상에 취약하다는 단점이 있습니다. 공개키 암호화 방식은 상대적으로 구조가 복잡해서 암호화와 복호화 속도가 느리다는 단점이 있지만 누구에게나 키를 공개해도 되기 때문에 보안상으로 보다 안정적입니다.

 

Reference

  • 미야타 히로시, "그림으로 공부하는 TCP/IP 구조", p335-336

 

전자 서명에 대해서 설명해주세요.

더보기

네트워크에서 전자 서명이란 메세지를 작성한 저자가 누군지 나타내기 위해 메세지에 첨부되는 정보를 말합니다. 전자 서명은 오직 저자의 개인키를 통해서만 접근할 수 있기 때문에 저자의 개인 '서명'처럼 동작하고, 메세지의 위/변조를 방지하는 목적으로 사용합니다.

 

⭐️ HTTPS 암호화 과정에 대해 설명해주세요. (SSL Handshake의 동작 과정을 설명해 주세요.)

더보기

SSL Handshake의 가장 큰 목적은 데이터를 실제로 암호화하기 위해 필요한 대칭키를 교환하는 것입니다.

동작 과정(1~6번)은 다음과 같은 순서로 진행됩니다.

 

1번: Client Hello

  • 클라이언트는 랜덤 데이터와 사용 가능한 암호화 알고리즘 목록을 서버에게 전달

2번: Server Hello

  • 클라이언트가 보낸 암호화 알고리즘 후보중 사용 가능한 알고리즘 선택
  • 클라이언트에게 서버에서 생성한 랜덤 데이터, 선택한 암호화 알고리즘, 인증서를 전송

3번: 인증서 검증 및 대칭키 생성

  • 클라이언트는 서버로부터 받은 인증서가 CA(인증기관)에 의해 발급된 것인지 확인하기 위해 CA의 공개키로 인증서를 검증
  • 클라이언트는 클라이언트측에서 생성한 랜덤 데이터와 서버측에서 생성한 랜덤 데이터를 사용해서 pre master secret이라는 대칭키를 생성

4번: pre master secret을 서버에 전송

  • 클라이언트는 인증서에 들어있던 서버의 공개키로 pre master secret(대칭키)를 암호화해서 서버에 전달

5번: pre master secret 수신

  • 서버는 자신의 개인키로 pre master secret(대칭키)을 복호화

6번: master secret 및 session key 생성

  • 서버와 클라이언트는 일련의 과정을 거쳐 pre master secret(대칭키)를 master secret으로 만들고 master secret으로 session key를 생성 

이후 session key를 사용하여 대칭키 방식으로 서버와 클라이언트가 데이터를 암호화하고 주고받을 수 있습니다. 

 

 

Reference

 

⭐️ DNS가 뭔가요?

더보기

DNS(Domain Name System)이란 IP 주소와 도메인 이름을 매칭시켜 관리하는 시스템을 말합니다. 사실 IP 주소는 숫자형태로 되어 있어서 인간이 보기 힘듭니다. 이러한 숫자형태의 IP 주소에 도메인 이름을 붙여 인간이 보기 쉬운 형태로 통신할 수 있도록 만든 시스템을 DNS라고 합니다.

 

Reference

  • 미야타 히로시, "그림으로 공부하는 TCP/IP 구조", p363

 

DNS 작동 방식에 대해 설명해주세요.

더보기

DNS의 작동 방식은 다음과 같습니다.

  • 브라우저 캐시 확인: 브라우저에 있는 캐시에서 도메인에 해당하는 IP가 저장되어 있는지 체크
  • Host 파일과 캐시 확인: 컴퓨터에 저장된 Host 파일과 캐시에서 도메인에 해당하는 IP가 저장되어 있는지 체크
  • DNS 서버에 IP 요청: 도메인에 해당하는 IP를 DNS 서버측에 요청
  • DNS 서버에서 IP 반환: DNS 서버에서 요청받은 도메인에 해당하는 IP 주소 반환
예상질문 1. 하나의 DNS 서버에서 전세계 모든 IP 주소와 도메인 이름을 관리하나요? 

: 아닙니다. 말씀하신 것과 같이 하나의 서버에서 모든 주소를 관리한다면 그 서버는 버티지 못할텐데요. 실제로 DNS 서버는 Root 도메인, Top-Level 도메인, Sub 도메인과 같이 도메인을 계층화하여 나눠서 관리합니다. 때문에 상위 계층의 Name System에서 하위 계층의 Name System으로 요청을 보내면서 IP 주소를 찾습니다.

 

Reference

 

DNS 질의 종류에 대해 설명해주세요.

더보기

DNS(Domain Name System)에서는 다양한 질의 종류가 있으며, 각각의 질의 종류에 따라 다른 정보를 얻을 수 있습니다. 일반적으로 가장 많이 사용되는 네 가지 주요 질의 종류는 다음과 같습니다

 

  • A 질의 (Address Record Query):
    A 질의는 도메인 이름에 대응하는 IPv4 주소를 찾기 위해 사용됩니다.
    예를 들어, "www.example.com"에 대한 A 질의를 하면 해당 도메인 이름에 대응하는 IPv4 주소를 반환합니다.
  • AAAA 질의 (IPv6 Address Record Query):
    AAAA 질의는 도메인 이름에 대응하는 IPv6 주소를 찾기 위해 사용됩니다.
    IPv6는 IPv4보다 더 긴 주소 체계를 사용하므로, AAAA 질의를 통해 IPv6 주소를 얻을 수 있습니다.
  • CNAME 질의 (Canonical Name Record Query):
    CNAME 질의는 도메인 이름에 대해 다른 도메인 이름(CNAME)을 찾기 위해 사용됩니다.
    CNAME은 도메인 이름을 다른 도메인 이름으로 매핑하는데 사용되며, 도메인 이름의 별칭을 설정하는 데 유용합니다.
  • MX 질의 (Mail Exchanger Record Query):
    MX 질의는 도메인 이름에 대응하는 메일 서버의 정보를 찾기 위해 사용됩니다.
    이 정보를 사용하여 해당 도메인 이름으로 이메일을 보낼 때 메일이 전달될 서버를 확인할 수 있습니다.

Reference

 

DNS 서버에게 IP 주소를 요청할 때, 왜 UDP를 사용하나요?

더보기

DNS에서 UDP를 사용하는 데에는 크게 2가지 이유가 있습니다. 첫번째는 HTTP와 달리 DNS는 신뢰성보다 빠른 응답시간이 더 중요하기 때문입니다. 두번째는 TCP와 달리 UDP는 연결 상태를 유지할 필요가 없기 때문입니다. 연결상태를 유지하지 않음으로서 더 많은 클라이언트의 요청을 수용할 수 있으므로 연결상태를 유지하지 않고 정보 기록을 최소화 할 수 있는 UDP를 사용합니다. 

 

예상질문 1. 그렇다면 DNS는 데이터 손실이 발생하더라도 막을 방법이 없나요?

: 아닙니다. UDP의 단점을 보완하기 위해서 DNS는 각 패킷의 체크섬 값을 계산하여 데이터 무결성을 검사하거나 클라이언트가 보낸 요청에 대한 응답을 서버로부터 일정 시간 내에 수신하지 못하면 재요청을 보내는 등의 방식으로 데이터 손실을 방지합니다.   

 

Reference

 

DNS 레코드가 무엇인가요?

더보기

DNS 레코드란 DNS 상에서 도메인에 연동된 IP 주소나 해당 도메인에 대한 요청 처리방법을 결정하기 위해 사용하는 일련의 문자열을 말합니다. 예를 들어, DNS 레코드를 설정하여 도메인에서 사용할 메일 서버 유형(예:Microsoft Exchange)이나 누군가 웹사이트를 방문할 때 반환해야 하는 IP 주소를 전 세계에 알릴 수 있습니다.

 

Reference


인성면접 예상질문

개발자로서 간단한 자기소개 부탁드립니다.

더보기

안녕하세요! 같이 일하고싶은 개발자가 되고자 노력하는 윤도현입니다. 저는 다양한 도메인(축산, 교통, 의료 등)에서 주어진 문제해결에 필요한 데이터 정의, 데이터 수집, 머신러닝 모델링 및 알고리즘을 개발하고 실제 제품에 적용해본 경험이 있습니다. 저는 지식을 공유하며 더 빨리 성장한다고 느낍니다. 실제로 교내 인공지능 동아리를 만들어서 새로운 기술(yolo, deepsort)를 독학으로 공부하고 팀원들에게 공유하여 프로젝트를 함께 완성한 경험이 있습니다. 최근에도 꾸준히 스터디에 참여하며 발전하고자 노력하고 있습니다.

개발자로서 본인의 장점은 어떤거라고 생각하시나요?

더보기

개발자로서 저의 장점은 다양한 도메인에서 문제해결을 해본 경험이라고 생각합니다. 다양한 도메인에서 주어진 문제에 필요한 데이터 정의와 수집부터 실제 제품 제작까지 A to Z를 경험해봤다는 점이 제 장점이라고 할 수 있습니다.

개발자로서 본인의 단점은 어떤거라고 생각하시나요?

3년뒤, 5년뒤에 어떤 개발자가 되는게 목표인가요?

어떤 개발자가 좋은 개발자라고 생각하시나요? 좋은 개발자가 되기위해 어떤 노력을 평소에 하시나요?

면접 끝내기전 마지막으로 하고싶은 말 있으면 해주세요.

더보기

만약 제가 이 포지션으로 함께하게 된다면,

단기적으로 제가 해당 팀에서 해결해야할 가장 시급한 문제가 뭔지 알 수 있을까요?