CS 정리 - 9

유호준·2023년 5월 24일
1

CS 정리

목록 보기
3/12
post-thumbnail

쿠키와 세션의 차이에 대해 설명해 주세요.

쿠키

  • 클라이언트에 저장되는 키와 값이 들어있는 파일

세션

  • 일정 기간동안 사용자로부터 들어오는 일련의 요구를 하나의 상태로 보고 그 상태를 유지시키는 기술
  • 쿠키를 기반으로 하지만 서버측에서 저장되고 관리
  • 세션 ID를 이용해 클라이언트를 구분하며 브라우저를 종료할 때 까지 세션을 유지

차이

  • 쿠키는 클라이언트에 저장되지만 세션은 서버에 저장된다.
  • 쿠키는 정보를 직접 저정하기 때문에 보안면에서는 세션이 우수하다.
  • 쿠키는 만료시간 동안 파일로 저장되므로 브라우저를 종료해도 정보가 남아있지만, 세션은 브라우저가 종료되면 만료시간과 상관없이 삭제된다.

세션 방식의 로그인 과정에 대해 설명해 주세요.

  1. 클라이언트의 로그인 요청
  2. 정보를 서버에 세션 저장소에 저장하고 세션ID를 발급해 클라이언트에 전달
  3. 클라이언트는 세션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 값 없음
  • 서버 리소스의 메타데이터 취득

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 과정에서는 인증서를 사용하는 것 일까요?

  • HTTPs는 인터낫상에서 정보를 암호화한다.

SSL Handshake

  1. 클라이언트에서 서버로 연결을 시도하는 패킷을 전송한다. 이때 암호화된 정보를 함께 담는다.
    • 프로토콜 버전, 암호화 알고리즘 등
  2. 서버에서 세션 ID와 CA공개 인증서를 메시지와 함께 응답한다. 이 CA인증서는 통신 이후 사용될 대칭키가 생성되기 전에 사용될 공개키를 담고있다.
    2-1. 공개키가 인증서 내부에 없다면 서버가 직접 전달한다.
  3. CA 인증서가 유효한지 확인한다.
  4. 신뢰성이 확보되었다면 대칭키를 생성하여 서버의 공개키로 암호화하여 전달한다.
    4-1. 만약 Diffle-Hellman 알고리즘이나 ECDHE을 사용한다면 대칭키를 생성할 재료를 교환한다.
  5. 클라이언트는 handshake과정이 완료되었다는 메시지를 보내면서 교환내역을 해싱후 대칭키로 암호화 하여 보낸다.
  6. 서버도 동일하게 해싱후 클라이언트에서 보내준 값과 일치하는지 확인한다. 그 후 메시지를 이번에 만든 대칭키로 암호화해 보낸다.

SSL과 TLS의 차이는 무엇인가요?

SSL

  • 전달되는 모든 데이터를 암호화
  • 특정한 유형의 사이버 공격 차단

TLS

  • TLS handshake가 SSL보다 빠름
  • 향상된 보안 기능

웹소켓과 소켓 통신의 차이에 대해 설명해 주세요.

소켓

  • 네트워크 상 동작하는 프로그램 간의 통신 종착점
  • 1대1 통신의 경우 양 측에 소켓이 존재해야한다.
  • 단순히 바이트로 이루어진 데이터를 다룸

웹 소켓

  • HTTP 레이어에서 작동하는 소켓
  • 애플리케이션 계층에 기반하여 메시지 형태의 데이터를 다룸

소켓과 포트의 차이가 무엇인가요?

포트

  • 임시 파일이나 스토리지를 사용하지 않고 데이터를 교환하는데 사용할 수 있는 논리적 데이터 연결
  • 호스트 내부적으로 데이터를 주고받는 프로세스를 식별하기 위한 고유한 값

소켓

  • 프로세스가 네트워크를 통해 데이터를 주고받으려면 반드시 열어야하는 창구
  • 포트와 연관되어있는 여러개의 소켓이 있을 수 있음

여러 소켓이 있다고 할 때, 그 소켓의 포트 번호는 모두 다른가요?

같을 수 있다.

참고자료

profile
포트폴리오 - https://drive.google.com/file/d/152OM9p7JQorjUfvR4BaxqGuP5xtQ8-fM/view?usp=sharing

0개의 댓글