Node js 백엔드 면접 질문 정리

Alli_Eunbi·2022년 4월 28일
45

Node Js를 사용하는 백엔드 개발자를 위한 면접 질문을 정리하고 있습니다. 아래에 계속 업데이트 될 예정입니다. 아직은 정리중이니 감안하고 봐주시길 바랍니다.

1. RDS

특징

  • 관계형 데이터 베이스 조작 및 관리를 수행하는 완전 관리형 웹서비스
  • automated backups와 DB snapshot으로 백업 기능
  • AWS IAM을 사용하여 사용자를 제어할 수 있음.

장점

  • 서버와 분리되어 있기 때문에 보안성 ⬆️
  • 서버가 다운 될 경우 DB도 영향을 받을 경우 ⬇️
  • 스토리지의 크기를 쉽게 확장할 수 있다.

단점

  • 스토리지 용량을 축소하려면 재구성
  • 비용문제 : RDS와 EC2의 비슷한 스토리지를 비교할 경우 RDS가 EC2보다 약 40~68% 정도 비싸다.
  • 서버에 직접 접속이 불가능하여 로그 확인이 어려움. Cloud Watch를 사용할 수 있지만 비용이 발생

2. Restful Api

특징

  • Representational State Transfer
  • 자원의 이름을 구분하여 자원의 상태를 주고받음.
  • HTTP URI 를 통해 자원 명시, HTTP Method(POST, GET, PUT, DELETE)를 사용하여 CRUD Operation 적용
  • REST의 3가지 요소 :
    • 자원(Resource) : HTTP URI
    • 자원에 대한 행위(Verb) : HTTP Method
    • 자원에 대한 행위의 내용(Representations) : HTTP Message Pay load
  • Rest의 특징
    • Server-Client(서버-클라이언트 구조) 자원이 있는 쪽 : Server, 자원 요청하는 쪽 : Client Client는 사용자 인증이나 context(세션, 로그인 정보)등을 직접 관리, 책임 역할을 구분하여 상호간의 의존성 줄임.
    • Stateless(무상태) Http 프로토콜이 Stateless 임 → Rest 역시 무상태성 갖음. Client의 context를 Server에 저장하지 않음(ex. 세션, 쿠키 등)
    • Cacheable(캐시 처리 가능) 웹 표준 HTTP 프로토콜을 그대로 사용, 웹에서 사용하는 기존 인프라 활용 → HTTP가 가진 캐싱 기능 적용 가능, Last-Modified Tag 또는 E-Tag를 이용해 캐싱 구현 대량의 요청 효율적 처리
    • Layered System(계층화) Rest Server는 다중 계층으로 구성될 수 있음 보안, 로드밸런싱, 암호화 등을 위한 계층 추가하여 구조 변경 가능 Proxy, Gateway와 같은 네트워크 기반의 중간매체 사용 가능 하지만 Client는 Server와 직접 통신하는지, 중간 서버와 통신하는지 알 수 없음.
    • Uniform Interface(인터페이스 일관성) URI로 지정한 Resource에 대한 요청을 통일, 한정적으로 수행하는 아키택쳐 스타일 의미 HTTP 표준 프로토콜 따르는 모든 플랫폼에서 사용 가능 → 특정 언어나 기술에 종속되지 않음
    • Self-Descriptiveness(자체 표현) 요청 메시지만 보고도 쉽게 이해할 수 있음.

장점

  • HTTP 프로토콜 준수하기 때문에 HTTP 프로토콜을 따르는 모든 곳에서 사용 가능
  • HTTP 프로토콜 인프라를 사용하기 때문에 REST API 사용을 위한 별도의 인프라 구축 필요 X
  • REST API 메시지가 의도하는 바를 명확하게 나타내므로 의도를 정확히 파악 할 수 있으며 여러가지 서비스 디자인에서 발생할 수 있는 문제를 최소화함.

단점

  • 사용 가능한 Method가 4가지 밖에 없다.(형태가 제한적)
  • 구형 브라우저에서 호환되지 않아 지원되지 않는 동작이 있다.(익스플로어)

3. 세션과 쿠키

HTTP 특징

Connection 프로토콜(비연결지향) : 클라이언트가 서버에 요청을 하면 응답을 보낸 후 연결을 끊는 처리방식

Stateless 프로토콜(상태정보 유지 안함) : 클라이언트의 상태 정보를 가지지 않는 서버 처리 방식

⇒ Stateful의 경우에 대처하기 위해 쿠키와 세션을 사용, 둘의 가장 큰 차이점은 상태 정보 저장 위치

세션 vs 쿠키

세션은 보안이 쿠키보다 좋으나 서버에 저장돼 서버 자원을 사용하기 때문에 사용자가 많을 경우 소모되는 자원이 많음. 자원 관리 차원에서 쿠키와 세션을 적절히 병행 사용하며 서버 자원의 낭비를 방지하여 웹사이트 속도를 높일 수 있음.

  1. 세션

    특징

    • 세션 : 브라우저를 닫아 서버와의 연결을 끝내는 시점
    • 방문자가 웹 서버에 접속해 있는 상태를 하나의 단위로 보고 그걸 세션이라고 함.
    • 웹서버에 웹 컨테이너의 상태를 유지하기 위한 정보를 저장
    • 웹 서버에 저장되는 쿠키(=세션 쿠키)
    • 브라우저를 닫거나 서버에서 세션을 삭제할 때 삭제 되므로 쿠키보다 비교적 보안이 좋음
    • 저장 데이터에 제한이 없음.(서버 용량이 허용하는 한)
    • 각 클라이언트 고유 Session ID 부여

    동작 순서

    • 클라이언트가 페이지를 요청
    • 서버는 클라이언트의 Request-Header 필드인 Cookie를 확인 → 클라이언트가 해당 session-id를 보냈는지 확인
    • session-id가 존재하지 않는다면 서버는 session-id를 생성해 클라이언트에게 돌려줌
    • 서버에서 클라이언트로 돌려준 session-id를 쿠키를 사용해 서버에 저장
    • 클라이언트는 재접속 시, 이 쿠키를 이용하여 session-id 값을 서버에 전달
    1. 쿠키

      특징

      HTTP의 일종으로 사용자가 어떤 웹사이트에 방문할 경우 그 사이트가 사용하고 있는 서버에서 사용자의 컴퓨터에 저장하는 작은 정보 기록 파일

      HTTP에서 클라이언트의 상태 정보를 클라이언트 PC에 저장하였다가 필요시 정보를 참조, 재사용 가능

      • 이름, 값, 만료일(저장기간 설정), 경로 정보로 구성
      • 클라이언트에 총 300개의 쿠키를 저장할 수 있음
      • 하나의 도메인 당 20개의 쿠키를 가질 수 있음
      • 하나의 쿠키는 4KB까지 저장 가능

      쿠키의 동작 순서

      • 클라이언트가 페이지를 요청
      • 웹서버는 쿠키를 생성
      • 생성한 쿠키에 정보를 담아 http 화면을 돌려줄때 같이 클라이언트에게 돌려줌
      • 넘겨 받은 쿠키는 클라이언트가 가지고 있다가(로컬 PC에 저장) 다시 서버에 요청할때 요청과 함께 쿠키 전송
      • 동일 사이트 재방문시 클라이언트의 PC에 해당 쿠키가 있는 경우, 요청 페이지와 함께 쿠키 전송

4. Status Code 200번대

  • 200 : OK 요청 성공적 수행
  • 201 : Created (요청 성공적 수행+ 결과로 새로운 리소스 생성 POST, PUT) ex. 회원 가입
  • 204 : No Content (요청 성공적 수행 + 결과로 리소스 삭제 완료) ex. 게시글 삭제

5. Status Code 400번대

  • 400 : Bad Request (사용자의 잘못된 요청을 처리할 수 없음) ex. Number로 응답해야하는 값을 string으로 보냄.
  • 401 : Unauthorized (인증이 필요한 페이지 요청) ex. 로그인이 필요한 페이지에 접근
  • 403 : Forbidden (접근 권한 없음) ex. 관리자의 권한이 필요한 페이지에 접근
  • 404 : Not found (요청한 페이지-리소스 없음) ex. 경로 잘못되거나 자원 없는 경우
  • 405 : Method not allowed (허용되지 않는 HTTP Method를 사용한 경우)
  • 408 : Request Timeout (요청 시간 초과)

6. Status Code 500번대

  • 500 : Internal Server Error (내부 서버 오류)
  • 502 : Bad Gateway(게이트웨이 오류)

7. 쓰로톨링과 디바운싱

DOM 이벤트를 기반으로 실행하는 자바스크립트를 성능상의 이유로 제어하는 방법

  • Debounce
    • 연이어 호출되는 함수들 중 마지막 함수만 호출되도록 하는 것
    • 검색어를 입력할때 엔터 없이도 결과를 즉시 보여주려면 항상 input 이벤트가 대기하고 있어야함. → 한글자 칠때마다 ajax 요청 실행 : ㄱ, 가, 감 ⇒ 이렇게 요청이 여러번 보내지게 되면 비용 문제 발생(ex. 구글지도 api)
    • 방법 타자를 칠때 setTimeout으로 타이머 설정 ex. 1초동안 다른 입력 없으면 입력 끝난 것으로 간주, 지정한 시간 동안 마지막 한번 호출
  • Throttling
    • 마지막 함수가 호출된 후 일정 시간이 지나기 전까지 다시 호출 되지 않도록 하는 것
    • 스크롤 올리거나 내릴때 scroll 이벤트가 계속해서 발생하면 버퍼링이 발생할 수 있기 때문에 몇 초에 한번, 밀리초에 한번씩만 실행되게 제한하는 것

Devops

8. 도커

특징

  • 컨테이너 기반의 오픈소스 가상화 플랫폼
  • 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼
  • 컨테이너 환경에서 독립적으로 애플리케이션을 실행할 수 있도록 컨테이너를 만들고 관리하는 것을 도와주는 도구
  • 도커를 실행하면 독립적 환경에서 일관된 결과를 보여줌

장점

  • 쉽고 빠른 실행 환경 구축
  • 가볍고 빠른 실행 속도→ vm의 경우 OS를 재구동 해야하므로 시작 자체가 무거움, 도커 컨테이너는 상대적으로 경량이기 때문에 시작이 빠름
  • 하드웨어 자원 절감 → 컨테이너의 크기가 매우 작고 하나의 물리적 서버에 다수의 컨테이너를 가동시킬 수 있음. 비용절감 효과가 큼
  • 공유 환경 제공 → Docker Hub를 통해 전세계의 개발자의 결과물을 공유할 수 있음. 이미지를 내려받기만 하면 됨
  • 쉬운 배포 → 프로그램 개발이 완료되면 개발했던 환경을 그대로 배포할 수 있음.

단점

  • 개발 초기의 오버 헤드 → 초반 환경 설정시 시행착오를 겪을 확률 높음, 소규모 프로젝트라면 도커 사용 제고 해볼것
  • 리눅스 친화적(플랫폼 의존적)

컨테이너

  • 격리된 공간에서 프로세스가 동작하는 기술
  • 기존의

10. VM과 Docker 차이

https://rat2.tistory.com/47

9. 웹서버와 웹 어플리케이션의 차이

웹서버 : 정적인 사이트 ex. 이미지, 파일, CSS, HTML ⇒ nginx, apache, IIS등

웹어플리케이션 : was, 동적인 사이트 : 로그인, 디비 접속등 (프로세스 실행+서버자원 최적화/프로세스 수 혹은 메모리 조절)⇒ phusion passenger, apache tomcat JBoss

보통은 두개 다 같이 사용

load balancer(교통 경찰)

클라이언트와 서버 사이에 존재, 스케일 아웃(서버의 확장성)을 높일 수 있음. 다만 로드밸런서에 문제가 생길 경우 전체 서비스가 작동하지 않는 다는 단점이이씀.

서버 단위의 로드밸런서 말고도 앱 단위의 로드밸런서가 있음.

보안 그룹

보안을 위해 IP나 포트를 이용해 정의 하는 서버 접속 규칙

키페어

공개키, 개인 키

CORS

  • Cross-Origin Resource Sharing
  • 추가 HTTP 헤더를 사용하여 한 출처에서 실행중인 웹 어플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제. 웹 애플리케이션은 리소스가 자신의 출처(도메인, 프로토콜, 포트)와 다를 때 교차 출처 HTTP 요청을 실행
  • 보안상의 이유로 브라우저는 스크립트에서 시작한 교차 출처 HTTP 요청을 제한. API를 사용하는 웹 애플리케이션은 자신의 출처와 동일한 리소스만 불러올 수 있으며, 다른 출처의 리소스를 불러오려면 그 출처에서 올바른 CORS 헤더를 포함한 응답을 반환해야 함.
  • CORS 체제는 브라우저와 서버 간의 안전한 교차 출처 요청 및 데이터 전송을 지원
  • CORS 해결법 : app.enableCors()(NEST의 예시)

HTTP와 HTTPS의 차이

  • HTTP(Hyper Text Transfer Protocol)란 서버/클라이언트 모델을 따라 데이터를 주고 받기 위한 프로토콜이다. HTTP는 인터넷에서 하이퍼텍스트를 교환하기 위한 통신 규약으로, 80번 포트를 사용하고 있다. 따라서 HTTP 서버가 80번 포트에서 요청을 기다리고 있으며, 클라이언트는 80번 포트로 요청을 보내게 된다.
  • HTTPS(Hyper Text Transfer Protocol Secure)란 데이터 암호화가 추가된 프로토콜, 443번 포트를 사용
  • HTTPS 연결 과정
    1. 클라이언트(브라우저)가 서버로 최초 연결 시도를 함
    2. 서버는 공개키(엄밀히는 인증서)를 브라우저에게 넘겨줌
    3. 브라우저는 인증서의 유효성을 검사하고 세션키를 발급함
    4. 브라우저는 세션키를 보관하며 추가로 서버의 공개키로 세션키를 암호화하여 서버로 전송함
    5. 서버는 개인키로 암호화된 세션키를 복호화하여 세션키를 얻음
    6. 클라이언트와 서버는 동일한 세션키를 공유하므로 데이터를 전달할 때 세션키로 암호화/복호화를 진행함

Javascript

Node JS

  • 자바스크립트 런타임 : 브라우저가 아닌 곳에서 자바스크립트를 실행하게 해주는 어플리케이션 (런타임 : 프로그래밍 언어가 구동 되는 환경)
  • 자바스크립트 : 인터프리터 언어
  • 인터프리터 언어는 컴퓨터가 알아 들을 수 있는 언어로 변환이 필요하지 않고 브라우저에서만 실행이 가능함.

이벤트 루프

자바스크립트는 single-thread
기반의 언어입니다. 즉, 자바스크립트는 하나의 호출 스택을 가집니다. 하나의 호출 스택을 가진 단일 스레드로 동작하는 자바스크립트에서 어떻게 동시성을 지원할까요? 답은 이벤트 루프입니다. 자바스크립트는 이벤트 루프 기반의 비동기 방식으로 Non-Blocking IO를 지원합니다.

비동기 함수들이 실행될 때 task-queue에 등록이 되는데 이러한 함수들이 완료된 후에 콜스택이 비워진 후 실행되게 됩니다. 이 과정에 call stack에 남은 task가 있는지 task queue에 종료된 task가 있는지 확인하는 과정이 있습니다. 이건 while문처럼 매번 task queue를 확인 하는 형태를 띄고 있는데, 이것을 event loop라고 합니다.

set-timeout에 숫자 0을 넣어 실행하는 경우가 가끔 있습니다. 얼핏보면 0초 후에 실행되니 바로 실행 되는 것으로 보일 수 있지만 이것은 비동기 함수를 이용하여 taskqueue에 등록하는 방법으로 모든 함수가 실행된 후에 실행되도록 하는 방법입니다.

eventloop.png

원시타입

string, number, bigint, boolean, undefined, Null, ES6 부터 추가된 symbol

참조타입(reference type)

Object 형식의 타입, 주소를 참조하여 메모리에 저장된 것을 갖고 옴. 참조한 값이 바뀌면 자동으로 바뀜.

Var, Let, Const

  1. Var : 중복 선언 가능 - 함수레벨 스코프
  2. let : 중복 선언 불가, 값 재할당 가능 - 블록레벨 스코프
  3. const : 중복 선언 불가, 재할당 불가능, 선언과 동시에 값을 할당 - 블록레벨 스코프

호이스팅

변수 선언이 어디에 있든 상관없이 다른 코드보다 먼저 실행되는 특징

console.log(kmj) // output: undefined
var kmj

var 와 let const의 차이

var 는 es6이전의 변수할당 문법이고, let const 는 es6문법으로 동일하게 변수를 선언할 때 사용 합니다
let,const 는 var 와 다르게 재 선언이 불가하고
var의 경우 호이스팅 으로 인하여 선언 된 라인 이전에 var 값을 사용할 수 있지만 let,const는 그러지 못합니다.
이는 호이스팅 즉 변수들을 해당 스코프의 최상위로 올리는 과정에서 var는 선언과 동시에 초기화가 되지만 let,const는 초기화가 되지 않아서 그렇습니다

또한
var는 함수레벨 스코프를, let,const는 블록 스코프를 가지는 차이가 있습니다

스코프

식별자(ex. 변수명, 함수명, 클래스명 등)의 유효범위를 뜻하며, 선언된 위치에 따라 유효 범위가 달라진다. 전역에 선언된 변수는 전역 스코프를, 지역에 선언된 변수는 지역 스코프를 갖는다.

전역 변수는 어디에서든지 참조가 가능한 값이다. 반면, 지역 변수는 함수 몸체 내부를 말한다. 따라서 지역 변수는 자신의 지역 스코프와 그 하위 지역 스코프에서 유효하다.

한 가지 주의해야 할 점은, 자바스크립트에서 모든 코드 블록(if, for, while, try/catch 등)이 지역 스코프를 만들며, 이러한 특성을 블록 레벨 스코프라 한다. 하지만 var 키워드로 선언된 변수는 오로지 함수의 코드 블록만을 지역 스코프로 인정한다. 이를 함수 레벨 스코프라 한다.

전역 변수로 인해 재할당이 발생하거나, 전역 스코프를 공유하기 때문에 어딘가에 동일한 이름이 있다면 예상치 못한 결과를 가져올 수 있는 위험이 있다. 따라서 오로지 함수 코드 블록만을 지역 스코프로 인정하는 var
대신, 블록 레벨 스코프를 지원하는 const
와 let
을 사용하는 것을 권장한다

모든 코드 블록(함수, if 문, for 문, while 문, try/catch 문 등) 내에서 선언된 변수는 코드 블록 내에서만 유효하며 코드 블록 외부에서는 참조할 수 없다. 즉, 코드 블록 내부에서 선언한 변수는 지역 변수이다.

Promise

자바스크립트 비동기 처리에 사용되는 객체

싱글스레드인 자바스크립트는 기본적으로 동기식이지만, API에 요청을 보낼 때 응답이 올 때까지 마냥 기다리기만 할 수 없기 때문에 비동기 처리가 필요하다.

하지만 비동기 처리를 할 경우, 의도하지 않은 순서로 함수가 실행될 수 있기 때문에 원하는 부분에서 동기 방식으로 변환을 해줘야 한다.

첫번째 방식이 지난번에 살펴본 콜백함수이다. 콜백함수는 함수안에서 또 다른 함수를 호출하는 것인데 여러 함수를 순서대로 호출할 필요가 있을 경우 콜백지옥을 경험하게 되는 문제점이 있다.

숫자 n 을 파라미터로 받아와서 다섯번에 걸쳐 1초마다 1씩 더해서 출력하는 작업을 setTimeout 으로 구현해보자.

Promise는 성공할 수도 있고, 실패할 수 도 있다. 성공할 때는 resolve 함수
를 호출하고, 실패할때는 reject 함수
를 호출한다.

https://mjn5027.tistory.com/85


엘라스틱 서치 인덱스와 rdbms의 차이


Database

**Database**

**데이터베이스키 종류**
후보키 : 유일성과 최소성을 만족한 키
◦ 유일성 : 해당 키로 하나의 튜플을 식별할수있음
◦ 최소성 : 꼭 필요한 속성으로만 이루어짐
기본키 : 후보키들 중 하나, Null 가질 수 없음, 동일한 값을 가질수없음
대체키/보조키 : 기본키를 제외한 후보키
외래키 : 다른 릴레이션의 속성, 참조 관계를 표현하는 데에 쓰임
슈퍼키 : 유일성은 만족하지만 최소성은 만족하지 못하는 키

JOIN에 대해서 설명해 주세요.

두 가지 이상의 릴레이션을 연결해서 데이터를 검색하는 기법
RDBMS에서는 릴레이션끼리 관계를 가지고 있는데, 각 테이블에 저장된 데이터를 효과적으로 검색하기 위해 조인이 필요하다.내부 조인, 외부 조인, 셀프 조인

  • 내부 조인(Inner Join) : 가장 기본적인 조인
  1. 동등 조인(EQUI Join) : 동등 비교(=) 사용

    1. 자연 조인(Natural Join) : 동일한 컬럼명을 가진 테이블에서 모든 컬럼 비교
    2. 교차 조인(Cross Join) : 곱집합 반환, 모든 경우의 수(M*N)
  • 외부 조인(Outer Join) : 특정 테이블의 데이터가 모두 필요한 경우
  1. Left Outer Join : 좌측 테이블의 모든 결과값 포함

    2.Right Outer Join : 우측 테이블의 모든 결과값 포함

  • 셀프 조인 (Self Join) : 자기 자신과 자기 자신 결합

SQL Injection

해커에 의해 조작된 쿼리문에 DB에 그대로 전달되어 비정상적 명령을 실행시키는 공격 기법

파티셔닝과 샤딩에 대해서 설명해 주세요.

파티셔닝
• 데이터를 여러 DB에 분산시키는 것
• X테이블의 일부 데이터는 A에, Y테이블의 일부 데이터는 B에
수평 단편화/수평 파티셔닝/샤딩
• 데이터를 수평으로 쪼갠다
수직 단편화/수직 파티셔닝
• 수직으로 칼럼을 쪼갬
• 칼럼을 나눠서 새로운 테이블로 갖고있는 것
• 특정 컬럼이 빈번하게 참조될때, 여러 데이터가 캐시에 올라갈수있음

ORM이란 무엇인가요?

ORM (Object - Relation Mapping)
• 객체-관계 매핑
• 객체지향적인 코드로 비즈니스 로직에 집중 가능
• 객체와 RDBMS간의 매핑을 하는 것
• 재사용 및 유지보수 용이
• DBMS에 대한 종속성 감소

NoSQL이란 무엇인가요?

NoSQL
• RDBMS와 달리 다른 형태의 데이터 저장
• 데이터 간의 관계 저장하지않음
• 고정되지않은 테이블 스키마
장점
• 유연함, 언제든지 저장된 데이터를 조정하고 새로운 필드를 추가할수있음
• 데이터는 애플리케이션이 필요로 하는 형식으로 저장됨
단점
• 중복을 계속 업데이트해야 함
• 데이터 구조 결정을 미루게 될 수 있음
• 수정 시 중복된 모든 컬렉션에서 수행해야함

스키마란 무엇인가요?

DB의 구조와 제약조건에 관해 명세를 기술한 것

View란 무엇인가요?

• 가상테이블
• 보안관리, 편의, 수행속도 향상
• 저장장치 내에 물리적으로 존재하지는 않음
• 필요한 데이터만 뷰로 정의할수있음
• 독립적 인덱스 불가능, CRUD에 제약이 있음

정규화이상 현상

데이터의 중복으로 인한 부작용을 말합니다
1. 삽입 이상 : 데이터를 삽입하는 데 필요없는 속성도 함께 추가해야함
1. 갱신 이상 : 데이터를 갱신한 이후 일관성이 위반됨
1. 삭제 이상 : 데이터를 삭제하는 데 의도하지 않은 것이 함께 삭제됨, 정보 손실이 일어남

정규화

정규화란 RDBMS에서 중복을 최소화하기 위해 데이터를 분해하는 작업을 말합니다.
정규화를 함으로써 이상현상을 방지할 수 있다는 장점이 있고, 릴레이션 간의 연산이 많아질 수 있다는 단점이 있습니다.

반정규화란?

반정규화는 성능 향상을 위해 중복,통합을 하는 기법이다.
조인으로 인한 성능 저하가 예상되는 경우 반정규화를 실행한다.
반정규화를 과도하게 적용하면 무결성이 깨질수있다.정규화의 종류에 대해서 말해보세요.
제 1 정규형 : 도메인이 자값만을 포함함
제 2 정규형 : 전 함수적 종속
제 3 정규형 : 기본키에 대해 행적 종속 제거
BCNF 정규형 : 모든 결정키가 보키함수적 종속성이란 무엇인가요?
X → Y : 릴레이션 R에서 X값을 알면 Y를 알 수 있고, X 값에 의해 Y값이 달라질 때, Y는 X에 함수적 종속이다.

인덱스

• RDBMS에서 검색 연산의 속도를 높이기 위한 방법
• 항상 정렬된 상태를 유지하므로 탐색이 빠르다
• 데이터 삽입/삭제/수정 시에는 추가적인 작업이 필요하므로 실행 속도가 느려진다.
• 저장 성능을 희생하고 데이터 읽기 속도를 높이는 기능
인덱스 자료구조
• B+- Tree : 일반적으로 사용됨
• Hash : 해시 값을 계산해 검색하므로 빠르나 부분 검색을 할 수 없음
인덱스를 사용하면 좋은 경우
• where 절에서 자주 사용되는 Column
• 외래키에 사용되는 Column
• Join에 자주 사용되는 Column
인덱스를 피해야 하는 경우
• 데이터의 중복도가 높은 Column
• 삽입, 삭제, 수정 연산이 자주 일어나는 Column

인덱스의 알고리즘에는 어떤 것들이 있나요?

  1. B Tree 인덱스 알고리즘 : 칼럼의 값을 변형하지 않고 원래의 값으로 인덱싱, 등호 뿐만 아니라 부등호 연산에도 적용 가능

  2. Hash 인덱스 알고리즘 : 해시값을 이용해 인덱싱

클러스터드 인덱스와 비클러스터드 인덱스란 무엇인가?

클러스터드 인덱스
• 테이블당 하나만 생성 가능
• 인덱스로 지정한 열에 맞춰 자동 정렬
비클러스터드 인덱스
• 테이블당 여러개 생성 가능

트랜잭션

데이터베이스의 상태를 변경시키는 작업의 단위
4가지 특징 ACID
• Atomicity(원자성) : 트랜잭션의 연산은 모두 반영되어야하며, 하나라도 실패하면 모두 취소되어야한다.
• Consistency(일관성) : 트랜잭션을 성공하면 언제나 일관성있는 데이터베이스 상태로 변화한다.
• Isolation(독립성, 격리성) : 둘 이상의 트랜잭션이 동시에 수행되는 경우 다른 트랜잭션의 연산에 끼어들수없다.
• Durability(지속성) : 완료된 트랜잭션은 영구적으로 반영되어야한다.

트랜잭션의 격리 수준과 각 수준에서 발생할 수 있는 문제

트랜잭션 격리 수준(Isolation level)
: 트랜잭션에서 일관성 없는 데이터를 허용하는 수준
1. 레벨 0 - Read Uncommitted 트랜잭션에 처리중이거나, 아직 Commit되지 않은 데이터를 다른 트랜잭션이 읽는 것을 허용함

  1. 레벨 1 - Read Committed Commit이 이루어진 트랜잭션만 조회 가능

  2. 레벨 2 - Repeatable Read 트랜잭션이 범위 내에서 조회한 데이터 내용이 항상 동일함을 보장함 다른 사용자는 트랜잭션 영역에 해당되는 데이터에 대한 수정 불가능

  3. 레벨 3 - Serializable 다른 사용자는 트랜잭션 영역에 해당되는 데이터에 대한 수정 및 입력 불가능

Commit과 Rollback

Commit
• 모든 작업을 정상적으로 처리하겠다고 확정하는 명령
• 실제 DB에 저장
• Commit 수행 후 하나의 트랜잭션을 종료하게 됨
Rollback
• 작업 중 문제가 발생하면 변경사항을 취소하고 트랜잭션을 종료함
• 이전 commit까지만 복구함
장점
• 데이터 무결성 보장

TypeORM vs Sequelize

Typeorm이 속도가 더 빠름

https://kyungyeon.dev/posts/3

dI(dependency injection)

was와 ws의 차이

profile
BACKEND

4개의 댓글

comment-user-thumbnail
2022년 7월 9일

와우 감샴다

답글 달기
comment-user-thumbnail
2022년 10월 13일

좋은 글 감사합니다😁

답글 달기
comment-user-thumbnail
2022년 12월 7일

와 정리 진짜 잘하셧네요 감사합니당

답글 달기
comment-user-thumbnail
2024년 1월 19일

감사함당

답글 달기