studyHard
article thumbnail

쿠키에 대해 설명해주세요.

쿠키는 클라이언트(웹 브라우저)에 저장되는 작은 데이터 조각입니다. 웹 서버에서 클라이언트에게 전송되어 클라이언트 측에서 유지됩니다. 쿠키는 주로 세션 관리, 사용자 인증, 개인화 등을 위해 사용됩니다. 웹 서버는 쿠키를 생성하고 HTTP 응답 헤더를 통해 클라이언트에게 전달하며, 클라이언트는 이후 요청에서 쿠키를 함께 전송하여 서버가 클라이언트를 식별하고 상태를 유지할 수 있게 합니다.

세션에 대해 설명해주세요.

세션은 서버 측에서 클라이언트의 상태를 유지하기 위한 방법입니다. 클라이언트가 웹 서버에 접속하면 서버는 해당 클라이언트에 대한 고유한 세션 식별자를 생성하고 이를 클라이언트에게 전달합니다. 클라이언트는 이 세션 식별자를 쿠키 또는 URL 매개변수를 통해 서버에 전달하여 식별됩니다. 서버는 세션 식별자를 사용하여 클라이언트의 세션 상태를 유지하고 관리합니다.

쿠키와 세션을 사용하는 이유는 무엇인가요?

HTTP 2가지 특징인 비연결지향와 상태없음으로 인해 서버는 클라이언트의 상태를 알 수 없다. 클라이언트의 상태를 알아야 될 경우 ( ex. 인증 ) 쿠키와 세션을 사용한다.

토큰은 무엇인가요?

토큰은 인증 및 권한 부여를 위한 데이터로 사용되는 문자열입니다. 주로 웹 API 인증에 사용되며, 클라이언트가 서버에 대한 인증을 요청할 때 토큰을 제공하고 서버는 이를 검증하여 인증 결과를 반환합니다. 토큰은 일반적으로 암호화되어 있어 변조되지 않도록 보호되며, 유효 기간이 설정되어 만료 시간이 지나면 다시 인증을 요청해야 합니다. 토큰 기반 인증은 세션 기반 인증보다 상태를 서버에 유지하지 않아 확장성과 분산환경에서 유리한 장점을 가지고 있습니다.

각 장단점을설명해주세요.

쿠키: 가장 큰 단점은 보안에 취약하다는 점이다.요청 시 쿠키의 값을 그대로 보내기 때문에 유출 및 조작 당할 위험이 존재한다.쿠키에는 용량 제한이 있어 많은 정보를 담을 수 없다.웹 브라우저마다 쿠키에 대한 지원 형태가 다르기 때문에 브라우저간 공유가 불가능하다.쿠키의 사이즈가 커질수록 네트워크에 부하가 심해진다.

세션: 쿠키를 포함한 요청이 외부에 노출되더라도 세션 ID 자체는 유의미한 개인정보를 담고 있지 않는다.그러나 해커가 세션 ID 자체를 탈취하여 클라이언트인척 위장할 수 있다는 한계가 존재한다. (이는 서버에서 IP특정을 통해 해결 할 수 있긴 하다)서버에서 세션 저장소를 사용하므로 요청이 많아지면 서버에 부하가 심해진다.

토큰: 쿠키/세션과 다르게 토큰 자체의 데이터 길이가 길어, 인증 요청이 많아질수록 네트워크 부하가 심해질수 있다.Payload 자체는 암호화되지 않기 때문에 유저의 중요한 정보는 담을 수 없다.토큰을 탈취당하면 대처하기 어렵다. (따라서 사용 기간 제한을 설정하는 식으로 극복한다)

Session Cookie와 Persistent Cookie에 대해 설명해주세요.

세션 쿠키는 클라이언트의 메모리에만 저장되고 브라우저 세션이 종료되면 삭제되는 임시 쿠키입니다. 이 쿠키는 만료 날짜를 설정하지 않거나 만료 날짜를 현재 세션 끝으로 설정하여 브라우저가 종료될 때 자동으로 삭제됩니다. 세션 쿠키는 보안 상태, 로그인 정보, 장바구니 등의 임시 데이터를 저장하는 데 주로 사용됩니다. 세션 쿠키는 일반적으로 쿠키의 "expires" 속성이나 "max-age" 속성을 설정하지 않으며, 브라우저가 닫히면 자동으로 삭제되므로 보안에 더 안전합니다.

지속 쿠키는 클라이언트의 하드 드라이브에 저장되며, 설정된 만료 날짜 이전까지 유지되는 쿠키입니다. 이 쿠키는 만료 날짜를 설정하여 지속적으로 사용자 정보를 저장하고 유지합니다. 사용자가 브라우저를 닫아도 지속 쿠키는 삭제되지 않고, 설정된 만료 날짜가 도래할 때까지 유지됩니다. 지속 쿠키는 사용자의 로그인 정보 기억, 개인화된 환경 설정, 사용자 추적 등에 사용됩니다.

세션 쿠키와 지속 쿠키는 각각 다른 목적과 수명을 가지고 있습니다. 세션 쿠키는 임시 데이터를 저장하고 브라우저 세션 동안만 유지되며, 지속 쿠키는 사용자의 장기적인 상태 정보를 저장하고 설정된 만료 날짜까지 유지됩니다.

JWT 에 대해 설명해주세요.

JWT(JSON Web Token)란 인증에 필요한 정보들을 암호화시킨 JSON 토큰을 의미한다. 그리고 JWT 기반 인증은 JWT 토큰(Access Token)을 HTTP 헤더에 실어 서버가 클라이언트를 식별하는 방식이다.
JWT는 JSON 데이터를 Base64 URL-safe Encode 를 통해 인코딩하여 직렬화한 것이며, 토큰 내부에는 위변조 방지를 위해 개인키를 통한 전자서명도 들어있다. 따라서 사용자가 JWT 를 서버로 전송하면 서버는 서명을 검증하는 과정을 거치게 되며 검증이 완료되면 요청한 응답을 돌려준다.

OAuth란 무엇인가요?

OAuth는 사용자가 웹 사이트나 애플리케이션에 로그인할 때 다른 서비스(일반적으로 소셜 미디어나 온라인 서비스 제공자)의 인증 정보를 사용하는 개방형 표준 프로토콜입니다. OAuth는 "Open Authorization"의 약자로, 사용자가 자신의 데이터를 제3자와 공유하거나 다른 애플리케이션에 접근할 수 있는 권한을 위임할 수 있는 방법을 제공합니다.

 

OAuth의 장점을 설명해주세요.

1. 쉽고 안전하게 새로운 서비스를 이용할 수 있다.
사용자는 OAuth를 통해 특정 사이트에 아이디, 비밀번호, 이름, 전화번호 등의 정보를 일일이 입력하지 않아도 클릭 몇 번 만으로 손쉽게 가입할 수 있어 편리합니다.정보를 해당 서비스에 직접 노출하는 것이 아니기 때문에 직접 가입하는 것보다 더 안전합니다.Application의 입장에서도 회원의 정보를 직접 가지고 있음으로 인해서 발생할 수 있는 회원 정보 유출의 위험성에서 부담을 덜 수 있습니다.

2. 권한 영역을 설정할 수 있다.
OAuth 인증을 허가한다고 해서 새로운 서비스가 사용 중이던 서비스의 모든 정보에 접근이 가능한 것은 아닙니다. 사용자는 원하는 정보에만 접근을 허락할 수 있어 보다 더 안전합니다.OAuth 설정 페이지에서는 Application에서 필요한 정보를 선택할 수 있습니다. 사용자는 이 중 원하는 정보만 선택적으로 제공할 수 있습니다.

 

쿠키 인증 방식을 설명해주세요.

브라우저(클라이언트)가 서버에 요청(접속)을 보낸다. 서버는 클라이언트의 요청에 대한 응답을 작성할 때, 클라이언트 측에 저장하고 싶은 정보를 응답 헤더의 Set-Cookie에 담는다. 이후 해당 클라이언트는 요청을 보낼 때마다, 매번 저장된 쿠키를 요청 헤더의 Cookie에 담아 보낸다. 서버는 쿠키에 담긴 정보를 바탕으로 해당 요청의 클라이언트가 누군지 식별하거나 정보를 바탕으로 추천 광고를 띄우거나 한다.

 

세션 인증 방식을 설명해주세요.

유저가 웹사이트에서 로그인하면 세션이 서버 메모리(혹은 데이터베이스) 상에 저장된다. 이때, 세션을 식별하기 위한 Session Id를 기준으로 정보를 저장한다.서버에서 브라우저에 쿠키에다가 Session Id를 저장한다.  쿠키에 정보가 담겨있기 때문에 브라우저는 해당 사이트에 대한 모든 Request에 Session Id를 쿠키에 담아 전송한다. 서버는 클라이언트가 보낸 Session Id 와 서버 메모리로 관리하고 있는 Session Id를 비교하여 인증을 수행한다.

 

토큰 인증 방식을 설명해주세요.

사용자가 아이디와 비밀번호로 로그인을 한다. 서버 측에서 사용자(클라이언트)에게 유일한 토큰을 발급한다. 클라이언트는 서버 측에서 전달받은 토큰을 쿠키나 스토리지에 저장해 두고, 서버에 요청을 할 때마다 해당 토큰을 서HTTP 요청 헤더에 포함시켜 전달한다. 서버는 전달받은 토큰을 검증하고 요청에 응답한다.토큰에는 요청한 사람의 정보가 담겨있기에 서버는 DB를 조회하지 않고 누가 요청하는지 알 수 있다.

 

JWT의 Access Token / Refresh Token에 대해서 설명해주세요.

JWT도 제 3자에게 토큰 탈취의 위험성이 있기 때문에, 그대로 사용하는것이 아닌 Access Token, Refresh Token 으로 이중으로 나누어 인증을 하는 방식을 현업에선 취한다.

Access Token 과 Refresh Token은 둘다 똑같은 JWT이다. 다만 토큰이 어디에 저장되고 관리되느냐에 따른 사용 차이일 뿐이다.

Access Token : 클라이언트가 갖고있는 실제로 유저의 정보가 담긴 토큰으로, 클라이언트에서 요청이 오면 서버에서 해당 토큰에 있는 정보를 활용하여 사용자 정보에 맞게 응답을 진행

Refresh Token: 새로운 Access Token을 발급해주기 위해 사용하는 토큰으로 짧은 수명을 가지는 Access Token에게 새로운 토큰을 발급해주기 위해 사용. 해당 토큰은 보통 데이터베이스에 유저 정보와 같이 기록.

정리하자면, Access Token은 접근에 관여하는 토큰, Refresh Token은 재발급에 관여하는 토큰의 역할로 사용되는 JWT 이라고 말할 수 있다.
profile

studyHard

@언젠간코딩잘함

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!