새벽의 기록

[SOPT] 고량주 4주차 이론 과제 본문

SOPT/고량주

[SOPT] 고량주 4주차 이론 과제

OneTen 2024. 11. 10. 17:05
1. 세션과 토큰의 차이점은 무엇인가요?
2. JWT는 무엇인가요?
3. Interceptor에 대해서 알아보세요!

1. 세션과 토큰의 차이점은 무엇인가요?

세션

세션은 서버에 사용자 로그인 정보를 저장하여 인증을 관리하는 방식입니다. 사용자가 로그인하면 서버에 세션 ID를 생성하고, 클라이언트는 이 세션 ID를 쿠키에 담아 서버로 보냅니다. 서버는 세션 ID를 통해 사용자를 식별하여 요청을 처리합니다.
 
장점: 서버가 세션을 관리하므로 상대적으로 사용자의 상태를 쉽게 유지할 수 있습니다.
 
단점: 서버에 저장 공간이 필요하고, 대규모 시스템에서는 서버 간 세션 동기화가 필요할 수 있습니다.

토큰

토큰은 서버에 저장되지 않고 클라이언트가 보관하는 인증 정보입니다. 사용자가 로그인하면 서버는 사용자를 식별할 수 있는 토큰을 발급하며, 이 토큰은 클라이언트에 저장되고 이후 요청 시 포함됩니다. 서버는 요청 시 받은 토큰을 검증하여 사용자를 식별합니다.
 
장점: 서버에 인증 상태를 저장하지 않기 때문에 확장성이 좋고, 서버 간 상태 동기화가 필요하지 않습니다.
 
단점: 토큰은 웹 브라우저측 (local storage, 혹은 쿠키 등)에 저장되기 때문에 공격에 노출될 가능성이 더 큽니다. 이런 경우를 대비해 토큰에는 민감한 정보를 담지 않습니다. 또한, 보통 만료 시간과 함께 발급하여 이를 방지합니다.
→ 하지만 짧은 주기로 만료되면 사용자는 계속해서 로그인해야하는 번거로움이 생김
→ 그래서 애초에 로그인(인증)시에는 좀 더 긴 유효기간을 지니며 최대한 안전한 곳에 저장되는 refresh token이라는 것을 추가 발급
→ 깃허브도 로그인이나 깃허브 액션같은 거 세팅할 때 토큰을 사용

정리

위치와 상태 유지

  • 세션은 서버 측에서 상태를 유지하고, 클라이언트는 세션 ID를 통해 상태를 유지한다.
  • 토큰은 클라이언트 측에서 상태를 유지하며, 서버는 토큰을 검증하여 필요한 정보를 추출한다.

저장 방식

  • 세션은 보통 쿠키를 통해 세션 ID를 클라이언트에 저장
  • 토큰은 로컬 저장소에 저장되고, 주로 웹 애플리케이션에서는 브라우저의 로컬 스토리지나 세션 스토리지에 저장

서버 부하

  • 세션은 서버 측에서 상태를 유지하므로, 많은 수의 세션 데이터가 있는 경우 서버 부하가 증가할 수 있다.
  • 토큰은 클라이언트 측에서 상태를 유지하므로, 서버 부하가 상대적으로 적게 발생

유효 기간과 인증 방식

  • 세션은 서버에서 유효기간을 설정하고, 클라이언트가 세션 ID를 통해 인증
  • 토큰은 자체적으로 유효기간을 가지며, 만료된 토큰은 재사용 불가.

확장성과 플랫폼 호환성

  • 세션은 서버 측에서 상태를 유지하므로, 서버의 확장성에 영향을 줄 수 있음. 주로 웹에서 사용되며, 브라우저가 세션 ID를 쿠키에 저장하여 서버에 전송하는 방식으로 동작
  • 토큰은 클라이언트 측에서 상태를 유지하므로, 서버의 확장성에 영향을 덜 줌. 다양한 플랫폼과 서비스간에 호환성을 가지며, RestfulAPI, 모바일 앱 등에서도 사용될 수 있음

2. JWT는 무엇인가요?

Json Web Token의 약자로 일반적으로 클라이언트와 서버 사이에서 통신할 때 권한을 위해 사용하는 토큰. 웹 상에서 정보를 Json형태로 주고 받기 위해 표준규약에 따라 생성한 암호화된 토큰으로, 복잡하고 읽을 수 없는 string 형태로 저장되어있다.
→ 주로 사용자 인증이나 정보 교환에 사용하는 토큰으로, Json객체를 이용함
 
JWT는 헤더(header), 페이로드(payload), 서명(signature)으로 구성된 문자열이며, 서버와 클라이언트 간의 통신에서 유효성을 검증할 수 있도록 서명되어 있다.
 
헤더(header)
토큰 타입(JWT)과 서명 알고리즘 정보를 포함합니다.
 
페이로드(payload)
사용자 정보나 권한 등의 전달하고자 하는 정보를 담고 있으며, sub(주체), iat(발행 시간), exp(만료 시간) 등의 클레임이 자주 사용됩니다.
 
서명(signature)
비밀 키를 사용해 생성된 서명으로, 데이터의 무결성을 보장합니다.
 
장점
서버에서 상태를 유지하지 않아 확장성이 높고, 다양한 시스템 간에 안전하게 인증을 전달할 수 있습니다.
 
단점
JSON 데이터가 인코딩되어 있어 클라이언트 측에서 디코딩할 수 있기 때문에, 중요한 정보는 담지 않도록 주의해야 합니다.

3. Interceptor에 대해서 알아보세요!

Interceptor는 네트워크 요청 전후로 특정 작업을 수행할 수 있도록 중간에 끼어들어 조작하는 구성 요소입니다. 클라이언트 애플리케이션에서 HTTP 요청을 보낼 때, 인터셉터를 통해 공통적인 작업(예: 인증 토큰 추가, 로그 기록)을 처리할 수 있습니다.
→ 서버에 요청을 보내기 전에, 중간에 가로채서 어떤 작업을 한 뒤 다시 서버로 보내는 역할
→ Alamofire를 사용하면 RequestInterceptor 프로토콜을 준수한 클래스의 인스턴스를 request에 실어서 보내면 동작
 

Comments