내일배움캠프 Node.js 본캠프 71일차

김선우·2024년 11월 20일
post-thumbnail

알고리즘 문제 풀어보기

뒤에 있는 큰 수 찾기

문제 설명

정수로 이루어진 배열 numbers가 있습니다. 배열 의 각 원소들에 대해 자신보다 뒤에 있는 숫자 중에서 자신보다 크면서 가장 가까이 있는 수를 뒷 큰수라고 합니다.
정수 배열 numbers가 매개변수로 주어질 때, 모든 원소에 대한 뒷 큰수들을 차례로 담은 배열을 return 하도록 solution 함수를 완성해주세요. 단, 뒷 큰수가 존재하지 않는 원소는 -1을 담습니다.

제한사항

4 ≤ numbers의 길이 ≤ 1,000,000
1 ≤ numbers[i] ≤ 1,000,000

풀이 코드

function solution(numbers) {
    const result = new Array(numbers.length).fill(-1);
    const stack = [];
    for (i = 0; i < numbers.length; i++) {
        while (numbers[i] > numbers[stack.at(-1)]){
            const index = stack.pop()
            result[index] = numbers[i];
        }
            
        stack.push(i);
    }
    return result;
}

풀이 과정

numbers.length에 대한 배열을 result에 넣어주고 fill을 통해 모든 값을 -1로 바꿔준다.
반복문을 통해 이전 값이 현재 값보다 크거나 같으면 stack안에 index를 전부 넣어 놓고 현재값이 이전값보다 크면 stack에 있는 모든 index를 꺼내서 현재값으로 바꿔준다.

기술 면접 문제 풀어보기

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

JWT(Json Web Token)

  • 유저를 인증하고 식별하기 위한 토큰(Token)기반 인증.
  • 토큰 자체에 사용자의 권한 정보나 서비스를 사용하기 위한 정보가 포함됨.
  • RSETful과 같은 무상태(Stateless)인 환경에서 사용자 데이터를 주고받을 수 있게 됨.
  • 세션(Session)을 사용할 경우 쿠키 등을 통해 사용자를 식별하고 서버에 세션을 저장했지만, 토큰을 클라이언트에 저장하고 요청시 HTTP 헤더에 토큰을 첨부하는 것만으로도 단순하게 데이터를 요청하고 응답 받을 수 있음.
  • 서버에 세션 정보를 저장하지 않고 클라이언트 측에서 토큰을 통해 인증을 처리.
    • 서버 부하 ↓
    • 확장성 ↑

구조

헤더(Header)

  • 토큰의 타입과 어떤 암호화를 사용해 생성된 데이터인지 정의되어있음.

페이로드(Payload)

  • 실제 전달하려는 데이터를 담음.
    ex) 개발자가 원하는 데이터를 저장.

서명(Signature)

  • 헤더와 페이로드, 그리고 비밀 키(Secret Key)를 이용해 생성됨.
  • 토큰이 변조되지 않은 정상적인 토큰인지 확인할 수 있게 해줌.

검증 방식

1. 사용자 인증 요청

    1. 사용자는 id와 pw를 입력해 로그인 요청을 시도함.
    1. 사용자의 id와 pw를 받은 서버는 시큐리티 등을 통해 사용자 인증 로직을 수행함.

2. 사용자 인증 완료(토큰 발급)

    1. 서버는 사용자 인증이 정상적으로 완료되면 JWT를 생성함.
    1. JWT를 사용자에게 반환.

재발급 방식 및 주기

재발급 방식

  • JWT의 만료 기간이 지나면, 클라이언트새로운 토큰을 요청하거나 서버에서 자동으로 재발급.

주기

  • 서버는 토큰의 만료 기간을 확인하고, 만료시 새 토큰을 발급해 사용자 세션을 유지.

다른 API 서비스 호출 시 인증 처리

  • 사용자 인증을 위해 사용. 사용자가 로그인 후 JWT를 받으면, 해당 토큰은 API 서비스에 대한 인증 수단으로 사용.

최종 프로젝트

DB 개인 설정 후 migration을 통해 table에 필요한 내용을 넣고 클라이언트로 실행해봤다.
해당 정보를 받아 클라이언트로 보내주는 C_Enter부분이 없어서 그런가 캐릭터 선택 이후 진행되지 않았다.
내일 할 것 : C_Enter구조 짜기.

0개의 댓글