본문 바로가기
개발/개발자 취업준비

기술면접 준비 231011

by 코딩하는짱구 2023. 10. 11.
반응형

기술면접 준비 231011

1.  how do you get the current high resolution millisecond timestamp for performanace purposes using performance hooks - 성능후크를 사용하여 성능향상 목적으로 현재의 고해상도 밀리초 타임스탬프를 얻는 방법

답: 어떤 작업을 가운데 두고 위 아래로 시간을 재서 시작시간-작업완료 시간을 계산한다. 

const startTime = performance.now();

// Perform some operation you want to measure the performance of

const endTime = performance.now();
const elapsedTimeInMilliseconds = endTime - startTime;

console.log(`Elapsed Time: ${elapsedTimeInMilliseconds} ms`);

 

2. http2 를 사용하여 데이터 암호화과정 (SSL/TLS)

 

SSL(TLS)의 기본 작동원리

1. 지원 가능한 알고리즘 서로 교환
2. 키 교환 및 인증 
3. 대칭키 암호로 암호화하고 메시지 인증

3-WAY HANDSHAKE (TCP/IP 프로토콜에서 사용된다.)
1. 클라이언트에서 서버로 SYN : 연결 시작해도 될까요?
2. 서버에서 클라이언트로 SYN-ACK : 네 연결 가능합니다. SYN-ACK 패킷 보냄 
3. 클라이언트에서 서버로 확인 ACK : 네 그럼 연결하겠습니다. 


이 이후에 TLS 연결 요청, 그러면 서버가 인증서와 키를 보내고 진행

클라이언트 요청시 cert는 전달되고 private-key는 서버측에서만 보관된다.

const http2 = require('http2');
const fs = require('fs');

//createSecureServer 함수를 통해 HTTPS(SSL/TLS) 서버를 생성
//서버에 대한 보안 설정을 제공한다
const server = http2.createSecureServer({
  key: fs.readFileSync('private-key.pem'),
  cert: fs.readFileSync('public-cert.pem')
});

server.on('stream', (stream, headers) => {
  // Handle the incoming stream
  stream.respond({
    'content-type': 'text/html',
    ':status': 200
  });
  stream.end('<h1>Hello, HTTP/2!</h1>');
});

//8443 포트에서 서버를 시작, 클라이언트의 연결 요청을 수락한다
//클라이언트가 연결을 요청하면 SSL/TLS 핸드셰이크를 수행하여 연결 설정
server.listen(8443);

 

3. http를 통해 node.js 기본 스크립트를 실행하려면 일반적으로 .njs 파일에 저장하고 배포하면 표준 출력이 브라우저로 전송된다. -> true or false?

자바스크립트에서의 표준출력이 곧 console.log임. console.log는 서버측에서 보이는 것이지 브라우저로 전송x

 

4. node.js에서 built-in http 서버 모듈을 사용할 때 cors 사용 가능 여부-> 사용가능

서버에서 적절한 cors 헤더를 설정하면 구현가능

 

5. 외부작업을 위한 child_process 모듈, pipe()함수의 역할

var child = require('child_process');
var ls = child.spawn('ls');

// Pipe the output of ls command to process.stdout
ls.stdout.pipe(process.stdout, { end: false });

ls.on('exit', function (code) {
  process.exit(code);
});

var child = require ('child_process') : 내장된 child_process 모듈을 불러온 후

var ls = child.spawn('ls) : child 모듈의 spawn 함수를 사용하여 ls 명령어를 실행하게 됌, 말그대로 자식 프로세스의 생성은 기본적으로 spawn을 통해 이루어진다. -> 새 프로세스에서 ls 명령어를 실행시키고 그 프로세스를 node.js에서 제어하는 것

ls.stdout.pipe(procee.stdout) : ls.stdout과 process.stdout은 서로 다른 프로세스의 출력 스트림을 나타냄, ls.stdout은 외부스트림이고 process.stdout은 node.js 프로세스의 표준출력스트림임, 고로 pipe 함수가 프로세스간 데이터 전송을 해주는 것

 

6. node.js 자체는 데이터베이스를 내장한 모듈을 갖고 있지 않다, 파일시스템과 상호작용하기 위한 fs 모듈은 존재 

반응형