본문 바로가기
Today I Learned/DevCamp

데브캠프 3일차

by 아보_ 2024. 3. 7.
반응형
스파르타 데브캠프를 통해 하루하루 공부한 내용을 정리합니다.

 

NestJS 

 

JWT(Json Web Token)는 웹 표준으로, 두 개체(클라이언트와 서버) 사이에서 JSON 객체를 사용하여 안전하게 정보를 전송하기 위한 컴팩트하고 자가 포함된 방식을 정의합니다. 이 방식은 정보를 안전하게 전송할 뿐만 아니라, 정보가 검증되었음을 보증합니다. JWT는 .header.payload.signature의 세 부분으로 구성되며, 각 부분은 Base64로 인코딩되어 URL 안전 문자열로 연결됩니다.

 

Header는 토큰의 타입(JWT)과 사용된 서명 알고리즘(HS256, RS256 등)을 명시합니다.

Payload는 클레임(claim)이라고 불리는 토큰에 담길 정보의 조각들을 포함합니다. 이 클레임들은 등록된 클레임, 공개 클레임, 비공개 클레임 세 가지 유형이 있으며, 토큰에 대한 메타데이터(예: 발행자, 만료 시간) 또는 사용자의 정보(예: 사용자 ID) 등을 담을 수 있습니다.

Signature는 헤더의 인코딩된 값, 페이로드의 인코딩된 값, 비밀키를 합하여 생성된 서명입니다. 이 서명은 토큰이 중간에 변경되지 않았음을 검증하는 데 사용됩니다.

 

JWT의 가장 큰 장점 중 하나는 사용자 인증에 있습니다. 사용자가 로그인하면 서버는 사용자의 정보를 기반으로 JWT를 생성하고, 이를 사용자에게 반환합니다. 사용자는 이후의 요청에 이 토큰을 포함시켜 서버로 보냄으로써, 서버는 토큰을 검증하고 사용자를 인증할 수 있습니다. 이 과정에서 세션을 유지할 필요가 없으므로, 서버의 리소스를 절약할 수 있으며, 스케일 아웃이 용이하다는 장점이 있습니다.

또한, JWT는 분산된 시스템에서 서비스 간의 안전한 데이터 교환을 가능하게 합니다. 서명이 포함되어 있기 때문에, 데이터가 발행자에 의해 서명되었고 그 내용이 변경되지 않았음을 수신자가 검증할 수 있습니다. 이는 마이크로서비스 아키텍처나 SSO(Single Sign-On) 같은 환경에서 특히 유용합니다.

 

하지만, JWT 사용 시 몇 가지 주의해야 할 사항이 있습니다. 예를 들어, 페이로드는 암호화되지 않고 Base64 인코딩만 된 상태로 전송되므로, 민감한 정보는 페이로드에 포함시키지 않아야 합니다. 또한, 토큰의 만료 시간을 적절히 설정하고, 필요한 경우 토큰 갱신 메커니즘을 구현해야 합니다.

결론적으로, JWT는 현대 웹 개발에서 인증과 권한 부여를 위한 강력하고 유연한 도구입니다. 올바르게 사용될 경우, 애플리케이션의 보안을 강화하고, 개발 및 운영의 효율성을 높일 수 있습니다.

 

https://github.com/avo1032/devcamp

반응형

'Today I Learned > DevCamp' 카테고리의 다른 글

20240309(토)  (0) 2024.03.10
데브캠프 5일차  (0) 2024.03.09
데브캠프 4일차  (0) 2024.03.08
데브캠프 2일차  (0) 2024.03.05
데브캠프 1일차  (0) 2024.03.04