웹 백엔드

서버(Server)와 프로토콜

토리쟁이 2024. 1. 22. 19:48

이번 포스팅에서는 서버(Server)에 대해 공부해 보려고 한다.

 

 

 

 

 

 

서버(Server)

클라이언트에게 네트워크를 통해 정보/서비스를 제공하는 컴퓨터 시스템이다.

 

 

 

  • 클라이언트(애플리케이션, 브라우저 등)의 요청을 컴퓨터가 수행할 수 있도록 하는 작업
  • 서버는 클라이언트의 요청을 언제든지 받아 수행할 수 있어야 하므로 항상 전원이 켜져 있어야 함
  • 주로 리눅스 or 서버용 윈도우 운영체제(OS)를 사용
  • 대부분 CLI 환경에서 운영(서버는 응답만 하면 되므로, 비교적 많은 리소스가 소모되는 GUI환경은 ㄴ)

 

 

서버를 구축하는 방법으로는 본인의 컴퓨터를 직접 서버로 구축하거나 or 일정 요금을 내고 외부 서버를 임대해 사용하는 방법이 있다. 본인의 컴퓨터로 구축할 경우, 전기세나 관리 측면에서 - 이기 때문에 보통은 외부 서버를 임대해 사용한다.

 

 

외부 서버 임대 방법: 서버 호스팅 vs 웹 호스팅

  • 서버 호스팅
    • 서버 1대 전체를 통째로 임대
    • 자체적인 관리 필요
    • 컴퓨터의 작동 환경을 유동적으로 설정 가능(원하는대로-)
    • 웹 호스팅에 비해 비교적 높은 가격
  • 웹 호스팅
    • 서버 1대의 일정 저장 공간만을 임대
    • 서버 자체를 웹 호스팅 사에서 운영, 쉽게 이용 가능
    • 트래픽, 용량 등 사용상의 제약이 있을 수 O
    • 서버 호스팅에 비해 비교적 저렴한 가격

 

 

최근에는 위에서 다룬 서버 호스팅, 웹 호스팅 방법보다는 클라우드 컴퓨팅의 사용을 추천하고 있다.

 

 

 

 

클라우드(Cloud)

  • 언제, 어디서든 인터넷을 통해 접속 가능한 환경
  • Microsoft Office 365, Dropbox, Google Apps 등
  • 가상화
    • 클라우드에서 가장 중요한 기술
    • 컴퓨터가 어떤 작업을 하기 위해 필요한 물리적인 장치를 SW로 대체(메모리, 하드디스크, OS )

 

 

클라우드 컴퓨팅(Cloud Computing)

  • 서버, 네트워크 등의 인프라 전체를 임대해주는 서비스
  • 클라우드에 구축된 인프라를 활용하는 서비스
  • 가상화 기술을 사용해 마음대로 서버를 구축하여 운영할 수 있도록 함
  • AWS, Microsoft Azure, GCP, NCP

 

 

클라우드 서버(Cloud Server)

  • 실제 물리적인 컴퓨터 1대로 서버를 운영하는 것이 아닌, VM(가상 머신)으로 서버를 운영하는 방식
  • 프로그램으로 서버를 생성해 사용하는 방법
  • 본인이 서버를 관리할 수 있는 root 권한을 가짐
    • root 권한: 모든 권한을 가진 계정
  • 짧은 시간에 서버 생성 가능
  • 물리적인 한계를 넘어 무한대의 저장 공간 이용가능
  • 이론상 아무리 접속량이 많아도 다운되지 않는 서버
  • 유형: 퍼플릭 클라우드/ 프라이빗 클라우드/ 하이브리드 클라우드

 

 

  • 퍼블릭 클라우드
    • 클라우드 서버 or 호스팅 공급자가 소유하고 관리
    • 사용한 만큼만 비용 지불
  • 프라이빗 클라우드
    • 기업 내부에서 센터를 만듦
    • 조직이 서비스를 운영하며, 조직 외부 사용자는 접근이 불가능
  • 하이브리드 클라우드
    • 퍼블릭 + 프라이빗 클라우드를 결합하여 애플리케이션이 가장 적절한 위치에서 실행되도록 함

 

 

나는 위의 3가지 유형 중, 하이브리드 클라우드인 Naver Cloud Platform에 가입하여 서버를 생성하였다.

 

 

이후 PuTTY(터미널)를 이용해 서버에 접속했다.

서버 접속 아이디는 root 이고 비밀번호는 서버 비밀번호인데 서버 비밀번호는  Naver Cloud Platform에서 서버 생성시 받은 키 파일을 업로드하면 초기 비밀번호를 알 수 있다. 초기 비밀번호가 복잡해서 passwd 명령어를 입력해 원하는 비밀번호로 다시 설정했다. 

내가 생성한 서버를 웹 서버로 만들기 위해 웹 서버용 sw인 Apache를 설치해보려고 한다. 참고로, 웹 서버는 아래에서 추가로 설명하도록 하겠다. Apache는 가장 유명한 HTTP 서버 중 하나로, 구축이 쉽고 무료라는 장점이 있다.

설치하는 방법은 매우 간단하다.

일단, apt-get 명령어는 우분투(Ubuntu)에서 쓰이는 패키지 관리 명령어다.

PuTTY에서 apt-get update 명령어를 입력해주면 운영체제에서 설치 가능한 리스트가 업데이트 된다. 그 다음, apt-get install apache2를 입력하면 apache가 다운로드 되며, 웹 브라우저에서 내 서버 IP 주소를 입력하면 접속이 가능해진다! (주의-HTTPS가 아닌 HTTP로 접속할 것)(서버를 생성했을 때 80번 포트를 추가하면서 0.0.0.0/0 누구나 80번 포트로 접속할 수 있도록 설정했기 때문에 접속이 가능해진다.)

apache 다운로드

FileZilla도 설치했다. FileZilla는 오픈 소스 크로스 플랫폼의 FTP SW이다. 클라우드 기반의 웹 서버를 사용하다 보면, 이미지 등의 파일을 전송해야 하는 경우가 있는데 이 sw를 사용하면 파일 전송이 가능하다.

(FTP: 서버와 클라이언트 사이에서 파일을 주고받기 위한 프로토콜) 

FileZilla를 통해 로컬(내 노트북)에서 원격(클라우드 서버)로 파일을 업로드하거나 다운로드할 수 있다.

(아래 사진을 보면 전에 실습했던 파일(ex1_bootstrap)이 업로드됐다는 것을 알 수 있다.)

 

 

 

 

위의 실습 과정을 통해 NCP(네이버 클라우드 플랫폼)에서 만든 서버를 Putty를 통해 접속하고 apache를 다운받아 웹 서버로 만든 후, FileZilla를 통해 서버에 원하는 정적 파일을 업로드 후 웹 브라우저에서 해당 서버에 접속해 직접 확인할 수 있었다. 이 과정에서 apache를 설치함으로써 웹 브라우저에서 해당 서버에 접속하는 것이 가능해진 것이다.

그렇다면, 웹 서버란 무엇일까?

 

 

웹 서버(Web Server)

  • HTTP or HTTPS를 통해 웹 브라우저(클라이언트)에서 요청하는 정적 데이터 전송해주는 서버
    • HTTP(Hypertext Transfer Protocol)
    • 인터넷 상에서 데이터를 주고 받기 위한 프로토콜
    • 클라이언트는 서버에게 자원을 요청(request), 서버는 받은 요청을 처리해서 클라이언트(브라우저)에게 응답(response)
    • 위에서 설명하는 정적 파일이란, 변경되지 않는 파일(이미지, css, javascript..)이다.
  • Apache(아파치), Nginx(엔진 엑스), IIS(윈도우 서버)가 대표적이다.
  • 그 중에서도 아파치는 거의 모든 OS에서 실행이 가능하고 다양한 모듈을 갖고 있다.

 

 

웹 서버에 대해 공부하면서, HTTP와 HTTPS 프로토콜이 등장했다.

프로토콜이란, 데이터를 주고받기 위한 통신 규약이며, HTTP와 HTTPS 외에도 SMTP, FTP, SSH 등 굉장히 많은 프로토콜이 존재한다. 이번에는 IP에 대해 공부해보도록 하자.

 

 

 

IPv6

IP(Internet Protocol)

  • 인터넷 상에서 데이터를 주고받기 위한 통신 규약(약속)
  • 기기(스마트폰, 컴퓨터 등)마다 운영체제, 프로그램마다 언어가 다르기 때문에 네트워크에서 통신할 수 있도록 공통된 통신 규약인 프로토콜이 필요함

 

(1byte = 8bit)

 IP 주소

  • IP 통신에 필요한 고유 주소
  • 데이터를 주고받기 위해 사용되는 주소
  • CMD 창에서 내 IP 확인하기 : ipconfig 명령어 사용(IPv4가 나의 IP 주소)
  • IPv4
    • 4개의 숫자로 표현(점으로 구분)
    • 총 32bit로 구성되어 있으며, 8bit씩 끊어 0~255 사이의 10진수 숫자로 나타냄 (2^8=256가지)
    • 숫자 1자리가 256가지 경우의 수가 나오므로, 총 256*256*256*256=2^32 개의 IP주소 할당 가능
    • 우리나라는 아직 IPv4 사용중
  • IPv6
    • IPv4의 고갈로 등장
    • 8개의 숫자로 표현(콜론:으로 구분)
    • 총 128bit로 구성되어 있으며, 16bit씩 끊어 16진수 숫자로 나타냄(2^16가지)
    •  2^16*2^16*2^16....*2^16 = 2^128개의 IP주소 할당 가능
  • 공인 IP(Public IP)
    • 외부에 공개되어 있는 IP
    • 서버 구축을 사용하고 우리가 서버에서 사용하는 것도 공인 IP
    • 공개되어 있기 때문에 누구나 검색, 접근 가능
    • 전세계에서 어떤 주소도 중복x
  • 사설 IP(Private IP)
    • 로컬IP or 가상IP라고 불리며, 특정 네트워크 안에서만 사용되는 IP
    • 외부에서 접근 불가
    • 큰 단위로 공인IP 할당 후 그 안에 사설 IP 할당
    • IPv4 부족 문제를 해결하기 위해 등장했던 방안 중 하나
    • 사내 or 가정 LAN에서 사용되는 IP 주소
  • 유동 IP
    • 변하는 IP로, IP 주소를 임시로 발급한 것
    • 기기에 고정적으로 IP를 부여하지 않고, 동적으로 IP를 사용하고 반납
  • 고정 IP
    • 변하지 않고 고정적으로 부여된 IP
    • 사용자가 직접 IP 주소를 입력해 주소를 설정하는 방식
    • 웹 페이지를 운영할 경우, IP가 변경되면 안되므로 고정IP를 사용

 

 

 

각각의 웹 페이지마다 고유 IP가 있고 그 IP를 통해 사이트 접속이 가능한데, IP는 복잡한 여러 숫자로 구성되어 있으므로 각각의 웹 사이트 고유의 IP 주소를  외우는 것은 어렵다.

우리가 흔히 쓰는 네이버도 www.naver.com 이 아닌 ip주소인 223.130.195.200으로만 접근이 가능하다면, 굉장히 불편할 것이다. 이러한 불편함을 없애기 위해 도메인을 사용하게 된 것이다.

 

 

도메인(Domain)

  • 웹 브라우저를 통해 특정 사이트를 진입할 때, IP 주소를 대신해 사용하는 주소
  • 숫자로 이루어진 IP 주소를 기억하기 어려워 IP 주소에 이름을 부여

 

URL

 

URL(Uniform Resource Locator)

  • 웹 주소
  • 웹에서 리소스(HTML 페이지, CSS, 이미지 등)가 어디에 있는지 알려주기 위한 주소

 

DNS

 

DNS(Domain Name System)

  • 숫자로 이루어진 IP 주소를 외우기는 어렵기에, 편한 언어로 이루어진 주소를 사용
  • IP 주소와 도메인 주소가 같다고 지정해서 사용자들이 도메인 주소로 검색하면, 해당되는 IP 주소를 매칭시켜 연결해줌
  • 브라우저에서 URL 입력 → DNS가 도메인명에 연결된 IP주소를 찾아서 브라우저에게 전달 → 브라우저는 해당 IP주소로 접속 → 서버는 클라이언트에게 응답

 

 

 


참고

 

IP와 HTTP는 모두 인터넷 상에서 데이터를 주고 받기 위해 만들어진 규약이다.

차이점은 아래 포스팅에 잘 나와있다

https://velog.io/@corone_hi/HTTP%EC%99%80-TCPIP%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90

'웹 백엔드' 카테고리의 다른 글

Node.js - 비동기 처리  (1) 2024.01.27
Node.js - Express 모듈과 EJS 템플릿  (1) 2024.01.26
Node.js - API와 HTTP 모듈  (0) 2024.01.25
Node.js  (1) 2024.01.22
웹 프로그래밍 시작하기  (0) 2022.10.05