개인 공부/TIL

[ TIL - 면접 ] 자소서 질문 대비 공부 4편 - JWT 편 -

킴도비 2024. 11. 20. 09:57

🖋 내 포트폴리오 기반으로 들어올 질문에 대해 최종 합격을 위한 공부를 시작해보자 🔥

 

🚌 2024년 월 일~ 2024년 월 일까지의 주제는 JWT다.

 

💡 참고할 질문 형식

1️⃣ 첫번째 접은 글은 내 말로 풀어쓴 정답
2️⃣ 두번째 접은 글은 해석 또는 공부한 내용 또는 추가적으로 궁금한 내용

 

1. JWT에 대해 설명해 주세요.

더보기
  • JWT(JSON Web Token)란?
    • 웹표준(RFC 7519)으로서 두 개체에서 JSON 객체를 사용하여 가볍고 자가수용적인 방식으로 정보를 안전성 있게 전달해줍니다.

 

 

2. JWT의 구성 요소에 대해 설명해 주세요.

더보기
  • JWT는 .을 구분자로 3가지의 문자열로 구성되어 있습니다.
    aaa.bbbbb.cccc의 구조로 앞부터 헤더(aaa - header), 내용(bbbbb - payload), 서명(cccc - signature)로 구성됩니다.

 

3. 그럼 JWT 헤더에는 어떤 정보가 있는지 말해보세요.

더보기
  • 헤더는 typ와 alg 두 가지의 정보를 지니고 있습니다.
  • typ는 토큰의 타입을 지정합니다. JWT이기에 "JWT"라는 값이 들어갑니다.
  • alg는 해싱 알고리즘을 지정합니다. 기본적으로 HMAC, SHA256, RSA가 사용되면 토큰을 검증 할 때 사용되는 signature 부분에서 사용됩니다.
  • JWT 타입
{
	"typ" : "JWT",
	"alg" : "HS256"
}

 

4. JWT의 정보에는 어떤 내용이 들어가고, 클레임의 종류에는 어떻게 나뉘어 지나요?

더보기
  • 정보(payload) 부분에는 토큰을 담을 정보가 들어있습니다. 정보의 한 조각을 클레임이라고 부르고, 이는 name/value의 한 쌍으로 이뤄져 있습니다.
  • 토큰에는 여러 개의 클레임을 넣을 수 있지만 너무 많아질 경우 토큰의 길이가 길어질 수 있습니다.
  • 클레임의 종류는 크게 세 분류로 나눠집니다.
    • 등록된 클레임
      • 서비스에서 필요한 정보들이 아닌 토큰에 대한 정보들을 담기 위하여 이름이 이미 정해진 클레임들입니다.
      • 등록된 클레임의 사용은 모두 선택적(optional)이며, 이에 포함된 클레임 이름들은 다음과 같습니다.
        • iss : 토큰 발급자(issuer)
        • sub : 토큰 제목(subject)
        • aud : 토큰 대상자(audience)
        • exp : 토큰의 만료시간(expiration), 시간은 NumbericDate 형식으로 되어있어야 하며 언제나 현재 시간보다 이후로 설정되어 있어야 합니다.
        • nbf : Not before을 의미하며, 토큰의 활성 날짜의 비슷한 개념입니다. NumericDate 형식으로 날짜를 지정하며, 이 날짜가 지나기 전까지 토큰이 처리되지 않습니다.
        • iat : 토큰이 발급된 시간(issued at), 이 값을 사용하여 토큰의 age가 얼마나 되었는지 판단할 수 있습니다.
        • jti : JWT의 고유 식별자로서, 주로 중복적인 처리를 방지하기 위하여 사용됩니다. 일회용 토큰에 사용하면 유용합니다.
    • 공개 클레임
      • 충돌이 방지된 이름을 가지고 있어야 합니다. 충돌을 방지하기 위해서는 클레임 이름을 URI 형식으로 짓습니다.
{
	"https://kimeyou.tistory.com/jwt_claims/is_admin" : true
}
  • 비공개 클레임
    • 등록된 클레임도 아니고, 공개된 클레임도 아닙니다. 양측 간에(보통 클라이언트 <-> 서버) 합의하에 사용되는 클레임 이름들입니다. 공개 클레임과는 달리 이름이 중복되어 충돌이 될 수 있으니 사용할 때 유의해야 합니다.

 

 

5. 그러면 이어서 JWT 서명에 대해 설명해 주실 수 있나요?

더보기
  • 서명(signautre)은 헤더의 인코딩 값과 정보의 인코딩 값을 합친 후 주어진 비밀 키로 해쉬를 하여 생성합니다. 이렇게 만든 해쉬를 base64 형태로 나타내게 됩니다.

 

 

 

6. 그러면 지원자는 왜 JWT를 해당 프로젝트에서 사용하였나요? (가상질문)

더보기
  • 하나의 Token만 가지고 있다면 토큰 유효기간이 짧을 시 사용자의 입장에서는 자주 로그인을 해아하기도 하고, 기간이 긴 토큰을 가지고 있다면 제 3자에게 탈취할 가능성이 높아져 보안에 취약해 집니다.
  • 해당 부분들을 보완하기 위해 Refresh Token을 사용하게 되었습니다. Refresh Token은 Access Token과 똑같은 JWT이며, Access Token의 유효기간이 만료되었을 때, Refresh Token이 Access Token을 새로 발급해주는 열쇠가 됩니다.
  • (JWT 작동 구조에 대해 작성하면 좋겠음)

 

 

7. 그러면 본인이 했던 프로젝트에서 어느 부분에서 어떻게 JWT를 사용했는지 설명해주세요. (가상질문)