PostgreSQL에서 not equal 시 null 값 포함하여 처리하기(IS DISTINCT FROM)
SELECT ADDR FROM STUDENT WHERE ADDR != '서울'
서울이 아닌 지역을 출력하는 SELECT 쿼리이다.
이 때 ADDR은 'NULL 값은 비교대상에서 제외' 한 다른 지역의 주소들이 출력된다.
ex)
ADDR |
인천 |
경기 |
부산 |
NULL값을 포함하여 NOT EQUAL을 사용하고 싶으면
IS DISTINCT FROM 절을 사용하면 된다.
SELECT ADDR FROM STUDENT WHERE ADDR IS DISTINCT FROM '서울'
== SELECT ADDR FROM STUDENT WHERE ADDR != '서울' or ADDR IS NULL
ex)
ADDR |
인천 |
경기 |
부산 |
NULL |
※ ADDR 컬럼이 NULL인 ROW가 존재할 경우에 NULL을 포함하여 출력됨.
'DB' 카테고리의 다른 글
GRANT 권한 주기. SEARCH_PATH 세팅. (postgreSQL) (0) | 2019.11.22 |
---|---|
postgreSQL에서 그룹별 넘버링 방법 ( ROW_NUMBER, RANK, DENSE_RANK ) (0) | 2019.03.13 |
Tomcat 7 에서 Tomcat 9 로 WAS 업데이트 하는 이유? APR 라이브러리!!
▣ APR 이란?
Apache Portable Runtime의 약자로 아파치 HTTP 2.x의 핵심인 라이브러리
▣ Tomcat Native Library란?
Apache 웹 서버의 APR 라이브러리를 Tomcat에서 사용할 수 있게 하는 라이브러리
- 톰캣 버전별 HTTP Connector
BIO Connector |
Tomcat 7의 기본 Connector org.apache.coyote.http11.Http11Protocol Java Blocking API를 사용하여 구현(pure java) |
NIO Connector |
Tomcat 8 이후 기본 Connector Class org.apache.coyote.http11.Http11NioProtocol Java Non-blocking API를 사용하여 구현(pure java) |
APR Connector | APR 라이브러리를 사용해 더 나은 성능의 Connector Class
org.apache.coyote.http11.Http11AprProtocol JNI(Java Native Interface) 라이브러리를 사용하여 구현 |
▣ Tomcat Native Library 설치
- Tomcat Native Library 설치 없이 Tomcat 9를 기동시켰을 경우 기동로그에 아래와 같은 메세지 출력 됨
이 메시지의 의미는 APR library를 찾지 못해서 HTTP NIO Connector를 실행 했다는 의미이다.
기능 상에는 문제가 없으나 더 좋은 성능을 내기 위해서 HTTP APR Connector 사용을 검토해야 한다.
1) 패키지 설치(APR 컴파일 시 필요)
yum –y install openssl-devel
yum –y groupinstall “Development Tools”
yum –y install expat-devel
2) APR 다운로드 및 설치
2-1) cd /opt
2-2) wget http://mirror.navercorp.com/apache//apr/apr-1.7.0.tar.gz
2-3) gzip –d apr-1.7.0.tar.gz
2-4) tar –xvf apr-1.7.0.tar
2-5) cd apr-1.7.0
2-6) ./configure
2-7) make
2-8) make install
3) APR-util 다운로드 및 설치
3-1) cd /opt
3-2) wget http://mirror.navercorp.com/apache//apr/apr-util-1.6.1.tar.gz
3-3) gzip –d apr-util-1.6.1.tar.gz
3-4) tar –xvf apr-util-1.6.1.tar
3-5) cd apr-util-1.6.1
3-6) ./configure –-with-apr=/usr/local/apr
3-7) make
3-8) make install
4) Tomcat-Native 설치
4-1) cd /opt/tomcat9.0.24/bin
4-2) gzip –d tomcat-native.tar.gz
4-3) tar –xvf tomcat-native.tar
4-4) cd tomcat-native-1.2.23-src/native
4-5) ./configure --with-apr=/usr/local/apr --with-java-home=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-0.el6_10.x86_64
※ 해당 오류 발생 시 openssl 최신버전 설치
4-5-1) openssl version 확인
4-5-2) cd /usr/local/src (다운로드 받을 폴더로 이동)
4-5-3) wget https://www.openssl.org/source/openssl-1.1.1c.tar.gz
4-5-4) gzip -d openssl-1.1.1c.tar.gz
4-5-5) tar xvf openssl-1.1.1c.tar
4-5-6) cd openssl-1.1.1c
4-5-7) ./config
4-5-8) make
4-5-9) make install
4-5-10) /usr/local/ssl 생성 확인
4-5-11) openssl version 확인(여전히 이전 버전으로 출력 됨)
4-5-12) which openssl (현재 openssl 경로 확인. 대부분 /usr/bin/openssl 에 있음)
4-5-12) 기존 파일 백업 (mv openssl /root/openssl_1.0.1_bakup )
4-5-13) ln –s /usr/local/src/bin/openssl /usr/bin/openssl (새로 설치된 openssl로 링크 걸기)
4-5-14) openssl 버전 확인(업데이트 되었음)
4-5-15) 4-5번 재실행
5) Tomcat catalina.sh에 apr 라이브러리 경로 추가
CATALINA_OPTS="-Djava.library.path=/usr/local/apr/lib"
※ 참고 URL
https://toma0912.tistory.com/61
http://mirror.navercorp.com/apache/apr/
https://www.openssl.org/source/
'Linux' 카테고리의 다른 글
Tomcat 7 에서 Tomcat 9 로 WAS버전 업데이트 (0) | 2019.09.17 |
---|---|
Apache(웹서버) & Tomcat(WAS) 설치 및 연동 (0) | 2019.07.07 |
Cent OS 7 설치 및 기본세팅 (0) | 2019.07.07 |
포트번호로 프로세스 찾기(WAS 포트 겹칠 때) (0) | 2019.02.22 |
crontab 설정 (0) | 2019.02.22 |
Tomcat 7 에서 Tomcat 9 로 WAS버전 업데이트
너무 오래된 Tomcat 버전으로 서비스를 운영하고 있어서,
WAS성능 향상을 위해 부장님과 회의 끝에 Tomcat 7 -> Tomcat 9 버전으로 업데이트 하기로 하였다.
Tomcat 7 에서 Tomcat 9 로 버전 업데이트 시 발생한 이슈사항을 정리 하고자 한다.
1. Tomcat 7과 Tomcat 9의 Connector옵션의 maxPostSize 차이
Tocmat 7의 경우 maxPostSize의 MAX값은 '0'
Tomcat 9의 경우 maxPostSize의 MAX값은 '-1'
Tomcat 7의 옵션을 그대로 가져왔더니 발생한 이슈였다.
post로 전송되는 패킷의 크기가 '0'으로 세팅되어서 패킷 사이즈 오류가 발생하였다.
구글링 해보니 Tomcat 8버전 부터 maxPostSize의 MAX값은 '-1'로 수정되었다고 한다.
2. Connector 옵션의 packetSize 차이
Tomcat 7의 AJP Connector 옵션의 packetSize가 '65536'으로 MAX값으로 세팅 되어 있었고
이를 Tomcat 9의 Connector 옵션에도 packetSize를 동일하게 적용하였더니,
계속해서 502 Bad GateWay 오류가 발생하였다.
왜 오류가 날 까 확인해보니....(원인을 찾는데 상당한 시간이 소요되었다)
Apache 웹 서버의 workers.proprerties 파일의 worker.template.max_packet_size=65536 가 아래와 같이 주석처리가 되어 있었다. (Tomcat 7에서는 해당 부분을 무시하는 듯 하다)
cat workers.properties
#worker.template.max_packet_size=65536
해당 내용을 주석 해제 후 packetSize를 설정해주니 정상적으로 동작하였다.
=> apache>workers.properties>worker.template.max_packet_size와 tomcat>server.sml>connector(AJP)의 packetSize 속성 값은 반드시 동일해야 한다.!
만약 packetSize를 설정해주지 않을 경우 default 값인 8192로 동작하며
request 값의 패킷 사이즈가 8192가 넘어갈 경우 패킷 사이즈 오류가 발생한다.
따라서 packetSize 값을 Apache의 workers.properties와 Tomcat의 server.xml파일에
packetSize를 MAX 값으로 설정해주어야 한다.
3. JDK 버전 차이
Tomcat 9 는 JDK 1.8 이후 버전을 지원한다.
따라서 현재 서비스 되는 JDK의 버전을 1.6 -> 1.8로 업데이트 하였다.
그 외에는 특이사항 없이 WEB/WAS AJP설정, 도메인 별 Tomcat 인스턴스 추가 설정 등을 완료하였다.
※ 참고 URL
https://tomcat.apache.org/tomcat-9.0-doc/config/ajp.html
https://tomcat.apache.org/tomcat-9.0-doc/config/http.html
'Linux' 카테고리의 다른 글
Tomcat 7 에서 Tomcat 9 로 WAS 업데이트 하는 이유? APR 라이브러리!! (0) | 2019.09.17 |
---|---|
Apache(웹서버) & Tomcat(WAS) 설치 및 연동 (0) | 2019.07.07 |
Cent OS 7 설치 및 기본세팅 (0) | 2019.07.07 |
포트번호로 프로세스 찾기(WAS 포트 겹칠 때) (0) | 2019.02.22 |
crontab 설정 (0) | 2019.02.22 |