네트워크

쿠키와 세션이 등장하게 된 이유를 아시나요?

HTTP는 클라이언트가 요청을 한 후 응답을 받으면 그 연결을 끊어 버리는 특징인 connectionless와 통신이 끝나면 상태를 유지하지 않는 특징인 stateless를 해결하기 위해서 쿠키와 세션이 등장하게 되었습니다.

쿠키는 무엇인가요??

쿠키란 클라이언트의 로컬에 저장되는 키-값이 들어있는 작은 데이터 파일을 의미합니다. 쿠키에는 유효 시간을 지정할 수 있으며, 쿠키의 유효 시간이 남을 경우 브라우저가 종료되도 스토리지에 남아있습니다.

쿠키 동작 방식

  1. 클라이언트가 페이지를 요청
  2. 서버에서 쿠키를 생성
  3. HTTP 헤더에 쿠키를 포함 시켜 응답 (Set-Cookie)
  4. 브라우저에서 쿠키를 저장
  5. 쿠키가 존재하면 요청을 할 경우 HTTP 헤더에 쿠키를 함께 보내서 요청 한다.

팝업, 자동 로그인, 장바구니 등의 기능을 구현할 때 쿠키를 사용합니다.

세션이란 무엇인가요??

세션은 인증과정에서 보통 쿠키를 기반으로 하고 있지만, 클라이언트의 상태 정보를 서버 메모리에 저장하는 기술을 의미합니다. 서버 메모리에서 관리하기 때문에 사용자 수가 많을 경우 성능 저하의 요인이 됩니다.

세션 동작 방식

  1. 클라이언트가 서버에 접속 시 세션 ID를 발급
  2. 클라이언트는 세션 ID를 쿠키를 사용해 저장 (쿠키 이름 : JSESSIONID)
  3. 클라이언트가 서버에 다시 접속 시 이 쿠키를 이용해서 세션 ID값을 서버에 전달

세션과 쿠키의 차이는 무엇인가요??

세션과 쿠키의 가장 큰 차이는 사용자의 상태 정보가 어디에 저장되어 있느냐의 차이 입니다. 쿠키는 클라이언트 로컬에 저장되고 세션은 서버 메모리에서 저장합니다.

세션 쿠키 방식의 장단점은 무엇인가요?

장점

  • 세션 ID는 유의미한 값을 갖지 않기 때문에 HTTP 헤더나 바디에 직접 계정정보를 담아 전송하는 것 보다 보안에 강하다.
  • 세션 ID는 고유의 ID값이기 때문에 서버 메모리에서 바로 검색할 수 있어 성능 향상을 기대할 수 있습니다.

단점

  • 가로챈 쿠키 즉, 세션 ID를 가지고 해커가 동일한 요청을 보낼 경우 진짜 사용자 인지 해커인지 구분할 수가 없다. (세션 유효시간을 짧게 설정, HTTPS 프로토콜 사용)
  • 세션 저장소는 서버의 메모리를 사용하기 때문에 동시 사용자가 많을 수록 서버의 부하가 심하게 걸린다.

토큰 기반 인증 방식은 무엇인가요?

인증에 필요한 정보들을 암호화시킨 토큰을 통해서 인증을 하는 방식을 의미합니다.

토큰 인증 동작 방식

  1. 클라이언트가 로그인 한다.
  2. 서버는 사용자를 확인하고 Access Token을 발급해 사용자에게 응답해준다.
  3. 사용자는 Access Token을 받아 쿠키와 같은 곳에 저장한 후, 인증이 필요한 요청마다 토큰을 헤더에 실어 보낸다.
  4. 서버는 해당 토큰을 검증하고 적절한 토큰일 경우 사용자에 알맞는 데이터를 보낸다.

토큰 기반 인증 방식의 장단점은 무엇인가요?

장점

  1. 세션/쿠키와 달리 토큰은 별도의 저장소 관리가 필요 없고 검증만 하면 되기 때문에 추가 저장소가 필요 없습니다.
  2. Facebook이나 Google에서 지원해주는 다양한 서비스도 토큰 기반으로 진행되기 때문에 관련 기능을 확장하기 용이합니다.

단점

  1. 토큰의 경우도 세션 ID와 마찬가지로 탈취되었을 경우 진짜 사용자인지 해커인지 구분할 수 없습니다. (HTTPS 프토콜을 사용, 토큰 유효기간을 짧게 한다.(Refresh Token 사용))
  2. 토큰의 길이는 세션 ID보다 훨씬 길기 떄문에 많은 요청이 발생할 수록 오버헤드도 많이 발생합니다.

JWT는 무엇인가요?

JWT란 Json Web Token의 줄임말로써 Json 포맷을 통해 사용자에 대한 속성을 저장하는 Web Token이다.

JWT의 구조는 Header, Payload, Signature의 3부분으로 이루어 지며 각각의 역할을 다음과 같습니다.

  • Header: Signature를 해싱하기 위한 알고리즘이나 토큰의 타입을 지정하는 부분
  • Payload: 토큰에서 사용할 정보의 조각들인 Claim으로 구성되어 있다.
    • Payload에 담는 정보의 ‘한 조각’을 Claim이라고 부르고, 이는 key/value의 한 쌍으로 이루어져 있습니다.
  • Signature: 토큰을 인코딩하거나 유효성 검증을 할 때 사용하는 고유한 암호화 코드이다.

JWT를 사용하신 이유가 있나요??

토큰 기반 인증을 위해 토큰 생성이 가장 간단하면서도 만료 기간과 같은 다양한 기능 명세가 존재했기 때문에 사용하였습니다. 또한 자바 단에 JWT Token을 생성하고 검증할 수 있는 라이브러리가 잘 형성 되어있었기 때문에 사용하기도 하였습니다.

JWT의 단점은 무엇인가요??

  • JWT 토큰은 상태 정보를 저장하지 않아 한번 발행된 토큰이 임의로 삭제될 수 없기 때문에 적절한 토큰 만료 기간을 넣어줘야 했습니다.
  • JWT 토큰은 전체적으로 길이가 길기 때문에 많은 요청과 응답이 발생할 경우 성능에 영향을 줄 수 있습니다.
  • JWT의 Payload 자체는 암호화 된 것이 아니라 인코딩 된 것이기 때문에 암호화에 신경 쓰거나, 중요 데이터를 Payload에 넣지 않아야 합니다.
  • Token 기반의 인증과 마찬가지로 Token을 탈취 당했을 경우 올바른 사용자 식별을 할 수 없습니다. 이를 위해 HTTPS나 적절한 만료 기간을 설정했어야만 했습니다.

OAuth

OAuth란 특정 애플리케이션이 다른 애플리케이션의 정보에 접근할 수 있는 권한을 관리하는 프로토콜 입니다.

OSI 7 레이어는 무엇인가??

OSI 7 레이어란 네트워크를 계층적인 구조로 표현한 것을 가리키며 구조는 아래와 같습니다.

  1. 물리 계층(Physical Layer) : 하나의 비트를 노드에서 다음 노드로 전송해주는 서비스를 담당한다.
  2. 링크 계층(Link Layer) : 물리 계층을 통해 송수신되는 정보의 오류와 흐름을 관리하여 안전한 정보의 전달을 수행할 수 있도록 도와주는 서비스를 담당한다. (MAC)
  3. 네트워크 계층(Network Layer) : 데이터를 목적지까지 가장 안전하고 빠르게 전달하는 라우팅과 포워딩 서비스를 담당한다. (IP)
  4. 전송 계층(Transport Layer) : End to End 사용자들이 신뢰성있는 데이터를 주고받을 수 있게 도와준다. (TCP, UDP)
  5. 세션 계층(Session Layer) : 양 끝단의 응용 프로세스가 통신(동시 송수신, 반이중, 전이중)을 관리하기 위한 방법을 제공한다.
  6. 표현 계층(Presentation Layer) : 코드 간의 번역을 담당하여 데이터의 형식상 차이를 다루는 부담을 응용 계층으로부터 덜어 준다.
  7. 응용 계층(Application Layer) : 응용 프로세스와 직접 관계하여 일반적인 응용 서비스를 수행한다. (HTTP, DNS, SSH)

왜 OSI 7 레이어로 나누었을까??

네트워크를 7계층으로 나눈 이유는 네트워크에서 이상이 발생했을 경우 다른 레이어의 장비 및 소프트웨어를 건들지 않고도 이상이 생긴 특정 레어어만 고칠 수 있는 유지보수 측면에서의 장점과, 새로운 응용 계층 프로토콜을 개발할 경우 물리계층 부터 개발하지 않고 표현계층까지 재사용함으로써 확장성 측면에서의 장점을 가지기 때문에 네트워크를 계층적 구조인 OSI 7 레이어로 나누었습니다.

HTTP는 무엇인가?

HTTP는 어플리케이션 계층 프로토콜의 한 종류로써 TCP/IP 기반의 신뢰적인 프로토콜입니다. 주로 브라우저와 서버간의 통신을 하기 위해 자주 사용합니다.

헤더 필드로는 Content-Legth, Content-Type, Connection, User-Agent, Accept, Status Code 등이 존재합니다.

http status code는 HTTP Response의 필드 중에 하나인데 순서는 아래와 같습니다.

  • 1xx: 서버는 요청을 받았으며 작업을 계속한다.
  • 2xx: 클라이언트가 요청한 동작을 수신하고 이해했으며 성공적으로 처리했음을 가리킨다.
  • 3xx: 클라이언트는 요청을 마치기 위해 추가 동작을 취해야 한다는 것을 의미하구요
  • 4xx: 클라이언트의 요청에 오류가 있다는 것을 말합니다.
  • 5xx: 클라이언트 요청은 이상이 없지만 이를 처리하는 서버에 문제가 있다는 것을 말합니다.

DNS 서비스는 무엇인가??

DNS란 Host의 Domain Name을 Host의 IP로 변환해주는 서비스를 말합니다. DNS 서버들은 계층구조로 구현된 분산 데이터베이스로 주요 구성 요소로써 Root, Top Level Domain(TLD), Authoritative, Local DNS Server가 존재합니다.

DNS 서비스 과정 (캐싱 x)

  1. Host가 gaia.cs.umass.edu의 IP주소를 Local DNS서버에게 요청을 보낸다.
  2. Local DNS서버는 루트 DNS 서버에게 Domain Name을 보내고 루트 DNS 서버는 edu를 인식한 후 TLD 서버의 주소를 넘겨준다
  3. Local DNS서버는 TLD서버에게 Domain Name을 보내고 TLD 서버는 unmass.edu를 인식한 후 Authoritative 서버의 주소를 넘겨준다.
  4. Local DNS서버는 Authoritative 서버에게 Domain Name을 보내고 gaia.cs.umass.edu에 해당하는 Ip주소를 얻어온다.
  5. 변환된 Ip 주소를 Host에게 넘겨주고 Host는 이 IP를 사용해서 어플리케이션 간에 통신 한다.

TCP와 UDP의 차이는 무엇인가?

UDP는 비신뢰적이고 비연결형 서비스를 제공하는 프로토콜이구요 TCP는 신뢰적이고 연결형 서비스를 제공하는 프로토콜 입니다. UDP는 주로 DNS나, IPTV등에서 사용하고 TCP는 HTTP 등에서 사용됩니다.

TCP의 3 Way-HandShake에 대해서 알고 잇나요??

TCP의 3 Way Handshake란 TCP로 통신을 하는 장치간에 서로 연결이 잘 되어있는지 확인하는 과정, 방법이다.

  1. synchronize의 줄임말인 syn 세그먼트를 클라이언트가 서버로 보낸다.
  2. 서버는 클라이언트에게 syn에 대한 ack를 보낸다
  3. 클라이언트는 syn에 대한 ack의 ack를 보낸다.