웹 서버(Web Server)는 일반적으로 Software를 말하지만, 웹 서버 소프트웨어가 동작하는 컴퓨터를 말하기도 한다. 웹 서버의 가장 중요한 기능은 클라이언트(Client)가 요청하는 HTML 문서나 각종 Resource를 전달하는 것이다. 즉 웹 서버는 클라이언트로부터 요청을 받아, 요청한 것을 넘겨주는 일을 한다. 만약 요청한 것이 서버에 없다면 또는 있다고 해도 주소가 틀려 다른 곳에 있어 서버가 찾지 못한다면 "404 Not Found" 메시지가 뜬다. 웹 브라우저나 웹 크롤러가 요청하는 리소스는 컴퓨터에 저장된 정적(static)인 데이터이거나 동적인 결과가 될 수 있다. 정적인 데이터는 HTML, 그림, 소리, 파일 등을 의미 한다. 즉 변하지 않는 데이터 이다.
많이 사용하는 웹 서버로는 Apache, Nginx, Microsoft IIS 등이 있다.
- Apache웹 서버는 Apache 재단에서 개발한 웹서버로 Open-source Software이며, 대부분 운영체제에서 설치 및 사용을 할 수 있다.
- Nginx는 차세대 웹서버로 불리며 더 적은 자원으로 더 빠르게 데이터를 서비스하는 것을 목적으로 만들어진 서버이며 Apache 웹 서버와 마찬가지로 오픈소스 소프트웨어 이다. Apache 웹 서버에 비해 좀 더 많은 클라이언트의 요청을 처리 할 수 있다.
클라이언트/서버 구조
Client는 Service를 제공하는 Server에게 정보를 요청하여 응답 받은 결과를 사용한다.
클라이언트 서버 통신 : 웹 클라이언트는 사용자가 서버에 요청을 보낼 수 있는 기능을 제공한다. 요청을 보내고 난 다음, 서버가 보내온 요청의 결과를 화면에 출력하는 일도 클라이언트의 역할이다. 클라이언트라는 용어는 사용자라는 사람 또는 브라우저라는 응용프로그램을 뜻하기도 한다. Browser는 서버와 통신하는 explorer, chrome, Mozilla 와 같은 소프트웨어를 말한다. 브라우저의 주된 역할은 HTML 코드를 읽어서(파싱) 화면에 보이는 것이다.
웹서버에 자료요청 방식은 웹 클라이언트(브라우저)가 웹 서버에 요청하는 서비스 처리 방식을 지정하는 것으로 일반적으로 GET, POST가 많이 사용되며, 이 외에도 PUT, DELETE, HEAD 등이 있다.
방식
설 명
GET
서버에서 자원을 가져올 때 가장 단순한 요청 방식으로 서버에 빠른 속도로 요청할 때 사용. 주로 서버로 부터 정보를 조회하기 위해 설계된 메소드 URL에 데이터를 포함시켜 요청 > 보안에 취약하다. 전송하는 길이에 제한(4096자)이 있다. 캐싱을 할 수 있다.
POST
서버에 자원을 새로 등록할 때 데이터를 생성 / 수정하기 위해 설계된 메소드. URL에 데이터를 노출하지 않고 요청할 수 있다. 데이터는 Body 영역에 포함해서 요청한다. 전송하는 길이에 제한이 없다. 캐싱을 할 수 없다.
PUT
서버의 자원을 요청에 들어 있는 자원으로 치환(수정)하고자 할 때 사용. 파일을 업로드 할 때 사용.
PATCH
서버 자원의 일부만 수정하고자 할 때 사용.
DELETE
서버의 데이터를 삭제하는 작업을 요청할 때 사용.
HEAD
GET 방식과 같으나 요청 정보의 몸체 없이 헤더 정보만 요청하는 방식.
OPTION
요청 URL에 대하여 허용되는 통신 옵션을 알고자 할 때 사용하는 방식.
TRACE
웹 클라이언트의 요청을 그대로 반환하는 방식 요청 정보가 웹 서버에 도달하기까지의 경로를 기록
Get : GET method는 클라이언트에서 서버로 어떠한 리소스로 부터 정보를 요청하기 위해 사용된다. 즉, 데이터를 읽거나(Read), 검색(Retrieve)할 때에 사용되는 method라고 할 수 있다. GET은 요청을 전송할 때 URL 주소 끝에 파라미터로 포함되어 전송되며, 이 부분을 쿼리 스트링(QueryString) 이라고 부른다.
예) www.example-url.com/resources?name=tom&age=22
위 예는 앞서 말한 쿼리스트링을 포함한 URL이다. 파라미터인 name과 age를 통해 값을 전달받을 수 있다. 요청 파라미터가 여러 개이면 &로 연결해 준다. 그리고 GET 요청은 오로지 데이터를 읽을 때만 사용되고 수정할 때는 사용하지 않는다. 그러므로 데이터의 변형없이 사용할 수 있다.
GET 요청에 대한 기타 참고 사항
GET은 불필요한 요청을 제한하기 위해 요청이 캐시될 수 있다.
파라미터에 내용이 노출되기 때문에 민감한 데이터를 다룰 때 GET 요청을 사용해서는 안 된다.
GET 요청은 브라우저 기록에 남는다.
GET 요청을 북마크에 추가할 수 있다.
GET 요청에는 데이터 길이에 대한 제한이 있다.
Get 요청은 성공시, 200(Ok) HTTP 응답 코드를 XML, JSON뿐만 아니라 여러 데이터(html, txt등..), 여러 형식의 데이터와 함께 반환한다.
GET 요청은 idempotent(멱등)하다.
Post : POSTmethod는 리소스를 생성/업데이트하기 위해 서버에 데이터를 보내는 데 사용돤다. GET과 달리 전송해야될 데이터를 HTTP 메세지의 Body에 담아서 전송한다. 그리고 그 Body의 타입은 요청 헤더의 Content-Type에 요청 데이터의 타입을 표시 따라 결정 된다. (POST로 요청을 보낼 때는 해야 한다.) HTTP 메세지의 Body는 길이의 제한없이 데이터를 전송할 수 있다. 그래서 POST 요청은 GET과 달리 대용량 데이터를 전송할 수 있는 이유도 이 때문이다. 이처럼 POST는 데이터가 Body로 전송되고, 내용이 눈에 보이지 않아 GET보다 보안적인 면에서 안전하다고 생각할 수 있지만, POST 요청도 크롬의 개발자 도구, Fiddler와 같은 툴로 요청 내용을 확인할 수 있기 때문에 민감한 데이터의 경우에는 반드시 암호화해 전송해야 한다.
Post 요청에 대한 기타 참고 사항
POST 요청은 캐시되지 않는다.
POST 요청은 브라우저 기록에 남아 있지 않다.
POST 요청을 북마크에 추가할 수 없다.
POST 요청에는 데이터 길이에 대한 제한이 없다.
Post 요청 중 자원 생성은 201(Created) HTTP 응답 코드를 반환한다.
Post 요청은 idempotent하지 않다.
Get과 Post의 차이점
GET POST
캐시
⭕️
❌
브라우저 기록
⭕️
❌
북마크 추가
⭕️
❌
데이터 길이 제한
⭕️
❌
HTTP 응답 코드
200(Ok)
201(Created)
언제 주로 사용하는가?
리소스 요청
리소스 생성
리소스 전달 방식
쿼리스트링
HTTP Body
idempotent
⭕️
❌
idempotent란 멱등법칙(冪等法則) 또는 멱등성(冪等性)이란 뜻으로, 수학이나 전산학에서 연산의 한 성질을 나타내는 것으로, 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 의미한다. 출처 : 위키백과
연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질 즉, 멱등이라는 것은 동일한 연산을 여러 번 수행하더라도 동일한 결과가 나타나야 한다.
GET은 Idempotent, POST는 Non-idempotent하게 설계되었다. 여기서 GET이 Idempotent하도록 설계되었다는 것은 GET으로 서버에게 동일한 요청을 여러 번 전송하더라도 동일한 응답이 돌아와야 한다는 것을 의미한다. 이에 따라 GET은 설계원칙에 따라 서버의 데이터나 상태를 변경시키지 않아야 Idempotent하기 때문에 주로 조회를 할 때에 사용해야 한다. 예를 들어, 브라우저에서 웹페이지를 열어보거나 게시글을 읽는 등 조회를 하는 행위는 GET으로 요청하게 된다. 반대로 POST는 Non-idempotent하기 때문에 서버에게 동일한 요청을 여러 번 전송해도 응답은 항상 다를 수 있다. 이에 따라 POST는 서버의 상태나 데이터를 변경시킬 때 사용된다. 게시글을 쓰면 서버에 게시글이 저장이 되고, 게시글을 삭제하면 해당 데이터가 없어지는 등 POST로 요청을 하게 되면 서버의 무언가는 변경되도록 사용된다. 이처럼 POST는 생성, 수정, 삭제에 사용할 수 있지만, 생성에는 POST, 수정은 PUT 또는 PATCH, 삭제는 DELETE 가 더 용도에 맞는 메소드라고 할 수 있다.
웹 서버(Web server)는 다음의 두 가지 뜻 가운데 하나이다. 웹 서버: 웹 브라우저와 같은 클라이언트로부터 HTTP 요청을 받아들이고, HTML 문서와 같은 웹 페이지를 반환하는 컴퓨터 프로그램. - 웹 서버 (하드웨어): 위에 언급한 기능을 제공하는 컴퓨터 프로그램을 실행하는 컴퓨터 - 웹 서버(Web server)는 HTTP 또는 HTTPS를 통해 웹 브라우저에서 요청하는 HTML 문서나 오브젝트(이미지 파일 등)을 전송해주는 서비스 프로그램을 말한다. 웹 서버 소프트웨어를 구동하는 하드웨어도 웹 서버라고 해서 혼동하는 경우가 간혹 있다.
WAS (Web Application Server)
WAS는 일종의 미들웨어로 웹 클라이언트(보통 웹 브라우저)의 요청 중 웹 애플리케이션이 동작하도록 지원하는 목적을 가지며, ApacheTomcat 등이 있다.
웹 서버 vs WAS
WAS도 보통 자체적으로 웹 서버 기능을 내장하고 있다. 현재는 WAS가 가지고 있는 웹 서버도 정적인 콘텐츠를 처리하는 데 있어서 성능상 큰 차이가 없다. 규모가 커질수록 웹 서버와 WAS를 분리해서 작업한다. 자원 이용의 효율성 및 장애 극복, 배포 및 유지보수의 편의성을 위해 웹서버와 WAS를 대체로 분리한다.