MIME-타입

  • content-type의 값을 보통 MIME타입이라고 함
  • 브라우저에게 "서버가 이러한 데이터를 보내려고 하니 화면에 보여줄 준비를 하시오."라는 정보
  • 서버가 보내주는 MIME 타입은 클라이언트가 보낸 요청의 헤더 중 Accept란에 기술되어 있는 값과 관련있음.

요청과 응답 과정

사용자가 주소창에 URL입력 >
브라우저는 이 정보를 HTTP GET 요청을 만듬 >
HTTP GET을 서버로 날려 보냄 >
서버는 요청한 페이지를 서버에서 찾고 > 서버는 HTTP 응답을 작성 >
HTTP 응답을 클라이언트로 내려 보냄 >
브라우저는 HTML을 화면에 출력!

문제) GET이냐 POST냐

사용자의 이름과 패스워드를 넘겨주고 싶어요.POST
하이퍼링크로 새로운 페이지를 요청합니다.GET
채팅 방에서 대화 내용을 넘겨주고 싶어요.POST
다음(NEXT) 페이지를 보기 위해 다음 버튼을 클릭합니다.GET
보안이 중요한 은행 사이트에서 '로그아웃'을 클릭합니다.post
뒷 페이지로 돌아가기 위해서 '뒤로' 버튼을 클릭합니다. GET
서버에 사용자의 이름과 주소를 넘겨주고 싶어요. POST
사용자가 라디오 버튼으로 값을 선택하도록 하고 싶어요. post

URL 해부

URL(Uniform Resource Lcators)
: 웹 사에 있는 모든 자원은 교유한 이름을 가짐, 이 고유한 이름을 부여하는 방식이 URL

예제)
http://www.wickedlysmart.com:80/beeradvice/select/beer1.html

프로토콜(protocol)

http://

  • 서버와 대화하기 위해 사용하는 커뮤니케이션 프로토콜(여기서는 http)

서버(server)

www.wickedlysmart.com

  • 이 이름은 ip주소에 매핑됨, ip주소는 숫자로 구성,

포트(port)

:80

  • URL의 옵션, 꼭 쓰지 않아도 됨, 포트 번호로 어떤 서버 애플리케이션이 서비스 되는지 알 수 있음.
  • URL 포트에 80이 없자면 디폴트로 생략되어 있음, 80포트는 웹 서버 애플리케이션이 할당됨.

서버에서 자원의 위치

beeradvice/select

자원

/beer1.html

  • 요청된 컨텐츠 이름, 자원에는 HTML, Servlet, 이미지, pdf, 음악, 동영상 등 서버가 제공하는 모든 것이 포함.
  • 자원은 명시하지 않으면 웹서버들은 index.html을 기본으로 넘김

숨겨진 부분

질의어(쿼리 스트링)

  • GET 방식은 URL 뒷부분에 파라미터로 붙어서 날아옴.
  • 마크를 필두로 파라미터이름과 파라미터값을 한 쌍으로 해서, 여러 쌍인 경우 &로 구분되어 날아옴.

TCP 포트는 단지 숫자 값일 뿐

  • 서버 하드웨어 상에서 돌아가는 소프트웨어를 구별하기 위한 16비트 숫자 값
  • 포트는 구분하기 위한 식별자 정도
  • 포트는 서버 하드웨어 상에서 돌아가는 특정 소프트웨어에 대한 논리적인 연결을 나타냄
  • 대개 0번에서 1023번까지 TCP포트는 이미 널리 알려진 서비스를 위해 예약됨

웹사이트 디렉터리 구조

아파치로 구성한 웹사이트 디렉토리 구조

아파치 : 오픈 소스 웹 서버

URL과 컨텐츠 맵핑하기, 문제

B: http://www.wickedlysmatt.com:80/skiingAdvice/
C: http://www.wickedlysmatt.com:80/beerAdvice/
D: http://www.wickedlysmatt.com:80/beerAdvice/select/selectBeer.html

정적인페이지 58P

웹서버는 정적인 페이지 서비스 전공

정적인 페이지?

  • 디렉터리에 있는 파일 그대로
  • 서버는 단지 파일을 찾아서 그대로 클라이언트에게 넘겨줄 뿐
  • 즉 모든 클라이언트가 동일한 결과를 봄

HTML 안에 변수를 집어 넣을 수 있을까?

예) html 페이지 안에 insertTimeOnServer이라는 시간을 표시하는 변수 넣은 경우

<html>
  <body>
  	The crrent time is [insertTimeOnServer]
  </body>
</html>

웹 서버 혼자 할 수 없는 두 가지

만약 요청이 날아가기 바로 전까지 존재하지 않았던 페이지를 바로 그 자리에서 만들고자 하는 경우, 또는 파일이나 데이터베이스에 데이터를 저장하고자 하는 경우

1. 동적인 컨텐츠 생성

웹 서버는 단지 정적인 페이지만 제공, 그러나 동적인, 실시간으로 작성한 페이지를 제공하도록 도우미 애플리케이션이 있음.
동적인 페이지는 도서목록(catalog)에서 웹 방문 로그(weblog)까지 다양하게 존재. 아래와 같은 페이지를 원할 때

<html>
  <body>
  	The crrent time is [insertTimeOnServer]
  </body>
</html>

실시간페이지는 요청이 들어오기 전까지 존재하지 않는다.
요청이 들어오면 도우미 애플리케이션이 html을 작성하고, 웹 서버는 이를 클라이언트로 넘겨줌

2. 서버 상에 데이터 저장하기

사용자가 폼에 데이터를 입력하고 전송 버튼을 누른다. >
웹서버는 폼 데이터를 받고 웹서버는 파라미터를 애플리케이션에 넘겨주고, 응답 하도록 부탁.

도우미 애플리케이션? CGI 프로그램

CGI 프로그램 : 펄스크립트, C, 파이썬, PHP 같은 언어 등으로 작성

  1. 사용자는 CGI 프로그램에 대한 URL을 클릭
  2. 웹서버는 들어온 요청이 CGI를 호출하는 것을 알고 실행. GET 또는 POST로 넘어온 파라미터도 같이 넘겨 줌.
  3. 도우미 프로그램은 현재 시간이 들어간 페이지를 만들어 서버에 HTML 형식으로 넘겨줌(이 시점에서 웹 서버가 받은 페이지는 정적 페이지)
  4. CGI는 종료되고 클라이언트는 정적인 페이지가된 HTML 페이지를 서버로부터 받는다.

CGI와 서블릿 장단점

[Web] CGI, Servlet, JSP

문제

  1. 사용자가 URL을 작성
  2. GET 메서드 호출 >> 브라우저는 이 정보로 HTTP GET 요청을 만듬
  3. 서버로 페이지 요청 >> HTTP GET을 서버로 보냄
  4. 서버는 서버 내에세 페이지를 찾는다
  5. HTTP 응답을 작성
  6. HTML 파일로 클라이언트에게 >> HTTP 응답을 클라이언트로 내려 보냄
  7. 브라우저는 HTML 파일을 화면에 출력

초간단 서블릿 살펴보기(작성, 배포, 실행)

서블릿의 디렉터리 구조

핵심

  • 웹 애플리케이션에는 하나의 배포 서술자(DD)만 존재
  • DD 안에는 다수의 서블릿을 정의할 수 있음
  • <servlet-name> 태그는 <servlet>태그를 <servlet-mapping> 태그와 연결
  • <servlet-class> 에는 자바 클래스 이름이 들어감
  • <url-pattern>클라이언트가 요청을 보낼 이름

배포 서술자 : Deployment Descriptor

print()에서 html을...

자바 프로그램이 html을 출력하도록 한 것

java.util.Date today = new java.util.Date();
out.println("<html>" +
			"<body>" +
            "<h1 align=center>hf\'s Chapter1 Servlet</h1>"
            + "<br>" + today + "</body>" + "</html>");
  • 이 코드가 바로 서블릿 안에서 동적인 HTML을 생성하는 부분
  • HTML 코드를 출력 스트림으로 내려내는 곳(여기서 출력 스트림은 HTTP 응답에 있는 것)
  • 이는 비효울적인 방법... 이를 위해 JSP가 등장

매핑 : 가상주소와 물리주소의 대응 관계 또는 가상 주소로부터 물리 주소를 찾아내는 일을 말한다.

profile
비전공자가 백엔드 개발자 도전하는 블로그

0개의 댓글

Powered by GraphCDN, the GraphQL CDN