작성한 웹페이지를 누구나 접속할 수 있게 하려면 무얼 해야 할까? 서버를 구축하고 IP 주소와 연결하는 과정이 필요하다.
서버는 클라이언트(애플리케이션, 브라우저 등)에 서비스를 제공하는 컴퓨터다. 간단하게 말하면 한 대의 컴퓨터라고 볼 수 있다. 서버는 네트워크를 통해 클라이언트의 요청 받고, 이에 대한 응답을 하며 사용자가 접속하는 브라우저에 웹 서버 내용을 출력한다.
요청은 무엇일까? 주소 입력창에 url을 입력해 엔터키를 누르는 것도 클라이언트가 보내는 요청 중 하나다.
사용자가 브라우저에 내용을 input하고 브라우저는 그 내용을 서버에 request한다. 이 경우엔 웹페이지의 모든 요소를 출력해달라는 요청이다. 서버는 쿼리를 통해 데이터베이스에 접근하고, 해당 HTML 파일을 받아 웹 서버에 응답한다. 그럼 웹 서버는 해당 내용을 브라우저에 띄워 사용자가 볼 수 있는 화면으로 출력한다.
요청과 응답은 프로토콜(protocol)을 따른다. 프로토콜은 컴퓨터끼리 서로 이해할 수 있는 통신 규약, 언어, 혹은 약속이다. 웹에서는 HTTP, HTTPS, FTP, SSH, SMTP 등의 프로토콜을 사용한다.
HTTP protocol?
인터넷을 통해 데이터를 주고 받을 때 어떻게 주고 받을지에 대한 약속. 클라이언트는 서버에 자원을 요청하고 서버는 클라이언트에 요청에 대한 처리를 응답한다.
보통 인터넷 환경은 그래픽이 중요해서 GUI 환경이지만, 웹 서버는 클라이언트의 요청에 잘 응답하는 것만이 중요하다. 따라서 그래픽을 사용하는 등 높은 수준의 환경 아래에 있지 않아도 된다. 서버 한 대가 명령어로만 작동하는 CLI(Command Line Interface) 환경에서 서버와 관련된 모든 과정이 이루어진다.
ex. gitbash, terminal
개인이 물리적으로 컴퓨터를 24시간 365일 내내 켜야 한다. 게다가 클라이언트가 모든 디렉터리에 접근하는 등 보안 문제가 생길 수 있어서 사용하기 어렵다.
서버 호스팅 : 서버 한 대(물리적으로 컴퓨터 한 대)를 통째로 임대
웹 호스팅: 서버 한 대의 특정 저장 공간만 임대하여 다른 사용자와 공유
클라우드는 언제 어디서든 인터넷을 통해 접속 가능한 환경을 말한다. 그러한 환경에서 서버, 네트워크 등 인프라 전체를 임대해주는 서비스를 클라우드 컴퓨팅이라고 한다. 물리적인 서버가 아닌 가상화* 기술을 이용하여 서버를 만든다. 즉 프로그램으로 컴퓨터(서버)를 하나 생성해 이용한다고 보면 된다.
가상화?
컴퓨터가 어떤 작업을 하기 위해 필요한 물리적 장치를 소프트웨어로 대체한다. 예를 들어 메모리, 하드디스크, 운영체제 등을 소프트웨어로 전환한 것이라고 볼 수 있다. 따라서 실체가 존재한다.
서버 호스팅처럼 root 권한(서버와 관련된 모든 권한)을 가질 수 있다. 가장 저렴한 방식의 서버 구축 방식이긴 하지만, 절대적으로 저렴하다고 볼 순 없다. 이론상 저장공간, 트래픽을 무한대로 제공할 수 있는데 그만큼 과금이 발생한다.
IP는 인터넷에서 데이터를 주고 받기 위한 통신 규약이다. xxx.xxx.xxx.xxx 형태로 IP 주소가 생성되며, 4버전(IPv4)으로 운용하다가 웹페이지 주소 수가 들어나면서 IPv6으로 확장되었다. dot(.)을 기준으로 자리에 0부터 255까지의 숫자가 담긴다. 이 주소를 통해 웹페이지에 접속할 수 있다.
CMD 혹은 터미널에서 IP 주소 확인 : ipconfig 입력
하지만 IP주소는 숫자로 이루어져있어서 사람이 기억하기가 쉽지 않다. 그래서 IP 주소를 대신해 도메인(Domain) 주소로 특정 사이트에 진입한다. 카페24나 호스팅KR처럼 IP 주소를 도메인으로 변경하는 서비스를 DNS(Domain Name System)라고 한다.
기본적으로 브라우저에 도메인 주소를 입력해 접속하면 80번 포트를 통해서 들어온 것이다. 관리자 입장에서 접속할 땐 22번 포트이다. 그럼 사용자 입장이 아닌 관리자 입장으로 웹페이지를 관리하려면 어떻게 해야 할까?
PuTTY를 사용하는 게 방법 중 하나이다. 이는 윈도우용 SSH로서 원격으로 서버에 접속해 명령을 실행할 수 있다.
PuTTY 공식 홈페이지
PuTTY를 이용해 명령어를 관리할 수 있지만, 파일 전송의 편의성을 높이기 위해 FTP(File Transfer Protocol) 소프트웨어를 활용하는 게 좋다. FileZilla는 로컬과 클라우드 서버를 연결해 파일을 관리할 수 있는 프로그램이다.
Filezilla 공식 홈페이지
웹 서버는 정적 파일(이미지, css, javascript 파일)을 전달한다. 정적 파일은 클라이언트가 요청할 때마다 자료가 바뀌는 동적 파일과 달리 변경되지 않는 파일을 가리킨다.
cf. 리액트는 동적 파일
오래전부터 사용하는 웹 서버 소프트웨어 Apache. 거의 모든 브라우저에서 사용 가능하고 다양한 모듈을 제공한다. 구축도 간단하고 무료라는 장점이 있다.
터미널 혹은 명령 프롬포트에서 아래 명령어를 입력해 아파치를 설치할 수 있다.
apt-get
Ubuntu에서 무언가를 설치할 때 사용하는 패키지 관리 명령어 도구.
apt-get update
설치 가능한 모듈 내역 업데이트
apt-get install apache
아파치 설치
미니 프로젝트를 과제로 제출하라고 했지만.. 올리지 않았다. 원래 하고 싶었던 기능에 한참 못 미치는 수준인데 이걸 제출하면 완성인 것 같은 느낌이라..
원래 하고 싶었던 기능들