PowerPoint 프레젠테이션

Similar documents
Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

chapter1,2.doc

슬라이드 1

2. 개인키권한설정 보안경고개인키의유출방지를위해 group 과 other 의 permission 을모두제거한다. chmod 600 /etc/pki/tls/private/lesstif-rootca.key 3. CSR(Certificate Signing Request) 생

WebtoB.hwp

정적으로 설치된 mod_ssl 모듈확인 동적으로 설치된 mod_ssl 모듈확인 웹서버에 설치된 모듈중 mod_so.c 를 먼저 확인후 동적으로 설치된 모듈중 mod_ssl.so 를 확인합니다. 동적으로 설치된 경우 apache 설치 디렉토리의 module 이나 libe

PowerPoint 프레젠테이션

untitled

I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r

[Brochure] KOR_TunA

Sena Device Server Serial/IP TM Version

Apache Ivy

PowerPoint 프레젠테이션

Intro to Servlet, EJB, JSP, WS

Remote UI Guide

Interstage5 SOAP서비스 설정 가이드

Spring Boot

1) 인증서만들기 ssl]# cat > // 설명 : 발급받은인증서 / 개인키파일을한파일로저장합니다. ( 저장방법 : cat [ 개인키

API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Docum

Network seminar.key

Tomcat 4.x 웹서버에 J2SE 를설치를확인합니다. java -version java version "1.4.2_05" Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_05-b04) Java HotSp

1) 인증서만들기 ssl]# cat > // 설명 : 발급받은인증서 / 개인키파일을한파일로저장합니다. ( 저장방법 : cat [ 개인키

리눅스설치가이드 3. 3Rabbitz Book 을리눅스에서설치하기위한절차는다음과같습니다. 설치에대한예시는우분투서버 기준으로진행됩니다. 1. Java Development Kit (JDK) 또는 Java Runtime Environment (JRE) 를설치합니다. 2.

No Slide Title

Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 11 년 10 월 26 일수요일

TTA Journal No.157_서체변경.indd

슬라이드 1

Mobile Service > IAP > Android SDK [ ] IAP SDK TOAST SDK. IAP SDK. Android Studio IDE Android SDK Version (API Level 10). Name Reference V

4. CSR 값확인. (vi csr.pem) CSR(Certificate Signing Request) 즉, 인증서서명요청입니다. 이는자신이설치할웹서버에서 DN 값, 각종정보를암호화한파일로써 한국전자인증 신청란에서붙여넣으면됩니다. 인증서설치 1. 직접 CSR 및 KEY

Interstage4 설치가이드

JavaGeneralProgramming.PDF

Apache2 + Tomcat 5 + JK2 를 사용한 로드밸런싱과 세션 복제 클러스터링 사이트 구축

< FC8A8C6E4C0CCC1F620B0B3B9DF20BAB8BEC8B0A1C0CCB5E5C3D6C1BE28C0FAC0DBB1C7BBE8C1A6292E687770>

Assign an IP Address and Access the Video Stream - Installation Guide

Microsoft PowerPoint - 11주차_Android_GoogleMap.ppt [호환 모드]

Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Cras

Research & Technique Apache Tomcat RCE 취약점 (CVE ) 취약점개요 지난 4월 15일전세계적으로가장많이사용되는웹애플리케이션서버인 Apache Tomcat에서 RCE 취약점이공개되었다. CVE 취약점은 W

BEA_WebLogic.hwp

DE1-SoC Board

ORANGE FOR ORACLE V4.0 INSTALLATION GUIDE (Online Upgrade) ORANGE CONFIGURATION ADMIN O

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx

PowerPoint 프레젠테이션

Facebook API

ApacheWebServer.hwp

Microsoft PowerPoint SDK설치.HelloAndroid(1.5h).pptx

문서의 제목 나눔고딕B, 54pt

Microsoft Word - src.doc

2장 변수와 프로시저 작성하기

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

Spring

표준프레임워크로 구성된 컨텐츠를 솔루션에 적용하는 것에 문제가 없는지 확인

Secure Programming Lecture1 : Introduction

1. 안드로이드개발환경설정 안드로이드개발을위해선툴체인을비롯한다양한소프트웨어패키지가필요합니다 툴체인 (Cross-Compiler) 설치 안드로이드 2.2 프로요부터는소스에기본툴체인이 prebuilt 라는이름으로포함되어있지만, 리눅스 나부트로더 (U-boot)

을풀면된다. 2. JDK 설치 JDK 는 Sun Developer Network 의 Java( 혹은 에서 Download > JavaSE 에서 JDK 6 Update xx 를선택하면설치파일을

Cisco pxGrid로 인증서 배포

SQL Developer Connect to TimesTen 유니원아이앤씨 DB 기술지원팀 2010 년 07 월 28 일 문서정보 프로젝트명 SQL Developer Connect to TimesTen 서브시스템명 버전 1.0 문서명 작성일 작성자


1. Windows 설치 (Client 설치 ) 원하는위치에다운받은발송클라이언트압축파일을해제합니다. Step 2. /conf/config.xml 파일수정 conf 폴더에서 config.xml 파일을텍스트에디터를이용하여 Open 합니다. config.xml 파일에서, 아

28 THE ASIAN JOURNAL OF TEX [2] ko.tex [5]

untitled

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

1. What is AX1 AX1 Program은 WIZnet 사의 Hardwired TCP/IP Chip인 iinchip 들의성능평가및 Test를위해제작된 Windows 기반의 PC Program이다. AX1은 Internet을통해 iinchip Evaluation

<4D F736F F D20C0DAB9D9C0A5BDBAC5B8C6AE2E646F63>

품질검증분야 Stack 통합 Test 결과보고서 [ The Bug Genie ]

14-Servlet

Solaris Express Developer Edition

표준프레임워크 Nexus 및 CI 환경구축가이드 Version 3.8 Page 1

1217 WebTrafMon II

본교재는수업용으로제작된게시물입니다. 영리목적으로사용할경우저작권법제 30 조항에의거법적처벌을받을수있습니다. [ 실습 ] 스위치장비초기화 1. NVRAM 에저장되어있는 'startup-config' 파일이있다면, 삭제를실시한다. SWx>enable SWx#erase sta

Webtob( 멀티도메인 ) SSL 인증서갱신설치가이드 본문서는주식회사한국기업보안에서 SSL 보안서버인증서설치를위해작성된문서로 주식회사한국기업보안의동의없이무단으로사용하실수없습니다. [ 고객센터 ] 한국기업보안. 유서트기술팀 Copyright 201

Microsoft PowerPoint - aj-lecture1.ppt [호환 모드]

bn2019_2


J2EE Concepts

<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D D382E687770>

Social Media and Social Computing

Subnet Address Internet Network G Network Network class B networ

Tomcat.hwp

RHEV 2.2 인증서 만료 확인 및 갱신

Secure Programming Lecture1 : Introduction

초기설정 WebtoB Web Server 에서인증서를사용하기위해 CSR 을생성하는방법입니다. 1. 초기설정 - CSR 을생성하기전에다음의몇가지사항을필히확인합니다. 부팅후 Path 나환경변수를일일이설정하지않게초기설정파일을사용하여로그인시자동으로실행되도록하고있습니다. 그러나

블로그_별책부록

PowerPoint 프레젠테이션

ESET NOD32 Antivirus

APOGEE Insight_KR_Base_3P11

OM2M 기반의 OHP-M2M 오픈소스설치가이드 2015 년 8 월 경북대학교통신프로토콜연구실 최예찬, 강형우 요약 사물인터넷 (Internet of Things: IoT) 이이슈가되면서다양한사

슬라이드 1

게시판 스팸 실시간 차단 시스템

cam_IG.book

혼자서일을다하는 JSP. 이젠일을 Servlet 과나눠서한다. JSP와서블릿의표현적인차이 - JSP는 <html> 내에서자바를사용할수있는수단을제공한다. - 서블릿은자바내에서 <html> 을작성할수있는수단을제공한다. - JSP나서블릿으로만웹페이지를작성하면자바와다양한코드가

문서의 제목 나눔고딕B, 54pt

HTML5* Web Development to the next level HTML5 ~= HTML + CSS + JS API

개정이력 버전 개정일 개정내용 Ver 년 5월 Apache Web Server SSL 설명서최초작성 Ver 년 1월 인증서갱신방법, 다중 SSL 서버설정방법추가 Ver 년 12월 암호체계고도화관련키길이변경 (2,048bit)

HLS(HTTP Live Streaming) 이용가이드 1. HLS 소개 Apple iphone, ipad, ipod의운영체제인 ios에서사용하는표준 HTTP 기반스트리밍프로토콜입니다. 2. HLS 지원대상 - 디바이스 : iphone/ipad/ipod - 운영체제 :

Sun Java System Messaging Server 63 64

PowerPoint 프레젠테이션

MasoJava4_Dongbin.PDF

4S 1차년도 평가 발표자료

SPECweb Install

Transcription:

공개 SW 솔루션설치 & 활용가이드 미들웨어 > 웹서버 제대로배워보자 How to Use Open Source Software Open Source Software Installation & Application Guide

CONTENTS 1. 개요 2. 기능요약 3. 실행환경 4. 설치및실행 5. 기능소개 6. 활용예제 7. FAQ 8. 용어정리

- 3-1. 개요 소개 주요기능 Jetty Web Server 는독립형또는내장된인스턴스를통해정적 / 동적콘텐츠를제공할수있는 HTTP 서버와서블릿컨테이너제공 비동기 HTTP 서버 표준기반서블릿컨테이너 웹소켓서버 http / 2 서버 OSGI, JNDI, JMX, JASPI, AJP 지원 대분류 미들웨어소분류 웹서버 라이선스형태 Apache License 2.0, Eclipse Public License 1.6 사전설치솔루션 JDK1.8 이상 운영제제 Windows, Linux, Mac, Unix 등버전 9.4.6 특징 보안취약점 개발회사 / 커뮤니티 Eclipse 유연하고확장가능 비동기식 엔터프라이즈확장가능 오픈소스및상업적으로사용가능 취약점 ID : CVE-2015-2080 심각도 : 7.5 HIGH(V3) 취약점설명 : 예외처리코드인 9.2.9.v20150224 를사용하면원격공격자가 HTTP 헤더 (JetLeak) 의잘못된문자를통해프로세스메모리에서중요한정보를얻을수있음 대응방안 : 9.2.9 이상업데이트 참고경로 : https://lists.fedoraproject.org/pipermail/package-announce/2015-march/151804.html 공식홈페이지 http://www.eclipse.org/jetty/index.html

- 4-2. 기능요약 Jetty는 JAVA EE 사양중주로 Servlet 사양을구현하고있다. Jetty 자체가모든 Web Profile 기술을제공하지않지만 Jetty 아키텍처는타사기능을플러그인하여정확한요구에맞게사용자정의된컨테이너를생성할수있도록한다. Version JVM Protocols Servlet/JSP 9.4 1.8 9.3 1.8 HTTP/1.1 (RFC 7230), HTTP/2 (RFC 7540), WebSocket (RFC 6455, JSR 356), FastCGI HTTP/1.1 (RFC 7230), HTTP/2 (RFC 7540), WebSocket (RFC 6455, JSR 356), FastCGI 3.1/2.3 3.1/2.3 9.2 1.7 HTTP/1.1 RFC2616, javax.websocket, SPDY v3 3.1/2.3 8 1.6 7 1.5 HTTP/1.1 RFC2616, WebSocket RFC 6455, SPDY v3 HTTP/1.1 RFC2616, WebSocket RFC 6455, SPDY v3 3.0/2.2 2.5/2.1

- 5-2. 기능요약 Java EE 7 Web Profile JSR Web Profile 명 Jetty-9.1.x 포함여부플러그인여부 JSR 340 Servlet Specification API 3.1 Yes JSR 344 Java Server Faces 2.2 (JSF) No JSR 245 / JSR 341 JSR 330 Java Server Pages 2.3/Java Expression Language 3.0 (JSP/EL) Dependency Injection for Java 1.0 Yes No Yes, Mojarra or MyFaces Yes Yes as part of a CDI implementation, Weld JSR 907 Java Transaction API 1.2 (JTA) Yes Yes JSR 356 Java API for Websocket 1.0 Yes No

- 6-3. 실행환경 Jetty 는 Java 로구현된 HTTP 서버및 Servlet 컨테이너로 Eclipse Foundation 의무료및공개 SW 프로젝트이다. Jetty 는독립적으로서버를구성할수있고, Java 응용프로그램에포함되어웹서비스를제공 할수있는 API 를지원한다. 본가이드에서는아래와같은환경으로구성되어있다. JAVA 8 Jetty 9.4.6.v20170531

- 7-4. 설치및실행 세부목차 4.1 다운로드 4.2 설치 4.3 디렉토리구성 4.4 실행 4.5 데모실행

- 8-4. 설치및실행 4.1 다운받기 (1/2) 먼저 JDK(Java Development Kit) 가설치되어있어야한다. 미설치시는 http://www.java.com/ko/download/ 에서다운받아설치한다.

- 9-4. 설치및실행 4.1 다운받기 (2/2) Jetty 서버는 https://www.eclipse.org/jetty/download.html 에서다운로드받는다. 파일은 zip 과 gzip 포맷형식으로다운로드받을수있다. 설치할서버에적당한파일 형식으로다운로드받는다.

- 10-4. 설치및실행 4.2 설치 (1/3) 다운로드받은파일을압축해제한다.

- 11-4. 설치및실행 4.2 설치 (2/3) 압축을해제하면아래와같은디렉토리가보인다.

- 12-4. 설치및실행 4.2 설치 (3/3).bash_profile 에 JETTY_HOME 을등록한다. $ vi ~/.bash_profile export JETTY_HOME=/home/jetty/jetty-distribution-9.4.6.v20170531 $ source ~/.bash_profile

- 13-4. 설치및실행 4.3 디렉토리구성 주요디렉토리구성은아래와같다. Location license-eplv10-aslv20.html VERSION.txt 라이선스파일 Release 정보 Description etc/ lib/ modules/ logs/ wbapps/ start.ini start.jar Jetty XML 설정파일실행에필요한 jar 파일모듈정의파일로그정보기본 web 소스디렉토리실행옵션을포함하고있는파일 Jetty 실행 Jar

- 14-4. 설치및실행 4.4 실행 (1/2) Jetty 를기본 8080 port 를시작하기위해서는아래와같은명령을실행한다.

- 15-4. 설치및실행 4.4 실행 (2/2) Jetty 를실행한서버로브라우저를통해서비스호출을실행해본다. 하지만 $JETTY_HOME 디렉토리에는 deploy 된 webapps 가없기때문에 404 Error 가보이게된다.

- 16-4. 설치및실행 4.5 데모실행 (1/2) demo-base 디렉토리에 jetty demo 예제를실행해본다.

- 17-4. 설치및실행 4.5 데모실행 (2/2) Jetty 를실행한서버로접속하여브라우저를통해서비스호출을실행해본다.

- 18-5. 기능소개 세부목차 5.1 HTTP 포트변경 5.2 SSL 설정 5.3 HTTPS 포트변경 5.4 웹애플리케이션디플로이 5.5 Virtual Hosts 설정 5.6 로깅

- 19-5. 기능소개 5.1 HTTP 포트변경 (1/2) jetty.http.port property 설정을통해포트를변경할수있다. [jetty ~/jetty-distribution-9.4.6.v20170531]$ java -jar start.jar jetty.http.port=8081 2017-07-24 11:30:07.720:INFO::main: Logging initialized @470ms to org.eclipse.jetty.util.log.stderrlog 2017-07-24 11:30:07.886:WARN:oejs.HomeBaseWarning:main: This instance of Jetty is not running from a separate {jetty.base} directory, this is not recommended. See documentation at http://www.eclipse.org/jetty/documentation/current/startup.html 2017-07-24 11:30:07.918:INFO:oejs.Server:main: jetty-9.4.6.v20170531 2017-07-24 11:30:07.938:INFO:oejdp.ScanningAppProvider:main: Deployment monitor [file:///home/jetty/jetty-distribution-9.4.6.v20170531/webapps/] at interval 1 2017-07-24 11:30:07.955:INFO:oejs.AbstractConnector:main: Started ServerConnector@1794d431{HTTP/1.1,[http/1.1]}{0.0.0.0:8081} 2017-07-24 11:30:07.956:INFO:oejs.Server:main: Started @706ms

- 20-5. 기능소개 5.1 HTTP 포트변경 (2/2) 영구적으로포트를변경해야하는경우에는 start.ini 파일을수정한다. ## Connector host/address to bind to # jetty.http.host=0.0.0.0 ## Connector port to listen on jetty.http.port=8081 ## Connector idle timeout in milliseconds # jetty.http.idletimeout=30000 ## Connector socket linger time in seconds (-1 to disable) # jetty.http.solingertime=-1 ## Number of acceptors (-1 picks default based on number of cores) # jetty.http.acceptors=-1

- 21-5. 기능소개 5.2 SSL 설정 (1/6) OpenSSL 을사용하여 SSL 인증서를만든다. OpenSSL 명령어가없는경우에는 OpenSSL 웹 사이트 (https:www.openssl.org) 에서설치한다. 아래의내용은예제이므로실제사이트에서 사용하는인증서는발급인증기관의문서를참고해야한다. 1. 다음명령을실행한다. [jetty ~]$ openssl genrsa -des3 -out jetty.key Generating RSA private key, 1024 bit long modulus...++++++...++++++ e is 65537 (0x10001) Enter pass phrase for jetty.key: jettypass (4 자이상의원하는암호로설정 ) Verifying - Enter pass phrase for jetty.key: 위와동일한패스워드를입력한다.

- 22-5. 기능소개 5.2 SSL 설정 (2/6) 2. 이제인증서파일을생성할것이다. 파일의이름을 jetty.crt 로지정한다. [jetty ~]$ openssl req -new -x509 -key jetty.key -out jetty.crt Enter pass phrase for jetty.key: You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:KR ( 국가코드 2 자리 ) State or Province Name (full name) []: ( 국가또는지방이름 ) Locality Name (eg, city) [Default City]: ( 도시이름 ) Organization Name (eg, company) [Default Company Ltd]: ( 조직이름 ) Organizational Unit Name (eg, section) []: ( 조직단위이름 ) Common Name (eg, your name or your server's hostname) []:JETTY ( Domain 이름 ) Email Address []: ( 이메일주소 )

- 23-5. 기능소개 5.2 SSL 설정 (3/6) 3. crt 파일을 PKCS12 형식으로변환해야한다. 이작업은다음단계를통해수행할수있다. [jetty ~]$ openssl pkcs12 -inkey jetty.key -in jetty.crt -export -out jetty.pkcs12 Enter pass phrase for jetty.key: jettypass Enter Export Password: jettypass(jettypass 을다시사용했지만자유롭게변경할수있다.) Verifying - Enter Export Password: jettypass 4. Jetty keysotre 에서 PKCS12 파일가져오는단계는다음과같다. Jetty.pkcs12 파일을 JETTY_HOME/etc 디렉토리에복사 기존키저장소파일을삭제 Keytool import 명령을실행 [jetty ~]$ cp jetty.pkcs12 $JETTY_HOME/etc [jetty ~]$ cd $JETTY_HOME/etc [jetty ~/jetty-distribution-9.4.6.v20170531/etc]$ keytool -importkeystore -srckeystore jetty.pkcs12 - srcstoretype PKCS12 -destkeystore keystore Enter destination keystore password: (keystore 이암호를입력 jettypass) Re-enter new password: Enter source keystore password: jettypass ( 이전에 pkcs12 파일에대해정의한암호 ) Entry for alias 1 successfully imported. Import command completed: 1 entries successfully imported, 0 entries failed or cancelled

- 24-5. 기능소개 5.2 SSL 설정 (4/6) 5. 지금까지인증서를생성하여 Jetty 의키스토어로가져오는과정을살펴보았다. 이제 Jetty 서버에 HTTPS 커넥터와 SSL 을설정할것이다. Jetty 는모듈러아키텍처를사용하므로구성파일을통해다른 모듈을활성화할수있어야한다. 따라서 SSL 및 HTTPS 모듈을수동으로활성화해야한다. $JETTY_HOME/start.ini 파일을열러다음행을추가한다. --module=ssl --module=https 마지막단계로이전섹션에서설정한키저장소비밀번호를정의하는것이필요하다. 이전예제에서 keysotre 와인증서모두에대해 jettpass 암호를정의하였는데이암호를다음단계를통해암호화할수있다. [jetty ~]$ cd $JETTY_HOME/lib [jetty ~/jetty-distribution-9.4.6.v20170531/lib]$ java -cp jetty-util-9.4.6.v20170531.jar org.eclipse.jetty.util.security.password jettypass (lib 버전은 Jetty 버전에따라다름 ) 2017-07-24 15:38:39.770:INFO::main: Logging initialized @138ms to org.eclipse.jetty.util.log.stderrlog jettypass OBF:1wty1vu91v9u1y8320zj1y7v1v8s1vv11wug MD5:157c95e4fb782c3d1d14355a7295ab00

- 25-5. 기능소개 5.2 SSL 설정 (5/6) 생성된암호를 OBF 로시작하는줄을복사한다. ( 이예제에서는 OBF:1wty1vu91v9u1y8320zj1y7v1v8s1vv11wug ) 이제 SSL 구성에서이비밀번호를설정한다. [jetty ~/jetty-distribution-9.4.6.v20170531/lib]$ cd $JETTY_HOME/etc [jetty ~/jetty-distribution-9.4.6.v20170531/modules]$ vi jetty-ssl-context.xml 기존예제내용중 KeyStorePassword 와 KeyManagerPassword 의패스워드를변경한다. <Set name="keystorepassword"><property name="jetty.sslcontext.keystorepassword" deprecated="jetty.keystore.password" default="obf:1wty1vu91v9u1y8320zj1y7v1v8s1vv11wug"/></set> <Set name="keymanagerpassword"><property name="jetty.sslcontext.keymanagerpassword" deprecated="jetty.keymanager.password" default="obf:1wty1vu91v9u1y8320zj1y7v1v8s1vv11wug"/></set>

- 26-5. 기능소개 5.2 SSL 설정 (6/6) 이제 Jetty 서버를기동한다. 출력로그는다음과유사하다. [jetty ~/jetty-distribution-9.4.6.v20170531]$ java -jar start.jar 2017-07-24 16:21:48.698:INFO::main: Logging initialized @475ms to org.eclipse.jetty.util.log.stderrlog 2017-07-24 16:21:48.864:WARN:oejs.HomeBaseWarning:main: This instance of Jetty is not running from a separate {jetty.base} directory, this is not recommended. See documentation at http://www.eclipse.org/jetty/documentation/current/startup.html 2017-07-24 16:21:48.926:INFO:oejs.Server:main: jetty-9.4.6.v20170531 2017-07-24 16:21:48.952:INFO:oejdp.ScanningAppProvider:main: Deployment monitor [file:///home/jetty/jetty-distribution-9.4.6.v20170531/webapps/] at interval 1 2017-07-24 16:21:48.969:INFO:oejs.AbstractConnector:main: Started ServerConnector@6500df86{HTTP/1.1,[http/1.1]}{0.0.0.0:8081} 2017-07-24 16:21:48.991:INFO:oejus.SslContextFactory:main: x509=x509@2f686d1f(1,h=[],w=[]) for SslContextFactory@3fee9989(file:///home/jetty/jetty-distribution- 9.4.6.v20170531/etc/keystore,file:///home/jetty/jetty-distribution-9.4.6.v20170531/etc/keystore) 2017-07-24 16:21:49.048:INFO:oejs.AbstractConnector:main: Started ServerConnector@71318ec4{SSL,[ssl, http/1.1]}{0.0.0.0:8443} 2017-07-24 16:21:49.048:INFO:oejs.Server:main: Started @825ms

- 27-5. 기능소개 5.3 HTTPS 포트변경 (1/2) jetty.http.port property 설정을통해포트를변경할수있다. [jetty ~/jetty-distribution-9.4.6.v20170531]$ java -jar start.jar jetty.ssl.port=8444 2017-07-24 16:28:18.373:INFO::main: Logging initialized @474ms to org.eclipse.jetty.util.log.stderrlog 2017-07-24 16:28:18.541:WARN:oejs.HomeBaseWarning:main: This instance of Jetty is not running from a separate {jetty.base} directory, this is not recommended. See documentation at http://www.eclipse.org/jetty/documentation/current/startup.html 2017-07-24 16:28:18.607:INFO:oejs.Server:main: jetty-9.4.6.v20170531 2017-07-24 16:28:18.626:INFO:oejdp.ScanningAppProvider:main: Deployment monitor [file:///home/jetty/jetty-distribution-9.4.6.v20170531/webapps/] at interval 1 2017-07-24 16:28:18.643:INFO:oejs.AbstractConnector:main: Started ServerConnector@6500df86{HTTP/1.1,[http/1.1]}{0.0.0.0:8081} 2017-07-24 16:28:18.664:INFO:oejus.SslContextFactory:main: x509=x509@2f686d1f(1,h=[],w=[]) for SslContextFactory@3fee9989(file:///home/jetty/jetty-distribution- 9.4.6.v20170531/etc/keystore,file:///home/jetty/jetty-distribution-9.4.6.v20170531/etc/keystore) 2017-07-24 16:28:18.722:INFO:oejs.AbstractConnector:main: Started ServerConnector@71318ec4{SSL,[ssl, http/1.1]}{0.0.0.0:8444} 2017-07-24 16:28:18.723:INFO:oejs.Server:main: Started @825ms

- 28-5. 기능소개 5.3 HTTPS 포트변경 (2/2) 영구적으로포트를변경해야하는경우에는 start.ini 파일에포트를추가한다. ## Number of selectors (-1 picks default based on number of cores) # jetty.http.selectors=-1 ## ServerSocketChannel backlog (0 picks platform default) # jetty.http.acceptorqueuesize=0 ## Thread priority delta to give to acceptor threads # jetty.http.acceptorprioritydelta=0 ## HTTP Compliance: RFC7230, RFC2616, LEGACY # jetty.http.compliance=rfc7230 jetty.ssl.port=8444

- 29-5. 기능소개 5.4 웹애플리케이션디플로이 (1/3) 1. 웹애플리케이션의디렉토리구조웹애플리케이션은서블릿, 필터, JSP 등의동적인콘텐츠와 HTML, Image 등의정적콘텐츠, 애플리케이션지원라이브러리등이있다. 웹애플리케이션은단일웹아카이브 (WAR 파일 ) 또는디렉토리트리로묶을수있다. 디렉토리명 /WEB-INF/ /WEB-INF/web.xml /WEB-INF/classes/ 설명 웹애플리케이션과관련된모든것을저장하는데사용되는디렉토리. 일반적으로내부적으로액세스하는컨텐츠만들어있다. 웹애플리케이션의다양한동작을정의하는필수배포설명자 Java Class 파일들의위치 /WEB-INF/lib JAR 파일 ( 라이브러리 )

- 30-5. 기능소개 5.4 웹애플리케이션디플로이 (2/3) 2. 자동배포웹애플리케이션을배포하기위한가장기본적인방법은 WAR파일이나 Exploded WAR 디렉토리를 $JETTY_HOME/webapps 폴더에배치하는것이다. 이자동배포는 WAR의파일이름또는디렉토리이름으로 Context 경로가지정된다. 파일또는디렉토리 /webapps/footrope.war /webapps/lazaret-2.1.3-snapshot.war /webapps/belaying-pins/web-inf/web.xml /webapps/root.war ( 예약명 ) /webapps/root/web-inf/web.xml ( 예약명 ) 지정된 Context 경로 http://host/footrope/ http://host/lazaret-2.1.3-snapshot/ http://host/belaying-pins/ http://host/ http://host/

- 31-5. 기능소개 5.4 웹애플리케이션디플로이 (3/3) 3. XML 을통한웹애플리케이션배포 파일이름을기반으로하지않는 Context 경로를사용하려고하는경우에는자동배포방식 이아닌 XML 을통한웹애플리케이션배포가가능하다. $JETTY_HOME/webapps 디렉토리에서 Context 배포설명자파일을다음과같이구성하여 저장한다. <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd"> <Configure class="org.eclipse.jetty.webapp.webappcontext"> <Set name="contextpath">/wiki</set> <Set name="war">/opt/myapp/myapp.war</set> </Configure>

- 32-5. 기능소개 5.5 Virtual Hosts 설정 가상호스트 가상호스트는 IP 주소한개에여러이름기반웹사이트를운영하기위해필요하다. Jetty 는다음과같은가상호스트이름스타일을지원한다. 가상호스트구성은이전장에서 설정했던 Context XML 파일에아래와같이 virtualhosts 를세팅한다. <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd"> <Configure class="org.eclipse.jetty.webapp.webappcontext"> <Set name="contextpath">/blah</set> <Set name="war"><property name="jetty.webapps"/>blah.war</set> <Set name="virtualhosts"> <Array type="java.lang.string"> <Item>10.0.0.23</Item> <Item>www.blah.com</Item> <Item>www.blah.net</Item> <Item>www.blah.org</Item> </Array> </Set> </Configure>

- 33-5. 기능소개 5.6 로깅 (1/3) 1. Jetty 로깅 Jetty 는자체 org.eclipse.jetty.util.log.looger 계층을통해로깅을제공하며기존 Java 로깅 프레임워크를기본적으로사용하지않는다. Jetty는 classpath 에설정되어있는 jetty-logging.properties 파일을로드하여 property 중 org.eclipse.jetty.util.log.class logger 구현체를로딩한다. 만약지정된 logger가없으면기본적으로 org.eclipse.jetty.util.log.stderrlog class가로딩된다. 즉, console 화면에로그가출력된다. Org.eclipse.jetty.util.log.class property에정의되는구현 class들은아래와같다. Default Logging with Jetty s StdErrLog Using Log4j or Log4j2 via SLF4J Using Logback via SLF4J Using Java Util Logging via SLF4J Using Java Commons Logging via SLF4J

- 34-5. 기능소개 5.6 로깅 (2/3) 2. Request Log 설정 사용자요청당하나의로그항목이수신되며일반적으로표준 NCSA 형식으로제공되므로 Webalizer 와같은웹로그분석도구를사용하여쉽게분석할수있다. 표준요청로그항목에는클라이언트 IP 주소, 날짜, Method, URL, 결과, 전송크기, 참조자, 사용자에이전트, 전송시간이포함된다. 123.4.5.6 - - [20/Jul/2016:10:16:17 +0000] "GET /jetty/tut/xmlconfiguration.html HTTP/1.1" 200 76793 "http://localhost:8080/jetty/tut/logging.html" "Mozilla/5.0 (X11; U; Linux i686; en-us; rv:1.6) Gecko/20040614 Firefox/0.8" 342

- 35-5. 기능소개 5.6 로깅 (3/3) - 웹애플리케이션에대한 Request Log 구성방법 특정웹애플리케이션에대해별도의요청로그를구성하려면 Context xml 파일에다음을 추가한다. <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd"> <Configure class="org.eclipse.jetty.webapp.webappcontext"> <Call name="inserthandler"> <Arg> <New id="requestlog" class="org.eclipse.jetty.server.handler.requestloghandler"> <Set name="requestlog"> <New id="requestlogimpl" class="org.eclipse.jetty.server.ncsarequestlog"> <Set name="filename"><property name="jetty.logs" default="./logs"/>/test-yyyy_mm_dd.request.log</set> <Set name="filenamedateformat">yyyy_mm_dd</set> <Set name="append">true</set> </New> </Set> </New> </Arg> </Call> </Configure>

- 36-6. 활용예제 세부목차 본예제는간단한웹애플리케이션을 maven project 로만들어 Jetty 서버를기동하여테스트 하는것을목표로한다. 6.1 Jetty 서버기동예제

- 37-6. 활용예제 6.1 Jetty 서버기동예제 (1/8) 다음은 Maven 을사용하여 Helloworld 를출력하는웹애플리케이션을실행해보자. 먼저 maven pom.xml 파일내용은아래와같다. pom.xml <project xmlns="http://maven.apache.org/pom/4.0.0" xmlns:xsi="http://www.w3.org/2001/xmlschemainstance" xsi:schemalocation="http://maven.apache.org/pom/4.0.0 http://maven.apache.org/mavenv4_0_0.xsd"> <modelversion>4.0.0</modelversion> <packaging>war</packaging> <groupid>org.eclipse.jetty.demo</groupid> <artifactid>jetty-helloworld-webapp</artifactid> <version>1.0</version> <dependencies> <dependency> <groupid>javax.servlet</groupid> <artifactid>javax.servlet-api</artifactid> <version>3.1.0</version> <scope>provided</scope> </dependency> </dependencies> 뒷장계속

- 38-6. 활용예제 6.1 Jetty 서버기동예제 (2/8) pom.xml ( 계속 ) <build> <plugins> <plugin> <groupid>org.eclipse.jetty</groupid> <artifactid>jetty-maven-plugin</artifactid> <version>9.4.6.v20170531</version> </plugin> <plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-war-plugin</artifactid> <version>2.6</version> <configuration> <failonmissingwebxml>false</failonmissingwebxml> </configuration> </plugin> </plugins> </build> </project>

- 39-6. 활용예제 6.1 Jetty 서버기동예제 (3/8) Servlet 소스예제 package com.example; import javax.servlet.annotation.webservlet; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import java.io.ioexception; @WebServlet(urlPatterns = {"/*"}, loadonstartup = 1) public class HelloWorldServlet extends HttpServlet { @Override public void doget(httpservletrequest request, HttpServletResponse response) throws IOException { response.getoutputstream().print("hello World"); } }

- 40-6. 활용예제 6.1 Jetty 서버기동예제 (4/8) 예제에서사용하는디렉토리구조는아래와같다.

- 41-6. 활용예제 6.1 Jetty 서버기동예제 (5/8) Maven 설치 [jetty ~]$ wget http://mirror.apache-kr.org/maven/maven-3/3.5.0/binaries/apache-maven-3.5.0-bin.tar.gz --2017-07-25 15:30:37-- http://mirror.apache-kr.org/maven/maven-3/3.5.0/binaries/apache-maven-3.5.0- bin.tar.gz Resolving mirror.apache-kr.org (mirror.apache-kr.org)... 1.201.139.179 Connecting to mirror.apache-kr.org (mirror.apache-kr.org) 1.201.139.179 :80... connected. HTTP request sent, awaiting response... 200 OK Length: 8534562 (8.1M) [application/x-gzip] Saving to: apache-maven-3.5.0-bin.tar.gz 100%[===========================================================================>] 8,534,562 5.53MB/s in 1.5s 2017-07-25 15:30:39 (5.53 MB/s) - apache-maven-3.5.0-bin.tar.gz saved [8534562/8534562] [jetty ~]$ tar xvfz apache-maven-3.5.0-bin.tar.gz apache-maven-3.5.0/readme.txt apache-maven-3.5.0/license apache-maven-3.5.0/notice apache-maven-3.5.0/lib/ apache-maven-3.5.0/lib/cdi-api.license

- 42-6. 활용예제 6.1 Jetty 서버기동예제 (6/8) Maven 설치 ( 계속 ) 1) bashrc 파일에 maven 설치경로를아래와같이설정한다. [jetty ~] vi ~/.bashrc export M2_HOME=/home/jetty/apache-maven-3.5.0 export PATH=$PATH:$M2_HOME/bin 2) 설정후 bashrc 를적용한다. [jetty ~]$ source.bashrc

- 43-6. 활용예제 6.1 Jetty 서버기동예제 (7/8) Maven 실행 [jetty ~/jetty-helloworld-webapp]$ mvn jetty:run -Djetty.http.port=9999 [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building jetty-helloworld-webapp 1.0 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] >>> jetty-maven-plugin:9.4.5.v20170502:run (default-cli) > test-compile @ jetty-helloworldwebapp >>> [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ jetty-helloworld-webapp --- [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourcedirectory /home/jetty/jetty-helloworld-webapp/src/main/resources [INFO] Started o.e.j.m.p.jettywebappcontext@20de05e5{/,file:///home/jetty/jetty-helloworldwebapp/target/webapp-tmp/,available}{file:///home/jetty/jetty-helloworld-webapp/target/webapp-tmp/} [INFO] Started ServerConnector@3fd9e827{HTTP/1.1,[http/1.1]}{0.0.0.0:9999} [INFO] Started @37885ms [INFO] Started Jetty Server

- 44-6. 활용예제 6.1 Jetty 서버기동예제 (8/8) 브라우저를통해 maven 으로실행한 jetty 서버에접속한다.

- 45-7. FAQ Q 왜 Jetty 를사용해야합니까? & A Jetty는다른웹서버패키지와달리설치공간이아주작습니다. Jetty는개발자와관리자에게불필요한오버헤드나메모리사용을걱정하기않고배포할수있도록할수있습니다. Jetty는매우클라우드친화적입니다. Q 실행중인 Jetty 버전을어떻게확인할수있습니까? & A Jetty 설치디렉토리에서 java jar start.jar -version 으로확인할수있습니다.

- 46-7. FAQ Q Jetty 는 WebSocket를지원합니까? & A 네. Jetty는 RFC-6455 (https://tools.ietf.org/html/rfc6455) WebSocket Protocol을지원합니다. 또한, JSR-356 (https://www.jcp.org/en/jsr/detail?id=356) Java WebSocket API를지원하고있습니다. Q Jetty 는 HTTP/2 를지원합니까? & A 네. Jetty는 RFC-7450 (https://tools.ietf.org/html/rfc7540) 에서정의되어있는 HTTP/2 프로토콜에대한클라이언트및서버구현을모두지원합니다.

- 47-8. 용어정리 용어 JAVA EE SSL WebSocket HTTP/2 설명 자바엔터프라이즈에디션 (Java Platform, Enterprise Edition; Java EE) 은웹애플리케이션서버에서동작하는장애복구및분산멀티티어를제공하는자바소프트웨어의기능을추가한서버를위한플랫폼이다. TLS ( Transport Layer Security ) 및 SSL ( Secure Sockets Layer ) 은 SSL 이라고도하며컴퓨터네트워크에서통신보안을제공하는암호화프로토콜이다. 웹소켓 (WebSocket) 은하나의 TCP 접속에전이중 (full-duplex) 통신채널을제공하는컴퓨터통신프로토콜이다. 웹소켓프로토콜은 2011년 IETF에의해 RFC 6445 로표준화되었으며웹 IDL의웹소켓 API는 W3C에의해표준화되고있다. HTTP/2(Hypertext Transfer Protocol Version 2) 는월드와이드웹 (WWW) 에서쓰이는 HTTP 프로토콜의두번째버전이다. SPDY에기반하고있으며, 국제인터넷표준화기구 (IETF) 에서개발되고있다. 2015년 5월, RFC 7540로공개되었다.

Open Source Software Installation & Application Guide 이저작물은크리에이티브커먼즈 [ 저작자표시 비영리 동일조건변경허락 2. 0 대한민국라이선스 ] 에따라이용하실수있습니다.