440 likes | 873 Views
14 장 . 이미지 처리 및 웹 어플리케이션의 배포. 1. Thumbnail 이미지 만들기. 썸네일 (thumnail) 이미지 원본 이미지에 대해서 가로 및 세로 크기를 줄여서 파일 사이즈를 작게 만든 이미지. Google 이미지 검색에 사용되는 썸네일 이미지들. 1. Thumbnail 이미지 만들기. 썸네일 (thumnail) 이미지를 만드는 방법 이미지 처리 기능 구현
E N D
1. Thumbnail 이미지 만들기 • 썸네일 (thumnail) 이미지 • 원본 이미지에 대해서 가로 및 세로 크기를 줄여서 파일 사이즈를 작게 만든 이미지 Google 이미지 검색에 사용되는 썸네일 이미지들 제14장
1. Thumbnail 이미지 만들기 • 썸네일 (thumnail) 이미지를 만드는 방법 • 이미지 처리 기능 구현 • java.awt.*, java.awt.image.*, javax.imageio.*, javax.swing.* 과 같은 패키지를 사용 • 각 클래스마다 썸네일 이미지를 만들기 위한 몇몇 개의 메소드들을 활용 • 이들 메소드들에 대한 자세한 설명까지는 이 책에 담지 않는다. • 이미지 처리에 관한 이들 메소드들에 대한 자세한 동작방법은 다른 Java 이미지 처리 관련 책 참고 제14장
1. Thumbnail 이미지 만들기 • 썸네일 이미지를 만드는 유틸리티 [예제 14.1] jspbook \ WEB-INF\java_sources\ImageUtil.java 제14장
1. Thumbnail 이미지 만들기 • 썸네일 이미지를 만드는 유틸리티 [예제 14.1] jspbook \ WEB-INF\java_sources\ImageUtil.java 제14장
1. Thumbnail 이미지 만들기 • ImageUtil 클래스의 두 개의 정적 메소드 사용 예시 • 위 예에서 보면 각각 가로와 세로 길이만을 설정하지만 새롭게 만들어지는 이미지는 가로와 세로가 동시에 변환된 이미지가 된다. • 즉, 원본 이미지에 대해 가로 길이를 100으로 설정하면 그 비율대로 세로 길이도 맞추어서 저장된다. 제14장
1. Thumbnail 이미지 만들기 • 눈에 보이는 크기만을 줄이는 예제 [예제 14.2] jspbook\ch14\imagesize.jsp 제14장
1. Thumbnail 이미지 만들기 • 썸네일 이미지를 이용하는 예제 [예제 14.3] jspbook\ch14\thumb.jsp 제14장
2. 동적 이미지 출력 • 정적 vs. 동적 이미지 • 정적 (static) 이미지 • 이미 그 내용이 결정되어 있는 파일로 존재하는 이미지 • 동적 (static) 이미지 • 파일 형태로 존재하지 않는 이미지이며 임의의 요청이 있는 순간 그 내용이 새롭게 생성되는 이미지 • 단순하게 gif 또는 jpg 인코딩 방식으로 브라우저에 출력만 될 뿐 제14장
2. 동적 이미지 출력 • 단순 동적 이미지 생성하기 • 1) JSP의 출력 결과를이미지로 하기 위하여 contentType 속성 지정 • 2) java.awt.image.BufferedImage 클래스의 객체 생성 • width와 height 변수는 생성할 이미지의 가로와 세로 사이즈 값 • BufferedImage.TYPE_3BYTE_BGR는 파랑 (Blue), 초록 (Green), 빨강 (Red) 색상의 정도가 각각 1 바이트씩 총 3바이트에 표현되는 방식을 지정 • 3) BufferedImage 객체로부터 Graphics2D 클래스 객체 얻어오기 제14장
2. 동적 이미지 출력 • 단순 동적 이미지 생성하기 • 4) 그림을 그리는 코딩 • 5) ImageIO 클래스가 지닌 write() 메소드를 활용해서 BufferedImage 객체를 response 객체의 출력스트림으로 보내고 그 출력스트림을 닫아줌 제14장
2. 동적 이미지 출력 • 단순 동적 이미지 생성하기 예제 [예제 14.4] jspbook\ch14\dynamicImage.jsp 제14장
2. 동적 이미지 출력 • 이미지 합성하기 • 1) 다음 URL을 입력하여 웹 상에 이미지가 있다는 것을 확인 • 2) bird.jpg의 이미지를 BufferedImage 객체로 담아오는 코딩 제14장
2. 동적 이미지 출력 • 이미지 합성하기 예제 [예제 14.5] jspbook\ch14\compImage.jsp 제14장
3. 그래프 생성 및 출력하기 • 그래프 생성과 출력 • Java2D 및 Java3D 관련 패키지를 활용하여 별도의 추가 라이브러리 없이도 그래프를 그리는 작업을 무난하게 할 수 있다. • 하지만, 기본 클래스를 활용하여 좀 더 편하게 그래프를 작성할 수 있는 라이브러리가 다음과 같이 존재 • JfreeChart : 가장 많이 사용되는 공개 라이브러리. 현재까지도 계속해서 업데이트 중이다. • JOpenChart : 공개 그래프 출력 라이브러리. 0.94 버전 (2002년) 까지 나온 이후 현재는 개발이 중단되어 있다. • the Chart2D project (LGPL) : 공개 그래프 출력 라이브러리. 1.9.6 버전 (2002년) 까지 나온 이후 현재는 개발이 중단되어 있다. • E-Gantt : 스케줄러 (Scheduler)나 타임라인 (Timeline) 같은 테이블 형태의 데이터 출력에 활용하기 좋은 라이브러리. 2006년도에 나온 이후 업데이트되지 않았지만 활용도가 높다. • PtPlot : 미국의 버클리 대학에서 만든 전문적인 공학도를 위한 플로팅 (Plotting) 라이브러리 제14장
3. 그래프 생성 및 출력하기 • JFreeChart의 공식 사이트 • http://www.jfree.org/jfreechart • freeChart의 최신 버전 다운로드 • http://www.jfree.org/jfreechart/download.html • JFreeChart 다운로드 및 설치 • 한글이 지원되는 JFreeChart • http://blog.naver.com/mnk1231?Redirect=Log&logNo=120056645547 제14장
3. 그래프 생성 및 출력하기 • 간단한 파이 (Pie) 차트 만들기 piechart.jsp 수행결과 및 차트 구성요소 제14장
3. 그래프 생성 및 출력하기 • 간단한 파이 (Pie) 차트 만들기 • 1) page 지시문의 contentType과 import를 정의 • 2) 그래프(차트)의 종류 결정 및 데이터 집합 생성 제14장
3. 그래프 생성 및 출력하기 • 간단한 파이 (Pie) 차트 만들기 • 3) 그래프(차트) 생성 • 4) 구성된 그래프(차트)를 이미지 형태로 브라우저로 출력 제14장
3. 그래프 생성 및 출력하기 • 간단한 파이 (Pie) 차트 만들기 [예제 14.6] jspbook\ch14\piechart.jsp // JFreeChart 라이브러리의 클래스를 import // 파이차트 생성을 위한 데이터값 생성 제14장
3. 그래프 생성 및 출력하기 • 간단한 파이 (Pie) 차트 만들기 • 특정 데이터에 대해서 강조를 하고 싶다면 연관된 파이 조각을 다른 조각들 보다 조금 떨어지게 표현 • PiePlot 클래스 활용 • setExplodePercent 메소드의 첫번째 인자는 데이터 인덱스 • 인덱스는 0부터 시작 • setExplodePercent() 메소드의 두 번째 인자 • 다른 데이터 파이 조각들에 비하여 강조되는 데이터 파이 조각이 떨어져서 표현되는 정도 제14장
3. 그래프 생성 및 출력하기 • 간단한 파이 (Pie) 차트 만들기 [예제 14.7] jspbook\ch14\piechart2.jsp // 0번째 파이 조각 강조 제14장
4. 컨테이너와 웹 어플리케이션 배포 (Deploy) • 컨테이너 • 웹 어플리케이션을 실행시키기 위한 환경으로서 Tomcat 엔진에 대한 좀 더 일반화된 용어이다. • 웹 어플리케이션에 대해서 사용자의 요청을 받아들이고 처리하는 역할을 수행하는 일종의 서버 데몬이다. • JSP/Servlet의 같은 스펙 버전을 준수하는 서로 다른 회사에서 개발된 컨테이너라면 동일한 웹 어플리케이션에 대해 아무런 수정 없이 실행가능 • 컨테이너의 종류 • 무료 컨테이너 • Tomcat, Resin (Caucho Technology) • 유료컨테이너 (신뢰성과 성능이 어느 정도 보장 서비스 품질 보장) • JSP/Servlet 스펙을 포함하여 J2EE 표준 스펙까지 구현한 중대형급들이 대부분 • Sun사의 Java System Application Server • IBM의 WebSphere Application Server • Oracle 사의 Oracle Application Server (OAS) • Oracle Container for J2EE (OC4J), JBoss 커뮤니티에서 만든 Jboss • BEA사에서 만든 Weblogic 제14장
4. 컨테이너와 웹 어플리케이션 배포 (Deploy) • 회사에서의 개발 환경 • 중대형급 웹 어플리케이션을 운영하는 곳에서는 개발하는 컴퓨터와 실제 서비스를 운영하는 서버가 일반적으로 다르게 존재 • 개발단계에서 서비스단계까지의 일련의 과정 • 배포 (Deploy) 방법 • war (webapplication archive)파일로 한데 묶어서 서버에 올려놓는다. 제14장
4. 컨테이너와 웹 어플리케이션 배포 (Deploy) • 웹 어플리케이션의 폴더 및 파일 구조 제14장
4. 컨테이너와 웹 어플리케이션 배포 (Deploy) • war 파일 • 웹 어플리케이션의 전체 폴더 및 파일을 한데 묶은 압축 파일 형태 • Java에서 사용하는 압축형식인 jar로 압축하여 확장자만 war 로 바꾼 것이다. • jar를 지원하는 압축 툴 (예를 들어 winzip이나 알집)에서는 war를 jar처럼 취급하여 압축을 풀 수 있다. • jar.exe를 활용한 war 파일 생성 • c: 새로운 파일을 생성한다. • v: command창으로 진행사항에 관한 메시지를 출력한다. • f: 압축해서 새롭게 생성될 파일이름을 지정한다. • jspbook.war: 새롭게 생성할 war 파일 이름을 지정한다. 가능하면 현재 웹 어플리케이션 폴더 이름과 동일한 파일 명을 사용한다. 제14장
4. 컨테이너와 웹 어플리케이션 배포 (Deploy) • 탐색기에서 jspbook.war 생성 확인 제14장
4. 컨테이너와 웹 어플리케이션 배포 (Deploy) • Tomcat 에서 war 파일의 배포 방법 • 1) Tomcat 설치 폴더 밑의 webapps 폴더에 war 파일을 옮겨놓는 방법 • 간단하지만 권장되지는 않는 방법 • 2) Tomcat 엔진의 관리도구인 Tomcat Manager를 활용하는 방법 • 비교적 쉽게 war 파일을 배포할 수 있으며 웹 상에서 모든 관리 기능을 사용할 수 있기 때문에 권장되는 방법 • Tomcat Manager 계정 추가 • Tomcat 설치 폴더의 conf 폴더 밑에 있는 tomcat-users.xml 초기 내용 • admin 계정 추가 제14장
4. 컨테이너와 웹 어플리케이션 배포 (Deploy) • Tomcat 기본 웹 페이지에서 Tomcat Manager 실행 제14장
5. 배포 서술자인 web.xml의 자세한 설명 • 배포 서술자 (Deployment Descriptor)인 web.xml의 역할 정리 • 효율적인 웹 어플리케이션의 운영 및 유지보수 • 서블릿 매핑 및 필터와 리스너 매핑 등을 텍스트 기반으로 설정할 수 있기 때문에 프로그램을 수정하지 않고도 웹 어플리케이션의 동작 방법을 큰 관점에서 제어하고 수정 • 초기화 파라미터의 손쉬운 설정 • 웹 어플리케이션의 동작에 영향을 주는 초기화 파라미터의 설정을 텍스트 기반에서 할 수 있기 때문에 응용 프로그램 수정 없이도 초기화 파라미터를 변경하여 웹 어플리케이션 동작을 쉽게 제어 • 컨테이너 호환성 유지 • 웹 어플리케이션의 배포와 관련된 정보를 텍스트 기반으로 유지함으로써 서로 다른 컨테이너에서 손쉽게 그 정보를 분석하여 동일한 방법으로 웹 어플리케이션을 운영 • 최근에는 시스템의 환경 설정 정보는 대부분 XML 텍스트 문서로 만들어 저장하고 있으며 web.xml도 대표적인 XML기반 환경 설정 파일이다. 제14장
5. 배포 서술자인 web.xml의 자세한 설명 • web.xml의 태그 설명 • <web-app> 루트 태그 (Root Tag) • <description> 태그 및 <display-name> 태그 • <display-name>은 Tomcat Manager 같은 관리형 어플리케이션에서 현재 웹 어플리케이션을 표시할 때 사용하는 이름을 지정 제14장
5. 배포 서술자인 web.xml의 자세한 설명 • web.xml의 태그 설명 • <servlet>과 <servlet-mapping> 태그 (1/7) • Servlet에 대한 요청 URL을 "/controller/my.do"로 만들고 있다는 점에 주목 • 이 URL에 대해서 controller 라는 폴더와 my.do라는 파일이 물리적으로 존재하는가? 그렇지 않다. • 물리적으로는 그 URL에 매핑되는 Servlet을 thinkonweb.mvc.MyController로 등록해 놓았기 때문에 논리적 폴더 및 파일 구조와 물리적 구조가 전혀 다르다. 제14장
5. 배포 서술자인 web.xml의 자세한 설명 • web.xml의 태그 설명 • <servlet>과 <servlet-mapping> 태그 (2/7) 제14장
5. 배포 서술자인 web.xml의 자세한 설명 • web.xml의 태그 설명 • <servlet>과 <servlet-mapping> 태그 (3/7) • <url-pattern>과 </url-pattern>에 기입할 수 있는 내용의 종류 • 요청 URL과 <url-pattern> 내용과의 매칭 규칙 • 규칙 1) 폴더명과 파일명 및 확장자까지 정확히 일치하는 <url-pattern> 값이 최우선시 된다. • 규칙 2) 다음으로 폴더명까지 일치하는 <url-pattern> 값이 우선시 된다. • 규칙 3) 마지막으로 확장자만 일치하는 <url-pattern> 값이 있는지 찾아본다. • 규칙 4) 위와 같은 규칙을 통해서도 여러 <url-pattern> 값과 일치한다면 많은 내용이 일치하는 것이 우선시 된다. 제14장
5. 배포 서술자인 web.xml의 자세한 설명 • web.xml의 태그 설명 • <servlet>과 <servlet-mapping> 태그 (4/7) • web.xml 에 작성된 <servlet>과 <servlet-mapping> 태그 예 제14장
5. 배포 서술자인 web.xml의 자세한 설명 • web.xml의 태그 설명 • <servlet>과 <servlet-mapping> 태그 (5/7) • 앞선web.xml에 대한 여러 URL의 매핑 예 • http://localhost:8080/jspbook/list.do ⇔ thinkonweb.foo.TestA (규칙 3) • http://localhost:8080/jspbook/foo/bar ⇔ thinkonweb.foo.TestB (foo와 bar를 폴더명이라고 가정했을 때 규칙 2와 규칙 4 적용) • http://localhost:8080/jspbook/foo/bar/list.do ⇔ thinkonweb.foo.TestC (규칙 2) • http://localhost:8080/jspbook/foo/list.do ⇔ thinkonweb.foo.TestC (규칙 2) • http://localhost:8080/jspbook/bar/list.do ⇔ thinkonweb.foo.TestA (규칙 3) • http://localhost:8080/jspbook/foo ⇔ thinkonweb.foo.TestC (규칙 2) • http://localhost:8080/jspbook/foo/bar/view.goo ⇔ thinkonweb.foo.TestC (규칙 2) • http://localhost:8080/jspbook/bar/view.goo ⇔ 404 FILE NOT FOUND 에러 (일치하는 Servlet 클래스 없음) 제14장
5. 배포 서술자인 web.xml의 자세한 설명 • web.xml의 태그 설명 • <servlet>과 <servlet-mapping> 태그 (6/7) • web.xml 에 작성된 <servlet>과 <servlet-mapping> 태그의 약간 난해한 예 제14장
5. 배포 서술자인 web.xml의 자세한 설명 • web.xml의 태그 설명 • <servlet>과 <servlet-mapping> 태그 (7/7) • 앞선web.xml에 대한 여러 URL의 매핑 예 • http://localhost:8080/jspbook/foo/bar/ ⇔ thinkonweb.foo.TestE (규칙 2 & 규칙 4) • http://localhost:8080/jspbook/foo/bar ⇔ thinkonweb.foo.TestD (규칙 2 & 규칙 4) 제14장
5. 배포 서술자인 web.xml의 자세한 설명 • web.xml의 태그 설명 • <listener> 태그 • <filter> 태그 제14장
5. 배포 서술자인 web.xml의 자세한 설명 • web.xml의 태그 설명 • <welcome-file-list> 태그 • 특정 파일명 없이 http://www.google.com과 같이 웹 사이트명으로 끝나거나 http://www.google.com/map과 같이 폴더명으로 끝나게 될 때 이 요청에 대한 응답 파일을 설정하는 태그 • 먼저 지정한 파일이 우선순위가 높다. • [Note] 폴더명으로 끝나는 것에 대해서는 우선 Servlet 매핑 태그인 <url-pattern>에 의하여 매핑이 되는지부터 살펴본다는 점이 중요 • <context-param> 태그 제14장
5. 배포 서술자인 web.xml의 자세한 설명 • web.xml의 태그 설명 • <error-page> 태그 제14장
5. 배포 서술자인 web.xml의 자세한 설명 • Servlet을 강제로 초기화하기 • JSP 및 Servlet은 최초 요청이 들어왔을 때 초기화가 된다고 하였다. • 즉 클라이언트의 요청 URL이 아직 초기화되지 않은 JSP나 Servlet을 요청하고 있다면 이 요청에 의하여 컴파일, 클래스의 메모리 적재, 초기화 (init() 함수 호출)과 같은 일련의 과정이 이 순간에 모두 일어나게 된다. • 따라서 최초 요청에 대해서는 다소 응답시간 지연이 발생할 수 있다. • 이러한단점을 없에는 방법: Servlet을 강제로 초기화하기 제14장
5. 배포 서술자인 web.xml의 자세한 설명 • server.xml과 웹 어플리케이션 폴더 설정 • 컨테이너 외부 자원의 등록 (DB 등록) • Tomcat 엔진의 서비스 포트 번호 변경 및 인코딩 방법에 대한 설정 제14장
5. 배포 서술자인 web.xml의 자세한 설명 • server.xml과 웹 어플리케이션 폴더 설정 • 웹 어플리케이션을 webapps 하위의 폴더가 아닌 전혀 다른 폴더에서 개발하고자 할 때의 수정 방법 제14장