그저 내가 되었고

📌면접) 보충할 부분 본문

개발/BE 일반*개발 이야기

📌면접) 보충할 부분

hyuunii 2023. 3. 2. 16:28

1.  자소서 소개 부분

: 트래픽을 어떻게 신경쓸 수 있을까? Nginx

- Nginx? 트래픽이 많은 웹사이트를 위해 확장성을 위해 설계한 비동기 이벤트 기반구조의 웹서버 소프트웨어.

- Apache같은 쓰레드 기반은 하나의 커넥션당 하나의 쓰레드를 잡아 먹으나

- Nginx같은 이벤트 드라이븐방식은 여러개의 커넥션을 몽땅 다 Event Handler를 통해 비동기 방식으로 처리해 먼저 처리되는 것부터 로직이 진행되게끔 함. 그러므로 다수의 연결을 효과적으로 처리 가능하며 대부분의 코어 모듈이 Apache보다 적은 리소스로 더 빠르게 동작가능. 또한 더 작은 쓰레드로 클라이언트의 요청들을 처리 가능.

+ Nginx를 프록시 서버로 만들어 Node.js 서버 앞단에 놓으면 포트 포워딩이 되어 보안상 강점도 얻을 수 있음.

Nginx 서버를 앞단에 두어 Express가 사용하는 실제 포트를 숨기고, Nginx의 80번 포트를 통해 Reverse proxing(사용자가 실제 서버의 정보를 알지 못하게 함. 사용자들이 서버에 요청한 내용을 리버스 프록시가 배후의 서버에서 응답 데이터를 받아와 다시 사용자에게 전송)함으로써 보안 이슈를 방지하고 Nginx의 여러 기능도 사용할 수 있음.

 

 

 

2. NestJS(작성중)

웹 어플리케이션에서 컨트롤러(Controller)란 외부의 요청을 처리하는 모듈을 의미합니다. 좀 더 정확하게 말하면 하나 이상의 클라이언트가 보내는 요청을 처리하고 요청을 보낸 클라이언트에게 응답을 반환하는 역할이죠. 컨트롤러의 목적은 애플리케이션에 대한 특정 요청을 수신하는 것입니다. 라우팅 메커니즘은 어떤 컨트롤러가 해당 요청을 처리할지 조정합니다. 보통은 각각의 컨트롤러는 하나 이상의 경로가 있으며, 각기 다른 경로는 각기 다른 행동을 수행합니다.

 

 

3. Typescript

: 자바스크립트(JavaScript)를 기반으로 정적 타입 문법을 추가한 프로그래밍 언어. 

 

타입스크립트의 특징

컴파일 언어, 정적 타입 언어
자바스크립트는 동적 타입의 인터프리터 언어로 런타임에서 오류를 발견할 수 있음.

타입스크립트는 정적 타입의 컴파일 언어이며 타입스크립트 컴파일러 또는 바벨(Babel)을 통해 자바스크립트 코드로 변환됨. 코드 작성 단계에서 타입을 체크해 오류를 확인할 수 있고, 미리 타입을 결정하기 때문에 실행 속도가 매우 빠르다는 장점이 있음. 하지만 코드 작성 시 매번 타입을 결정해야 하기 때문에 번거롭고 코드량이 증가하며 컴파일 시간이 오래 걸린다는 단점이 있음.

자바스크립트 슈퍼셋(Superset)
타입스크립트는 자바스크립트의 슈퍼셋, 즉 자바스크립트 기본 문법에 타입스크립트의 문법을 추가한 언어. 따라서 유효한 자바스크립트로 작성한 코드는 확장자를 .js에서 .ts로 변경하고 타입스크립트로 컴파일해 변환할 수 있음.

객체 지향 프로그래밍 지원
타입스크립트는 ES6(ECMAScript 6)에서 새롭게 사용된 문법을 포함하고 있으며 클래스, 인터페이스, 상속, 모듈 등과 같은 객체 지향 프로그래밍 패턴을 제공함.

 

 

 

4. Socket.io

: Socket.io란 Websocket(웹소켓은 데이터가 누락되지 않게하는 tcp기반의 양방향통신을 제공하는 컴퓨터 프로토콜)을 기반으로 실시간 웹 애플리케이션을 위한 JavaScript 라이브러리, 웹 클라이언트와 서버 간의 실시간 양방향 통신을 가능하게 해주는 Node.js의 모듈. 특징으로는 이벤트기반 + 서버 소켓과 클라이언트 소켓을 연결하여서 실시간으로 양방향 통신이 가능

 

 Http 통신은 단방향 방식이고 연결이 유지가 안되기 때문에매번 업데이트 유/무를 확인하기위해서 서버에 요청을 하며, 그 때마다 전체 데이터를 불러옴. 그렇기 때문에 서버에 많은 부하가 생김.

 하지만 웹소켓은 양방향 통신을 지원하며, 서버와의 연결이 유지가 된 상태에서 데이터가 오가도록 하므로 실시간 데이터 전송이 가능. 즉, 서버와 클라이언트가 연결되있는 상태를 만들어 주기 위해서 사용. 이 웹소켓을 더욱 편리하게 개발하도록 만들어진 것이 Node.js의 Socket.io 모듈.

 

WebSocket vs socket.io

사실 애초에 둘은 다른 개념.

웹소켓은 양방향 소통을 위한 프로토콜(서로 다른 컴퓨터끼리 소통하기 위한 약속)

반면에, Socket.io는 양방햔 통신을 하기위해 웹소켓 기술을 활용하는 라이브러리. 

 

기술적으로 정리하면

WebSocket

  • HTML5 웹 표준 기술
  • 매우 빠르게 작동하며 통신할 때 아주 적은 데이터를 이용
  • 이벤트를 단순히 듣고, 보내는 것만 가능

Socket.io

  • 표준 기술이 아니며, 라이브러리
  • 소켓 연결 실패 시 fallback을 통해 다른 방식으로 알아서 해당 클라이언트와 연결을 시도
  • 방 개념을 이용해 일부 클라이언트에게만 데이터를 전송하는 Broadcasting이 가능

 

그래서 어떤 걸 써야하는데?

Socket.io:: 서버에서 연결된 소켓(사용자)들을 세밀하게 관리해야하는 서비스를 할 때. Broadcasting 기능이 있는 socket.io을 쓰는게 유지보수에서 훨씬 이득.

WebSocket:: 가상화폐 거래소같이 데이터 전송이 많은 경우에는 빠르고 비용이 적은 표준 WebSocket을 이용하는게 바람직. 실제로 업비트나 바이낸스 소켓 API를 사용해보면 정말 엄청나게 많은 데이터가 들어온다.

 

서버용 socket.io와 클라이언트용 socket.io

socket.io는 서버와 클라이언트 양쪽에서 모두 따로 사용하며, 서버용 socket.io와 클라이언트용 socket.io는 다르다. socket.io로 구성된 서버에게 소켓 연결을 하기 위해서는 클라이언트측에서 반드시 socket.io-client 라이브러리를 이용해야 함.

채팅 메시지를 주고받는 과정을 간단히 말하면 이벤트클라이언트 socket.io가 서버 socket.io에 메시지를 보내고, 메시지를 받은 서버는 적절한 클라이언트에게 받은 메시지를 보냄.

 

출처: https://jangstory.tistory.com/12