* CS면접을 대비해서 공부한 내용들을 정리했습니다. 틀린 부분이 있을 수 있으니 그럴 경우 댓글 달아주시면 감사하겠습니다!
* 분야는 운영체제, 데이터베이스, 네트워크, 자바, 자료구조 등등 가리지 않고 했기 때문에 여러 과목과 내용이 섞여 있습니다.
* 모든 내용은 간단하게 익히기 위해서 얕게 적혀 있습니다. 깊은 내용은 따로 공부하길 권장드립니다.
HTTP 프로토콜
HTTP란, 데이터를 주고 받기 위한 프로토콜이며 서버/클라이언트 모델을 따른다. HTTP는 상태 정보를 저장하지 않는 Stateless의 특징과 클라이언트의 요청에 맞는 응답을 보낸 후 연결을 끊는 Connectionless의 특징을 가지고 있다.
HTTP의 장점
- 통신간의 연결 상태 처리나 상태 정보를 관리할 필요가 없어서 서버 디자인이 간단하다.
- 각각의 HTTP 요청에 독립적으로 응답만 보내주면 된다.
HTTP의 단점
- 이전 통신의 정보를 모르기 때문에 매번 인증을 해줘야 한다.
- 이를 해결하기 위해 쿠키나 세션을 사용해서 데이터를 처리한다.
HTTP와 HTTPS의 차이점
HTTP는 평문 데이터를 전송하는 프로토콜이기 때문에, HTTP로 중요한 정보를 주고 받으면 제 3자에 의해 조회될 수 있다. 이러한 문제를 해결하기 위해 HTTP에 암호화가 추가된 프로토콜이 HTTPS이다. HTPS는 SSL의 껍질을 덮어쓴 HTTP이다.
HTTP는 원래 TCP와 직접 통신했지만, HTTPS에서 HTTP는 SSL과 통신하고 SSL이 TCP와 통신함으로써 암호화와 증명서, 안전성 보호를 이용할 수 있게 된다.
쿠키와 세션의 차이점
쿠키는 사용자의 컴퓨터에 저장하는 작은 기록 정보 파일이다. HTTP에서 클라이언트의 상태 정보를 PC에 저장했다가 필요시 정보를 참조하거나 재사용할 수 있다.
세션은 일정 시간동안 같은 사용자로부터 들어오는 일련의 요구를 하나의 상태로 보고, 그 상태를 유지시키는 기술이다. 즉, 방문자가 웹 서버에 접속해있는 상태를 하나의 단위로 보고 그것을 세션이라고 한다.
www.naver.com에 접속하는 과정
- 사용자가 브라우저에 URL을 입력
- DNS 서버에 도메인 네임으로 서버의 진짜 주소를 찾음
- IP 주소로 웹 서버에 TCP 3 handshake로 연결
- 클라이언트는 웹 서버로 HTTP 요청 메시지를 보냄
- 웹 서버는 HTTP 응답 메시지를 보냄
- 도착한 HTTP 응답 메시지는 웹 페이지 데이터로 변환되고, 웹 브라우저에 의해 출력
TCP vs UDP
TCP는 연결형 서비스로 3 handshaking 과정을 통해 연결을 설정하기 때문에 높은 신뢰성을 보장하지만, 속도가 비교적 느리다는 단점이 있다.
UDP는 비연결형 서비스로 3 handshaking를 사용하지 않아서 신뢰성이 떨어지지만, 데이터 수신 여부를 확인하지 않기 때문에 속도가 빠르다.
TCP는 신뢰성이 중요한 파일 교환과 같은 경우에 쓰이고 UDP는 실시간성이 중요한 스트리밍에 자주 사용된다.
TCP 통신은 종료시에도 3 way handshaking을 사용하는가?
TCP는 3 way handshaking 과정을 통해 연결을 설정하고, 4 way handshaking 과정을 통해 연결을 해제한다.
3 way handshaking
TCP 네트워크에서 통신하는 장치가 서로 연결이 잘 되었는지 확인하는 방법이다. 송신자와 수신자는 총 3번에 걸쳐 데이터를 주고 받으며 통신이 가능한 상태인지 확인한다.
4 way handshaking
TCP 네트워크에서 통신하는 장치의 연결을 해제하는 방법이다. 송신자와 수신자는 총 4번에 걸쳐 데이터를 주고 받으며 연결을 끊는다.
OSI 7계층
응표세전네데물
응용계층: 사용자에게 통신을 위한 서비스를 제공하고 인터페이스 역할을 한다.
표현계층: 데이터의 형식을 정의하는 계층
세션계층: 컴퓨터끼리 통신을 하기 위해 세션을 만드는 계층
전송계층: 최종 수신 프로세스로 데이터의 전송을 담당하는 계층(TCP,UDP 단위는 세그먼트)
네트워크 계층: 패킷을 목적지까지 가장 빠른 길로 전송하기 위한 계층(단위는 패킷)
데이터링크 계층: 데이터의 물리적인 전송과 에러 검출, 흐름 제어를 담당하는 계층(단위는 프레임)
물리 계층: 데이터를 전기 신호로 바꾸는 계층
HTTP Method
HTTP 메서드는 클라이언트가 서버에게 사용자 요청의 목적을 알리는 수단이다.
GET: 데이터 조회
POST: 요청 데이터 처리
PUT: 데이터를 변경
PATCH: 일부 데이터만 변경
DELETE: 데이터를 삭제
GET vs POST
GET은 데이터를 조회하기 위해 사용되는 방식으로 데이터를 헤더에 추가하여 전송하는 방식이다. URL에 데이터가 노출되므로 보안적으로 중요한 데이터를 포함하면 안된다.
POST는 데이터를 추가 또는 수정하기 위해 사용되는 방식으로 데이터를 바디에 추가하여 전송하는 방식이다. 완전히 안전하다는 것은 아니지만 URL에 데이터가 노출되지 않아서 GET보다 안전하다.
세션 기반 인증vs토큰 기반 인증
세션 기반 인증은 클라이언트로부터 요청을 받으면 클라이언트의 상태 정보를 저장하므로, Stateful한 구조를 가지고, 토큰 기반 인증은 상태 정보를 서버에 저장하지 않으므로 Stateless한 구조를 가진다.
또한, 세션 기반 인증은 단일 도메인에서 사용하는 것이 좋고, 아니라면 토큰 기반 인증을 사용하는 것이 적합하다. 세션을 관리할 때 사용되는 쿠키는 단일 도메인 및 서브 도메인에서만 작동하도록 설계되어 있기 때문에 여러 도메인에서 관리하는 것이 어렵다.(CORS문제)
Stateful한 세션기반인증방식의 단점?
- 서버에 세션을 저장하기 때문에, 사용자가 증가하면 서버에 과부하를 줄 수 있어서 확장성이 낮다.
- 해커가 훔친 쿠키를 이용해 요청을 보내면 서버는 올바른 사용자가 보낸 요청인지 알 수 없다.(세션 하이재킹 공격)
OAuth
외부 서비스의 인증 및 권한 부여를 관리하는 사용자 인증 프로토콜이다. 클라이언트와 서버 사이 인증을 하면 서버가 액세스 토큰을 주고, 클라이언트는 액세스 토큰을 이용해 API 요청을 할 수 있다. 서버는 API 요청을 받고 액세스 토큰을 가지고 권한이 있는지 확인해서 결과를 클라이언트에 보내준다. 카카오톡, 구글, 페이스북 등 소셜에 저장되어 있는 정보를 가지고 사이트에 로그인 하지 않고도 사용자 인증을 해서 서비스를 이용할 수 있게 해준다.
JWT 토큰
JWT는 JSON 포맷을 이용하는 Claim(주체가 무엇인지를 표현) 기반의 웹 토큰으로, 토큰 자체를 정보로 사용하는 Self-Contained 방식으로 정보를 안전하게 전달한다. JWT는 헤더.페이로드.서명으로 구성되며 각 파트를 점으로 구분한다.
헤더: 토큰의 타입과 해시 암호화 알고리즘으로 이루어져 있다.
페이로드: 토큰에 사용자가 담고자 하는 정보를 담는다. 페이로드에는 Claim이 담겨 있고, JSON 형태의 한 쌍으로 이루어져 있다.
서명: 토큰을 인코딩하거나 유효성을 검증할 때 사용하는 고유한 암호화 코드이다. 헤더와 내용의 값을 인코딩한다.
Connection Timeout vs Read Timeout
서버 자체에 클라이언트가 어떤 사유로 접근을 실패했을 때 적용하는 것이 Connection Timeout이다. 즉, 접근을 시도하는 시간 제한이 Connection timeout되는 것을 말한다.
클라이언트가 서버에 접속을 성공 했으나, 서버가 로직을 수행하는 시간이 너무 길어서 제대로 응답을 못 준 상태에서 클라이언트가 연결을 해제하는 것이 Read Timeout이다. 이 경우는 클라이언트가 해당 상황을 오류로 인지하고, 서버는 계속 로직을 수행하고 있어 성공으로 인지해 양 사이드간 싱크가 맞지 않아 문제가 발생할 확률이 높다.
공인 IP vs 사설 IP
- 사설 IP는 일반 가정이나 회사 내 등에 할당된 네트워크 IP 주소이며, IPv4의 주소부족으로 인해 서브넷팅된 IP이기 때문에 라우터에 의해 로컬 네트워크상의 PC나 장치에 할당된다.
- 사설 IP 주소만으로는 인터넷에 직접 연결할 수 없고, 라우터를 통해 1개의 공인 IP를 할당하고, 라우터에 연결된 개인 PC는 사설 IP를 각각 할당 받아 인터넷에 접속할 수 있다.
- 공인 IP는 ISP가 제공하는 IP 주소이며, 외부에 공개되어 있는 IP주소이다.
3 way handshaking이 일어나는 흐름
- 클라이언트가 서버로 SYN을 보낸다.
- 서버가 클라이언트로 SYN, ACK를 보낸다.
- 클라이언트가 ACK를 보낸다.
'CS' 카테고리의 다른 글
[데이터베이스] Key (0) | 2025.01.26 |
---|---|
신입 개발자 CS 면접 대비 질문-ECT #1 (0) | 2023.02.23 |
신입 개발자 CS 면접 대비 질문-운영체제 #2 (0) | 2023.02.12 |
신입 개발자 CS 면접 대비 질문-웹 #1 (0) | 2023.02.02 |
신입 개발자 CS 면접 대비 질문-운영체제 #1 (0) | 2023.01.30 |
댓글