'2015/07/12'에 해당되는 글 5건

  1. 2015.07.12 Statement vs PreparedStatement
  2. 2015.07.12 서블릿(Servlet) 기초2
  3. 2015.07.12 서블릿기초1
  4. 2015.07.12 서블릿이란?(Servlet)
  5. 2015.07.12 서블릿을 시작하기 전..

JDBC를 사용하기 위한 java.sql 의

Statement vs PreparedStatement 비교

비교항목 

 Statement

PreparedStatement 

실행 속도 

질의할 때마다 SQL문을 

컴파일한다. 

SQL문을 미리 준비하여 컴파일해둔다.

입력매개변수 값만 추가하여 서버에 전송한다.

특히 여러 번 박복하여 질의하는 경우, 실행 속도가 빠름 

 바이너리 

데이터 전송

불가능 

가능 

 프로그래밍 

편의성

SQL문 안에 매개변수 값이 포함되어 있어서 SQL 문이 복잡하고 매개변수가 여러 개인 경우 코드 관리가 힘들다. 

 SQL문과 입력 매개변수가 분리되어 있어서 코드 작성이 편리하다.


'ServletJDBC' 카테고리의 다른 글

JSP 프리컴파일  (0) 2015.07.20
MVC  (0) 2015.07.20
서블릿(Servlet) 기초2  (0) 2015.07.12
서블릿기초1  (0) 2015.07.12
서블릿이란?(Servlet)  (0) 2015.07.12
Posted by slender ankles
,

서블릿 클래스는 반드시 javax.servlet.Servlet인터페이스를 구현해야 합니다.

서블릿 컨테이너가 서블릿에 대해 호출할 메서드를 정의한 것이 Servlet 인터페이스입니다.


[서블릿 인터페이스]


서블릿의 생명주기

서블릿의 구동절차(생명주기)

(1) 클라이언트 요청이 들어오면 서블릿 컨테이너는 서블릿을 찾습니다.

(2) 만약 서블릿이 없다면, 서블릿 크래스를 로딩하고 인스턴스를 준비한 후 생성자를 호출합니다. 그리고 서블릿 초기화 메서드인 init()를 호출합니다.

(3) 클라이언트 요청을 처리하는 service()메서드를 호출합니다. 메서드 이름을 보면 이미 그 용도를 짐작 할 수 있습니다. 즉 클라이언트의 요청에 대한 서비스를 제공한다는 뜻입니다.

(4) service() 메서드에서 만든 결과를 HTTP프로토콜에 맞추어 클라이언트에 응답하는 것으로 요청처리를 완료합니다.

(5) 만약 시스템 운영자가 서블릿 컨테이너를 종료하거나, 웹 어플리케이션을 종료 한다면,

(6) 서블릿 컨테이너는 종료되기 전에 서블릿이 마무리 작업을 수행 할 수 있도록 생성된 모든 서블릿에 대해 destroy()메서드를 호출합니다.



제네릭서블릿(GenericServlet)이란?



HttpServlet이란?


제네릭 서블릿의 service()추상메서드까지 모두 구현되어있고,

요청 메서드에 따라서 doGet(), doPost(), doPut() 등등의 메서드를 나누어놓은 추상메서드를 구현하면 됩니다.

실제로 구현할 때는 HttpServlet을 활용하게 됩니다.


'ServletJDBC' 카테고리의 다른 글

MVC  (0) 2015.07.20
Statement vs PreparedStatement  (0) 2015.07.12
서블릿기초1  (0) 2015.07.12
서블릿이란?(Servlet)  (0) 2015.07.12
서블릿을 시작하기 전..  (0) 2015.07.12
Posted by slender ankles
,

서블릿기초1

ServletJDBC 2015. 7. 12. 17:27

이클립스, JDK에 대한 설치는 했다고 가정합니다.


서블릿 프로젝트 생성하는 방법

eclipse 서블릿, JSP 기본 프로젝트 생성하는 방법

[File] -> [New] -> [Project..] -> Web -> Dynamic Web Project

=> Dynamic Web Project는 서블릿 및 JSP 기반 웹 어플리케이션을 만들 때 사용


왼쪽 하이라키의 서블릿 프로젝트의 각 파일들의 역할에 대해서 설명하겠습니다.

왼쪽 하이라키에는 Project Explorer, Package Explorer 등등이 있는데, 

Navigator에 대해서 설명하겠습니다.

Navigator가 없다면 [Window] -> [Show View] -> [Navigator]를 클릭하면 화면에 나타날 것임


[서블릿 프로젝트 구조의 예]


src 

자바 소스 파일을 두는 폴더. 앞으로 이 폴더에 서블릿 클래스나 필터, 리스터 등 필요한 모든 자바 클래스 파일 둘 것입니다. 프로퍼티(.properties)도 이 폴더에 둡니다.

build/classes

컴파일된 자바 클래스 파일(.class)이 놓이는 폴더입니다. 물론 패키지에 소속된 클래스인 경우 이 폴더에 해당 패키지가 자동으로 만들어집니다.

WebContent

HTML(.html),  CSS(.css), Javascript(.js), JSP, 이미지 파일 등 웹 콘텐츠를 두는 폴더입니다. 웹 애플리케이션을 서버에 배치할때 이 폴더의 내용물이 그대로 복사됩니다.

WebContent/WEB-INF

웹 애플리케이션의 설정과 관련된 파일을 두는 폴더입니다. 이 폴더에 있는 파일은 클라이언트에서 요청 할 수 없습니다. 따라서 HTML이나 Javascript, CSS 등 클라이언트에서 요청 할 수 있는 파일을 이 폴더에 두어서는 안 됩니다.

WebContent/WEB-INF/web.xml

웹 애플리케이션 배치 설명서(Deployment Descriptor)파일입니다. 영어 표현을 줄여서 'DD파일' 이라고도 부릅니다. 서블릿이나 필터, 리스너, 매개변수, 기본 웹 페이지 등 웹 애플리케이션 컴포넌트들의 배치 정보를 이 파일에 작성합니다. 서블릿 컨테이너는 클라이언트의 요청을 처리할 때 이 파일의 정보를 참고하여 서블릿 클래스를 찾거나 필터를 실행하는 등의 작업을 수행합니다. 자세한 설정 방법은 이후에 진행되는 과정을 통해 단계적으로 배우겠습니다.

WebContent/WEB-INF/lib

자바 아카이브(Archive)파일(.jar)을 두는 폴더입니다. 아카이브란? 우리말로 '기록보관소'라는 뜻입니다. 즉 아카이브 파일은 클래스 파일(.class)과 프로퍼티 파일(.properties)들을 모아 놓은 보관소 파일입니다. 이러한 이유로 Java ARchive의 합성어를 확장한 확장자 명(.jar)으로 사용하고 있습니다. 또한 'jar'단어 자체는 '단지'라는 뜻이 있습니다.

'ServletJDBC' 카테고리의 다른 글

MVC  (0) 2015.07.20
Statement vs PreparedStatement  (0) 2015.07.12
서블릿(Servlet) 기초2  (0) 2015.07.12
서블릿이란?(Servlet)  (0) 2015.07.12
서블릿을 시작하기 전..  (0) 2015.07.12
Posted by slender ankles
,

데스트탑 애플리케이션 vs 웹 애플리케이션?

데스크톱 어플리케이션

사용자가 직접 아이콘을 더블 클릭하거나 명령 창(터미널)을 통해 실행시키는 프로그램

웹 애플리케이션

사용자가 웹 서버를 통해 간접적으로 실행시키는 프로그램


CGI(Common Gateway Interface)란 무엇인지?

웹 브라우저에서 웹 서버로 정보를 요청하면 웹 서버는 프로그램에 작업을 요청하여

CGI규칙을 통해 결과를 받아서 클라이언트로 응답한다.

이 때 웹 서버와 프로그램 사이의 데이터를 주고받는 규칙을 CGI(Common Gateway Interface)라고 한다.


CGI 프로그램에서 컴파일 방식 vs 인터프리터 방식

CGI프로그램은 C, C++, Java와 같은 컴파일 방식의 언어로 작성 할 수도 있고

Perl, PHP, Python과 같이 스크립트 언어로도 작성 할 수 있다.

컴파일 방식은 

기계어로 번역된 코드를 바로 실행하기 때문에 실행 속도가 빠르지만,

변경 사항이 발생할 때마다 다시 컴파일하고 재배포해야하는 문제가 있다.


스크립트 방식은

실행할 때마다 소스 코드의 문법을 검증하고 해석해야 하기 때문에 속도가 느리지만,

변경 사항이 발생하면 단지 소스 코드를 수정하고 저장만 하면 되기 때문에 편리하다.



서블릿(Servlet)이란 무엇인가?

자바로 만든 CGI프로그램을 서블릿(서버 + 애플릿의 합성어)이라고 함

자바 서블릿이 다른 CGI프로그램과 다른 것은 웹 서버와 직접 데이터를 주고 받지 않으며,전문 프로그램에 의해 관리된다는 것


서블릿 컨테이너?

서블릿의 생성과 실행, 소멸 등 생명주기를 관리하는 프로그램, "서블릿 컨테이너"

서블릿 컨테이너가 서블릿을 대신하여 CGI 규칙에 따라 웹서버와 데이터를 주고 받음.

개발자들은 CGI 규칙을 알 필요가 없지만 서블릿 규칙에 대해서 알아야 함.


WAS(Web Application Server)란 무엇인지?

서블릿과 서블릿 컨테이너와 같은 웹 기술 기반으로 동작하는 애플리케이션 서버를 

"WAS(Web Application Server)"라고 함



'ServletJDBC' 카테고리의 다른 글

MVC  (0) 2015.07.20
Statement vs PreparedStatement  (0) 2015.07.12
서블릿(Servlet) 기초2  (0) 2015.07.12
서블릿기초1  (0) 2015.07.12
서블릿을 시작하기 전..  (0) 2015.07.12
Posted by slender ankles
,

서블릿을 시작하기 전에 웹 어플리케이션 및 기초적 용어와 과정에 대해서 공부를 시작해보고자 한다.


웹 애플리케이션을 개발하다보면 다음과 같은 용어에 대해서 정리할 필요가 있게된다.

SOAP(Simple Object Access Protocol)과 RESTful(REpresentational State Transfer)에 대해서 아는가?

 SOAP  

일반적으로 널리 알려진 HTTP, HTTPS, SMTP 등을 통해 XML 기반의 메시지를 컴퓨터 네트워크 상에서 교환하는 프로토콜. SOAP은 프로그래밍 언어마다 지원해주는 것이 필요하다.

 REST  

기본 HTTP 프로토콜의 메소드 GET/PUT/POST/DELETE를 이용하여 서비스 제공자에게 서비스를 요청하여 JSON, XML, RSS 등으로 리소스를 반환하는 것을 말한다. 프로그래밍 언어에 독립적이다.


프록시서버(Proxy Server)란 무엇인가?

클라이언트와 서버 사이에서 통신을 중계해 주는 컴퓨터나 프로그램을 말한다.


 프록시 서버는 두는 이유 

1) 빠른 전송을 위하여 서버의 응답 결과를 캐시해 두는 것

예를 들어 클라이언트의 요청이 이전에 프록시 서버에 캐시되어있다면 서버에 요청을 생략하고 바로 응답해 줄 수 있게 된다.

2) 보안상의 이유로 프록시 서버를 둔다.

외부로 전달되는 데이터를 검사하여 특정 단어가 포함된 자료의 송, 수신을 차단하거나 보안 팀에 경고메시지를 전달 할 수 있게 된다.


웹 환경에서의 Server-Client 구조의 장점

이전의 서버 - 클라이언트 구조는 비즈니스 로직이 클라이언트에 있었기 때문에 

변경이 필요하게 되면 클라이언트의 프로그램을 다시 깔아야 한다. 

하지만 웹 환경에서의 서버 클라이언트의 구조에서는 클라이언트는 UI의 역할만 하게 된다. 

변경이 필요하더라도 서버에서만 바꾸어주면 된다. 

배치하는 즉시, 사용자는 재설치 없이 추가된 기능이나 변경된 기능을 이용할 수 있게 된다. 


단점 : 다만 웹을 사용 할 때마다 UI를 계속 다운받는 형식이기 때문에 네트워크 오버헤드가 큰 편이다.


전통적인 서버-클라이언트 구조의 단점을 내세우며, 

웹 환경의 서버 클라이언트 구조에 대해서 설명해본다면...


웹 환경에서의 서버 클라이언트의 구조(CS) 역시 단점 존재. 매번 클릭할때마다 UI를 다운 받아야한다. 

하지만, 이러한 단점을 보완하고자 AJAX(Asynchronous Javascript And Xml) 등장

AJAX는 페이지를 전체를 갱신하는 것이 아니라 부분, 부분 갱신할 수 있게 해준다.


HTTP 프로토콜 이란?

HTTP 프로토콜은 웹 브라우저와 웹 서버 사이의 데이터 통신 규칙을 말한다.


즉 HTTP 통신 규약에 맞추어서 요청한다면

HTML파일을 요청하면 HTML파일을 보내주고, 이미지 파일을 요청하면 이미지 파일을 보내준다는 것이다.


http요청 응답에 대한 내부적으로 어떻게 동작하고 있는가?

요청과정(Request)

요청라인, 요청헤더, 공백라인과 요청 데이터로 구성

GET /web04/member/list HTTP/1.1
 
Host: localhost:9999
 
Cache-Control: max-age=0
 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
 
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.132 Safari/537.36
 
Accept-Encoding: gzip, deflate, sdch
 
Accept-Language: ko-KR,ko;q=0.8,en-US;q=0.6,en;q=0.4
cs



요청 라인(Request-Line)


요청헤더

  * 요청이나 응답 모두에 적용 할 수 있는 "일반헤더(General Header)"

  * 요청 또는 응답 둘 중에 하나에만 적용 할 수 있는 "요청 헤더 또는 응답 헤더(Request Header / Response Header)"

  * 보내거나 받는 본문 데이터를 설명하는 "엔티티 헤더(Entity-Header)"


HTTP헤더들

 헤더 유형

헤더명 

일반헤더

(General Header Fields) 

Cache-Control

Connection

Date

Pragma

Trailer

Transfer-Encoding

Upgrade

Via

Warning 

 요청헤더

(Request Header Fields)


Accept

Accept-Charset

Accept-Encoding

Accept-Language

Authorization 

Expect

From

Host

If-Match

If-Modified-Since

If-Range

If-Unmodified-Since

Max-Forwards

Proxy-Authorization

Range

Referer

TE

User-Agent

응답헤더

(Response Header Fields)

Accept-Ranges

Age

ETag

Location

Proxy-Authenticate

Retry-After

Server

Vary

WWW-Authenticate

본문헤더

(Entity Header Fields) 


Allow

Content-Encoding

Content-Language

Content-Location

Content-MD5

Content-Range

Content-Type

Expires

Last-Modified

기타확장헤더


GET요청 

공백 라인으로 끝납니다. 서버에 보낼 데이터가 있다면 URL주소에 붙여 보냅니다.

POST요청

그에 비해 로그인이나 게시글을 등록하는 경우 POST를 사용하는데, POST요청은 공백 라인 다음에 메시지 본문이 들어갑니다.



응답과정(Response)

HTTP/1.1 200 OK
 
Server: Apache-Coyote/1.1
 
Content-Type: text/html;charset=UTF-8
 
Content-Length: 1138
 
Date: Sun, 12 Jul 2015 07:16:42 GMT
 
 
 
<html><head><title>회원목록</title></head>
 
<body><h1>회원목록</h1>
 
.........<생략>
cs


상태라인

응답 메시지의 첫 라인은 응답 결과에 대한 상태 정보. 프로토콜 버젼과 상태 코드, 설명으로 구성

 상태코드

상태설명 

200 

 요청이 성공 이루어졌다.

301

 요청한 자원이 이동되었다. 헤더 정보에 이동 위치를 알려줄 테니 다시 요청하라.

304

 클라이언트가 임시 보관한 응답결과에 다르지 않다.

400

 잘못된 요청이다.

404

 요청한 자원을 못 찾았다.

500

 서버 내부에서 오류가 발생했다.


GET과 POST 요청 방식의 차이는 무엇인가?

URL에 데이터가 있는 것은 GET방식, URL에 데이터가 없고 메시지 본문에 있는 것은 POST방식


GET요청의 특징

- URL에 데이터를 포함 - 데이터 조회에 적합

- 바이너리 및 대용량 데이터 전송 불가

- 요청라인과 헤드 필드의 최대 크기

  * HTTP 사양에는 제한사항 없음

  * 대용량 URL로 인한 문제 발생 => 웹 서버에 따라 최대 크기 제한

  * 마이크로소프트 IIS 6.0 16KB

  * APACHE 웹 서버 8KB


GET요청의 데이터 전달 형식은 어떻게 되는가?

서비스 주소 ? V1 = 23 & V2 = 15

서비스주소와 데이터를 ? 라는 문자를 이용해서 구분한다.

예) http://www.naver.com?v1=23&v2=15


GET 요청의 장점은 무엇인가?

URL에 데이터가 섞여 있기 때문에 결과 화면을 다른 사람들과 공유 할 수 있다. 

링크를 클릭하게 되면 바로 결과화면을 볼 수 있다.


GET 요청의 문제점은 무엇인가?

(1) 보안에 좋지 않다.

주소에 데이터가 섞여있기 때문에 사용자의 로그인이나 중요 정보 요청에서 데이터가 밖으로 보인다.

그렇기 때문에 보안상의 이슈가 발생 할 수 있다. 


(2) 바이너리 데이터를 전송 할 수 없다.

파일의 데이터는 URL에 붙여서 전송 할 수 없다.

BASE 64라는 인코딩 방식을 통해 바이너리 데이터를 문자화해서 보낼 수도 있지만, URI나 헤더 정보가 너무 크면

웹 서버에서 처리 할 수 없다.

이런 것은 POST를 통해 전송해야 한다.


POST요청의 특징

- URL에 데이터가 포함되지 않음 => 외부 노출 방지

- 메시지본문에 데이터 포함 => 실행 결과 공유 불가

- 바이너리 및 대용량 데이터 전송 가능


POST요청의 요청은 어떻게 이루어지는가?

요청라인과 요청헤더 다음에 공백라인이 있고 그 다음에 메시지 본문(Message Body)라 불리는 부분에 데이터가 위치해서 전송된다.


POST요청의 장점은 무엇인가?

입력값을 URL에 노출 시키지 않는다. 당연히 보안상으로 GET에 비해 좋다.

폼 태그를 통해 보내진 POST데이터는 Content-Length 와 Content-Type 등으로 구분한다.

Content-Type은 기본적으로 application/x-www-form-urlencoded형식으로 인코딩되어 보내진다.


POST요청의 문제점은 무엇인가?

(1) 요청 결과를  공유 할 수 없다.

즐겨찾기, 메일 등으로 그 결과값을 공유 할 수 없다.

POST요청은 데이터를 메시지 본문에 붙여서 전송하기 때문이다.


(2) GET방식과 마찬가지로 POST도 데이터를 전달 할 때 '이름=값&이름=값'형태로 보내진다.

결국 문자데이터를 보낼 때는 상관없지만 바이너리 데이터 등을 전송할 때는 이러한 '='이나 '&'값이 섞여 있을 수 있기 때문에 문제가 발생할 수 있다.

그래서 바이너리 데이터 등을 보낼 때는 멀티 파트 인코딩 방식을 통해 보내야 한다.


멀티 파트 인코딩 방식은 어떨때 사용하며 그렇게 사용하는 이유는 무엇인가?

POST형식 역시 데시지 본문에 '이름=값&이름=값'형태로 보내지기 때문에 

바이너리 데이터에 혹시 = 이나 &가 섞여있으면 문제가 발생 할 수 있다.

그래서 멀티 파트 인코딩 방식을 사용하여 요청정보와 데이터를 확실히 구분 할 수 있게 한다.

예를들어 <form>태그의 enctype 속성을 'multipart/form-data'로 지정해서 file 전송을 할 수 있게 합니다.


'ServletJDBC' 카테고리의 다른 글

MVC  (0) 2015.07.20
Statement vs PreparedStatement  (0) 2015.07.12
서블릿(Servlet) 기초2  (0) 2015.07.12
서블릿기초1  (0) 2015.07.12
서블릿이란?(Servlet)  (0) 2015.07.12
Posted by slender ankles
,