티스토리 뷰

server.xml

<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol" .....

설정된 프로토콜 [org.apache.coyote.http11.Http11AprProtocol]이(가), 가용하지 않은 APR/native 라이브러리를 요구합니다.

server O/S : WINDOWS SERVER 2016 Standard

jdk : C:\Program Files\Java\jdk1.8.0_191tomcat : apache-tomcat-9.0.34.exe에러가 발생한 환경이다. 설치형 tomcat을 사용하면 log창을 항상 띄울 필요없고 정전으로 서버가 죽었다 살았을 경우 자동으로 실행되는 장점이 있어 위의 tomcat으로 사용했었는데..SSL 설정시 위와 같은 에러가 발생했다. tomcat을 아래 서버로 교체했더니 에러 해결되었다.

 

tomcat : apache-tomcat-9.0.27-windows-x64.zip

 

 

 

 

---------------------------------------------

출처: https://toma0912.tistory.com/61 [토마의 개발노트]

 

Tomcat 의 Connector 는 크게 2가지가 있다.

 

  • AJP Connector : Apache 와 같은 Web server 를 거쳐서 요청을 받는 경우에 사용. HTTP 보다 성능이 좋은 binary 기반의 프로토콜로 동작
  • HTTP Connector : 표준 HTTP 프로토콜로 요청을 받는 경우 사용

 

Connector 의 역할은 쉽게 이야기 하자면 외부에서 요청을 받는 Listener 라고 할 수 있다. (내부적으로는 Thread 관리 역할까지 수행한다)

여기서 HTTP Connector 는 다음 3가지가 있다. (Tomcat 6, 7기준)

 

  • BIO connector : Java blocking api 를 사용하여 구현. pure java
  • APR (native) connector : JNI library 를 사용하여 구현. 
  • NIO connector : Java nio api 를 사용하여 구현. 부분적으로 Non blocking 방식. pure java

APR이란 Apache Portable Runtime의 약자이며 자세한 내용은 아래 링크를 참조하면 됩니다.

 

참조 : https://tomcat.apache.org/tomcat-8.0-doc/apr.html

 

tomcat connector는 2개로 나뉘에 집니다. 하나는 AJP(Apache Jserv Protocol) Connetor이고 다른 하나는 HTTP Connector이며 간략한 설명은 아래와 같습니다.

 

 AJP Connector

 Apache와 같은 Web Server를 거쳐서 요청을 받는 경우 사용, HTTP보다 성능이 좋은 Binary 기반의 Protocol로 동작

 HTTP Connector

 표준 HTTP Protocol로 요청을 받는 경우 사용

 

여기에서 Connector의 역할은 외부에서 요청을 받는 Listener라고 할 수 있습니다.

 

 BIO Connector

 Java Blocking Api를 사용하여 구현합니다. pure java 

 APR Connector

JNI(Java Native Interface) library를 사용하여 구현합니다. 

 *JNI는 다른 언어로 만들어진 Application과 상호 작용할 수 있는 Interface를 제공합니다.

 NIO Connector  

 Java Nio Api를 사용하여 구현합니다. 부분적으로 Non Blocking 방식입니다. pure java 

 

 

---------------------------------------------

JNI 란?

 

JDK 8에 포함된 모듈이다. (docs.oracle.com/javase/8/docs/)

아래에서 5번째 제일 앞에 JNI가 보인다. 링크를 따라 들어가보면

Java Native Interface (JNI) is a standard programming interface for writing Java native methods and embedding the Java virtual machine into native applications. The primary goal is binary compatibility of native method libraries across all Java virtual machine implementations on a given platform.

JNI 6.0 API Specification

The Java Native Interface 6.0 Specification describes how the AWT package is designed to use JNI mechanisms to display objects on Solaris, Linux and Windows platforms.

 

자바는 특정 운영체제에 종속되지 않도록, JVM이라는 가상머신 위에서 실행되게끔 만들어진 언어입니다.

운영체제에 맞는 JVM이 각기 존재하기 때문에, Java 개발자는 하나의 Java 파일만 만들면, 

운영체제 상관없이 원하는 결과물을 쉽게 얻을 수 있습니다.

하지만 단점도 있습니다.

그중 하나의 단점은 운영체제의 모든 기능을 JVM이 담지 못하는 것입니다.

따라서, 구현하고 싶은 몇몇 기능들은 Java 언어 자체로도 해결 안되는 경우가 존재합니다.

 

JNI (Java Native Interface) 란?

위에서 언급한 Java언어 자체로도 해결 안되는 경우, 대처할 수 있는 방법중 하나입니다.

운영체제의 고유기능(Native)을 Java로 해결 하는 것이 아닌 운영체제가 구현된 언어 (보통 C, C++)로

운영체제의 고유기능을 만듭니다. 

JVM은 C,C++로 만들어진 고유기능 즉, 함수를 Java 메서드와 연결해줍니다.

그로인하여 Java 메서드를 호출 할 시, C나 C++로 작성된 함수가 실행 됩니다.


출처: https://mommoo.tistory.com/71 [개발자로 홀로 서기]

'Skill > spring' 카테고리의 다른 글

[tomcat] http로 들어온 Request를 https로 Redirect  (0) 2020.07.27
[tomcat] 설치형 tomcat 설정 변경  (0) 2020.07.23
[mybatis] for문 사용하기  (0) 2020.07.09
[springboot] Filter 설정  (0) 2020.06.25
[spring] MessageConverter  (0) 2020.06.25
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함