최근 수정 시각 : 2019-01-13 22:51:51

웹 서버


1. 개요2. 원리3. 웹 서버의 특징4. 보안
4.1. 암호화4.2. 웹 서버의 보안 취약점
5. 웹 서버의 종류6. 웹 애플리케이션 서버
6.1. 웹 애플리케이션 서버의 종류
7. 관련 통신 프로토콜

1. 개요

이 글을 보는 당신이 방금전에 접속했었던 서버.[1]
지금 당신이 보고 있는 위키가 굴러가기 위해 반드시 필요한 것.

서버에 접속한 위키러사용자에게 웹 서비스를 제공하기 위하여 사용되는 서버의 한 종류.

2. 원리

HTTP을 이용하여 인터넷 브라우저와 통신하며, http 통신의 경우 일반적으로 80번 포트를, https 통신의 경우 일반적으로 443번 포트를 사용한다.

HTTP 자체가 TCP를 사용하나, UDP 프로토콜 또한 사용한다. 대표적인 예시로 실시간 동영상 시청[2] 같은 많은 패킷을 주고 받을때에 사용한다.

3. 웹 서버의 특징

일반적인 서버와는 달리 사용도가 높은 웹서버의 경우, 적게는 수십, 많게는 수천의 요청을 받는 경우가 대부분이다.

HTTP의 특성상 데이터 전송을 종료하면 통신을 끊으며, 파일 전송, 동영상 시청과 같은 대량의 데이터를 송수신 하는 경우는 따로 서버를 구현하는 경우가 대부분이다.

페이스북이나 imgur 같이 데이터를 대용량으로 저장하는 서버는 웹 서버는 반드시 데이터베이스가 필요하다.
하지만 요즘은 인터넷의 발달로 데이터베이스가 없는 서버를 찾아보는게 더 어려워졌다.

다만 파일 전송의 경우는 FTP를 주로 사용하며[3][4], 실시간 동영상 시청UDP를 주로 사용한다.

4. 보안

웹 서버는 크래커주 공격 대상이다.

웹 서버는 기본적인 권한에 모두 같은 서비스를 제공한다, 많은 봇PC을 만들어 DDoS 공격에 써먹거나 XSS, CSRF, DB 크래킹, 등을 통해 개인정보를 탈취하기에 가장 적합한 서버형태가 바로 웹 서버이다.

4.1. 암호화

웹 서버는 주로 SSL를 이용하여 암호화 하며, SSL 항목에서 볼수 있듯, 검증된 사이트에게만 인증서를 내어준다.

초보 웹 프로그래머가 웹 페이지를 불러오는 과정을 https를, 동영상을 불러오는 과정을 http로 하는 케이스가 심심찮게 보이는데, 이렇게 프로그래밍을 해버리면 브라우저에서 보안 경고를 내뱉는다. [5]

여담으로 나무위키TLS 1.2, AES_128_GCM 암호화와 ECDHE_ECDSA 키교환 매커니즘을 사용한다. HTTP/2가 적용되어 빠른 접속이 가능하다.

4.2. 웹 서버의 보안 취약점

5. 웹 서버의 종류

6. 웹 애플리케이션 서버

원래 웹 서버(Web Server)와 웹 애플리케이션 서버(Web Application Server, WAS) 간에는 차이가 없었으나, 웹상에서 처리해야 할 기능이 늘어나면서 이 두 가지는 다른 소프트웨어로 분리되기 시작했다. 기본적으로 웹 서버는 클라이언트(웹 브라우저)가 보내는 HTTP 요청을 받아 서버에 있는 HTML 페이지, CSS, 자바스크립트 등을 전송하는(혹은 클라이언트로부터 컨텐츠를 전송받는) 역할인 반면, 웹 애플리케이션 서버는 JSP, Servlet 등의 Java 서버사이드 스크립트를 컴파일 및 실행하고[8], 서버 하드웨어의 쓰레드를 처리하고, 데이터베이스에 접속하여 SQL 쿼리문에 대한 결과값을 반환하는 역할이다.

간단히 말해서 웹 서버는 단순 리소스 송수신, 웹 애플리케이션 서버는 비즈니스 로직 수행이라는 차이점이 있다고 보면 된다. 다만 이러한 기능들이 완전하게 분리된 것은 아니어서, 톰캣처럼 WAS지만 웹 서버의 기능까지 포함하는 경우도 있다.

6.1. 웹 애플리케이션 서버의 종류

7. 관련 통신 프로토콜



[1] 왜 과거형인지 궁금하다면 HTTP 문서를 보거나 아래를 참고하자.[2] 인간은 1920*1080 같은 해상도에 LED 한두개가 꺼진것을 인식 못한다.[3] 압축파일 같은걸 UDP로 전송해서 손실이 발생하면 그 압축 파일은 못쓴다고 보는것이 일반적이다.[4] 보안이 중요한 서버의 경우 SFTP, FTPS를 쓴다.[5] 경고를 내뱉어도 고치다가 결국은 지쳐서 틀렸어 이제 꿈이고 희망이고 없어 상태가 되어버리는게 다반사다.[6] 만들어진지 2년 동안 발견되지 않은 심각한 버그.[7] 야후는 공격당한 서버 3곳을 아예 분리시켜버렸다.[8] 따라서 웹 애플리케이션 서버는 J2EE(Java Enterprise Edition)의 스펙을 구현한 서버여야 한다.[9] 위의 Zeus와는 다르다. Zeus는 영국의 제우스 테크놀로지가 개발한 웹 서버이고, JEUS는 한국의 티맥스소프트가 개발한 웹 애플리케이션 서버이다.

분류