위키피디아에 명시된 정의를 그대로 가져오자면
웹 서버(영어: web server)는 웹 콘텐츠(영어판) 배포를 위해 만든 프로토콜
즉, HTTP 또는 HTTPS를 통해 클라이언트의 요청을 수행하는 서비스 프로그램 및 기반 하드웨어다.
라고 적혀있다.
당연히 이해가 가지 않으니 조금씩 해석해보자.
웹 콘텐츠 배포를 위해 만든 프로토콜
-> 이건 우리가 평소 인터넷에서 보는 보는 사이트나 서비스페이지같은 콘텐츠들을, 불특정 다수가 이용할 수 있도록(배포) 만든 어떠한 통신 약속(프로토콜)이라는 뜻이다.
HTTP 또는 HTTPS를 통해 클라이언트의 요청을 수행하는 서비스 프로그램 및 기반 하드웨어
-> 이 말은 HTTP와 HTTPS라는 어떠한 통신 규칙(프로토콜)이 있는데 이것을 사용해 통신 요청을 보내는 쪽(클라이언트)의 요청을 수행하는 프로그램이나 컴퓨터 기계(하드웨어)라는 뜻이다.
좀 풀어서 설명하긴 했는데 아직도 뭔가 모호하다.
정말 쉽게 요약하자면, 우리가 어디 사이트에 접속할때, 그 사이트의 콘텐츠를 그려내기 위해 html 파일 같은것들이 필요하다. 이러한 사이트의 파일들을 제공해주는 역할을 하는것이 웹서버이다.
웹서버의 종류에는 pache(아파치), Nginx(엔진엑스)등이 있다.
다르다.
고대의 인터넷에는 웹서버만이 존재했다... 모든 사용자에게 똑같은 화면만을 보여주는 정적 웹(static web)만이 있었다.
하지만 인터넷이 널리 보급되고 사용자 수가 폭발적으로 늘며 웹 서버 만으로는 다양한 서비스를 제공할 수 없었다. 예를 들어 사용자마다 다른 정보를 표시하는 일, 실시간 데이터를 띄워서 보여주는 일. 모두 고정된 정적 문서를 제공하는 웹 서버에서는 불가능한 일이었다.
이때 등장한 것이 웹 애플리케이션 서버 WAS(Web Application Server)이다. Web Server는 기존이랑 똑같은데 그 사이에 Application이라는 단어가 들어갔다. 애플리케이션이 무엇인가? 애플리케이션은 특정 작업을 실행되도록 프로그래밍된 소프트웨어이다. 다시말해, 기존의 딱딱한 웹 서버에 소프트웨어 기능이 붙은 서버이다.
WAS는 정적 웹 페이지와 반대되는 동적 웹페이지를 생성할 수 있다.
동적 웹은 말 그대로 실시간으로 html문서를 만들어 낼 수 있었다.
이러한 WAS와 웹 서버는 이후 백엔드에서 상호 보완적인 관계를 이루게 되는데 특정 로직이 없는 페이지는 정적 페이지는 웹서버가, 로직이 필요한 동적 페이지는 웹서버가 WAS로 요청을 전달해 WAS가 대신 처리할 수 있도록 한다.
우리가 많이 들어본 Apache Tomcat (아파치 톰캣)또한 WAS의 한 종류이다.
이제 FastAPI를 이용해 간단하게 서버를 만들어보자.
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def read_root():
return {"message": "Server is connected!"}
이 5줄의 코드를 통해 현재 웹서버가 만들어졌다!
FastAPI는 Uvicorn이라는 WAS 역할을 주로 수행하는 웹서버와 함께 쓰인다.
이제 필자의컴퓨터IP주소:포트번호 를 브라우저 주소창에 입력하면

다음과 같이 서버로부터 응답을 받을 수 있다!
이제 동일한 네트워크에서 해당 주소를 입력하면 어떤 기기에서든 동일한 응답값을 받을 수 있다!
잠깐, 동일한 네트워크라는 게 무슨 뜻일까?
네트워크를 공부한 사람을 알겠지만, 현재 내 IP주소는 공유기가 할당해준 고유한 번호, 말하자면 정확한 도로명 주소가 아닌 철수네 집, 영희네 집 같은 임시 주소번호이다.
당연히 우리 집 근처에 사는 사람들은 영희네 집, 철수네 집(IP 내부 주소)라고만 해도 어디인지 알겠지만, 저 멀리 미국 텍사스에 사는 제임스한테 영희네 집이라고 한다면 당연히 어딘지 모른다. 영희라는 이름을 가진 사람이 한 두 명도 아니고...(IP 내부 주소는 서로 다른 네트워크에서 중복이 가능하기 때문)
그래서 같은 공유기에 연결된 기기에서는 방금 만든 서버에 접속이 잘 되지만,
그 외의 외부 기기들에서는 필자의IP주소:포트번호를 입력해봤자, IP주소가 영희네 집 같은 알 수 없는 주소이기 때문에 입력해도 접속이 안 된다.
나는 전세계적으로 서비스를 하는 초대형 글로벌 서비스를 만들고 싶은데 이러면 구멍가게 밖에 못 만들지 않나!! 싶지만 우리가 많이 들어본 AWS 같은 클라우드 서버를 사용하여 도로명주소같은 공인 IP주소를 할당받을 수 있다.
공인 IP주소는 대한민국 00시 00동같이 전 세계 어디에서나 인터넷을 통해 접근할 수 있는 공식적인 주소이다. 그래서 AWS 서버를 이용한다면 다른 컴퓨터나 스마트폰이 어떤 네트워크에 있든 상관없이 항상 접속할 수 있다.
물론 포트 포워딩등을 사용해 클라우드 서버를 사용하지 않고도 내 컴퓨터 자체를 외부에서 바로 접속이 가능하게 만드는 방법도 있긴 하다. 다만 이 방법은 보안도 취약하고 설정도 좀 만져야해서 꽤나 번거롭다고...