[TIL] 25.01.30 THU

GDORI·2025년 1월 30일
0

TIL

목록 보기
175/184
post-thumbnail

면접 질문

아직 면접을 준비하고 있는 것은 아니고 친구와 만드는 어플리케이션이 면접을 대비할 때 사용하는 것이라 테스트용으로 DB를 채우기 위해 몇 개 가져왔다.

1. Node.js란 무엇이며, 그 특징은 무엇인가요?

  • 답변: Node.js는 서버 사이드 JavaScript 실행 환경으로, 구글 V8 엔진을 기반으로 작동합니다. 비동기적이고 이벤트 기반의 I/O 모델을 사용하여 높은 성능을 자랑하며, 싱글 스레드로 동작하지만 이벤트 루프와 비동기 처리를 통해 효율적인 처리가 가능합니다. 주로 서버 개발에 사용됩니다.

2. Node.js에서 이벤트 루프(Event Loop)란 무엇인가요?

  • 답변: 이벤트 루프는 Node.js가 비동기 작업을 처리하는 방식으로, 자바스크립트 코드가 실행되는 동안 발생하는 I/O 작업이나 타이머 등을 비동기로 처리하는 역할을 합니다. 이벤트 루프는 호출 스택과 큐를 사용하여 비동기 작업을 차례대로 실행하며, I/O 작업이 완료되면 큐에서 해당 작업을 처리합니다.

3. Non-blocking I/O와 Blocking I/O의 차이점은 무엇인가요?

  • 답변: Blocking I/O는 작업이 완료될 때까지 다른 작업이 실행되지 않는 방식입니다. 반면, Non-blocking I/O는 I/O 작업이 진행되는 동안 다른 코드가 실행될 수 있도록 하는 방식으로, Node.js는 Non-blocking I/O를 사용해 높은 성능을 발휘합니다. 예를 들어, 파일을 읽는 작업이 비동기로 처리되어 다른 작업을 기다리지 않고 실행될 수 있습니다.

4. Node.js의 패키지 관리 도구는 무엇이며, 어떻게 사용하나요?

  • 답변: Node.js의 패키지 관리 도구는 npm(Node Package Manager)입니다. npm을 사용해 외부 라이브러리나 패키지를 설치하고 관리할 수 있습니다. 예를 들어, npm install express로 Express 프레임워크를 설치하고, npm init으로 프로젝트의 package.json 파일을 생성합니다. yarn도 대안으로 사용될 수 있습니다.

5. require()import의 차이점은 무엇인가요?

  • 답변: require()는 CommonJS 모듈 시스템에서 사용되는 함수로, 동기적으로 모듈을 불러옵니다. 반면, import는 ES6 모듈 시스템에서 사용하는 구문으로, 비동기적으로 모듈을 불러옵니다. import는 최신 JavaScript 표준을 따르며, require()는 Node.js에서 주로 사용됩니다.

6. Node.js에서 클러스터 모듈을 사용하는 이유와 활용 방법을 설명해주세요.

  • 답변: Node.js는 싱글 스레드로 동작하지만, 클러스터 모듈을 사용하면 여러 프로세스를 생성하여 멀티코어 시스템에서 성능을 향상시킬 수 있습니다. 각 프로세스는 독립적인 작업을 수행하며, cluster.fork()를 사용해 워커 프로세스를 생성하고, 이를 통해 병렬 처리가 가능해집니다.

7. Node.js에서 callback hell이란 무엇이며, 이를 피하는 방법은 무엇인가요?

  • 답변: callback hell은 여러 개의 중첩된 콜백 함수들이 코드의 가독성을 떨어뜨리는 현상입니다. 이를 피하기 위해 Promiseasync/await을 사용하여 비동기 코드를 더 읽기 쉽게 작성할 수 있습니다. 예를 들어, async/await는 비동기 코드의 동기적인 흐름을 구현할 수 있어 가독성을 높입니다.

8. Express.js란 무엇인가요? 그리고 왜 Node.js에서 자주 사용되나요?

  • 답변: Express.js는 Node.js를 위한 웹 애플리케이션 프레임워크로, 라우팅, 미들웨어, 요청 및 응답 객체 등의 기능을 제공합니다. RESTful API를 쉽게 설계할 수 있도록 돕고, 빠르게 서버를 구축할 수 있어 Node.js에서 자주 사용됩니다.

9. Node.js에서 process.nextTick()setImmediate()의 차이점은 무엇인가요?

  • 답변: process.nextTick()은 현재 실행 중인 이벤트 루프의 작업이 끝난 후, 즉시 콜백을 실행합니다. setImmediate()는 이벤트 루프의 현재 단계가 끝난 후 콜백을 실행합니다. 즉, process.nextTick()은 더 높은 우선순위를 가지며, setImmediate()는 I/O 작업 후 실행됩니다.

10. Node.js에서 fs 모듈의 비동기적 파일 시스템 작업을 사용하는 예시를 들어주세요.

  • 답변: fs.readFile()은 비동기적으로 파일을 읽는 함수입니다. 예를 들어, fs.readFile('example.txt', 'utf8', (err, data) => { console.log(data); });처럼 파일을 비동기적으로 읽고, 완료 후 콜백을 실행할 수 있습니다. 파일 작업 중 다른 작업을 처리할 수 있도록 비동기 방식을 사용합니다.

11. Node.js에서 REST API를 설계할 때 고려해야 할 점은 무엇인가요?

  • 답변: REST API 설계 시 HTTP 메서드(GET, POST, PUT, DELETE 등)를 적절히 사용하고, 자원의 URI를 명확하고 직관적으로 설계해야 합니다. 또한, 상태 코드(200, 404, 500 등)를 정확하게 사용하고, 요청과 응답의 데이터 포맷을 명확히 정의해야 합니다.

12. Node.js에서 보안 취약점이 발생할 수 있는 지점과 이를 예방할 수 있는 방법은 무엇인가요?

  • 답변: 보안 취약점으로는 SQL 인젝션, XSS, CSRF, 세션 하이재킹 등이 있습니다. 이를 예방하기 위해서는 입력값 검증, 최신 패키지 사용, HTTPS 사용, 세션 보안 강화, CORS 정책 설정 등을 적용해야 합니다.

13. Node.js의 스트림(Stream)과 그 종류에 대해 설명해주세요.

  • 답변: Node.js의 스트림은 데이터를 효율적으로 처리할 수 있는 객체입니다. 스트림의 종류는 Readable, Writable, Duplex, Transform이 있으며, 각각 입력과 출력이 가능한 스트림을 다룹니다. 예를 들어, 파일을 읽는 Readable 스트림, 데이터를 보내는 Writable 스트림 등이 있습니다.

14. Node.js에서 EventEmitter 클래스는 무엇인가요?

  • 답변: EventEmitter는 이벤트 기반 프로그래밍을 위한 클래스로, 객체가 이벤트를 발생시키고 이를 리스닝할 수 있게 도와줍니다. 예를 들어, emitter.on('event', callback)을 사용해 이벤트 리스너를 등록하고, emitter.emit('event')로 이벤트를 발생시킬 수 있습니다.

15. Node.js에서 process 객체의 주요 속성과 사용 방법을 설명해주세요.

  • 답변: process 객체는 현재 프로세스의 정보를 담고 있는 객체입니다. process.argv는 명령줄 인자를, process.env는 환경 변수를, process.exit()은 프로세스를 종료하는데 사용됩니다. 예를 들어, process.env.NODE_ENV를 사용하여 환경 변수를 읽어올 수 있습니다.
profile
하루 최소 1시간이라도 공부하자..

0개의 댓글

관련 채용 정보