Web Server
A server is a computer that never sleeps, so developers can sleep... sometimes.
— 시스템 엔지니어들의 보편적인 슬픔이 담긴 격언.
클라이언트(브라우저)의 HTTP 요청을 처리하여 HTML, CSS, 이미지 등의 정적 자원을 반환하는 백엔드의 최전방 기지. 그리고 서버가 터졌을 때 퇴근하던 개발자의 발목을 잡고 강제로 야근을 시키는 만악의 근원
1. 개요
웹 서버(Web Server)는 소프트웨어적으로는 클라이언트로부터 HTTP 요청을 받아 정적인 콘텐츠를 제공하는 프로그램을 뜻하며, 하드웨어적으로는 해당 프로그램을 실행하고 있는 물리적인 컴퓨터 자체를 의미한다.
클라이언트가 주소창에 URL을 입력하면, 웹 서버는 그에 해당하는 리소스를 찾아 브라우저에게 안전하게 배달해 주는 역할을 수행한다. 만약 찾는 파일이 없으면 그 유명한 404 Not Found 에러를 뿜어내며 사용자에게 실망감을 안겨준다.
2. 주요 웹 서버 종류
2.1. Apache HTTP Server (아파치)
웹 역사의 산증인이자 한때 전 세계 웹 서버 시장의 절대 강자였다. 모듈형 구조로 확장이 용이하고 레퍼런스가 차고 넘친다는 장점이 있지만, 클라이언트 접속자가 폭증하면 프로세스/스레드를 무한정 생성하다가 컴퓨터 비명을 지르게 만드는 C10K 문제에 취약하다는 단점이 있다.
2.2. Nginx (엔진엑스)
현대 웹 서비스의 대세로 자리 잡은 차세대 웹 서버다. Apache와 달리 이벤트 기반(Event-Driven) 비동기 구조로 설계되어 가벼운 메모리 점유율과 폭발적인 동시 접속자 처리 능력을 보여준다. 오늘날 대규모 서비스에서는 Nginx를 앞단에 세우고 뒷단에 실제 애플리케이션 서버를 두는 리버스 프록시(Reverse Proxy) 구성이 국룰로 자리 잡았다.
2.3. IIS (Internet Information Services)
Microsoft 윈도우 서버 전용 웹 서버. 윈도우 OS와의 찰떡궁합과 편리한 GUI 관리 도구를 지원하지만, 윈도우 라이선스 비용 문제와 리눅스 중심의 백엔드 생태계 때문에 보통 Windows 개발 환경(ASP.NET)을 사용하는 기업이 아니라면 잘 선택하지 않는 경향이 있다.
3. 관련 밈 및 드립
3.1. 서버 터졌다!
인기 아이돌의 콘서트 티켓팅, 대학 수강신청, 혹은 인기 게임의 신규 패치 날에 어김없이 나타나는 대재앙이다. 동시 접속자가 웹 서버의 처리 용량을 초과하면 CPU 점유율이 100%를 찍으며 서버가 뻗어버리는데, 대중들은 이를 "서버가 터졌다" 혹은 "서버실에 불났다"라고 표현한다. 실제로 불이 나진 않지만 인프라 엔지니어의 속은 새까맣게 타들어 간다.1
3.2. Bad Gateway
현대 웹 서핑을 하다 보면 지겹도록 볼 수 있는 하얀 화면의 에러다. 주로 프론트엔드 역할을 하는 Nginx(게이트웨이)가 뒷단의 진짜 백엔드 서버(Node.js, Spring 등)로부터 정상적인 응답을 받지 못했을 때 뿜어내는 에러로, 이 에러가 뜨면 백엔드 개발자는 조용히 짐을 풀고 모니터 앞으로 복귀해야 한다.
4. 여담
- 레고 케이스에서 시작한 구글 서버: 구글의 극초기 웹 서버는 레고 블록으로 만든 케이스 안에 하드디스크 여러 개를 쑤셔 넣어 만든 조잡한 형태였다. 서버의 잦은 고장과 확장을 쉽게 하기 위해 임시방편으로 만든 것이었으나, 이제는 구글의 전설적인 탄생 신화 중 하나가 되었다.
- 가장 완벽한 피서지 서버실: 서버실(Server Room)은 항상 수십 대의 에어컨이 풀가동되어 극도로 춥고 건조하며, 팬이 돌아가는 엄청난 소음으로 가득 차 있다. 그래서 일부 엔지니어들은 겨울철 피서지(?) 혹은 여름철 최고의 피서지로 서버실을 꼽는다.
- 랙 위에 올리는 비과학적 기도: 인형이나 부적을 서버 랙 위에 올려두고 "서버가 무사히 돌아가게 해달라"고 기도를 올리는 미신은 동서고금을 막론하고 개발자들 사이에서 널리 퍼져 있다. 과학 기술의 정점인 IT 분야에서 가장 비과학적인 기도가 행해지는 아이러니를 볼 수 있다.2