💬 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에 접속할 때 생기는 과정에 대해 설명해주세요. (웹 동작 방식 이해)

- 사용자가 브라우저에 URL을 입력한다.
- DNS 서버에 도메인 네임으로 서버의 진짜 주소를 찾는다.
- DNS : IP 주소 및 기타 데이터를 저장하고 이름별로 쿼리할 수 있게 해주는 계층형 분산 데이터베이스
- DNS에서 실제 주소 가져오는 경로
- 사용자가 브라우저에 url을 입력
- DNS 서버에 도메인 네임으로 서버의 진짜 ip주소를 찾음
- 로컬 PC의 캐시, host를 확인하고 DNS 서버에 요청
- DNS 조회를 시 먼저 캐시에서 해당 도메인의 ip 주소가 있는지 확인
- 브라우저에서 확인하고 운영체제의 host파일에서 ip주소가 있으면 사용
- 이후 도메인 이름 계층 구조 탐색
- 루트 DNS서버 : .com, org와 같은 최상위 도메인으로 먼저 주소를 찾음
- TDL DNS서버 : google.com과 같은 도메인을 관리하는 네임서버를 알고 있음
- Authoritative DNS 서버 : 이 서버는
google.com 도메인에 대한 최종적인 정보를 가지고 있음 www.google.com에 해당하는 ip주소를 DNS 서버에 반환
- ip주소로 웹 서버에 3 way handshake로 연결
- 클라이언트가 웹 서버로 http 요청 메시지를 보냄
- 웹서버는 http 응답 메시지를 보냄
- 도착한 http 응답 메시지는 웹 페이지 데이터로 변환되고, 웹 브라우저에 의해서 출력
- IP 주소로 웹 서버에 TCP 3-way handshake로 연결 수립
- 클라이언트는 웹 서버로 HTTP 요청 메시지 보낸다.
- 웹 서버는 HTTP 응답 메세지를 보낸다.
- 도착하는 HTTP 응답 메세지는 웹 페이지 데이터로 변환되고, 웹 브라우저에 의해 출력
💬 TCP와 UDP의 차이 ?
- TCP는 연결형 서비스로 3-way handshake 과정을 통해 연결을 설정하기 때문에 높은 신뢰성을 보장하지만, 속도가 비교적 느리다는 단점이 있다.
- UDP는 비 연결형 서비스로 3-way handshake를 사용하지 않기 때문에 신뢰성이 떨어진다는 단점이 있지만, 데이터 수신 여부를 확인하지 않기 때문에 속도가 빠르다는 장점이 있습니다.
- TCP는 주로 신뢰성이 중요한 파일 교환과 같은 경우에 쓰이고 UDP는 실 시간성이 중요한 스트리밍에 자주 사용됩니다.
| 프로토콜 종류 | TCP | UDP |
|---|
| 연결 방식 | 연결형 서비스 | 비연결형 서비스 |
| 패킷 교환 방식 | 가상 회선 방식 | 데이터 그램 방식 |
| 전송 순서 | 전송 순서 보장 | 전송 순서가 바뀔 수도 있음 |
| 수신 여부 확인 | 수신 여부 확인함 | 수신 여부 확인 안함 |
| 통신 방식 | 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 계층 (전송)
- 최종 수신 프로세스로 데이터의 전송을 담당하는 계층
- 3 계층 (네트워크)
- 패킷을 목적지까지 가장 빠른 길로 전송하기 위한 계층
- 단위는 패킷 (ex. Router)
- ARP ⇒ mac → IP 주소
- RARP ⇒ IP → MAC 주소
- 2 계층 (데이터링크 계층)
- 데이터의 물리적인 전송과 에러 검출, 흐름 제어를 담당하는 계층
- 1 계층 (물리 계층)
💬 HTTP Method와 각각이 사용되는 경우에 대해서 설명 하세요.
- HTTP 메소드는 클라이언트가 서버에게 사용자 요청의 목적을 알리는 수단이다.
| 종류 | 기능 |
|---|
| GET | 데이터 조회 |
| POST | 요청 데이터 처리 ( 보통 데이터 등록 사용 ) |
| PUT | 데이터 변경 ( 해당 데이터가 없으면 생성 ) |
| PATCH | 일부 데이터만 변경 |
| DELETE | 데이터 삭제 |
💬 GET과 POST의 차이 ?
- GET
- 데이터를 조회하기 위해 사용되는 방식
- 데이터를 헤더에 추가하여 전송한다.
- 데이터를 URL Query String으로 실어 보낸다
- URL에 데이터가 노출되므로 보안적으로 중요한 데이터를 포함해서는 안된다.
- POST
- 데이터를 추가 또는 수정하기 위해 사용되는 방식
- 데이터를 바디에 추가하여 전송하는 방식
- 완전히 안전하다는 것은 아니지만 URL에 데이터가 노출 되지 않아서 GET 보다는 안전하다
| 처리 방식 | GET | POST |
|---|
| URL에 데이터 노출 여부 | O | X |
| 데이터의 위치 | 헤더 | 바디 |
| 캐싱 가능 여부 | O | X |
| 멱등성 | O | X |
- 멱등성
- 동일한 연산을 여러번 수행해도 결과가 달라지지 않는 성질
💬 세션 기반 인증과 토큰 기반 인증의 차이 ?
- 세션 기반 인증은 클라이언트로 부터 요청을 받으면 클라이언트의 상태 정보를 저장하므로 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를 각각 할당 받아 인터넷에 접속할 수 있다.
이 글을 정독하고 방금 Jacob에게 합격 문자 받았습니다. 감사합니다. 😄