- 이번 퀘스트에서는 웹에서의 인증에 관해 알아보겠습니다.
- Cookie
- Session
- JWT
쿠키란 무엇일까요?
쿠키(Cookie)는 웹 사이트에서 사용자의 컴퓨터나 모바일 기기에 저장되는 작은 데이터 파일입니다. 쿠키는 사용자가 웹 사이트를 방문할 때 생성되고, 사용자가 웹 사이트를 다시 방문할 때마다 웹 사이트에 의해 읽혀집니다.
쿠키는 주로 사용자의 인증 상태를 유지하기 위해 사용됩니다. 로그인을 하면, 웹 서버는 사용자의 브라우저에 인증용 쿠키를 생성하고, 이후에 사용자가 다른 페이지를 요청할 때마다 쿠키를 이용해 인증을 확인합니다. 또한, 쿠키를 이용해 사용자의 환경 설정을 저장하거나, 사용자의 선호 언어 등을 파악하여 웹 페이지의 내용을 변경하는 등의 용도로도 사용됩니다.
쿠키는 어떤 식으로 동작하나요?
쿠키는 클라이언트(브라우저) 측에서 관리되는 키-값 쌍으로 이루어진 작은 데이터 파일입니다. 서버는 HTTP 응답 헤더의 Set-Cookie 헤더를 사용하여 쿠키를 클라이언트에게 전송하고, 이후 클라이언트는 HTTP 요청 헤더의 Cookie 헤더에 해당 쿠키를 포함시켜 서버에게 전송합니다.
쿠키는 어떤 식으로 서버와 클라이언트 사이에 정보를 주고받나요?
쿠키는 HTTP 요청과 응답 헤더를 통해 서버와 클라이언트 간에 정보를 주고 받습니다. 일반적으로 클라이언트는 서버에 HTTP 요청을 보내면, 서버는 HTTP 응답을 반환할 때 쿠키를 포함시킵니다.
클라이언트는 쿠키를 받으면, 쿠키를 자신의 브라우저에 저장하고 이후 서버에 요청을 보낼 때마다 해당 쿠키를 함께 보냅니다. 이를 통해 서버는 클라이언트를 식별하고, 클라이언트의 이전 활동 정보를 유지하거나, 로그인 상태를 유지할 수 있습니다.
웹 어플리케이션의 세션이란 무엇일까요?
세션이란, 웹 어플리케이션에서 사용자의 상태를 서버측에 저장하고 유지하는 기술적인 개념을 말합니다. 클라이언트가 서버에 요청을 보낼 때, 서버는 클라이언트를 식별하기 위한 세션 ID를 발급하고, 이 ID를 이용하여 클라이언트의 상태를 추적하게 됩니다. 세션은 서버에서 관리되며, 클라이언트는 세션 ID를 쿠키를 통해 전달받아 이를 이용하여 서버에 요청을 보낼 때마다 세션 정보를 서버
세션의 ID와 내용은 각각 어디에 저장되고 어떻게 서버와 교환되나요?
세션 ID와 내용은 일반적으로 서버 측에 저장됩니다. 세션 ID는 보통 쿠키를 사용하여 클라이언트 측에 저장됩니다. 클라이언트가 서버에 최초 요청을 보내면, 서버는 새로운 세션 ID를 생성하고 이를 클라이언트에게 쿠키로 전송합니다. 클라이언트는 이후 요청에서 해당 쿠키를 서버에 전송하여 세션을 유지합니다.
JWT란 무엇인가요?
JWT(Jason Web Token)은 웹 표준으로서, 클라이언트와 서버 간 정보를 주고받을 때 사용되는 토큰 기반 인증 방식 중 하나입니다.
JWT 토큰은 어디에 저장되고 어떻게 서버와 교환되나요?
저장 =>
WT 토큰은 클라이언트 측에서 주로 저장됩니다. 일반적으로 웹 애플리케이션에서는 브라우저의 로컬 스토리지나 세션 스토리지 저장소에 저장됩니다.
서버와의 교환 =>
JWT 토큰은 일반적으로 로그인 요청과 함께 서버에서 발급됩니다. 이후 클라이언트 측에서 다른 API를 호출할 때마다 HTTP 헤더에 JWT 토큰을 실어서 서버에 전송합니다. 이 때 서버는 JWT 토큰의 유효성을 검사하고, 검사 결과에 따라 요청을 처리하게 됩니다. 검사 결과 JWT 토큰이 유효하다면 해당 요청을 처리하고, 유효하지 않다면 인증 에러를 반환합니다.
세션에 비해 JWT가 가지는 장점은 무엇인가요? 또 JWT에 비해 세션이 가지는 장점은 무엇인가요?
JWT 장점
서버에서 사용자 상태를 관리할 필요가 없기 때문에, 서버의 부담이 줄어듭니다. 따라서 서버의 확장성이 좋아집니다.
토큰 기반의 인증 방식이기 때문에, 여러 서버에서 인증을 공유할 수 있습니다. 예를 들어, 로그인 서버와 API 서버가 다른 서버에 있더라도, 로그인 서버에서 발행한 JWT를 API 서버에서 검증하여 인증할 수 있습니다.
JWT에는 클레임(Claim)을 담을 수 있기 때문에, 사용자 정보 등의 부가적인 정보를 토큰에 넣을 수 있습니다.
세션 장점
세션은 서버 측에서 처리하기 때문에, 클라이언트에서 토큰을 저장하고 검증하는 과정이 필요하지 않습니다. 따라서 보안 측면에서 안전합니다.
세션은 토큰을 발행하고 관리하는 것이 서버에서 이루어지기 때문에, 암호화 및 검증 방법을 조정하고 업데이트하는 것이 쉽습니다.
세션은 유효기간을 서버에서 조정할 수 있기 때문에, 보안에 더욱 강력합니다.
- 이번에는 메모장 시스템에 로그인 기능을 넣고자 합니다.
- 사용자는 딱 세 명만 존재한다고 가정하고, 아이디와 비밀번호, 사용자의 닉네임은 하드코딩해도 무방합니다.
- 로그인했을 때 해당 사용자가 이전에 작업했던 탭들과 마지막으로 활성화된 탭 등의 상태가 로딩 되어야 합니다.
- 세션을 이용한 버전과, JWT를 이용한 버전 두 가지를 만들어 보세요!
- 세션을 이용할 경우 세션은 서버의 메모리나 파일에 저장하면 됩니다.
- Web Authentication API(WebAuthn)은 무엇인가요?