쿠키와 세션의 차이에 대해 설명해 주세요.
쿠키
- 클라이언트에 저장되는 키와 값이 들어있는 파일
세션
- 일정 기간동안 사용자로부터 들어오는 일련의 요구를 하나의 상태로 보고 그 상태를 유지시키는 기술
- 쿠키를 기반으로 하지만 서버측에서 저장되고 관리
- 세션 ID를 이용해 클라이언트를 구분하며 브라우저를 종료할 때 까지 세션을 유지
차이
- 쿠키는 클라이언트에 저장되지만 세션은 서버에 저장된다.
- 쿠키는 정보를 직접 저정하기 때문에 보안면에서는 세션이 우수하다.
- 쿠키는 만료시간 동안 파일로 저장되므로 브라우저를 종료해도 정보가 남아있지만, 세션은 브라우저가 종료되면 만료시간과 상관없이 삭제된다.
세션 방식의 로그인 과정에 대해 설명해 주세요.
- 클라이언트의 로그인 요청
- 정보를 서버에 세션 저장소에 저장하고 세션ID를 발급해 클라이언트에 전달
- 클라이언트는 세션ID를 쿠키에 저장
HTTP의 특성인 Stateless에 대해 설명해 주세요.
Connectionless
- TCP연결을 맺고 요청을 보내면 서버는 응답을 보내고 연결이 끊어진다.
- HTTP 1.1은 커넥션을 계속 유지한다.
Stateless
- HTTP는 상태를 따로 저장하지 않고 연결이 끊어지는 순간 모든 상태 정보가 사라지게 된다.
Stateless의 의미를 살펴보면, 세션은 적절하지 않은 인증 방법 아닌가요?
세션 방식은 이에 반하긴 하나 현대의 웹 서비스들은 불가피하게 상태를 유지해야하는 경우가 많으며 Stateless를 유지하기 위해 요청마다 필요한 정보를 모두 담아 통신하는게 부하와 cost가 더 클 수 있어 사용한다.
규모가 커져 서버가 여러 개가 된다면, 세션을 어떻게 관리할 수 있을까요?
서버 모두가 세션을 공유해야 하기 떄문에 세션 저장소를 두어 모든 서버에서 해당 저장소를 바라보게 하면된다. 오류를 대비해 백업용 세션 저장소까지 준비하면 좋다.
HTTP 응답코드에 대해 설명해 주세요.
- HTTP 요청에 대해 성공적으로 완료되었는지 알려준다.
1XX(정보 전달)
- 요청을 받았고, 작업을 진행 중
- 100 Continue: 진행중, 현재까지 진행 상태에 문제가 없음
- 101 Switching Protocol: 클라이언트가 보낸 Upgrade 요청 헤더에 대한 응답이 들어가며 서버에서 프로토콜을 변경할 것임을 알려줌
- Websocket 프로토콜 전환 시 사용
- 102 Processing(WebDAV): 서버가 요청을 수신해 처리하고 있지만, 아직 제대로된 응답을 알려줄 수 없음
2XX(성공)
- 200 OK: 요청이 성공적으로 되었다.
- 201 Created: 요청이 성공적이였으며 새로운 리소스가 생성됨
- 202 Accepted: 요청을 수신했지만 처리되지 않았음
- 203 Non-Authoritative Information: 응답받은 메타정보가 서버에 저장된 원본과는 동일하지 않지만 로컬이나 다른 복사본에서 수집되었음을 알리는 응답코드
- 204 Non Content: 성공적으로 처리했지만 컨텐츠를 제공하지 않음
- 205 Reset Content: 서버가 요청을 성공적으로 처리했지만 콘텐츠를 표시하지 않음
- 204와 달리 요청자가 문서보기를 재설정할 것을 요구
- 206 Partial Content: 컨텐츠의 일부분만 제공
- 207 Multi-Status: 여러 소스에서 여러 응답인 상태에서 적절한 정보를 사용자한테 제공할 수 있도록 하는 응답코드
- 208 Aleardy Reported(WebDAV): DAV 바인딩 멤버는 이미 응답의 앞 부분에 열거. 다시 포함되지 않음
- 226 IM Used(HTTP Delta Encoding): 서버가 사용자의 GET 요청에 대한 리소스의 의무는 다했고, 현재 인스턴스에 적용된 하나 이상의 인스턴스 조작 결과를 보낼 때 사용
3XX(리다이렉션)
- 300 Multiple Choices: 서버에서 여러 개의 응답이 있음을 알릴 때 사용할 의도로 만들었으나, 정작 응답을 선택하는 방법은 표준화되지 않아 사용되지 않음
- 301 Move Permanently: 영구적으로 컨텐츠가 이동했을 때 사용
- 302 Found: 일시적으로 컨텐츠가 이동함
- 303 See Other: 서버가 사용자의 GET 요청을 처리해 다른 URL에서 요청된 정보를 가져올 수 있도록 응답하는 코드
- 304 Not Modified: 캐시 목적으로 사용. 클라이언트에게 응답이 수정되지 않았음을 알려줌.
- 305 Use Proxy: 프록시를 사용하지 않으면 접근할 수 없는 컨텐츠에 사용할 목적.
- 보안상 이유로 현재 사용 중지된 비권장 응답코드
- 307 Temporary Redirect: 302와 동일하기 일시적 컨텐츠 이동을 나타내나, HTTP 메서드의 변경을 허용하지 않음
- 308 Permanently Redirect: 301와 동일하기 영구적 컨텐츠 이동을 나타내나, HTTP 메서드의 변경을 허용하지 않음
4XX (클라이언트 오류)
이 요청은 올바르지 않음
- 400 Bad Request: 요청 자체가 잘못됨
- 401 Unauthorized: 인증이 필요한 리소스에 인증없이 접근한 경우
- 이 응답코드를 사용할 때 반드시 브라우저에 어느 인증 방식을 사용할 것인지 보내야 함
- 단순히 권한이 없는 경우 이 응답 코드 대신 403을 사용
- 403 Forbidden: 서버가 요청을 거부
- 404 Not Found: 찾는 리소스가 없음
- 408 Reqeust Timeout: 요청 중 시간 초과
5XX (서버 오류)
서버가 응답할 수 없다는 의미, 요창이 올바른지 여부는 알 수 없음
- 500 Internal Server Error: 서버에 오류가 발생해 작업을 수행할 수 없음
- 501 Not Implemented: 서버가 요청을 수행하는데 필요한 기능을 지원하지 않는 경우
- 502 Bad Gateway: 게이트웨이가 연결된 서버로부터 잘못된 응답을 받았을 때 사용
- 503 Service Temporaliy Unavailable: 서비스를 일시적으로 사용할 수 없음
- 504 Gateway Timeout: 게이트웨이가 연결된 서버로부터 응답을 받을 수 없었을 때 사용됨
401 (Unauthorized) 와 403 (Forbidden)은 의미적으로 어떤 차이가 있나요?
- 401은 클라이언트가 인증되지 않았거나, 유효한 인증정보가 부족해 요청이 거부되었음. 주로 로그인 되지 않은 상태에서 요청을 하는 경우
- 403은 클라이언트가 권한이 없다는 것을 의미, 로그인하여 인증되었지만 접근 권한이 없는 무언가를 요청할 떄 사용되는 값
200 (ok) 와 201 (created) 의 차이에 대해 설명해 주세요.
두 코드다 성공했다는 의미이나 201은 요청을 정상적으로 처리해 새로운 리소스가 생겼음을 의미한다.
HTTP Method 에 대해 설명해 주세요.
GET
- 서버로부터 데이터 취득
- Body값과 Content-Type이 비워져있음
POST
- 서버에 데이터 추가/작성
- Body 값과 Content-Type 값을 작성
- URL 로 데이터를 받지 않음
PUT
- 서버에 존재하는 리소스를 요청에 담긴 내용대로 통쨰로 대체
- 고유값의 리소스가 존재하면 리소스를 대체, 없다면 생성
Delete
- 서버의 데이터를 삭제
- Body와 Content-Type 값 없음
HEAD
OPTIONS
PATCH
CONNETC
HTTP Method의 멱등성에 대해 설명해 주세요.
- 여러번 수행해도 결과가 같음, 호출로 인해 데이터가 변형되지 않음을 의미한다.
POST와 PUT, PATCH의 차이는 무엇인가요?
- POST는 하위 리소스 생성을 요청하거나 일반적인 처리 연산
- PUT은 리소스를 생성하거나 대체
- PATCH는 리소스의 부분 업데이트 요청
HTTP 1.1 이후로, GET에도 Body에 데이터를 실을 수 있게 되었습니다. 그럼에도 불구하고 왜 아직도 이런 방식을 지양하는 것일까요?
Body에 거의 데이터가 의미가 없고, 몇몇 구현이 요청을 거부하게끔 하는 원인이 될 수 있다.
HTTP에 대해 설명해 주세요.
- Hyper Text Transfer Protocol
- 인터넷에서 데이터를 주고받을 수 있는 프로토콜
- TCP/IP 레이어 기반
공개키와 대칭키에 대해 설명해 주세요.
대칭키
- 암복호화에 사용되는 키가 동일한 방식
- 연산속도가 빠름
- 키를 교환하는 도중 키가 탈취될 수 도 있다
공개키
- 암복호화에 사용하는 키가 서로 다름
- 암호화는 공개키를 이용해 암호화하고, 복호화는 개인키를 이용해 복호화 한다.
- 암호화와 복호화를 위해 수학 연산을 수행하기 때문에 대칭키에 비해 느리다.
왜 HTTPS Handshake 과정에서는 인증서를 사용하는 것 일까요?
SSL Handshake
- 클라이언트에서 서버로 연결을 시도하는 패킷을 전송한다. 이때 암호화된 정보를 함께 담는다.
- 서버에서 세션 ID와 CA공개 인증서를 메시지와 함께 응답한다. 이 CA인증서는 통신 이후 사용될 대칭키가 생성되기 전에 사용될 공개키를 담고있다.
2-1. 공개키가 인증서 내부에 없다면 서버가 직접 전달한다.
- CA 인증서가 유효한지 확인한다.
- 신뢰성이 확보되었다면 대칭키를 생성하여 서버의 공개키로 암호화하여 전달한다.
4-1. 만약 Diffle-Hellman 알고리즘이나 ECDHE을 사용한다면 대칭키를 생성할 재료를 교환한다.
- 클라이언트는 handshake과정이 완료되었다는 메시지를 보내면서 교환내역을 해싱후 대칭키로 암호화 하여 보낸다.
- 서버도 동일하게 해싱후 클라이언트에서 보내준 값과 일치하는지 확인한다. 그 후 메시지를 이번에 만든 대칭키로 암호화해 보낸다.
SSL과 TLS의 차이는 무엇인가요?
SSL
- 전달되는 모든 데이터를 암호화
- 특정한 유형의 사이버 공격 차단
TLS
- TLS handshake가 SSL보다 빠름
- 향상된 보안 기능
웹소켓과 소켓 통신의 차이에 대해 설명해 주세요.
소켓
- 네트워크 상 동작하는 프로그램 간의 통신 종착점
- 1대1 통신의 경우 양 측에 소켓이 존재해야한다.
- 단순히 바이트로 이루어진 데이터를 다룸
웹 소켓
- HTTP 레이어에서 작동하는 소켓
- 애플리케이션 계층에 기반하여 메시지 형태의 데이터를 다룸
소켓과 포트의 차이가 무엇인가요?
포트
- 임시 파일이나 스토리지를 사용하지 않고 데이터를 교환하는데 사용할 수 있는 논리적 데이터 연결
- 호스트 내부적으로 데이터를 주고받는 프로세스를 식별하기 위한 고유한 값
소켓
- 프로세스가 네트워크를 통해 데이터를 주고받으려면 반드시 열어야하는 창구
- 포트와 연관되어있는 여러개의 소켓이 있을 수 있음
여러 소켓이 있다고 할 때, 그 소켓의 포트 번호는 모두 다른가요?
같을 수 있다.
참고자료