본문 바로가기
면접 질문/네트워크

[네트워크] 쿠키, 세션, 토큰 면접 질문 및 답변 정리

by 그적 2024. 3. 13.
  • 쿠키와 세션에 대해 설명해주세요.
더보기

쿠키와 세션은 웹 상에서 클라이언트와 서버의 상태 정보를 저장하기 위해 사용됩니다. HTTP는 Stateless한 특성으로 서버와 클라이언트 사이에 상태 정보를 저장해두지 않기 때문에, 이러한 상태 정보를 저장하기 위해 쿠키와 세션이 필요합니다.

 

쿠키는 클라이언트에 저장되고 브라우저를 종료할 때까지 남아있기 때문에, 보안에 취약하다는 단점을 가지고 있습니다. 따라서 팝업 창에서 오늘하루보지않기, 혹은 장바구니 등의 기능에서 사용됩니다. 세션은 서버에 저장되고 서버가 관리할 수 있기 때문에, 보안성이 좋다는 장점을 가지고 있습니다. 일반적으로 사용자가 로그인을 하면 서버는 세션ID를 생성해 데이터베이스에 저장하고, 클라이언트는 부여받은 세션ID를 이용해 권한이 필요한 웹페이지에 접근할 수 있습니다.

 

  • 분산 서버에서는 세션을 어떻게 관리할 수 있을까요?
더보기

여러 방법으로 세션을 관리할 수 있는데, 그 중 별도의 세션ID를 관리하는 데이터베이스 서버를 분리시키는 방법이 있습니다. 하지만 이것도 하나의 세션 서버만 존재할 경우에는 서버가 죽으면 모든 데이터를 잃게 되기 때문에, master-slave 방식으로 메인 세션 서버가 죽으면 하위 slave 서버에서 세션 처리를 할 수 있도록 해야 합니다. 세션을 사용하는 방법 외에도 토큰을 이용하는 방법으로 인증을 관리할 수 있습니다.

 

  • 세션 기반 인증 방식과 토큰 기반 인증 방식을 비교해 설명해주세요.
더보기

세션 기반 인증 방식은 사용자의 상태 정보를 서버에 저장하는 방식입니다. 일반적으로 로그인을 한 사용자가 세션ID를 부여받고, 클라이언트는 세션ID를 이용해 권한이 필요한 웹페이지에 접근할 수 있습니다. 토큰 기반 인증 방식은 토큰을 이용해 인증된 사용자인지 확인하고, 권한에 따라 웹페이지를 접근하도록 하는 방식입니다.

 

세션은 탈취 시에 서버 측에서 데이터베이스에서 세션ID 삭제 등으로 접근을 관리할 수 있는데, 토큰의 경우에는 토큰을 관리할 수 없다는 단점을 가지고 있습니다. 하지만 세션은 매번 세션ID를 확인하는 과정을 거쳐야 하기 때문에, 서버에 많은 요청이 들어올 경우 서버와 데이터베이스에 부하가 올 수 있습니다. 토큰은 인증 정보와 권한 정보를 가지고 있기 때문에, 로그인을 확인한 후에는 추가적인 인증이 필요하지 않습니다. 따라서 데이터베이스를 사용하지 않아 세션에 비해 적은 비용이 들고, 서버 확장성이 좋다는 장점을 가지고 있습니다.

 

  • 토큰이란 무엇인가요?
더보기

토큰은 웹 상에서 서버와 클라이언트의 상태 정보를 담고 있습니다. 토큰의 payload에 토큰발급자, 토큰유효기간, 권한 등의 정보를 가지고 있기 때문에, 데이터베이스에서 권한 정보를 조회하지 않아도 토큰으로 웹페이지의 접근을 확인합니다.

 

  • 토큰에는 어떤 데이터를 담고 있나요?
더보기

토큰에는 토큰발급자, 토큰발행시간, 토큰만료시간 등이 들어있으며, 유의미한 데이터 외에 필요한 데이터를 추가로 담을 수 있습니다.

 

  • JWT를 직접 구현해보신 적 있나요?
더보기

네, 스프링에서 스프링시큐리티를 이용해 구현한 적이 있습니다. 사용자가 로그인을 하고 나면 엑세스 토큰과 리프래쉬 토큰을 생성하고, 응답 헤더에 두 개의 토큰을 담아 전달합니다. 엑세스 토큰을 이용해 웹페이지 별로 접근할 수 있는 권한인지를 확인하고, 리프래쉬 토큰을 이용해 로그인 연장이라는 기능에서  새로운 엑세스 토큰을 담아 로그인을 유지할 수 있도록 구현했습니다.

 

  • 토큰 기반 인증 방식이 가진 단점과 단점을 개선할 수 있는 방법을 알고 계시나요?
더보기

토큰 인증 방식은 쿠키처럼 탈취에 대한 위협을 대응할 수 없다는 단점을 가지고 있습니다. 클라이언트에서 저장되기 때문에, 토큰을 가지고 있으면 누구나 웹페이지에 접근할 수 있습니다. 이러한 단점을 개선하기 위해 리프래쉬 토큰을 이용합니다. 엑세스 토큰의 유효 시간을 짧게 설정하고, 유효 시간이 끝나기 전에 로그인 연장 등의 기능으로 리프래쉬 토큰을 확인해 엑세스 토큰을 새로 발급해줍니다. 리프래쉬 토큰은 데이터베이스에 저장되어 올바른 토큰인지를 확인할 수 있으며, 엑세스 토큰이 탈취되면 리프래쉬 토큰을 삭제하여 추가적인 로그인 연장을 막을 수 있습니다.

 

댓글