기술 면접 대비 - Network

박준서·2024년 9월 4일

CS

목록 보기
1/4
post-thumbnail

💬 HTTP 프로토콜에 대해 설명해주세요.

  • HTTP이란 데이터를 주고 받기 위한 프로토콜이며, 서버/클라이언트 모델을 따른다.
  • HTTP는 상태 정보를 저장하지 않는 Stateless의 특징과 클라이언트의 요청에 맞는 응답을 보낸 후 연결을 끊는 Connectionless의 특징을 가진다.
  • 장점
    • 통신 간의 연결 상태 처리나 상태 정보를 관리할 필요가 없어서 서버 디자인이 간단하다.
    • 각각의 HTTP 요청에 독립적으로 응답만 보내주면 OK
  • 단점
    • 이전 통신의 정보를 모르기 때문에 매번 인증을 해줘야 한다.
    • 이를 해결하기 위해 쿠키나 세션을 사용해서 데이터를 처리한다.

💬 HTTP와 HTTPS의 차이점 ?

  • HTTP는 평문 데이터를 전송하는 프로토콜이기 때문에, HTTP로 중요한 정보를 주고 받으면 보안성이 떨어진다.
  • 이러한 문제를 해결하기 위해 HTTP에 암호화가 추가된 프로토콜이 HTTPS 이다.
    • HTTPS는 SSL + HTTP 라고 보면 된다.
    • SSL : 인터넷을 통해 전달되는 정보를 보호하기 위해 개발한 통신 규약
      • 예전에는 SSL을 썼는데 요즘에는 TLS로 바뀌었다.
  • HTTP는 원래 TCP와 직접 통신 했지만 , HTTPS에서는 HTTP는 SSL과 통신하고, 이 SSL이 TCP와 통신함으로써 보안성을 높일 수 있다.

💬 Cookie와 Session의 차이점 ?

  • 쿠키는 사용자의 컴퓨터에 저장하는 작은 정보 파일. HTTP에서 클라이언트의 상태 정보를 PC에 저장했다가 필요 시 참조 혹은 재사용.
  • 세션은 일정 시간동안 같은 사용자로부터 들어오는 일련의 요구를 하나의 상태로 보고, 그 상태를 유지 시키는 기술
    • 방문자가 웹 서버에 접속해 있는 상태를 하나의 단위로 보고 그것을 세션이라고 한다.
항목쿠키 (Cookie)세션 (Session)
저장 위치클라이언트 (사용자 PC)웹 서버
저장 형식텍스트 (text)객체 (Object)
만료 시점쿠키 저장 시 설정
(브라우저가 종료되어도 만료 시점이 지나지 않으면 삭제되지 않음)
브라우저 종료 시 삭제
(기간 지정 가능)
사용하는 자원클라이언트 리소스웹 서버 리소스
용량 제한총 300개
도메인당 20개
쿠키당 4KB
서버가 허용하는 한 용량 제한 없음
속도세션보다 빠름쿠키보다 느림
보안세션보다 낮음쿠키보다 높음
동작 순서1. 클라이언트가 페이지를 요청
2. 서버는 쿠키를 생성
3. 생성한 쿠키에 정보를 담아 클라이언트에게 전송
4. 클라이언트는 쿠키를 로컬에 저장하고, 서버에 요청 시 쿠키를 함께 전송
5. 동일 사이트 재방문 시 쿠키를 서버에 전송
1. 클라이언트가 페이지를 요청
2. 서버는 클라이언트의 쿠키에서 세션 ID 확인
3. 세션 ID가 없으면 생성하여 클라이언트에 전송
4. 클라이언트는 세션 ID를 쿠키에 저장
5. 클라이언트는 요청 시 세션 ID를 서버에 전송
6. 서버는 세션 ID로 클라이언트 정보를 조회하고 응답
사용 예시1. 방문 사이트 로그인 시 "아이디와 비밀번호를 저장하시겠습니까?"
2. 팝업창에서 "오늘 이 창 다시 보지 않기" 체크
화면 이동해도 로그인이 유지되며 로그아웃 전까지 유지

추가 설명

  • HTTP 프로토콜의 약점 보완: 쿠키와 세션은 HTTP의 무상태성(stateless)을 보완하기 위해 사용된다
  • 보안성 비교: 쿠키는 로컬에 저장되기 때문에 스니핑(sniffing)에 취약하여 보안성이 낮습니다. 반면, 세션은 서버에서 관리되기 때문에 보안성이 비교적 높다.
  • 속도 비교: 쿠키는 클라이언트에 저장되어 서버 요청 시 빠른 반면, 세션은 서버에서 정보를 처리해야 하므로 비교적 느리다.
  • 자원 관리: 세션은 서버 자원을 사용하기 때문에 자원 관리 측면에서 세션과 쿠키를 병행하여 사용하는 것이 일반적이다

💬 www.naver.com에 접속할 때 생기는 과정에 대해 설명해주세요. (웹 동작 방식 이해)

  1. 사용자가 브라우저에 URL을 입력한다.
  2. DNS 서버에 도메인 네임으로 서버의 진짜 주소를 찾는다.
    1. DNS : IP 주소 및 기타 데이터를 저장하고 이름별로 쿼리할 수 있게 해주는 계층형 분산 데이터베이스
      • DNS에서 실제 주소 가져오는 경로
        1. 사용자가 브라우저에 url을 입력
        2. DNS 서버에 도메인 네임으로 서버의 진짜 ip주소를 찾음
          1. 로컬 PC의 캐시, host를 확인하고 DNS 서버에 요청
          2. DNS 조회를 시 먼저 캐시에서 해당 도메인의 ip 주소가 있는지 확인
          3. 브라우저에서 확인하고 운영체제의 host파일에서 ip주소가 있으면 사용
          4. 이후 도메인 이름 계층 구조 탐색
            1. 루트 DNS서버 : .com, org와 같은 최상위 도메인으로 먼저 주소를 찾음
            2. TDL DNS서버 : google.com과 같은 도메인을 관리하는 네임서버를 알고 있음
            3. Authoritative DNS 서버 : 이 서버는 google.com 도메인에 대한 최종적인 정보를 가지고 있음 www.google.com에 해당하는 ip주소를 DNS 서버에 반환
        3. ip주소로 웹 서버에 3 way handshake로 연결
        4. 클라이언트가 웹 서버로 http 요청 메시지를 보냄
        5. 웹서버는 http 응답 메시지를 보냄
        6. 도착한 http 응답 메시지는 웹 페이지 데이터로 변환되고, 웹 브라우저에 의해서 출력
  3. IP 주소로 웹 서버에 TCP 3-way handshake로 연결 수립
  4. 클라이언트는 웹 서버로 HTTP 요청 메시지 보낸다.
  5. 웹 서버는 HTTP 응답 메세지를 보낸다.
  6. 도착하는 HTTP 응답 메세지는 웹 페이지 데이터로 변환되고, 웹 브라우저에 의해 출력

💬 TCP와 UDP의 차이 ?

  • TCP는 연결형 서비스로 3-way handshake 과정을 통해 연결을 설정하기 때문에 높은 신뢰성을 보장하지만, 속도가 비교적 느리다는 단점이 있다.
  • UDP는 비 연결형 서비스로 3-way handshake를 사용하지 않기 때문에 신뢰성이 떨어진다는 단점이 있지만, 데이터 수신 여부를 확인하지 않기 때문에 속도가 빠르다는 장점이 있습니다.
  • TCP는 주로 신뢰성이 중요한 파일 교환과 같은 경우에 쓰이고 UDP는 실 시간성이 중요한 스트리밍에 자주 사용됩니다.
프로토콜 종류TCPUDP
연결 방식연결형 서비스비연결형 서비스
패킷 교환 방식가상 회선 방식데이터 그램 방식
전송 순서전송 순서 보장전송 순서가 바뀔 수도 있음
수신 여부 확인수신 여부 확인함수신 여부 확인 안함
통신 방식1 : 1 통신1 : 1 OR 1:N OR N:N
신뢰성높다낮다
속도느리다빠르다
  • TCP와 UDP는 OSI 7계층 중 TCP/IP의 전송 계층에서 사용되는 프로토콜이다.
    • 전송 계층은 송신자와 수신자를 연결하는 통신 서비스를 제공하는 계층이다.
    • 데이터의 전달을 담당하며, 전달되는 패킷의 오류를 검사하고 재 전송 요구 등의 제어를 담당함.
  • 가상 회선 연결 ?
    • 발신지와 수신지를 연결하여 패킷을 전송하기 위한 논리적 경로를 배정한다는 것

💬 3 way-handshake와 4way-handshake를 설명해주세요.

  • 3way-handshake : TCP 네트워크에서 통신 하는 장치가 서로 연결이 잘 되었는지 확인하는 방법. 송신자와 수신자는 총 3번에 걸쳐 데이터를 주고 받으며 통신이 가능한 상태인지 확인한다.

  • SYN - 연결 확인을 위해 보내는 무작위 숫자 값 (내 말 들려?)

  • ACK - Client 혹은 Server로 부터 받은 SYN에 1을 더해 SYN 잘 받았다는 ACK ( 잘 들려 ! )

  • 순서

    • 먼저 Open한 Client가 SYN를 보내고 SYN_SENT 상태로 대기한다.
    • 서버는 SYN-RECEIVED 상태로 바꾸고 SYN과 응답 ACK를 보낸다.
    • SYN과 응답 ACK를 받은 클라이언트는 ESTABLISHED 상태로 변경하고 서버에게 ACK를 보낸다.
    • 응답 ACK를 받은 서버는 ESTABLISHED 상태로 변경한다.

  • 4way-handshake : TCP 네트워크에서 통신 하는 장치의 연결을 해제하는 방법이다. 송신자와 수신자는 총 4번에 걸쳐 데이터를 주고 받으며 연결을 끊는다.

  • 순서

    • 먼저 close를 실행한 클라이언트가 FIN (연결 끊자)를 보내고 FIN-WAIT-1 상태로 대기한다.
    • 서버는 CLOSE-WAIT으로 바꾸고 응답 ACK를 전달한다. 동시에 해당 포트에 연결되어 있는 애플리케이션에게 close를 요청한다.
    • ACK를 받은 클라이언트는 상태를 FIN-WAIT-2로 변경한다.
    • close 요청을 받은 서버 애플리케이션은 종료 프로세스를 진행하고 FIN을 클라이언트로 보내 LAST_ACK 상태로 바꾼다.
    • FIN을 받은 클라이언트는 ACK를 서버에 다시 전송하고 TIME-WAIT으로 상태를 바꾼다. TIME-WAIT에서 일정 시간이 지나면 CLOSE된다. ACK를 받은 서버도 포트를 CLOSED로 닫는다.
      • TIME-WAIT : 먼저 연결을 끊는 쪽에서 생성되는 소켓으로, 혹시 모를 전송 실패에 대비하기 위해 존재하는 소켓이며, TIME-WAIT이 없다면 패킷의 손실이 발생하거나 통신자 간 연결 해제가 제대로 되지 않을 수 있다. ⇒ 클라이언트는 ACK를 보낸 후 일련의 시간을 기다린다.

💬 OSI 7 layer와 각 계층에 대해 아는대로 설명해주세요.

  • 7 계층 (응용)
    • 사용자에게 통신을 위한 서비스를 제공한다. 인터페이스 역할
  • 6 계층(표현)
    • 데이터의 형식을 정의하는 계층 ( 코드 간의 번역을 담당 )
  • 5 계층 (세션)
    • 컴퓨터끼리 통신을 하기 위해 세션을 만드는 계층
  • 4 계층 (전송)
    • 최종 수신 프로세스로 데이터의 전송을 담당하는 계층
      • 단위는 세그먼트 (ex. TCP, UDP)
  • 3 계층 (네트워크)
    • 패킷을 목적지까지 가장 빠른 길로 전송하기 위한 계층
      • 단위는 패킷 (ex. Router)
      • ARP ⇒ mac → IP 주소
      • RARP ⇒ IP → MAC 주소
  • 2 계층 (데이터링크 계층)
    • 데이터의 물리적인 전송과 에러 검출, 흐름 제어를 담당하는 계층
      • 단위는 프레임 (ex. 이더넷)
  • 1 계층 (물리 계층)
    • 데이터를 전기 신호로 바꾸어주는 계층
      • 단위는 비트
      • 장비 : 케이블, 리피터, 허브

💬 HTTP Method와 각각이 사용되는 경우에 대해서 설명 하세요.

  • HTTP 메소드는 클라이언트가 서버에게 사용자 요청의 목적을 알리는 수단이다.
종류기능
GET데이터 조회
POST요청 데이터 처리 ( 보통 데이터 등록 사용 )
PUT데이터 변경 ( 해당 데이터가 없으면 생성 )
PATCH일부 데이터만 변경
DELETE데이터 삭제

💬 GET과 POST의 차이 ?

  • GET
    • 데이터를 조회하기 위해 사용되는 방식
    • 데이터를 헤더에 추가하여 전송한다.
    • 데이터를 URL Query String으로 실어 보낸다
    • URL에 데이터가 노출되므로 보안적으로 중요한 데이터를 포함해서는 안된다.
  • POST
    • 데이터를 추가 또는 수정하기 위해 사용되는 방식
    • 데이터를 바디에 추가하여 전송하는 방식
    • 완전히 안전하다는 것은 아니지만 URL에 데이터가 노출 되지 않아서 GET 보다는 안전하다
처리 방식GETPOST
URL에 데이터 노출 여부OX
데이터의 위치헤더바디
캐싱 가능 여부OX
멱등성OX
  • 멱등성
    • 동일한 연산을 여러번 수행해도 결과가 달라지지 않는 성질

💬 세션 기반 인증과 토큰 기반 인증의 차이 ?

  • 세션 기반 인증은 클라이언트로 부터 요청을 받으면 클라이언트의 상태 정보를 저장하므로 Stateful한 구조를 가지고, 토큰 기반 인증은 상태 정보를 서버에 저장하지 않으므로 Stateless한 구조를 가진다.

💬 Stateful한 세션 기반의 인증 방식을 사용하게 된다면 어떠한 단점이 있을까?

  • 서버에 세션을 저장하기 때문에 사용자가 증가하면 서버에 과부하를 줄 수 있다.
  • 해커가 훔친 쿠키를 이용해 보내면 서버는 올바은 사용자가 보낸 요청인지 알 수 없다. (세션 하이재킹)

💬 그렇다면, 세션 기반 인증과 토큰 기반 인증은 각각 어느 경우에 적합한가?

  • 단일 도메인이라면 세션 기반 인증을 사용하고, 아니라면 토큰 기반 인증을 사용하는 것이 적합하다고 생각합니다.
    • 세션을 관리할 때 사용되는 쿠키는 단일 도메인 및 서브 도메인에서만 작동하도록 설계 되어 있기 때문에 여러 도메인에서 관리하는 것은 어렵습니다. (CORS 문제)

💬 JWT 토큰에 대해 설명해라

  • JSON 포맷을 이용하는 Claim 기반의 웹 토큰. 토큰 자체를 정보로 사용하는 Self-Contained 방식으로 정보를 안전하게 전달한다.
    • Claim : 사용자에 대한 프로퍼티나 속성을 이야기 한다. 토큰 자체가 정보를 가지고 있는 방식
    • JWT는 헤더, 내용, 서명로 구성되며 각 파트는 점으로 구분합니다.
      • 헤더 : 토큰의 타입과 해시 암호화 알고리즘으로 이루어져 있다.
      • 내용 : 토큰에 사용자가 담고자 하는 정보를 담는다. 내용에는 Claim이 담겨 있고, JSON 형태의 한 쌍으로 이루어져 있다.
      • 서명 : 토큰을 인코딩하거나 유효성 검증할 때 사용하는 고유한 암호화 코드이다. 헤더와 내용의 값을 인코딩한다.
  • 인증 받은 사용자에게 토큰을 발급해주고, 서버에 요청을 할 때 HTTP 헤더에 토큰을 함께 보내 인증 받은 사용자(유효성 검사)인지 확인한다.
    • 서버 기반 인증 시스템과 달리 인증 정보를 서버에 저장하지 않고 클라이언트의 요청으로만 인가를 처리하므로 Stateless한 구조를 가진다.
  • JSON Web Token의 약자로 인증에 필요한 정보를 암호화한 토큰 이라는 뜻이다.
  • 세션 / 쿠키 방식과 유사하게 클라이언트는 Access Token(JWT)을 HTTP 헤더에 실어 서버로 보낸다.

[ 인증 방식 ]

  • 사용자가 로그인 시 올바른 사용자 임을 확인하고, 클라이언트에게 Access Token(JWT)을 발급해준다.
  • 클라이언트는 전달 받은 토큰을 저장해 두고, 인증이 필요한 요청마다 토큰을 HTTP 헤더에 담아 보낸다.
  • 서버에서는 암호화된 토큰을 복호화 해 올바른 요청인지 확인한다.
  • 인증이 완료되고 서버는 요청에 응답한다.

[ 장점 ]

  • 서버 기반 인증 시스템은 저장소의 관리가 필요하지만, 토큰 기반은 Access Token을 발급해준 후 요청이 들어오면 검증만 해주면 되기 때문에 추가 저장소가 필요 없다.
  • 쿠키를 사용함으로 인해 발생하는 취약점이 사라진다.
  • 확장성이 뛰어나다. 토큰 기반으로 하는 다른 인증 시스템에 접근이 가능하다.

[ 단점 ]

  • 이미 발급된 JWT를 돌이킬 수 없다. 서버 기반 인증 시스템 처럼 저장소를 사용하는 경우에는 해당 세션이 악의적으로 사용될 경우 지워버리면 되지, JWT는 한 번 발급되면 유효기간이 완료될 때 까지는 계속 사용이 가능하다.
    • 유효기간 지나기 전까지 보안성이 위험할 수 있음
  • JWT의 길이가 길다. 인증이 필요한 요청이 많아질 수록 서버의 자원 낭비가 발생한다.

💬 대칭 키, 비대칭 키 암호화 방식에 대해 설명 하시오.

  • 대칭키와 비 대칭키는 양방향 암호화 방식이다.

  • 대칭키

    • 암호화와 복호화에 같은 암호 키를 쓰는 알고리즘
    • 중간에 누군가 암호 키를 가로채면 암호화 된 정보가 유출될 수 있다는 단점이 있다.
  • 비 대칭키

    • 암호와와 복호화 할 때 키를 서로 다른 키로 사용하는 암호화 알고리즘
    • 타인에게 절대 노출되면 안되는 개인키와 공개적으로 개방되어 있는 공개키를 쌍으로 이룸

💬 Connection Timeout과 Read Timeout의 차이에 대해 설명 하세요.

  • Connection Timeout
    • 서버 자체에 클라이언트가 어떤 사유로 접근을 실패했을 시 적용되는 것
    • 접근을 시도하는 시간 제한이 Connection Timeout 되는 것을 말한다.
  • Read Timeout
    • 클라이언트가 서버에 접속을 성공 했으나 서버가 로직을 수행하는 시간이 너무 길어 제대로 응답을 못 준 상태에서 클라이언트가 연결을 해제 하는 것
    • 이 경우 클라이언트는 해당 상황을 오류로 인지하고, 서버는 계속 로직을 수행하고 있어서 성공으로 인지해 양 사이드 간 싱크가 맞지 않아 문제가 발생할 확률이 높다.

💬 공인 IP와 사설 IP의 차이

  • 공인 IP는 ISP(인터넷 서비스 공급자)가 제공하는 IP 주소 이며 이는 외부에 공개 되어 있다.
  • 사설 IP는 일반 가정이나 회사 내 등에 할당 된 네트워크 IP 주소 이며, IPv4의 주소 부족으로 인해 서브넷팅 된 IP이기 때문에 라우터(공유기)에 의해 로컬 네트워크 상의 PC나 장치에 할당된다.
    • 사설 IP 주소 만으로는 인터넷에 직접 연결할 수 없고 라우터를 통해 1개의 공인 IP를 할당하고, 라우터에 연결된 개인 PC는 사설 IP를 각각 할당 받아 인터넷에 접속할 수 있다.
profile
Back-End Developer

3개의 댓글

comment-user-thumbnail
2024년 9월 12일

이 글을 정독하고 방금 Jacob에게 합격 문자 받았습니다. 감사합니다. 😄

답글 달기
comment-user-thumbnail
2024년 9월 13일

정리가 잘 돼있네여 ㅎㅎ 감사합니다!

답글 달기
comment-user-thumbnail
2024년 9월 16일

TDL DNS서버 : google.com과 같은 도메인을 관리하는 네임서버를 알고 있음

혹시 이 문장에서 "TDL"이 "TLD(Top-level domain)"의 오타 아닌지요?
글 잘 읽었습니다. 감사합니다.

답글 달기