카테고리 없음

면접카타 7,8

8나지 2024. 7. 25. 09:55

- 깊은 복사와 얕은 복사의 차이는 무엇이고 JS에서 각각을 구현하는 방법은 어떻게 되는지 설명해주세요.

깊은 복사 : 데이터 자체 통째로 복사 ; 원본과 복사본이 완전히 독립적

객체의 모든 수준의 속성을 새로운 메모리 공간에 복사, 중첩된 객체나 배열도 완전히 새로운 복사본 만듬, 원본 객체의 어떤 부분변경해도 복사본에 영향을 주지 않음

구현방법  : JSON 사용(단순객체에 적합) / 재귀함수 사용

/ 라이브러리 사용(

lodash 라이브러리의 cloneDeep 함수를 사용

const _ = require('lodash');
const original = { a: 1, b: { c: 2 } };
const deepCopy = _.cloneDeep(original);

)


얕은복사 : 복사본 속성이 복사본이 만들어진 원본객체와 같은 참고를 공유하는 복사 => 원본이나 복사본 변경시 다른 책체 또한 변경 가능

 

두 객체는 같은 객체가 아니며, o1 과 o2의 속성은 같은 이름과 순서. 두 객체의 속성 값은 동일.// 중첩된 객체의 값이 아닌 최 상위 속성만 복사 => 최상위 속성 재할당해도 원본에 영향 끼치지 않으나 중첩객체 속성을 재할당하면 원본객체에 영향끼침

구현 방법 : object.assign()사용 / 전개연산자 ... 사용 / (배열이면) slice()메서드 사용

 


- JWT에 대해 설명해주세요. 구체적으로 JWT를 어디서 처리하는지, 어떠한 방식으로 검증하는지, 재발급 방식과 주기는 어떻게 처리하는지, 다른 API 서비스 호출 시 어떻게 잡아서 인증 처리하는지 말씀해주세요.


구조 : JWT는 헤더(Header), 페이로드(Payload), 서명(Signature)의 세 부분으로 구성

- 서버에서 JWT 생성: 사용자가 로그인하면 서버는 사용자 정보를 기반으로 JWT를 생성합니다.
- 클라이언트에 전송: 생성된 JWT는 HTTP 응답 헤더에 포함되어 클라이언트로 전송됩니다.
- 클라이언트 저장: 클라이언트는 받은 JWT를 로컬 스토리지나 쿠키에 저장합니다

JWT 검증 방식

- 클라이언트 요청: API 호출 시 클라이언트는 저장된 JWT를 요청 헤더에 포함시켜 서버로 전송합니다
- 서버 검증: 서버는 받은 JWT의 서명을 확인하여 토큰의 유효성을 검증합니다.
- 페이로드 확인: 서명이 유효하면 서버는 페이로드의 정보를 신뢰하고 사용합니다

JWT 재발급 방식 및 주기

- Access Token과 Refresh Token: 보안을 강화하기 위해 짧은 유효기간의 Access Token과 긴 유효기간의 Refresh Token을 함께 사용합니다.
- 재발급 과정: Access Token이 만료되면 클라이언트는 Refresh Token을 사용하여 새로운 Access Token을 요청합니다.
- 재발급 주기: Access Token의 유효기간은 일반적으로 15분에서 2시간 사이로 설정되며, Refresh Token은 2주에서 한 달 정도로 설정됩니다.

API 서비스 호출 시 인증 처리

- 미들웨어 사용: API 게이트웨이나 서버의 미들웨어에서 JWT를 확인합니다.
- 헤더 확인: 모든 API 요청의 Authorization 헤더에서 JWT를 추출합니다
- 토큰 검증: 추출한 JWT의 유효성을 검사하고, 유효한 경우에만 요청을 처리합니다.
- 권한 확인: JWT의 페이로드에 포함된 사용자 정보와 권한을 확인하여 요청된 리소스에 대한 접근 권한을 판단합니다

JWT를 사용함으로써 서버는 상태를 유지할 필요가 없어 확장성이 향상되고, 클라이언트는 한 번의 로그인으로 여러 서비스에 접근할 수 있는 장점이 있습니다. 그러나 토큰의 크기가 상대적으로 크고, 한 번 발급된 토큰을 즉시 무효화하기 어렵다는 단점도 있습니다

jwt 다시 찾아볼 것