[열혈강의 : 자바 웹 개발 워크북] 을 보고 요약 및 공부한 내용을 적는 글임을 알립니다.
Chapter 02. 웹 프로그래밍의 기초 다지기
웹 프로그래밍을 하기 위해서는 웹 브라우저와 웹 서버가 통신하는 방법에 대해서 알아야 한다.
표준 프로토콜로 사용되는 HTTP (Hyper-Text Transfer Protocol) 에 대해 이해하고,
웹 브라우저와 웹 서버간의 통신 방식과 그 데이터가 어떤지 확인하는 내용을 진행한다.
1) HTTP 프로토콜
- 웹 브라우저와 웹 서버 간의 데이터 통신은 HTTP 프록시가 중계하여 요청, 응답이 가능
: 프록시 서버 (Proxy Server) 란, 클라이언트와 서버 사이의 통신을 중계하는 컴퓨터 또는 프로그램을 말함
- 프록시 프로그램을 통해서 요청, 응답 데이터를 가로채서 확인할 수 있다.
- HTTP Request
: 요청 방식 (Method), User-Agent (클라이언트 정보), 요청 데이터 등
- HTTP Response
: 상태 코드 (200, 404, 500 등), Content-Type, Content-Length, 응답 데이터 등
2) GET 방식과 POST 방식
HTTP 요청 방식의 대표적인 방식 두 가지에 대해 비교 정리하면 다음과 같다.
GET 방식과 POST 방식은 간단하게 생각하면 완전 반대의 특성을 지닌다고 보아도 무방하다.
|
GET 요청방식 |
POST 요청방식 |
특징 |
URL에 데이터를 포함 바이너리 및 대용량 데이터 전송 불가 요청라인과 헤드 필드의 최대 크기 제한 |
URL에 데이터가 포함되지 않음 : 외부 노출 방지 메시지 본문에 데이터 포함 바이너리 및 대용량 데이터 전송 가능 |
요청방식 |
웹 브라우저 창에 URL을 입력하는 경우 링크를 통해 접속하는 경우 입력 폼 method 값이 GET인 경우 (생략하면 기본값이 GET) |
입력 폼 method 값이 POST인 경우 |
형식 |
서비스주소 ? v1 = 123 & v2 = 456 & v3 = 789 ? : 서비스와 데이터를 분리 = : 매개변수와 값을 연결 & : 데이터 구분자 예 : http://ojava.tistory.com?post=76 |
HTTP 요청 프로토콜 내에서 요청라인, 헤더 뒤에 따라붙는 공백값 뒤에 메시지 본문 (Message Body) 이 존재하여 해당 영역에 데이터가 존재함 |
용도 |
데이터 조회 용도에 적합 (검색, 상세 정보 조회 등) 결과 화면 보관 또는 공유 (링크를 통해서) |
데이터가 노출되면 안되는 페이지에 적합 데이터가 많거나 크기가 큰 내용을 전송할 때 사용 |
문제점 |
데이터가 바로 보여지므로 보안에 취약함 : 즐겨찾기 등으로 링크 저장 시 누구나 접근할 수 있으므로 보안이 요구되는 페이지는 GET 요청을 사용하면 안됨 바이너리 데이터 전송 불가 : 이미지, 동영상 등의 바이너리 파일은 전송 불가 : URI, 헤더 정보 크기 제한이 있으므로 전송 가능 범위 제한 |
요청 결과 공유 불가 |
3) 파일 업로드
웹 서버에 바이너리 데이터를 보낼 수 있는 방법이 존재한다.
멀티파트 인코딩 방법을 통해 변환하면 바이너리 파일을 전송할 수 있다.
데이터가 전송되는 영역을 선언하는 <form> 태그의 enctype 속성의 기본값은
'application/x-www-form-urlencoded' 으로 설정되어 있지만
바이너리 파일을 전송하기에 적합한 방식으로 변환이 필요하므로 다음과 같이 지정해준다.
<form method="post" action="fileUpload" enctype="multipart/form-data">
파일선택 <input type="file" name="files">
<input type="submit" value="업로드">
</form>
form 태그의 데이터 전송방식은 POST로 설정하며 데이터 인코딩 방법은 멀티파트 방식으로
변환하여 바이너리 파일 전송에 적합한 형태로 설정해준다.
업로드 될 파일을 선택하기 위해서 input 태그에 type을 file로 설정하면
파일 선택이 가능한 입력창이 뜨므로, 해당 태그를 이용해서 파일을 선택하고 업로드를 진행한다.
일반적인 전송 방식은 Content-Type : application/x-www-form-urlencoded 로 미디어 타입만 정의하지만
멀티파트 전송 방식의 경우, 미디어 타입과 파트 구분자를 정의하여 매개변수값을 분리하기 위한
구분자를 별도로 정의하게 된다.
Content-Type : multipart/form-data; boundary=---web12..2123123.... (예시이므로 심각하게 생각하지말자)
파트 구분자가 필요한 이유는, 멀티파트 방식에서 바이너리 타입의 데이터가 넘어오는 경우
&와 = 과 같은 매개변수 구분자도 데이터로 들어올 수 있기 때문에
웹 서버가 매개변수를 분리하기 위한 별도의 구분자를 지정하여 해석하는데 도움을 주기 위한 것이다.
위의 예제에서 작성된 boundary가 그 파트 구분자에 해당되는 내용이고 이는 웹 브라우저에서 임의로 생성한다.
웹 프로그래밍을 진행하기 전 가장 기초적으로 알아야 하는 웹 브라우저와 웹 서버간의 통신 방식에 대해
아주 간략하게 알아보고 넘어가는 단계였다. HTTP 프로토콜와 GET, POST 방식의 통신.
이렇게만 알고 이제 개발 시작할 수 있어! 이런 건 아니지만 필수적으로 익혀야하는 개념임은 명백하다.
다음 Chapter는 서블릿 프로그래밍이다.
'PROGRAM > JAVA / JSP' 카테고리의 다른 글
[자바 웹 개발 워크북] 서블릿 프로그래밍 (2) (0) | 2016.02.18 |
---|---|
[자바 웹 개발 워크북] 서블릿 프로그래밍 (1) (0) | 2016.02.11 |
[자바 웹 개발 워크북] 웹 애플리케이션 환경의 실행과 개발 (0) | 2016.02.03 |
ant : build.xml 파일 작성 방법 (0) | 2015.09.16 |
java.net.SocketException : Broken pipe (0) | 2015.09.16 |