UMC / Node.js team / Chapter 0

리메니아·2025년 3월 19일

8th UMC / Node.js team

목록 보기
1/3
post-thumbnail
  • 8th UMC의 일원으로 활동을 시작하게 되었습니다!
    많이 배워가는 시간이 되었으면 좋겠네요~

학습 목표

  1. 클라이언트와 서버가 데이터를 주고받는 것을 이해한다.
  2. Web Server와 WAS의 차이를 이해한다.

I. 서버

0. 서버란 무엇인가?

  • 기본적으로 서버란
    • 클라이언트의 요청에 대해 적절한 응답을 주는 것

이라고 정의할 수 있다. 그중 오늘은 클라이언트와 서버가 어떻게 통신을 하는 것인지,
더 나아가서는 그 응답을 주는 서버는 어떠한 종류를 가지고 있는지에 대하여 알아보자.

1. 인터넷

먼저 네트워크 통신의 Layered Architecture, OSI 7계층, TCP/IP 5계층을 알아야 한다!
==>링크<==

  • 각 계층 모델은 네트워크 통신 표준화를 위해 제작된 모델이며, 네트워크 송/수신 간에 이루어지는 활동을 계층별로 나누어 데이터 및 각 계층에 할당되는 작업을 명확하게 구분하는 역할을 한다.

인터넷의 구성

  • 인터넷은 여러 형태의 network와 그 안에 sub-network로 구성이 됩니다. 또한 network는 다양한 entity인 Network Edge, Access network, Network Core 등으로 이루어져 있습니다.

Network Edge

  • Network Edge란 끝에 있는 entity를 의미하며 End System으로 구성이 되어있습니다. 대표적인 End System으로는 web browser, email client, 스마트폰 그리고 우리가 앞으로 개발할 server 등 실제 application이 여기에 포함이 됩니다.

Access Network

  • Access Network란 End system이 Internet의 첫 부분과 연결되는 구간으로 대표적으로 우리가 인터넷에 접속할 때 사용하는 랜선, 와이파이 등이 있습니다.

Network Core

  • Network Core란 Network의 핵심 부분으로 End system의 정보를 실어 나르는 역할을 합니다. 대표적으로 router가 있습니다. (router는 받은 데이터를 적절히 전달하는 역할을 합니다.)

인터넷 통신

인터넷 통신 = end system 간 패킷(=Datagram)을 주고받는 것!

Packet(=Datagram)

Packet은 인터넷상에서 장치들이 서로 통신할 때 전송하는 데이터 조각입니다.

  • 전 세계에는 정말 다양한 기기들이 있는데 어떻게 상대 기기를 식별하여서 패킷을 보낼까?
    -> IP를 사용하자!

IP

  • IP란 Internet Protocol의 약자로 Network Layer에서 작용을 하며 인터넷상에서 유일하게 상대를 식별할 수 있는 수단입니다. (간단하게 말하자면 인터넷상의 주소)

  • 클라이언트(end system)는 요청을 보낼 때 패킷에 IP 주소를 담고 Access Network를 통해 Network core로 보냅니다.

  • 패킷을 받은 router는 자신의 Network Layer에서 패킷 안에 있는 IP를 확인 후 더 알맞은 위치의 router로 보내게 되고 그렇게 최종적으로 Network Edge에 도착하면 Network Layer에서 패킷을 확인 후 도착지의 IP가 자신의 IP가 옳다면 Transport Layer로 올리고 아니라면 다른 곳으로 보내게 됩니다.

하지만 router들이 다른 정보 없이 패킷의 정보만을 해석하여 목적지를 추적하는 방식으로는 여러 문제점이 생기게 됩니다.

!!문제점!!
1. 만약 상대의 컴퓨터가 꺼져있다면?
2. 만약 중간에 패킷이 소실이 된다면?
3. 뒤에 보낸 패킷이 먼저 도착한다면?
4. 컴퓨터에 프로그램이 여러 개가 켜져 있다면?

1,2,3 문제 -> TCP 사용

TCP란 Transmission Control Protocol(전송 제어 프로토콜)의 약자로 연결 보증을 해줌으로써 위의 1, 2, 3번 문제를 해결할 수 있습니다. (Transport Layer에서 사용이 됩니다.)

3 way-handshake

  • Client와 Server 모두 상대방이 존재하는지 확인을 하는 방법으로, 다음과 같은 3번의 통신으로 서로의 통신 가능 유무를 확인합니다.
    1. Client --(syn)--> Server (서버가 통신이 가능한지 확인)
    2. Client <--(ask, syn)-- Server (서버는 통신 가능. 클라이언트도 통신 가능한지 확인)
    3. Client --(ask)--> Server (클라이언트도 통신 가능)

데이터 전달 보증

  • 보내는 입장이나 받는 입장에서는 패킷이 소실되었는지 아직 도착을 안한 건지 알 수 없습니다.
    그래서 데이터를 받은 후 받았음을 알려줌으로써 이를 해결합니다.

순서 보장 (sequence number 사용)

  • 보통 Packet을 보낼 때 일정량 이상이 된다면 끊어서 보내게 되는데, 이때 3번 문제처럼 뒤에서 보낸 packet이 먼저 도착할 수도 있습니다.
    예를 들어 Hello World라는 정보를 서버로 보내는 데 크기가 너무 커서 Hello와 World로 나누어서 보낸다고 가정해 봅시다. 그때 만약 순서가 뒤집힌다면 올바른 정보가 가지 못할 것입니다.

  • TCP는 패킷에 sequence number라는 순서를 붙임으로써 이 문제를 해결합니다.

도착한 패킷의 sequence number를 분석해서 만약 순서가 이상 하다면 다시 보내달라고 하여서 문제를 해결합니다.

4. 컴퓨터에 프로그램이 여러 개가 켜져 있다면? -> PORT 사용

  • PORT란 같은 IP 내에서 프로세스를 구분하는 데 사용하는 번호를 의미합니다. 대표적으로 HTTP의 80 HTTPS의 443 등이 존재합니다.
  • 즉, Network Layer에서 자신의 IP 임을 확인하였지만 어느 프로그램으로 packet을 이동시켜야 하는지 알 수 없을 경우 PORT 번호를 통해 어떤 프로그램으로 이동시켜야 하는지 결정하는 것 입니다.

UDP

  • UDP란 User Datagram Protocol(사용자 데이터그램 프로토콜)의 약자로, TCP와는 달리 3 way handshake나 데이터 전달 보증, 순서 보장 없이 기존의 IP에 PORT와 체크 섬(데이터가 맞는 지만 확인)만 추가한 프로토콜입니다.
    TCP에 비해 신뢰성이 떨어지지만 검증하는 부분이 적어지기에 그만큼 더 빠르다는 장점이 있습니다.

전체적인 흐름을 요약하자면 클라이언트가 서버에게 3 way handshake를 보내고 연결이 되면 패킷에 데이터와 IP, PORT 등 여러 정보를 넣어서 Access Network를 통해 인터넷망으로 보냅니다. 그 후 Network Core로 들어가면 router의 network Layer에서 패킷의 IP 주소를 보고 다음 router로 보내고 마침내 Network Edge에 도달하게 되면 Physical Layer, Data Link Layer를 거쳐서 Network Layer에서 IP를 확인 후 옳다면 Transport Layer에서 PORT 번호를 확인 후 알맞은 애플리케이션으로 보내서 처리하게 됩니다. (그 후 응답을 해야한다면 다시 서버에서 클라이언트로 패킷을 보내게 됩니다.)

  • 이번에는 서버란 무엇인지, 어떠한 일을 하는지 그리고 어떻게 통신하는지를 알아보았으니 이제 서버의 종류에 대해 알아보겠습니다.

2. Web Server와 WAS

  • 서버의 종류를 크게 나누자면 정적 리소스를 처리하는 Web Server와 동적 리소스를 처리 가능한 WAS가 존재합니다.

Web Server

  • Web Server란 위에서 설명하였듯이 정적 리소스를 처리해 주는 서버를 말합니다. (정적 리소스란 HTML, CSS, 이미지처럼 정적인 자원을 의미합니다.)
    대표적으로 Apache, Nginx 등이 있습니다.

WAS

  • WAS란 동적 리소스를 처리해 주는 서버를 말합니다. (동적 리소스란 DB 조회나 다양한 로직 처리를 하는 것을 의미합니다.)
    WAS에는 Web Server가 포함되어 있기에 정적 리소스까지 처리할 수 있습니다.
    대표적으로는 Spring Boot의 내장 서버인 Tomcat이 있습니다.

Web Server와 WAS를 같이 쓰는 이유

  • 분명 WAS는 정적 리소스까지 처리 가능하다고 하였는데 Web Server는 오늘날까지 많이 쓰이고 있습니다. 왜 그럴까요?
  • 기본적으로 WAS는 Web Server에 비해 더 비싸고 에러가 많이 납니다.
    그래서 정적 리소스를 많이 사용할 때는 Web Server만 늘리는 방식으로 절약할 수 있습니다.
    또한 만약 WAS가 에러가 날 시 Web Server는 요청을 WAS로 보내지 않고 에러 페이지를 띄우게 할 수 있고, Web Server에서 Web Server에서 추가로 보안 처리를 할 수 있는 등 많은 장점이 있어서 Web Server를 WAS 앞단에서 많이 사용합니다.

마치며

  • 서버에 대한 전반적인 기초 내용을 다뤘기 때문에 양이 조금 많지만, 이해하면 유기적으로 연결되어 있는 내용이기 때문에 이해하기 어렵지 않았던 것 같습니다. 다음 챕터에서도 파이팅!
profile
막히는 문제 뚫어드립니다

0개의 댓글