[Node.js] 백엔드 기술면접 질문 정리

J·2022년 12월 26일
1

질문 및 답변은 계속해서 추가하려고 한다.

아직 미숙한 개념이 많지만, 성장할 수 있는 기회가 많은 것이라 긍정적으로 생각하며 꾸준히 공부해나가야겠다.


1. HTTP METHOD

  • 종류 : get, post, put, delete
  • get, post 차이
    - get : 클라이언트에서 서버로 어떠한 리소스로부터 정보를 요청하기 위해 사용되는 method. 즉, 서버에서 어떤 데이터를 가져와서 보여줄 때, 값이나 내용을 바꾸지 않는 경우에 사용함.
    • post : 리소스를 생성/업데이트하기 위해 서버에 데이터를 보내는데 사용되는 method. 서버 상의 데이터 값이나 상태를 바꾸기 위해 사용함.
    • 주요 차이점으로는 get은 브라우저에 기록되지만 post는 기록되지 않음.

2. HTTP 상태 코드

  • 200 : OK, 요청이 성공적으로 되었음. 정보는 요청에 따른 응답 반환
  • 404 : 서버는 요청받은 리소스를 찾을 수 없음. 브라우저에서 알려지지 않은 URL을 의미함.
  • 503 : 서버가 요청을 처리할 준비가 되지 않았음. 유지 보수를 위해 작동이 중단되거나 과부하가 걸린 서버일 경우 발생함

3. 프로세스와 스레드의 차이

  • 프로세스는 자원을 할당받는 작업의 단위이며, 스레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위.

4. RDB와 NoSQL의 차이

  • RDBMS는 정해진 스키마가 존재하고, NoSQL은 정해진 스키마가 없다는 것이 큰 차이임.
  • NoSQL은 정해진 스키마가 없을 때 데이터 구조 변화가 자유롭고 데이터 분산이 용이하지만, 데이터 중복이 발생하거나 데이터 변경 시에 연산이 오래 걸리는 단점이 있음.

5. DB 인덱스 사용 시 장점

  • DB의 인덱스를 잘 사용하는 것은 데이터를 검색하는 시점에 성능 차이에 큰 영향을 미침.
  • 대용량 데이터를 담고 있는 DB 테이블에서 필요한 데이터를 빨리 찾기 위해 인덱스가 필요함.

6. 데이터베이스 정규화에 대하여 설명해주세요.

  • 데이터베이스의 중복을 없애는 작업을 의미함.
  • 무결성 유지 및 DB 저장 용량 절감 효과를 목표로함.
  • 실무에서는 보통 1,2,3 정규화 까지만 다룸.
    - 1정규화 : 테이블의 컬럼이 원자값(Atomic Value, 하나의 값)을 갖도록 테이블을 분해하는 것
    • 2정규화 : 제1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 것. 기본키의 부분집합이 결정자가 되어선 안된다는 것을 의미함.
    • 3정규화 : 제2 정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해하는 것
    • 이행적 종속이라는 것은 A -> B, B -> C가 성립할 때 A -> C가 성립되는 것을 의미

7. 비정규화는 무엇인가요?

  • 정규형에 부합하는 테이블을 정규형을 지키지 않게 바꾸는 걸 의미함.(중복허용)
  • 정규화 시 테이블이 여러 개로 나눠지므로, 조인 연산을 사용하는 경우가 빈번해짐.
  • 일반적으로 조회에 대한 처리 성능이 중요하다고 판단될 때 부분적으로 비정규화를 고려하게 된다

8. Database Injection에 대해 아는대로 이야기해주세요.

9. ORM이 편하고 좋은데, SQL을 알아야만 할까요?

10. RDBMS와 NoSQL은 언제 사용하는 것이 좋을까요?

11. node가 싱글스레드인데도 여러가지 병렬 작업이 되는 이유를 알려주세요.

  1. 인터프리터가 비동기 함수를 만나면, 즉시 Call Stack에서 지워버린다.

  2. 이 비동기 함수는 Web API로 넘어간다.

  3. 비동기 함수는 Web API에 담겨있다가, 타이머나 로드 등이 완료되면 Callback Queue로 보내진다.

  4. Event Loop는 Call Stack과 Callback Queue 사이에서 Call Stack이 비어있는지 주시한다.

  5. 모든 함수의 실행이 완료되고 Call Stack이 비워지면, Event Loop는 Callback Queue에 담겨있는 함수들을 먼저 들어온 순서대로 Call Stack으로 넘겨준다.

12. 세션과 쿠키의 차이를 설명해주세요.

13. http와 https의 차이를 설명해주세요.

14. Google.com을 쳤을 때 벌어지는 일을 설명해주세요.

15. 알고있는 자료구조에 대해 설명해주세요.

16. 큐와 스택의 차이에 대해 설명해주세요 & 언제 큐를 사용하는 것이 좋고, 언제 스택을 사용하는 것이 좋을까요?

17. 리팩토링에 대하여 알고 계신가요?

18. OOP에서 지향하는 바가 무엇일까요?

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

20. ORM이란 무엇인가요?

21. hoisting이란?

22. TDZ란 무엇인가요?

23. Closure 함수란 무엇인가요?

24. 실행컨텍스트란 무엇인가요?

25. Node.js 란 무엇이며, 사용하는 이유는 어떻게 되나요?

26. Express.js 란 무엇인가요?

27. Node.js 는 싱글스레드? 멀티스레드?

  • NodeJS 는 두 개의 스레드로 구성되어 있다.
  1. 이벤트 루프 (메인 스레드)
  2. Thread Pool (미리 생성된, 비어 있는 스레드 그룹이다. Thread Pool 의 크기를 미리 정해놓으면 반복적인 스레드 생성/삭제 절차를 줄임으로써 프로세스의 성능을 개선할 수 있다. Nodejs 의 Thread Pool 기본값은 4 개이다)
  • Nodejs 는 이벤트 루프에서 작동하다가, fs 나 해싱 등의 작업이 필요한 경우 이 작업을 Thread pool 로 던져주어 새로운 thread 를 사용한다.
  • Nodejs는 이벤트 루프가 싱글 스레드에서 동작 한다는 것이지 내부적으로 스레드풀을 두어 I/O 작업에 스레드를 사용할 수 있도록 한다. 이를 통해 병렬적으로 작업을 진행할 수 있는 것입니다. 결과적으로 Nodejs 는 '멀티 쓰레드' 이다.

* 참고 사이트

  1. https://zero-base.co.kr/event/media_BE_school_qna#100
  2. https://velog.io/@yukina1418/%EC%B5%9C%EA%B7%BC-%EB%A9%B4%EC%A0%91%EC%9D%84-%EB%8B%A4%EB%8B%88%EB%A9%B4%EC%84%9C-%EB%B0%9B%EC%95%98%EB%8D%98-%EC%A7%88%EB%AC%B8%EB%93%A4
profile
생각 끄적이는 공간

0개의 댓글