TIL | 면접 카타 8, 9번

bubblegum·2024년 4월 3일
0

Today I learn(TIL)

목록 보기
46/84
post-thumbnail

8. 쿠키, 세션의 개념과 차이를 설명해보세요

쿠키와 세션은 웹 사이트에서 사용자의 상태를 유지하기 위해 사용되는 기술입니다. 이 둘은 사용자가 웹 사이트를 이용할 때 개인화된 경험을 제공하기 위해 필수적인 요소이지만, 작동 방식과 사용 목적에 있어서 몇 가지 차이점이 있습니다.

쿠키(Cookie)

쿠키는 사용자의 컴퓨터에 저장되는 작은 텍스트 파일입니다. 웹 서버가 사용자의 브라우저에게 쿠키를 보내면, 이후 다시 해당 서버에 접속할 때마다 브라우저는 이 쿠키를 서버에 전송합니다. 이를 통해 사용자가 사이트에 대한 선호도, 로그인 상태, 장바구니 정보 등을 유지할 수 있습니다.

  • 장점: 서버가 아닌 클라이언트 측에 데이터를 저장하기 때문에 서버의 부하를 줄일 수 있습니다.
  • 단점: 보안에 취약할 수 있으며, 사용자의 컴퓨터에 직접 저장되기 때문에 사용자가 쿠키를 삭제할 경우 정보가 사라집니다.

세션(Session)

세션은 사용자 정보를 서버 측에서 관리합니다. 사용자가 웹 사이트에 접속하여 활동을 시작하면 서버는 해당 세션을 식별할 수 있는 고유한 ID를 생성하고, 이 ID를 쿠키(세션 쿠키)를 통해 사용자에게 전송합니다. 사용자는 이 세션 ID를 통해 서버와 상호작용하며, 서버는 이 ID를 기반으로 사용자의 상태 정보를 관리합니다.

  • 장점: 모든 정보가 서버에 저장되기 때문에 보안이 더 강화됩니다.
  • 단점: 모든 사용자 정보를 서버에서 관리해야 하기 때문에 서버에 부하가 늘어날 수 있습니다.

차이점

  1. 저장 위치: 쿠키는 사용자의 컴퓨터(클라이언트 측)에 저장되며, 세션은 서버 측에 저장됩니다.
  2. 보안: 세션이 쿠키보다 보안적인 면에서 더 우수합니다. 쿠키는 클라이언트 측에 저장되기 때문에 해킹의 위험이 더 큽니다.
  3. 자원 사용: 쿠키는 클라이언트의 자원을 사용하고, 세션은 서버의 자원을 사용합니다. 따라서 대규모 트래픽이 발생하는 사이트에서는 세션 사용이 서버에 부담을 줄 수 있습니다.
  4. 유지 기간: 쿠키는 설정에 따라 오랜 기간 동안 데이터를 유지할 수 있으나, 세션은 사용자가 브라우저를 닫거나 일정 시간 동안 활동이 없으면 만료됩니다.

각각의 기술은 웹 개발에서 중요한 역할을 하며, 사용 목적과 환경에 따라 적절히 선택하여 사용해야 합니다.

쿠키와 세션 중 어느 것이 더 좋은지는 사용하려는 애플리케이션의 목적과 요구 사항에 따라 달라집니다. 각각의 기술은 특정 상황에서 장점을 가지고 있으며, 때로는 이 둘을 함께 사용하여 웹 애플리케이션의 기능을 최적화하는 것이 좋습니다. 아래는 쿠키와 세션을 선택할 때 고려해야 할 주요 요소입니다.

쿠키 사용을 고려할 때

  • 클라이언트 측에서의 간단한 데이터 저장: 사용자의 선호도, 테마 설정, 언어 설정 등과 같이 보안이 크게 중요하지 않은 데이터를 사용자의 브라우저에 저장하고 싶을 때 쿠키를 사용할 수 있습니다.
  • 서버 부하 감소: 사용자의 컴퓨터에 데이터를 저장함으로써 서버의 부하를 줄일 수 있습니다.
  • 장기적 데이터 저장: 쿠키는 사용자가 브라우저를 닫아도 데이터가 유지되며, 만료 날짜를 설정하여 장기간 데이터를 저장할 수 있습니다.

세션 사용을 고려할 때

  • 보안이 중요한 데이터 처리: 사용자의 로그인 정보, 금융 정보 등과 같은 민감한 정보를 다룰 때는 서버 측에서 세션을 통해 데이터를 관리하는 것이 더 안전합니다.
  • 서버 측에서의 복잡한 상태 관리: 사용자의 활동 상태를 더 복잡하고 정밀하게 관리해야 할 경우 세션을 사용하여 서버 측에서 사용자의 상태를 효과적으로 관리할 수 있습니다.
  • 임시 데이터 저장: 사용자가 웹사이트를 사용하는 동안 임시적으로 데이터를 저장해야 할 경우, 예를 들어 온라인 쇼핑몰의 장바구니 기능 같은 경우에 세션을 사용하는 것이 좋습니다.

결론

결국, 쿠키와 세션 중 어느 것이 더 낫다고 일반화할 수는 없으며, 개발하고자 하는 애플리케이션의 특성과 요구 사항을 면밀히 검토한 후 적절한 기술을 선택해야 합니다. 때로는 쿠키와 세션을 함께 사용하여 서로의 단점을 보완하는 것이 최선의 방법일 수도 있습니다. 보안과 서버 부하, 사용자 경험 등 여러 측면을 고려하여 결정해야 합니다.

쿠키와 세션 외에도 사용자의 상태를 유지하기 위해 사용할 수 있는 다른 기술들이 있습니다. 이 기술들은 각기 다른 상황에서 유용하게 활용될 수 있으며, 어플리케이션의 요구 사항에 따라 적절한 선택이 필요합니다. 여기 몇 가지 대안적인 방법을 소개합니다.

1. 로컬 스토리지(Local Storage)

웹 스토리지의 일종으로, HTML5에서 소개된 로컬 스토리지는 브라우저에 키-값 쌍으로 데이터를 저장할 수 있게 해줍니다. 로컬 스토리지는 쿠키와 달리 만료 기간이 없으며, 도메인 별로 접근이 제한됩니다. 큰 용량의 데이터를 클라이언트 측에 저장할 수 있고, 서버에 데이터를 매 요청마다 보내지 않아도 되기 때문에 성능상 이점이 있습니다.

2. 세션 스토리지(Session Storage)

로컬 스토리지와 유사하지만, 세션 스토리지는 탭이나 창이 닫히면 저장된 데이터가 삭제되는 특징을 가지고 있습니다. 따라서 임시적인 데이터 저장에 적합합니다. 사용자가 브라우저를 닫기 전까지만 데이터를 유지하고 싶을 때 유용합니다.

3. IndexedDB

IndexedDB는 브라우저에 구조화된 데이터를 저장할 수 있는 저수준 API로, 복잡한 데이터 세트를 클라이언트 측에 저장할 수 있습니다. 대용량 데이터를 비동기적으로 저장하고 검색할 수 있으며, 트랜잭션 지원을 통해 데이터의 일관성을 유지합니다. 웹 애플리케이션에서 많은 양의 데이터를 클라이언트 측에서 처리해야 하는 경우에 적합합니다.

4. 웹 토큰(JSON Web Tokens, JWT)

JWT는 사용자 인증 정보를 안전하게 전송하기 위한 컴팩트하고 자가 포함된 방식으로, 사용자의 세션 정보를 서버가 아닌 클라이언트 측에 저장합니다. 토큰은 서버에서 검증될 수 있으며, 서버는 토큰을 해독하여 사용자의 인증 상태를 확인할 수 있습니다. JWT는 크로스 도메인 인증, 싱글 사인온(SSO) 등에 널리 사용됩니다.

결론

각 방법은 사용 사례, 보안 요구 사항, 데이터의 양 및 유형 등 다양한 요소에 따라 장단점이 있습니다. 따라서 어플리케이션의 특정 요구 사항에 가장 잘 맞는 방법을 선택하는 것이 중요합니다. 때로는 이러한 기술들을 적절히 조합하여 사용하여, 보다 풍부하고 안전한 사용자 경험을 제공할 수 있습니다.

로컬 스토리지, 쿠키, 세션은 모두 웹 애플리케이션에서 사용자의 데이터를 저장하는 방법이지만, 용도와 작동 방식에 있어서 몇 가지 중요한 차이점이 있습니다.

로컬 스토리지

  • 저장 용량: 로컬 스토리지는 대략 5MB ~ 10MB 사이의 데이터를 저장할 수 있으며, 이는 쿠키와 비교했을 때 훨씬 큽니다.
  • 서버와의 통신: 로컬 스토리지에 저장된 데이터는 서버로 자동으로 전송되지 않습니다. 데이터는 오로지 클라이언트 측에서만 관리되며, 필요한 경우 자바스크립트를 통해 명시적으로 서버로 전송해야 합니다.
  • 수명: 로컬 스토리지에 저장된 데이터는 사용자가 수동으로 삭제하지 않는 이상 영구적으로 남아있습니다.
  • 보안: HTTPS와 같은 보안 연결을 사용하지 않는 한, 로컬 스토리지는 쿠키보다 덜 안전할 수 있습니다. XSS 공격에 취약할 수 있습니다.

쿠키

  • 저장 용량: 쿠키는 대략 4KB의 데이터만 저장할 수 있습니다.
  • 서버와의 통신: 쿠키는 클라이언트와 서버 간의 통신을 위해 설계되었습니다. 쿠키에 저장된 데이터는 HTTP 요청의 헤더에 자동으로 포함되어 서버로 전송됩니다.
  • 수명: 쿠키는 만료 날짜를 설정할 수 있습니다. 만료 날짜가 지나면 자동으로 삭제됩니다.
  • 보안: 쿠키는 Secure 속성과 HttpOnly 속성을 설정하여 보안을 강화할 수 있습니다. 이는 쿠키가 HTTPS를 통해서만 전송되고, 자바스크립트를 통한 접근을 차단할 수 있도록 합니다.

세션

  • 저장 위치: 세션 데이터는 서버 측에 저장됩니다. 클라이언트는 세션 ID만을 보관하며, 이 ID를 통해 서버가 해당 사용자의 세션 데이터에 접근합니다.
  • 수명: 세션은 사용자가 브라우저를 닫거나 로그아웃할 때 종종 만료됩니다. 그러나 세션의 정확한 수명은 서버 설정에 따라 달라질 수 있습니다.
  • 보안: 세션은 데이터가 서버에 저장되므로 쿠키나 로컬 스토리지에 비해 보안성이 높은 편입니다. 그러나 세션 하이재킹 공격에 대한 보호 조치가 필요합니다.

결론

로컬 스토리지, 쿠키, 세션은 각각의 장단점이 있으며, 애플리케이션의 요구 사항에 따라 적절하게 선택하여 사용해야 합니다. 로컬 스토리지는 큰 데이터를 클라이언트 측에 저장하기에 적합하고, 쿠키는 서버와 클라이언트 간의 작은 데이터를 주고받는 데 유용합니다. 세션은 보안이 중요한 데이터를 서버 측에 저장하기 위해 사용됩니다.

웹 애플리케이션에서 사용자의 상태를 관리하기 위해 쿠키, 세션, 로컬 스토리지, 세션 스토리지, IndexedDB, JWT 외에도 사용할 수 있는 다른 기술들이 있습니다. 여기 몇 가지 추가적인 상태 관리 기술을 소개합니다.

1. 서버 사이드 세션 스토리지

서버 사이드에서 세션을 관리하는 방법으로, 사용자의 세션 정보를 서버의 메모리나 데이터베이스에 저장합니다. 이 방법은 서버 자원을 사용하므로 대규모 트래픽이 발생하는 애플리케이션에서는 확장성이 제한될 수 있습니다. 그러나, 서버에서 직접 관리하기 때문에 보안성이 높은 편입니다.

2. 캐싱(Caching)

캐싱은 자주 사용되는 데이터나 결과를 임시로 저장해 두고, 동일한 요청이 들어왔을 때 빠르게 응답할 수 있도록 하는 기술입니다. 캐싱은 클라이언트 측에서도 (예: 웹 브라우저 캐시), 서버 측에서도 (예: 메모리 캐시, 데이터베이스 캐시) 사용될 수 있으며, 네트워크 트래픽과 서버 부하를 줄이는 데에 도움을 줍니다.

3. 클라이언트 사이드 라이브러리 및 프레임워크

현대적인 웹 애플리케이션 개발에서는 React, Vue, Angular와 같은 클라이언트 사이드 라이브러리나 프레임워크를 사용하여 상태 관리를 합니다. 이러한 도구들은 자체적인 상태 관리 솔루션을 제공하며, 예를 들어 React의 경우 Redux, Context API, MobX 등의 상태 관리 라이브러리와 함께 사용됩니다.

4. GraphQL과 Apollo Client

GraphQL은 REST API와 다른, 데이터 쿼리와 조작을 위한 쿼리 언어입니다. Apollo Client와 같은 GraphQL 클라이언트를 사용하면 애플리케이션의 상태 관리를 더욱 효율적으로 할 수 있습니다. Apollo Client는 캐싱, 상태 관리, 데이터 동기화 등을 자동으로 처리해주어 복잡한 애플리케이션에서도 간단하게 데이터를 관리할 수 있게 도와줍니다.

5. Progressive Web Apps (PWAs) 캐싱 및 배경 동기화

PWAs는 오프라인에서도 작동할 수 있도록 설계된 웹 애플리케이션입니다. Service Workers를 사용하여 네트워크 요청을 가로채고, 필요한 자원을 캐시에 저장하여 오프라인에서도 애플리케이션이 작동할 수 있도록 합니다. 또한, 배경 동기화를 통해 네트워크가 다시 연결되었을 때 사용자의 작업을 서버와 동기화할 수 있습니다.

각각의 상태 관리 기술은 특정 상황과 요구 사항에 따라 장단점이 있으므로, 애플리케이션의 목적에 맞는 적절한 기술을 선택하는 것이 중요합니다

9. TCP/UDP에 대해서 설명해주세요.

TCP(Transmission Control Protocol)와 UDP(User Datagram Protocol)는 인터넷 상에서 데이터를 전송하기 위한 두 가지 주요 프로토콜입니다. 이 두 프로토콜은 서로 다른 특성과 용도를 가지고 있습니다.

TCP (Transmission Control Protocol)

  • 연결 지향적: TCP는 데이터 전송 전에 통신할 두 장치 간에 연결을 설정합니다. 이 과정에서 3-way handshake라는 절차를 통해 연결을 확립합니다.
  • 신뢰성 있는 데이터 전송: TCP는 데이터가 손실되거나 순서가 바뀌는 것을 방지하며, 에러가 발생하면 데이터를 재전송합니다. 이를 통해 데이터의 정확성을 보장합니다.
  • 흐름 제어 및 혼잡 제어: TCP는 네트워크의 혼잡 상태와 수신자의 데이터 처리 능력을 고려하여 데이터 전송 속도를 조절합니다.
  • 용도: 이메일, 웹 브라우징, 파일 전송 등 신뢰성 있는 데이터 전송이 중요한 애플리케이션에 주로 사용됩니다.

UDP (User Datagram Protocol)

  • 비연결 지향적: UDP는 데이터를 전송하기 전에 연결을 설정하지 않습니다. 각각의 데이터 패킷은 독립적으로 처리됩니다.
  • 신뢰성 없는 데이터 전송: UDP는 데이터의 손실이나 순서 변경에 대해 체크하지 않으며, 재전송도 하지 않습니다. 따라서 TCP보다 덜 신뢰성 있습니다.
  • 경량 프로토콜: UDP는 TCP보다 헤더가 간단하고, 흐름 제어나 혼잡 제어 기능이 없어 처리 속도가 빠릅니다.
  • 용도: 실시간 스트리밍, 온라인 게임, VoIP(음성 통신) 등 지연 시간이 중요하거나 일부 데이터 손실이 허용되는 애플리케이션에 사용됩니다.

결론

TCP와 UDP는 각각의 장단점이 있으며, 애플리케이션의 요구 사항에 따라 적절한 프로토콜을 선택해야 합니다. 신뢰성과 순서가 중요한 데이터 전송에는 TCP를, 낮은 지연 시간과 효율적인 데이터 전송이 필요한 경우에는 UDP를 사용하는 것이 좋습니다.

3-way handshake는 TCP (Transmission Control Protocol) 연결을 시작할 때 사용되는 과정입니다. 이 과정은 클라이언트와 서버 사이에 안정적이고 신뢰성 있는 연결을 수립하기 위해 필요하며, 연결 설정 과정에서 세 단계의 송수신 작업을 포함합니다. 다음은 3-way handshake의 세 단계를 설명합니다.

1단계: SYN(Synchronize Sequence Numbers)

  • 클라이언트 → 서버: 클라이언트가 서버에 접속을 시도하며, 연결 요청 메시지를 보냅니다. 이 메시지는 SYN 플래그가 설정되어 있으며, 클라이언트는 자신의 초기 시퀀스 번호(ISN: Initial Sequence Number)를 함께 보냅니다. 이 단계에서 클라이언트는 SYN_SENT 상태가 됩니다.

2단계: SYN-ACK(Synchronize-Acknowledgment)

  • 서버 → 클라이언트: 서버는 클라이언트의 연결 요청을 받고, 클라이언트의 SYN에 대한 응답으로 SYN-ACK 메시지를 보냅니다. 이 메시지에는 SYN 플래그와 ACK 플래그가 모두 설정되어 있습니다. 서버는 자신의 ISN을 보내고, 클라이언트의 시퀀스 번호에 1을 더한 값을 ACK 번호로 설정하여 보냅니다. 서버는 이 시점에서 SYN_RECEIVED 상태가 됩니다.

3단계: ACK(Acknowledgment)

  • 클라이언트 → 서버: 클라이언트는 서버의 SYN-ACK에 대한 응답으로 ACK 메시지를 보냅니다. ACK 메시지에는 ACK 플래그가 설정되어 있으며, 서버의 ISN에 1을 더한 값을 ACK 번호로 설정하여 보냅니다. 이 단계가 완료되면 클라이언트와 서버 사이에 TCP 연결이 성공적으로 수립되며, 데이터 전송이 시작될 수 있습니다.

3-way handshake 과정은 TCP 연결의 신뢰성을 보장합니다. 이 과정을 통해 양쪽 모두 상대방이 데이터를 수신할 준비가 되어 있음을 확인하고, 연결 초기에 시퀀스 번호를 동기화하여 데이터가 올바른 순서로 전송되고 수신될 수 있도록 합니다.

profile
황세민

0개의 댓글

관련 채용 정보