항해99_6기_TIL

항해99 👩‍💻93일차 TIL

merrytang 2022. 6. 7. 21:19

Node.js 기술면접 준비


REST API

REST API란 URL, Headers, Method등 네트워크 표현 수단을 사람이 봐도 이해하기 쉬운 표현으로 정의한 API이다.

 

OOP

객체 지향 프로프로그래밍이란 현실 세계를 프로그램 설계에 반영한다는 개념을 기반으로 접근하는 방법으로써 프로그램을 수많은 '객체(object)'라는 기본 단위로 나누고 이들의 상호작용으로 서술하는 방식이다. 

 

GET, POST

GET은 서버에서 어떤 데이터를 가져와서 보여줄 때 사용되는 메서드로 데이터를 읽거나, 검색할 때 사용된다. 또 GET은 요청을 전송할 때 URL 주소 끝에 파라미터로 포함되어 전송된다. 

 POST는 서버상의 데이터의 값이나 상태를 바꾸기 위해서 사용된다. 또 GET과 달리 전송해야될 데이터를 HTTP메세지의 Body에 담아서 전송한다.

 

node.js

Node.js공식사이트에서는 'Chrome V8 Javascript엔진으로 빌드된 JavaScript 런타임' 이라고 정의되어있다.

풀어서 얘기하자면 Javascript로 서버를 구축하고, 서버에서 Javascript가 작동되도록 해주는 런타임(플랫폼)이다. 

* 런타임 : 특정 언어로 만든 프로그램드을 실행할 수 있는 환경 

 

node.js를 사용해야 하는 이유

- Node.js는 이벤트 기반 비동기방식이라 가볍고 효율적이다.

- 서버 설치부터 브라우저에 띄우는 것까지 빠르게 처리 할 수 있다.

- Node.js의 패키지인 npm은 세계에서 가장 큰 오픈 소스 라이브러리 생태계이기 때문에 개발의 속도와 효율성이 크게 향상된다.

 

node.js의 동작 원리

Node.js는 싱글 스레드 논블로킹 모델이다. 싱글 스레드지만 비동기 I/O 작업을 통해 요청들을 서로 블로킹하지 않는다. 즉 동시에 많은 요청들을 비동기로 수행함으로써 싱글 스레드 일지라도 논블로킹이 가능하다.

 

I/O 논블로킹

- 호출된 함수가 바로 리턴해서 호출한 함수에게 제어권을 넘겨주고, 호출한 함수가 다른 일을 할 수 있는 기회를 주는 방식이다. 

- I/O 작업이 진행되는 동안 유저 프로세스의 작업을 중단시키지 않는 방식이다.  

* I/O : Input / Output의 약자이다. 주로 파일 입출력을 다룰 때 흔히 볼 수 있다.

 

웹 서버

하드웨어적인 측면에서는 웹 서버가 설치되어 있는 컴퓨터를 말한다. 

소프트웨어 측면에서 웹 서버는 웹 브라우저와 같은 클라이언트로부터 HTTP 프로토콜로 요청을 받아 HTML 문서나 각족 리소스를 전달 하는 것이다. 

 

WAS와 WS

WS(Web Server)는 HTML, CSS 등의 정적인 파일을 제공하기 위한 서버이다. (Apache, Nginx)

WAS(Web Application Server)는 JSP, ASP, PHP등 사용자의 입력을 받아 동적인 데이터를 제공하기 위한 서버이다. (Tomcat, Jeus)

 

번외)

WS 사용 이유 

1) WAS의 부담 감소 : 웹 서버에서는 정적인 문서만 처리하고, WAS에서는 로직만 수행할 수 있도록 기능을 분배하여 서버의 부담을 줄여주기 위함이다.

2) WAS 보호 : 클라이언트와 WAS가 직접 연결된다면 중요한 정보들이 노출 될 수 있기 때문에, 이를 방지하기 위해 WS를 앞단에 둘 수 있다. 

 

실행 컨텍스트

- 자바스크립트의 동적 언어로서의 성격을 가장 잘 파악할 수 있는 개념이다. 

- 실행할 코드에 제공할 환경 정보들을 모아놓은 객체이다.

- 논리적 스택 구조를 가진다. 실행되는 순서대로 콜 스택에 쌓였다가, 가장 위에 쌓여있는 컨텍스트와 관련있는 코드들을 실행하는 식으로 동일한 환경과 순서를 보장한다. 

 

콜백함수

CallBack 함수란 어떤 이벤트가 발생했거나 특정 시점에 도달했을 때 시스템에서 호출하는 함수를 말한다.

즉 유니크한 문법적 특징을 가지고 있는 것이 아니라, 호출방식에 의한 구분이다. 

 

호이스팅

인터프리터가 변수와 함수의 메모리 공간을 선언 전에 미리 할당하는 것을 의미한다. var로 선언한 변수의 경우 호이스팅 시 undifined로 변수를 초기화한다. 호이스팅이 발생하는 원인은 자바스크립트 변수생성과 초기화(선언과 할당)가 분리되어 진행되기 때문이다. 

 

* 인터프리터 : 프로그래밍 언어의 소스 코드를 바로 실행하는 컴퓨터 프로그램 또는 환경을 말한다. 

 

클로저

내부함수가 정의될 때 외부함수의 환경을 기억하고 있는 내부 함수를 말한다. 클로저를 사용하면 특정 값에 대한 접근을 특정 함수로 제한함으로써, 특정 값을 안전하게 보관할 수 있다. 클로저는 자바스크립트의 고유한 개념이 아닌 함수를 일급 객체로 취급하는 함수형 프로그래밍 언어에서 사용되는 특징중에 하나이다. 

 

WAS(nginx)

nginx를 로드밸런서로 활용하면 이용자가 많아서 발생하는 요청이 많을 때 여러대의 서버를 이용하여 요청을 처리할 수 있고 무중단배포가 가능하다.

 또 보안상 웹사이트나 서비스에서 실제 서버의 IP주소를 필요로 하지 않기 때문에 DDoS와 같은 공격이 들어와도 nginx가 공격받는 것이지 실제 서버가 공격당하지 않아 보호되는 이점이 있다. 

 

__proto__

_proto_는 접근하고자 하는 객체의 내부 속성인 [[Prototype]]이다. 모든 객체는 _proto_ 를 통해 자신의 프로타입에 접근할 수 있다.

 

동기와 비동기의 차이

동기는 요청을 보낸 후 응답을 받을때까지 기다리다가 다음 동작이 이루어지는 방식으로 데이터의 요청과 결과가 한 자리에서 동시에 일어난다. 설계가 매우 간단하고 직관적이지만 결과가 주어질 때까지 아무것도 못하고 대기해야 한다는 단점이 있다. 

 비동기는 요청에 따른 결과가 반환되는 시간 동안 다른 작업을 수행할 수 있지만 동기식보다 설계가 복잡하다는 단점이 있다. 

 

packege.json

개발자가 배포한 패키지에 대해 다른 사람들이 관리하고 설치하기 쉽게 하기 위한 문서로서 반드시 필요하다.

 

CORS

CORS란 교차 출처 리소스 공유의 줄임말로써 도메인이 다른 자원에 리소스를 요청할 때 접근 권한을 부여하는 메커니즘이다. 

* 여기서 말하는 도메인이랑 리소스(자원)를 의미하며 프로토콜,호스트,포트를 의미한다.