TIL: 테스트코드, 쿠키/세션

Snoop So·2023년 5월 30일
0

테스트 코드의 종류

  • 단위 테스트
  • 컴포넌트 테스트: 크면 테스트하기 어려움

테스트 잘짜기

  • 무조건 무엇인지 빨리 확인할 수 있어야 함
  • 그래서 작은 단위로 만들어야 함!
  • 회귀 테스트 (Regrassion Test)

세션

쿠키 vs 로컬스토리지 vs 세션스토리지

웹 개발에서 쿠키, 로컬 스토리지, 세션 스토리지는 사용자의 데이터를 클라이언트 측에 저장하는 주요한 방법입니다. 각각의 기술은 특징, 장단점, 사용처가 있으며 그 차이점은 다음과 같습니다:

쿠키 (Cookies)

특징: 쿠키는 웹 서버가 사용자의 웹 브라우저에 데이터를 저장하도록 지시할 수 있는 작은 데이터 조각입니다. 이 데이터는 다음에 사용자가 동일한 웹 서버를 방문할 때 전송되어 사용자를 식별하거나 사용자 환경을 기억하는 데 사용될 수 있습니다.
장점: 서버 측과 클라이언트 측 모두에서 접근할 수 있습니다. 만료 날짜를 설정할 수 있어 데이터의 수명을 조절할 수 있습니다.
단점: 크기 제한이 있어 (대개 4KB) 많은 양의 데이터를 저장하기에 적합하지 않습니다. 사용자의 프라이버시와 보안 문제를 일으킬 수 있으며, HTTP 요청마다 쿠키 데이터가 전송되므로 웹 성능에 영향을 미칠 수 있습니다.

로컬 스토리지 (Local Storage)

특징: 웹 스토리지의 한 형태로, 클라이언트 측에서 JavaScript를 통해 데이터를 저장하고 접근할 수 있습니다. 저장된 데이터는 사용자가 웹사이트를 닫거나 새로고침해도 유지됩니다.
장점: 큰 데이터를 저장할 수 있으며 (5MB 또는 그 이상) 쿠키보다 큰 용량을 제공합니다. 쿠키와 달리 HTTP 요청에 포함되지 않으므로 네트워크 효율성이 높습니다.
단점: 서버 측에서 직접 접근할 수 없습니다. 보안과 프라이버시 문제가 있을 수 있으며, 특히 크로스 사이트 스크립팅(XSS) 공격에 취약할 수 있습니다. 데이터는 사용자가 명시적으로 삭제하지 않는 한 영구적으로 저장됩니다.

세션 스토리지 (Session Storage)

특징: 로컬 스토리지와 유사하지만, 사용자의 세션이 끝나면 (즉, 탭을 닫을 때) 저장된 데이터가 삭제됩니다.
장점: 데이터는 사용자 세션이 끝날 때까지만 저장되므로 사용자의 데이터를 일시적으로 저장하는데 유용합니다. HTTP 요청에 포함되지 않아 네트워크 효율성이 높습니다.
단점: 서버 측에서 직접 접근할 수 없습니다. 로컬 스토리지와 마찬가지로 크로스 사이트 스크립팅(XSS) 공격에 취약할 수 있습니다. 사용자가 웹사이트를 닫거나 새로고침하면 데이터가 사라집니다.

JWT 어디에 보관하는 것이 좋을까?

JWT(JSON Web Token)는 웹 애플리케이션에서 주로 인증과 정보 교환을 위해 사용되는 토큰입니다. JWT 토큰을 어디에 저장할지는 애플리케이션의 보안 요구사항, 사용자 경험, 아키텍처 등에 따라 달라집니다. 다음은 몇 가지 일반적인 저장 위치와 그 장단점입니다:

쿠키: JWT를 쿠키에 저장하면 HTTP Only 쿠키를 사용하여 XSS(Cross-site Scripting) 공격으로부터 토큰을 보호할 수 있습니다. 또한, SameSite 플래그를 사용하면 CSRF(Cross-site Request Forgery) 공격을 방지할 수 있습니다. 쿠키에 저장하면 서버측에서 쉽게 관리할 수 있다는 장점이 있습니다. 단점은 CORS(Cross-Origin Resource Sharing) 설정이 필요한 경우 복잡성이 증가할 수 있다는 점과, 모바일 애플리케이션에서는 쿠키를 다루는 것이 까다롭다는 점입니다.

로컬 스토리지 또는 세션 스토리지: 웹 스토리지에 JWT를 저장하면 JavaScript를 통해 쉽게 접근하고 관리할 수 있습니다. 이는 토큰을 사용하여 클라이언트 측에서 API 요청을 인증하는데 유용합니다. 그러나 웹 스토리지는 XSS 공격에 취약하므로, 이를 고려하여 추가적인 보안 조치를 취해야 합니다.

메모리: 메모리에 JWT를 저장하면 토큰이 페이지 새로고침이나 탭 닫기와 같은 이벤트에 대해 휘발성을 가지게 됩니다. 이는 토큰이 원치 않게 유지되는 것을 방지할 수 있습니다. Redux나 같은 상태 관리 라이브러리를 사용하는 경우, 이 방식이 좋을 수 있습니다. 단, 이 방법은 토큰을 페이지마다 다시 받아와야 하는 등의 단점이 있을 수 있습니다.

0개의 댓글