카테고리 없음

16주차 (4)

jaeoun0238 2025. 2. 13. 21:23
  1. 깊은 복사와 얕은 복사의 차이는 무엇이고 JS에서 각각을 구현하는 방법은 어떻게 되는지 설명해주세요.

1. 깊은 복사(Deep Copy)와 얕은 복사(Shallow Copy)

1.1 개념 차이

  • 얕은 복사(Shallow Copy)
    • 객체의 1차원 데이터(값)는 복사하지만, 중첩된 객체나 배열에 대해서는 참조값만 복사한다.
    • 즉, 내부에 객체(Reference Type)가 있으면 원본과 사본이 같은 객체를 참조하게 되므로, 한쪽에서 내부 객체를 수정하면 다른 쪽에도 영향을 미친다.
  • 깊은 복사(Deep Copy)
    • 원본과 완전히 독립적인 새로운 객체를 생성한다.
    • 중첩된 객체나 배열 내부 요소도 재귀적으로 전부 복사하므로, 원본을 변경해도 사본이 영향을 받지 않는다.
  1. JWT에 대해 설명해주세요. 구체적으로 JWT를 어디서 처리하는지, 어떠한 방식으로 검증하는지, 재발급 방식과 주기는 어떻게 처리하는지, 다른 API 서비스 호출 시 어떻게 잡아서 인증 처리하는지 말씀해주세요.

2. JWT(JSON Web Token)

2.1 JWT란?

  • JSON Web Token사용자 인증을 위한 토큰 기반 인증 기법 중 하나.
  • 토큰 자체에 사용자의 인증 정보(payload)와 서명(signature)를 담는다.
  • 서버는 클라이언트가 보낸 토큰을 검증(Verify)하여 권한을 확인한다.
  • 일반적으로 Access TokenRefresh Token을 함께 사용해 만료된 토큰을 재발급한다.

2.2 JWT 구조

  1. Header: 토큰 타입(typ)과 해싱 알고리즘(alg) 정보가 들어감
  2. Payload: 사용자 정보, 권한, 만료 시간(exp) 등 실제 인증에 필요한 데이터
  3. Signature: Header와 Payload를 합친 문자열에 비밀키(혹은 공개/비공개 키)로 서명한 값

2.3 어디서 처리하는가?

  • 서버 측(Backend): 로그인 시 인증 정보를 바탕으로 JWT를 발급하고, 해당 JWT를 검증하는 로직을 가진다.
  • 클라이언트 측(Frontend): 서버로부터 받은 JWT를 저장(쿠키 혹은 브라우저 저장소)하고, API 호출 시 HTTP Header(Authorization: Bearer <token>)에 포함해서 보낸다.

2.4 JWT 검증 방식

  1. 서버 또는 인증 게이트웨이에서
    • 토큰이 만료되었는지(exp) 확인
    • 서명(Signature) 검증 (비밀키/공개키 사용)
    • 권한(roles, scopes 등) 확인
  2. 유효하지 않은 토큰이면 요청을 거절하고, 401 Unauthorized 응답을 보낸다.

2.5 재발급(Refresh Token) 방식과 주기

  • Access Token의 만료가 다가오면, Refresh Token으로 새 토큰을 발급받는다.
  • 일반적인 흐름
    1. Access Token이 만료되기 전/후를 감지.
    2. Refresh Token(주로 HttpOnly Cookie나 안전한 저장소에 보관)을 이용해 재발급 API 호출.
    3. 서버는 Refresh Token 검증 후 새로운 Access Token(+ 필요시 Refresh Token) 발급.
    4. 클라이언트는 새로 발급된 토큰으로 다시 요청 수행.

2.6 다른 API 서비스 호출 시 어떻게 인증을 처리하나요?

  • Microservice Architecture 등에서 다른 API 서버로 요청을 보낼 경우:
    • 보통 Authorization Header에 JWT를 그대로 실어서 전달.
    • 혹은 중앙 인증 게이트웨이(OAuth2 서버 등)를 통해 토큰이 유효한지 검증 후 API 호출.