본문 바로가기
PROGRAM/JAVA / JSP

[자바 웹 개발 워크북] 웹 프로그래밍 기초

by ojava 2016. 2. 4.
반응형

[열혈강의 : 자바 웹 개발 워크북] 을 보고 요약 및 공부한 내용을 적는 글임을 알립니다.


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는 서블릿 프로그래밍이다.



반응형