web server 기초

이소림·2021년 6월 30일
0
post-thumbnail

HTTP 요청을 처리하고 응답을 보내주는 프로그램을 웹 서버(Web Server)라고 부른다.

옛날의 서버 클라이언트(지금보다는 비교적 단순화) -> 의심의 여지가 없다

최근의 서버 클라이언트 -> 고도화 된 웹으로 인하여 여러곳에 있는 리소스를 활용할 필요가 생겼다 (cross origin에서 리소스를 요청 사용)

우선 이번 스프린트를 진행하면서 모르는 문법과 메소드들이 계속 나와서 1차 당황🤢
심지어 메소드가 여기서 왜 쓰인지도 모르겠어서 2차 당황🤢
당황의 연속으로 어찌저찌 이해하려고 해봤지만 생소한 언어들 뿐이여서 페어분과 함께 여러 MDN이랑 HTTP 트랜잭션 해부 를 정독해봤다.

우선 모르는 메소드를 정리하는게 우선이니 새로 알게 된 언어를 정리해보자!

Mini node Server만들기

  • 클라이언트(브라우저)에는 서버에 자원을 요청하기 위해 fetch와 같이 HTTP 요청을 보내는 도구가 기본적으로 내장되어 있다.
  • node.js 에서는 HTTP 요청을 보내거나, 응답 받을 수 있는 도구를 제공한다.
HTTP 요청을 처리하고 응답을 보내주는 프로그램을 웹 서버(Web Server)라고 부른다.

서버 생성 방법

const http = require('http');
const PORT = '5000';
// 특정포트를 제외하고는 거의 변경가능하다
const ip = 'localhost';

const server = http.createServer((request, response) => {
})
  • 모든 node 웹 서버 애플리케이션은 createServer를 이용하여 웹 서버 객체를 만들어야 한다.
  • 포트가 열리지 않을 경우 터미널을 실행해주고 그냥 웹 서버창 주소에 해당 로컬 주소를 복붙해서 입력하자

스프린트 진행방법 !

  1. Preflight Request 구현
  2. If method is ___ and url is 대문자, => 입력값을 대문자로 바꾸는 코드 구현
  3. If method is ___ and url is 소문자, => 입력값을 소문자로 바꾸는 코드 구현
  4. 나머지 예외처리, Bad Request ! = Error Code 404

OPTION : CORS 요청을 처리해 준다.
GET : Client가 처리 가능한 데이터로 넘겨준다.
POST : results에 올라온 데이터를 넣어주고 데이터를 반환해 준다.

Access-Control-Allow-Origin 을 특정 도매인으로 설정-> 

해당 도메인이 아닐 경우는 본요청을 보내지 않는다 ->
서버가 보내는 예비응답(defaultCorsHeader)이 브라우저가 본 요청을 보낼지 말지 결정하는데 조건

CORS(Cross-Origin Resource Sharing, 교차 출처 리소스 공유)

클라이언트의 도메인과 같은 도메인의 서버로부터 리소스를 받아오려고 할 때는 문제가 없다.
하지만 다른 도메인의 서버로부터 리소스를 받아오고 싶다면? ➡️ CORS

Chunk

데이터 조각
하나의 파일을 효과적으로 다루기 위하여 여러가지의 파일로 다시 나누는 것

 chunk(['a,'b','c','d'],2) // 이렇게 호출하면?
 -> [['a','b'],['c','d']] // 각각 두개씩 묶은 배열을 반환한다.
 
  chunk(['a,'b','c','d'],3) // 이렇게 호출하면?
 -> [['a','b','c'],['d']] // 호출된 3개는 한배열에 묶어주지만 나머지는 남은 배열에 넣어서 반환해준다

Buffer

한줄 요약 -> 데이터 전송시 잠깐 저장하는 임시 메모리

  • Chunk를 받아주는 그릇과 같음
  • 즉, chunk들을 buffer에 채운 후 다 차면 buffer를 통째로 옮기고 새 buffer에 아직 옮기지 못한 데이터 조각을 다시 채우는 과정을 반복한다.
  • Buffer란 Node.js 에서 제공하는 Binary 의 데이터를 담을 수 있는 Object 이다.
  • 컴퓨팅에서, 버퍼는 데이터를 한 곳에서 다른 한 곳으로 전송하는 동안 일시적으로 그 데이터를 보관하는 메모리의 영역이다.
  • 버퍼링(buffering)?
    • buffer에 chunk를 다 채울 때까지 기다리는 작업
    • 영상이 버퍼링 중이라며 재생되지 않는 경우


버퍼의 예시

  1. 만약에 어떤 작업이 데이터를 처리하는 시간보다 데이터가 도착하는 게 더 빠르다고 가정해보자. 미리 도착한 데이터는 어디에선가 처리되기를 기다리고 있어야 할 것이다.


  2. 반대로 어떤 작업이 데이터를 처리하는 시간이 데이터가 도착하는 것보다 빠르다고 가정할 경우. 이 경우에도 어느 정도의 데이터량이 쌓일 때까지 기다려야한다. (버퍼링이 걸리는 상황)


stream

buffer가 다 차면 이를 전송하고 다시 buffer를 채우는 버퍼링 작업을 연속하는 것

아는한에서 정리해봤는데 여전히 모르는것들 투성이다.
내일 리뷰시간에 집중해서 봐야지!😎

profile
Front-End Developer

0개의 댓글