TIL # 2022.11.14

kdobro_dev·2022년 11월 14일
0

TIL (Today I Learned)

목록 보기
50/56
post-thumbnail

면접 예상 질문

쿠키와 세션 동작 순서에 대해서 설명해주세요.

  • 쿠키의 동작 순서
  1. 클라이언트가 페이지를 요청한다.
  2. 웹 서버에서 쿠키를 생성한다.
  3. 쿠키에 정보를 담아 HTTP 화면을 돌려줄 때 클라이언트에게 반환한다.
  4. 넘겨 받은 쿠키는 클라이언트가 가지고 있다가 서버에 요청할 때 요청과 함께 쿠키를 전송한다.
  5. 동일 사이트 재방문 시 클라이언트의 PC에 해당 쿠키가 있는 경우 요청 페이지와 함께 쿠키를 전송한다.
  • 세션의 동작 순서
  1. 클라이언트가 페이지를 요청한다.

  2. 웹 서버는 접근한 클라이언트의 Request-header 필드인 Cookie를 확인하여

    클라이언트가 해당 session-id를 보냈는지 확인한다.

  3. session-id가 존재하지 않는다면 서버는 session-id를 생성해서 클라이언트에게 반환한다.

  4. 서버에서 클라이언트로 돌려준 session-id를 쿠키를 사용해 서버에 저장한다.

  5. 클라이언트는 재접속 시 해당 쿠키를 이용하여 session-id값을 서버에 전달한다.

Stack, Queue에 대해서 설명해주세요.

스택(STACK)이란?

  • 스택의 개념

스택이란 쌓아 올린다는 것을 의미한다.

따라서 스택 자료구조라는 것은 책을 쌓는 것처럼 차곡차곡 쌓아 올린 형태의 자료구조를 말한다.

  • 스택의 특징

스택은 위의 사진처럼 같은 구조와 크기의 자료를 정해진 방향으로만 쌓을 수 있고, top으로 정한 곳을 통해서만 접근할 수 있다.

top에 가장 위에 있는 자료는 가장 최근에 들어온 자료를 가리키고 있으며, 삽입되는 새 자료는 top이 가리키는 자료의 위에 쌓이게 된다.

스택에서 자료를 삭제할 때도 top을 통해서만 가능하다. 스택에서 top을 통해 삽입하는 연산을 (push), top을 통해 삭제하는 연산을 (pop)이라고 한다. 따라서 스택은 시간 순서에 따라 자료가 쌓여서 가장 마지막에 삽입된 자료가 가장 먼저 삭제된다는 구조적 특징을 가지게 된다. 이러한 스택의 구조를 후입선출(LIFO)구조라고 한다.

그리고 비어있는 스택에서 원소를 추출하려고 할 때 stack underflow라고 하며, 스택이 넘치는 경우는 stack overflow라고 한다.

유명한 사이트 stack overflow의 이름이 여기서 유래 되었다고 한다.

  • 스택의 활용 예시
  1. 웹 브라우저 방문기록(뒤로 가기) : 가장 나중에 열린 페이지부터 다시 보여준다.
  2. 역순 문자열 만들기 : 가장 나중에 입력된 문자부터 출력한다.
  3. 실행 취소(undo) : 가장 나중에 실행된 것부터 실행을 취소한다.
  4. 후위 표기법 계산
  5. 수식의 괄호 검사 (연산자 우선순위 표현을 위한 괄호 검사)

큐(Queue)란?

  • 큐의 개념

큐의 사전적 의미는 줄, 혹은 줄을 서서 기다리는것을 의미한다. 따라서 일상생활에서 놀이동산에서 줄을 서서 기다리는 것, 은행에서 먼저 온 사람의 업무를 창구에서 처리하는 것과 같이 선입선출(FIFO) 방식의 자료구조를 말한다.

  • 큐의 특징

정해진 한 곳을 통해서 삽입, 삭제가 이루어지는 스택과는 달리 큐는 한쪽 끝에서 삽입 작업이, 다른 쪽 끝에서 삭제 작업이 양쪽으로 이루어진다. 이 때 삭제연산만 수행되는 곳을 프론트(front), 삽입연산만 이루어지는 곳을(rear)로 정하여 각각의 연산작업만 수행된다. 이 때, 큐의 리어에서 이루어지는 삽입연산을 인큐(enQueue), 프론트에서 이루어지는 삭제연산을 디큐(deQueue) 라고 한다.

  • 큐의 활용 예시
  1. 우선순위가 같은 작업 예약 (프린터의 인쇄 대기열)
  2. 은행 업무
  3. 콜센터 고객 대기시간
  4. 프로세스 관리
  5. 너비 우선 탐색 (BFS, Breadth-First Search) 구현
  6. 캐시 (Cache) 구현

Callback, Async, Await에 대해서 설명해주세요. (Promise..)

Callback이란?

  • 다른 함수가 실행을 끝낸 뒤 실행되는 함수를 말한다.

  • 즉, 코드를 통해 명시적으로 호출하는 함수가 아니라 함수를 등록해놓은 후 어떤 이벤트가 발생했거나 특정 시점에 도달했을 때

    시스템에서 호출하는 함수를 말한다.
  • 파라미터로 함수를 전달 받아 함수의 내부에서 실행된다.

Callback 함수의 사용 이유

  • JS에서 비동기적 프로그래밍을 할 수 있기 때문이다.
  • JS는 싱글스레드를 사용하는데 멈춤을 방지해준다. 즉 블록킹을 방지하여 싱글스레드가 논블록킹으로 동작하게 한다.

Promise란?

  • Promise는 JS 비동기처리에 사용되는 객체이다.
  • 싱글스레드인 자바스크립트에서 비동기 처리를 위해 사용한 콜백함수의 에러/예외처리의 어려움, 중첩으로 인한 복잡도 증가라는 단점을 해결하기 위해 Promise 객체를 ES6에서 언어적 차원으로 지원한다.
  • Promise가 콜백을 대체하는것은 아니지만 콜백을 예측가능한 패턴으로 사용할 수 있게 하며 Promise 없이 콜백만 사용했을 때 예상치 못한 동작을 막아주거나 힘든 버그를 상당 수 해결해 준다.

Promise의 3가지 상태

Pending(대기) : 비동기 처리 로직이 아직 완료되지 않은 상태.

Fulfilled(이행) : 비동기 처리가 완료되어 프로미스가 결과값을 반환해준 상태.
Rejected(실패) : 비동기 처리가 실패하거나 오류가 발생한 상태.


Async, Await이란?

  • async & await는 비동기식 코드를 동기식으로 표현하여 간단하게 나타내는 것이다.
  • 기존의 비동기 처리 방식인 콜백함수의 단점을 보완하기 위해 Promise를 사용했지만, 코드가 장황하다는 단점이 있었다.
  • 이러한 단점을 해결하기 위해 ES8에서 도입된 비동기 처리 방식의 가장 최신 문법이다.
  • async & await는 Promise객체를 반환한다.(then()을 사용할 수 있다.)

요약

  1. 동기 함수 : 순서대로 진행
  2. 비동기 함수 : 순서대로 진행되지 않고, 기다려야하는 일이 있으면 기다리는 동안 다른일을 처리한다
  3. Callback : 어떤 이벤트가 실행되고나서 호출되는 함수(비동기함수의 일이 끝나고 호출되는함수), 인자값으로 들어가는 함수
  4. promise : 자바스크립트에서 비동기 task를 다룰 수 있게 도와주는 객체
  5. async/await : Promise보다 비동기 작업의 실행을 좀 더 유연하고 '일반함수'적으로 실행하도록 해주는 함수
profile
do your best at any moment

0개의 댓글