웹서버
- 클라이언트로부터 요청을 받아, 요청한 것을 넘겨주는일(응답)을 한다.
- 사용자가 웹브라우저로 , 서버에 있는 자원(resource) 을 요청하는 것으로 시작.
- 요청이 서버로 전달되고, 서버는 사용자가 요청한 것을 넘겨주는 것으로 작업이 완료.
- resource 는 HTML페이지가 될 수도 있고 이미지파일, 동영상, PDF 파일이 될수 도 있다.
- 서버는 물리적인 하드웨어, 서버 어플리케이션 소프트웨어 전체를 말한다.
※ 클라이언트는 요청하고 서버는 이를 제공한다.
※ 요청한 것이 서버에 없다면?
▶ "404 Not Found" 오류 메시지가 뜬다. "요청한 자료를 서버에서 찾을 수 없습니다" 라는 뜻.
클라이언트
- 사용자라는 사람, 인간을 의미하기도 하고, 브라우저라는 응용프로그램을 뜻하기도 한다.
- 총칭해서 사용자가 요구한 대로 동작하는 웹 브라우저라는 뜻으로 이해하자.
- 브라우저는 서버랑 통신하는 크롬, 네이버웨일, 마이크로소프트엣지와 같은 소프트웨어를 뜻한다.
- 브라우저의 주된 역할은 HTML 코드를 읽어서(파싱), 화면에 보여주는 것이다.
- 사용자가 웹페이지에 있는 링크를 클릭
- 브라우저가 이를 요청으로 만들어 서버로 넘긴다. - HTTP메소드, 접근하고자하는 페이지(URL), 폼 파라미터
- 서버는 요청한 페이지를 찾는다.
- 서버는 응답을 만들어서 브라우저로 보낸다. - 상태코드(요청에 대한 성공여부), 컨텐츠 타입, 컨텐츠
- 브라우저는 서버로부터 전달받은 HTML을 사용자가 볼 수 있도록 화면에 출력한다.
HTTP (HyperText Transfer Protocol의 약자)
- 웹 상에서 클라이언트와 서버가 서로 대화하기 위한 규약, 언어 를 지칭
- 웹 상에서 일어나는 클라이언트와 서버간 대화는 거의 대부분 HTTP 프로토콜로 이루어진다.
- HTTP 는 요청과 응답으로 이루어진 아주 단순한 구조.
- 클라이언트가 HTTP 요청을 보내면, 서버는 HTTP 응답으로 대꾸한다.
- 서버는 HTML을 전송하기 위하여 HTTP 를 사용한다.
- TCP/IP 위에서 돌아간다.
- HTTP는 TCP/IP 기반으으로하여, TCP/IP를 이용해서 한 지점에서 다른 지점으로 요청과 응답을 전송한다.
- HTTP 응답안에 헤더정도, HTML이 들어있다.
- 브라우저는 헤더 정보로 컨텐츠를 어떻게 화면에 보여줄지에 대한 힌트를 얻는다.
TCP/IP
▶ TCP
- 한쪽 노드에서 다른 쪽 노드로 파일을 보내는 역할 (여러 개로 잘라서 보낼수 도 있다.)
- 서버 하드웨어 상에서 돌아가는 소프트웨어를 구별하기 위한 16비트 숫자 값.
- 웹 서버(HTTP) 는 대부분 80포트 위에서 돌아간다.
- 서버 애플리케이션을 구분해주는 '식별자' 라고 생각하자.
- 포트란 것이 있기 떄문에, 서버는 클라이언트가 지금 어느 애플리케이션에 접속하기를 원하는지 알 수 있다.
- 예를 들어 웹 브라우저의 경우, 연결 요청을 HTTP 서버가 아니라 POP3 메일서버로 날린다면 메일 서버는 HTTP 요청을 읽지 못한다. 그리고 읽는다고 해도 HTML문서를 만들어내지 못하기 떄문에 응답을 해줄 수도 없다.
- 포트로 쓸 수 있는 값의 범위는 0~65535
- 대세 0~1023번까지의 포트는 이미 널리 알려진 서비스를 위하여 예약되어있다. 이 범위의 포트는 사용자제
▶ IP - 한 호스트에서 목적지 호스트까지 패킷을 옮기고 이동하기 위한 기반(베이스) 프로토콜.
HTTP메소드
- HEAD, TRACE, PUT, DELETE, CONNECT 여러가지가 있지만, 가장 많이 사용하는 것은 GET, POST
▶ GET
- 가장 단순한 메소드
- 단순히 서버에게 자원을 요청하는 일 (HTML페이지, 이미지파일,PDF문서 등)
- GET의 핵심은 "서버로부터 뭔가를 돌려(get back) 받는다" 라는 것
- HTTP GET메소드도 많지는 않지만 데이터를 보낼 수 있다.
- GET으로 보낼 수 있는 글자 수는 제한이 있다.(서버에 따라 다르지만, 검색입력칸에 검색어를 끝도 없이 써 넣으면 GET이 작동하지 않을 수도 있다.)
- GET의 데이터 전송방식은 브라우저 주소란에 기입하는 URL 뒤에 붙이는 식이다. 그러므로 중요한데이터일 경우데도 화면에 다 보인다. 그러니 패스워드같은 민감한 데이터는 GET으로 보내지 않는 것이 현명하다.
- 위 두가지 이유로, GET으로 전송하는 URL은 즐겨찾기에 등록할 수도 있지만, POST는 대부분 그렇지 못하다.
- 브라우저에 따라 폼의 서밋(submit) 결과를 즐겨찾기에 등록 못할 수도 있다.
- ?는 경로(path)와 파라미터(쿼리스트링)를 구분하는 구분자이다.
- 개별 파라미터는 & 로 구분한다.
▶ POST
- GET 보다 강력한 메소드. GTE++느낌
- 서버에세 자원을 요청할 떄 필요한 정보를 함꼐 넘겨 준다.
- POST를 만든 목적은 서버한테 복잡한 요청도 한번 해보려고 만들었을 것.
- 예를 들면 사용자가 자신의 정보를 form에 입력하여 서버로 전송하면, 서버는 이 정보를 데이터베이스에 저장한다와 같은 시나리오
- 여기서 서버로 보내는 데이터를 메시지 몸체(Message Body) 또는 짐(payload) 이라고 부른다.
- POST방식은 길이에 제한이 없다.
HTTP응답
- HTTP응답은 간단히 헤더와 몸체로 구성되어 있다.
▶ 헤더
- 사용된 프로토콜이 뭔지, 보내준 요청이 성공했는지, 몸체에 포함된 컨텐츠의 종류는 무엇인지 등이 들어있다.
- content-type의 값을 보통 MIME 타입이라고 부른다.
- MIME 타입이란 브라우저에게 "지금 서버가 이러한 데이터를 보내려고 하니, 화면에 보여줄 준비를 하시오"라는 정보이다.
- 이 MIME 타입은 클라이언트가 보낸 요청의 헤더 중 Accept란에 기술되어 있는 값과 관련되어 있다.
▶ 몸체
- HTML과 같은 컨텐츠가 들어 있다. 브라우저는 바로 이 정보를 화면에 출력한다.
URL(Uniform Resource Locators)
웹 상에 있는 모든 자원(Resource)은 자신만의 고유한 이름을 가진다.
이 고유한 이름을 부여하는 방식이 바로 URL 이다.
http://www.wickedlysmart.com:80/beeradvice/select/beer1.html
http://
프로토콜(Protocol). 서버와 대화하기 위하여 사용하는 커뮤니케이션 프로토콜
www.wickedlysmart.com
서버(Server). 인터넷상에 둘도 없는 이름.
이 이름은 IP주소에 매핑된다. IP주소는 숫자로 구성되며 xxx.xxx.xxx.xxx 형식이다.
하지만 IP주소를 직접사용하는 것보다는 이름을 사용하는 것이 기억하기 편하기 때문에 이름을 지정하고 IP주소를 매핑해서 사용한다.
:80
포트. URL의 옵션[생략되어있으면 80이 default(웹 서버 애플리케이션이 할당)]
포토번호를 보면 어떤 서버 애플리케이션이 서비스 되는지 알 수 있다.
/beeradvice/select/
서버에서 resource의 위치
/beer1.html
자원. 요청된 컨텐츠 이름
자원에는 HTML, Servlet, img, PDF, 음악, 비디오 등 서버가 제공하는 모든 것이 다 포함되어 있다.
자원을 명시하지 않으면 많은 웹서버들은 index.html을 기본으로 넘겨준다.
GET방식이라면 URL의 뒷부분에 ? 구분자를 사용하고 파라미터를 붙여서 날아온다. (질의어 : 쿼리스트링)
?memberid= id&membername=name
동적인 컨텐츠 생성
- 클라이언트의 요청에 따라 매번 다른 응답을 하려면 웹 서버 혼자서는 불가능.
- 그래서 동적인페이지(요청에 따라 실시간으로 작성된페이지)를 보여주기 위해서는 CGI나 서블릿 같은 도우미(Helper) 애플리케이션이 필요하다.
'JSP&Servlet' 카테고리의 다른 글
동기식&비동기식 그리고 ajax (0) | 2022.05.11 |
---|---|
<form>태그의 데이터 전송 (0) | 2022.05.10 |
Jsp/Servlet - 상대경로, 절대경로 (0) | 2022.05.09 |
서블릿/JSP 정리01 (0) | 2022.05.05 |
JSP/ MVC모델 (0) | 2022.04.29 |