
웹서버란?
파일을 전달하는 역할을 하는 소프트웨어이다.
| 브라우저 화면 |
|---|
![]() |
| 위에 보이는 URL이 웹 서버로 자료를 요청하는 링크이다 |
Web Root 경로
: 해당 사이트의 index.html 이 위치하는 장소, 즉 해당 웹 서비스가 개시되는 홈디렉토리 경로를 의미한다.
보통 root의 웹 서버 기본 경로로 /var/www/html 가 지정되어 있다.
![]() |
|---|
| ● 명령어를 이용하여 test.txt 가 있는 위치에서 웹 서버를 실행하였다. |
| ○ python을 이용하여 웹 서버를 실행한 경우, 명령어를 실행한 위치가 웹 루트 경로가 된다. |
| ● 따라서 파일은 현재 경로에 있으므로, ~/text.txt 로 요청할 수 있게 된다. |
| URL에 링크 입력 | 파일 응답 결과 |
|---|---|
![]() | ![]() |
| URL형식에 맞춰 파일을 요청한다 | 현재 경로에 위치한 test.txt 파일이 응답되었다 |
| 명령어 입력 | 생성된 디렉토리 구조 |
|---|---|
![]() | ![]() |
| testfile 디렉토리를 만들어 test.txt 를 복사하였다 | 생성된 디렉토리 구조는 다음과 같다 |
이 경우, 어떻게 URL을 입력하면 testfile 디렉토리 안에 있는 test.txt 를 요청할 수 있을까?
웹 서버를 실행한 위치가 웹루트 경로가 된다했으므로, 뒤에 test.txt의 절대경로만 추가해주면 된다.
| URL에 링크 입력 | 파일 응답 결과 |
|---|---|
![]() | ![]() |
| 복사한 test.txt가 위치한 경로를 입력한다 | 복사된 test.txt 파일이 응답되었다 |
![]() | ![]() |
|---|---|
| testfile 디렉토리에서 웹서버 명령어 실행 | 현재의 디렉토리 구조 |
리눅스를 사용해보았다면, 다음과 같이 상위 디렉토리를 의미하는 .. 를 넣어 생각할 수도 있다. http://127.0.0.1:80/../test.txt
하지만 이는 불가능하다.
웹서버를 실행한 위치가 루트 경로가 되므로, 웹 서버 입장에서는 이 루트 경로가 끝이 되어 넘어가지 못하게 된다.
즉, 그 상위에 있는 파일들은 요청할 수 없는 것이다.
위에서 URL 규칙을 이야기 하였다. 그런데, 흔히 사용하는 네이버의 주소를 보면 https://www.naver.com/ 으로, 규칙과는 다른 모습이다.
규칙에 의거하면 https는 프로토콜, www.naver.com은 도메인 이름인것으로 보이나, 포트번호와 요청하는 파일이 명시 되어있지 않다. 여기서 '웰논포트' 라는 것을 이야기해볼 수 있다.
웰 노운포트(Well-know Port)란?
특정한 쓰임새를 위해서 IANA에서 할당한 TCP 및 UDP 포트 번호의 일부이다.
http 프로토콜은 80번 포트로, https 프로토콜은 443번 포트로 띄우자고 약속이 되어있는 것이다.
따라서 위에서 test.txt파일을 요청할때에도 http://127.0.0.1:80/test.txt 와 같이 80번 포트라고 명시하였지만, 이를 명시하지 않고 http://127.0.0.1/test.txt 와 같이 URL을 입력하여도 파일을 요청할 수 있다. 이것이 가능한 이유는 포트 번호가 없다면, 브라우저가 http프로토콜은 80번이 약속되어 있기 때문에 80번 포트를 알아서 넣어주기 때문이다
(그러나 위에서와 달리 웹서버를 열때 포트번호를 80이 아닌 9999로 열었다면, URL에 포트 번호 9999를 명시해주어야만 한다)
따라서 Well-known 포트에 의거하여, 네이버에는 포트번호 443이 생략되었구나라는 것을 알 수 있다. https://www.naver.com:443/
![]() |
|---|
| 파일을 명시하지 않고 요청을 보내면, 만들어둔 index.html이 요청된다 |
이 내용들을 토대로 아까의 네이버 주소를 다시 살펴보면
https://www.naver.com/ == http://www.naver.com:443/index.html
과 같은 형태인 것이다.
인터넷을 이용하면서 접속하게 되는 웹 페이지는 크게 2가지로 나뉜다.
누가 요청하든 같은 페이지를 제공해주는 정적 페이지와, 누가 요청하느냐에 따라 다르게 보이는 동적페이지가 있다.
그렇지만 사용자 입장에서는 서버에서 처리된 HTML로 이루어진 웹 페이지만 전달받게 된다.

1) 정적 웹 페이지
- 웹 서버에 이미 저장된 html 문서를 클라이언트에게 전송하는 웹 페이지
- 사용자는 서버에 저장된 데이터가 변경되지 않는 한 고정된 웹 페이지를 보게됨
- 모든 사용자는 같은 결과의 웹 페이지를 서버에 요청하고 응답받음
장점:
- 요청에 대한 파일만 전송하면 되므로 서버간 통신이 거의 없고 속도가 빠름
- 단순한 문서들로만 이루어져 있어 어떤 호스팅 서버에서도 동작 가능
단점:
- 저장된 정보만 보여주므로 서비스가 한정적
2) 동적 웹 페이지
- 요청 정보를 처리한 후에 제작된 HTML 문서를 클라이언트에게 전송하는 웹 페이지
- 사용자는 상황, 시간, 요청 등에 따라 달라지는 웹 페이지를 보게 됨
- 같은 페이지라도 사용자마다 다른 결과의 웹 페이지를 서버에 요청하고 받을 수 있음
장점:
- 다양한 정보를 조합하여 웹 페이지를 제공하기 때문에 서비스가 다양하다
- 웹 사이트 구조에 따라 추가, 수정, 삭제를 사용자 측에서 가능
단점:
- 사용자에게 웹 페이지를 전달하기 전에 처리하는 작업이 필요하므로 상대적으로 느림
- 웹 서버 외에 추가적으로 처리를 위한 어플리케이션 서버가 필요
웹 서버는 크게 3가지 부분으로 나누어져 있다. 흔히 3-tier 구성이라고 이야기 하는데 웹서버, WAS, DB로 이루어지는 구조이다.

1) 웹 서버 (Web Server)
2) WAS (Web Application Server)
3) DB (DataBase)
클라이언트가 서버에 요청을 할 때 제공해야 하는 자원이 있는 경우, 요청을 보내는 메소드 방식으로 GET방식과 POST방식이 존재한다.
1) GET 방식
클라이언트의 데이터를 URL뒤에 붙여서 보낸다.
http://localhost:3000/login?id=admin&pw=1234
이처럼 URL뒤에 ?를 통해 URL의 끝과 데이터 표현의 시작을 알리며 &를 붙여 여러개의 Parameter를 구분하게 된다.
특징
- 데이터를 Header(헤더)에 포함하여 전송하므로, Bpdy 데이터를 설명하는 Content-Type이라는 헤더필드는 들어가지 않는다.
- URL에 데이터를 실어 보내기 때문에 대용량 데이터 전송을 하기에 제한 사항이 있다
- URL에 정보들이 그대로 노출되기 때문에 POST 방식보다 상대적으로 보안에 취약하다
- 캐싱이 가능 ( Cashing: 한번 접근 후 또 요청할 시 빠르게 접근하기 위해 레지스터에 데이터를 저장시켜 놓는 것)
- POST 방식보다 상대적으로 전송 속도가 빠름
2) POST 방식
POST 요청시 HTTP패킷의 헤더에는 Body 컨텐츠 타입을 명시하는 Context-Type 헤더 필드를 포함하고, 패킷의 Body에는 데이터를 담아 서버로 데이터가 전송된다.
http://localhost:3000/login
POST방식은 GET방식과 달리 데이터들이 URL에 표시되지 않으며, HTTP 패킷 Body에 담겨 서버로 데이터가 전송된다.
특징
- 요청 헤더의 Context-Type에 컨텐츠 타입을 명시
- 데이터들이 URL에 노출되지 않기 때문에 GET방식보다 상대적으로 보안적
- 데이터들을 Body에 담기 때문에 서버로 보내는 데이터의 양은 제한이 없음
- URL에 데이터가 노출되지 않으므로 캐싱 불가능