면접

면접 후기

index.ys 2023. 9. 5. 21:40

1. 사용자가 웹 페이지를 방문했을때 전에 방문했는지 안했는지 알 수 있는 방법

1.1 쿠키

  • 쿠키는 클라이언트(브라우저)에 저장되는 작은 데이터 조각입니다. 웹 페이지 간에 정보를 저장하고 전달하는데 사용됩니다. 웹페이지에 방문한 사용자에 대한 고유 식별자를 쿠키에 저장하고, 사용자가 웹페이지를 방문할 때마다 해당 쿠키를 확인하여 사용자를 인식할 수 있습니다.

1.2 세션

  • 세션 스토리지는 로컬 스토리지와 유사하지만,세션 스토리지는 세션이 종료되면 데이터가 자동으로 삭제 됩니다. 따라서 사용자의 현재 세션 동안에만 정보를 유지 할 수 있습니다.

1.3 로컬 스토리지

  • HTML5에서 제공하는 로컬스토리지를 사용하여 데이터를 사용자의 브라우저에 저장 할 수 있습니다. 이를 통해 사용자의 이전 방문 정보를 저장하고 검색할 수 있습니다.

2. JWT토큰에 대해 설명

  • JSON WEB TOKEN은 웹 애플리케이션 간에 정보를 안전하게 전송하기 위한 토큰 형식입니다. JWT는 JSON 포맷으로 인코딩된 토큰이며 주로 사용자 인증 및 권한 부여를 위한 용도로 쓰입니다.

2.1 JWT토큰의 3가지 구성요소에 대해 설명

헤더

  • JWT의 헤더는 두가지 정보를 포함합니다 토큰유형, 사용된 해쉬 알고리즘 
  • EX
{
  "typ": "JWT",
  "alg": "HS256"
}

페이로드

  • 페이로드에는 클레임이라고 하는 정보들이 포함됩니다. 클레임은 세가지 종류로 나눌 수 있습니다.
  • 등록된 클레임 : 토큰에 기본적인 정보를 제공 발급자, 대상자, 발급시간, 만료시간등
  • 공개 클레임 : 클라이언트와 서버간의 협의도니 사용자 정의 클레임
  • 비공개 클레임 : 사용자 정의 클레임, 서버와 클라이언트간의 협의된 정보
  • ex
{
  "sub": "1234567890",
  "name": "John Doe",
  "exp": 1516239022
}

시그니쳐

  • 헤더와 페이로드를 조합한 후, 시크릿 키를 사용하여 서명을 생성, 생성된 시그니처를 통해 토큰이 유효한지 확인
  • 서명은 토큰의 무결성을 보장하고 변조를 방지합니다.

2.2 액세스 토큰과 리프레쉬 토큰에 대해 설명

액세스 토큰

  • 액세스 토큰은 인증된 사용자가 보호된 리소스나 서비스에 접근할 수 있는 권한을 부여 하는데 사용됩니다. 일반적으로 API 요청에 포함하여 보호된 리소스에 대한 권한 검사 및 인가에 사용됩니다
  • 액세스 토큰을 짧은 수명을 가집니다 몇분 ~ 몇시간단위 짧은 수명은 보안을 높이고 토큰이 노출 되었을 때 잠재적인 위험을 제한하기 위함
  • 액세스 토큰은 주기적으로 갱신해야 합니다. 갱신을 통해 사용자는 계속해서 보호된 리소스에 접근할 수 있으며, 토큰이 만료되면 다시 로그인하거나 갱신토큰을 사용하여 새로운 액세스 토큰을 발급받아야함

리프레시 토큰

  • 리프레시 토큰은 액세스 토큰을 갱신하고 새로운 액세스 토큰을 발급 받는데 사용됩니다. 액세스 토큰 보다 긴수명을 가지며 사용자가 로그인 상태를 유지하는데 사용됩니다
  • 리프레시 토큰은 일반적으로 액세스 토큰보다 긴 수명을 가집니다 몇 일에서 몇 주까지 지속됩니다
  • 리프레시 토큰은 보안적으로 더 민감하며 안전한 방식으로 저장 및 전송되어야 합니다. 사용자가 인증서버에 다시 로그인하지 않아도 액세스 토큰을 갱신할 수 있도록 합니다.

3. 인덱싱에 대해 설명

  • 데이터베이스에서 검색 속도를 향상시키기 위해 사용되는 개념, 데이터 베이스의 테이블에서 특정 열에 대한 인덱스를 생성하면 검색 및 쿼리 수행 속도가 향상됩니다.
  • 인덱스는 데이터베이스 테이블의 특정 열에 대한 데이터 구조입니다. 검색을 빠르게하고 데이터 접근 시간을 최소화 하기위해 사용됩니다. 인덱스를 생성하면 데이터베이스 시스템은 해당 열의 값을 사전 형태로 정렬하고 효율적인 검색을 가능하게합니다.
  • 검색 성능을 향상시키지만 데이터 변경작업 CREATE , UPDATE, DELETE에 대한 성능 저하 발생가능성
  • 인덱싱은 성능 최적화에 중요한 역할을 합니다. 적절한 열에 적절한 인덱스를 생성하여 데이터베이스의 응답시간을 개선하고 데이터 접근 성능을 향상 시키는데 도움

4.  array와 object의 차이에 대해 설명

array

  • 배열은 순서가 존재하는 데이터의 모음. 각 요소는 인덱스를 가지며 요소간의 순서가 중요합니다. 배열은 주로 순서대로 연속된 데이터르 저장하거나 반복적인 작업을 수행하기 위해 사용
  • 배열 요소에 접근할 때는 정수 인덱스를 사용함
  • 배열은 요소의 순서가 중요하며 요소의 추가,제거, 재정렬 등 순서 관련작업에 유용
  • 데이터를 순차적으로 처리하거나 리스트형태의 데이터를 저장할 때 배열을 사용 반복작업에 유용

object

  • 객체는 이름과 값 key:value로 구성된 데이터 모음. 객체는 키를 사용하여 값을 참조하며, 키와 값 사이의 관계가 중요합니다. 객체는 주로 속성과 메서드를 포함하는데 사용됨
  • 객체 속성에 접근할 대는 해당속성의 key를 사용합니다. person.name
  • 객체는 key:value 상의 집합으로 순서가 존재하지 않음 객체는 주로 데이터를 논리적으로 그룹화하고 의미 있는 이름으로 식별할 때 사용
  • 데이터의 속성과 관계를 나타날 때 객체를 사용

5. node.js express의 라우터에 대해 설명

  • 클라이언트 요청라우팅 : 라우터는 클라이언트의 HTTP 요청 메서드와 URL경로를 기반으로 어떤 핸들러 함수를 실행할지 결정합니다. 이를 통해 서로다른 엔드포인트에 대한 요청을 다르게 처리할 수 있음
  • 미들웨어 연결 : Express 라우터는 미들웨어 함수와 함께 사용됩니다. 미들웨어 함수는 요청과 응답 객체를 조작 하거나 다음 미들웨어로 요청을 전달하는 역할을 수행함.
  • 라우터는 express애플리케이션에서 모듈화 및 코드 구조화를 촉진하고, 각 엔드포인트에 대한 요청 처리를 간편하게 만듭니다. 사용자 관리와 관련된 엔드포인트는 사용자 관리 라우터에 의해 처리되고, 제품 관리와 관련된 엔드포인트는 제품 관리 라우터에 의해 처리됩니다 => 코드의 유지보수와 확장성을 향상시킬 수 있습니다.

6.  자바스크립트 얕은 복사와 깊은 복사에 대해 설명

얕은복사

  • 두개의 다른 객체가 같은 메모리 주소를 참조함 => 데이터 변경시 같은 메모리 주소를 참조하고 있는 모든 데이터가 변경됨

깊은복사

  • 두개의 다른 객체가 서로 개별적인 메모리주소와 데이터를 가지고 있어 서로 변경에 대해 영향을 주지 않음

7. REST API

  • 자원을 중심으로 동작합니다. 자원은 정보의 추상적인 개념으로 웹 리소스로 표현
  • 각 자원은 고유한 식발자 (URI)를 가지며 예를들어 /users, /products 같은 URI를 사용
  • RESTful 서비스는 요청을 처리하기 위해 클라이언트의 상태를 저장하지 않음(무상태성), 서버는 요청을 독립적으로 처리하고 확장성이 높아짐
  • 자원의 상태는 표현형식 (JSON, XML)으로 전달됨, 클라이언트는 서버로부터 받은 표현을 이해하고 처리할 수 있어야함
  • HTTP 응답 상태 코드 : HTTP 응답은 상태코드를 포함하여 성공 실패 리다이렉션등의 다양한 상태를 클라이언트에게 전달함 200 OK, 201 Created, 404 Not Found, 500 Internal Server Error등이 있음