Java를 사용하는 프로그램/어플리케이션을 사용할 때, 블로그를 검색하면 항상 JAVA_HOME부터 설정한다.

그런데, Java를 별도로 설치하고 싶지 않거나 각각 다른 버전의 Java를 설치하고 싶다면?



해답은 Java를 Portable로 각각 사용하면 된다.

Portable JDK / JRE 를 사용하는 방법은 3가지가 있다.


1. 인터넷에서 Portable으로 만들어진 파일 다운로드

- 가장 손쉬운 방법이다. 하지만 어떤 파일일지 신뢰가 가지 않는다. 혹시 바이러스라도 있으면...?


2. OpenJDK Portable 다운로드

- https://sourceforge.net/projects/openjdkportable/

- OpenJDK 의 Portable 버전을 다운받는다. 하지만 Oracle의 '순수한' Java를 보통 사용하기 때문에, OpenJDK는 생소할 수 있다.

- 사용상 크게 차이는 없겠지만, 만약 조금의 차이라도 있어서 어플리케이션이 동작하지 않는 것을 찾기 힘들지도...


3. Oracle의 JDK을 다운로드 받아 직접 만들기


1번과 2번은 모두 큰 이슈 없이 사용 가능하다.

하지만 3번의 JDK를 직접 만드는 방법은 생각보다 매우 쉽기 때문에, 굳이 1번과 2번을 선택하지 않아도 될 정도이다.



Portable JDK를 만들기 위한 방법이다.

- 사용한 JDK는 8u65 버전이며, 64bit Window Binary이다.

- 코드계의 구글인 stackoverflow에서 참조한 방법이다. 


1. JDK 다운로드

1.1 http://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8-2177648.html  에 접속한다.

1.2 jdk-8u65-windows-x64 을 다운로드 받는다.


2. 다운로드 받은 파일(jdk-8u65-windows-x64)을 압축 해제한다 (7-zip 등 사용)





3. 압축 해제한 jdk-8u65-windows-x64 폴더에 들어가 tool.zip 파일을 한 번 더 압축 해제한다


4. 해당 위치에서 CMD 창을 오픈한다

4.1 폴더에서 Shift + 마우스 우클릭 하면 아래 사진과 같이 "여기서 명령창 열기"를 선택할 수 있다.





5. 명령창에서 아래 커맨드를 복사하여 붙여넣고, 실행한다.

     for /r %x in (*.pack) do .\bin\unpack200 -r "%x" "%~dx%~px%~nx.jar"






위 작업이 완료되었으면, 이제 tools 폴더는 JDK 8의 Portable 파일이 생성된 것이다.

이 폴더의 경로를 각 프로그램별로 JAVA_HOME으로 설정하면 된다.


Tomcat에서 JAVA_HOME 으로 설정하는 것은 다음 포스트에서 다루기로 하겠다.





덧1. 보통 Java 설치 후, Update가 되지 않도록 설정을 변경한다. 하지만 Portable 버전이면 업데이트 자체가 무의미하기 때문에, 유지보수 측면에서 더 좋다고 볼 수 있다.

덧2. Java 업데이트를 비활성화하는 이유는, Java 업데이트창이 실행되면서 Java 전체가 먹통이 되는 경우가 있기 때문이다. 또는 강제로 업데이트가 되는 경우도 있기 때문에, 갑자기 Java 버전이 달라지기도 한다.

덧3. 하지만 보안 이슈로 인해서 Java 버전을 최대한 높여 놓는 것을 권고한다.

덧4. JDK8의 버전을 jdk-8u65 으로 한 이유는, 그 이상의 버전에서는 압축을 해제해도 tools.zip 파일이 생성되지 않기 때문이다.

Java에는 FileWriter, Python에서는 내장 함수 등과 같은 방법들을 통해서 물리적인 파일을 생성한다.

각각의 언어에서 기본으로 지원하는 것이 파일 생성인데, MariaDB에서도 당연히 파일 생성을 지원한다.
지금 소개하는 것은 MariaDB에서 쿼리문을 실행하여 txt 파일을 생성하는 것이다.

파일 생성은 다른 언어를 통해서도 가능하지만, 이전 포스트들과 마찬가지로 타 시스템과의 느슨한 연결(낮은 의존도)를 위한 것들이었기 때문에 자체적으로 파일을 생성하는 방법을 소개한다.

우선, table_name 에 select 결과 대상이 될 테이블을 입력하고, Where 조건에 의도하는 정보를 입력한다.
예제에서 입력한 조건은, col_name 컬럼이 John 이라는 단어를 포함하며, col_name의 길이가 10보다 작거나 같은 조건의 모든 컬럼이다.

각 컬럼들은 ,  으로 구분되며, 각 행들은 /n (줄바꿈) 으로 구분되게 파일 생성 조건이 정의되어 있다.
이 값들은 파일을 읽어들이는 시스템에서 정의된 구분자로 대체하면 된다.




이러한 기능은 주기적으로 조건에 맞는 파일을 생성해야 하는 로그성 작업 또는 백업 파일 생성에 적합하다.

해당 쿼리를 Stored Procedure으로 만들고, 이 SP를 Event Scheduler에 등록하여 주기적으로 작동하게 되면 간단한 로그/백업 파일이 되는 것이다.

물론 더 많은 기능을 사용하려면 별도의 언어를 사용하여 동작시키는 방법이 있겠으나, 처음에 의도한 바와 같이 또하나의 관리 포인트가 생기는 것에 대해 고려를 해야 한다.


주기적으로 서버에서 어떤 작업을 해야할 때, 서버에서는 Cron / Batch / Event 등을 통하여 주기적인 작업을 진행한다.


DB에서도 주기적으로 작업을 해줘야 하는 것이 있다.

대표적인 것으로는 특정 Event에 따라 별도의 테이블에 데이터를 자동적으로 이관한다거나, 자동으로 데이터 백업을 해야 하는 것 등이 있을 것이다.

Trigger과 같은 기능을 사용해도 유사한 기능을 수행할 수 있으나, Trigger는 어떠한 이벤트가 발생했을 때 사용되는 것이기 때문에, 주기적인 작업에는 적합하지 않다고 볼 수 있다.


또한, DB를 사용하는 서버(Application)에서 주기적으로 쿼리를 DB로 요청할 수도 있다.

하지만 이 경우에는 Application이 비정상 작동 또는 장애가 발생했을 경우가 있을 수 있으므로, 장애 포인트가 하나 늘어난다고 볼 수 있다.

(물론 과거에 MySQL, MariaDB의 Event Scheduler의 성능이 떨어진다는 이야기도 있었으나, 최근에는 많이 개선되었다고 하고, 시스템별로 느슨한 연결을 하기 위하여 DB의 Event Scheduler 사용도 필요하다.)



Event Scheduler 사용 설정

우선, MariaDB에서 별도로 설정하지 않았다면, Event 옵션은 Off 상태이다.

이를 활성화시키기 위해서 두가지 방법 중 하나를 선택하면 된다.


1. Option 변경


2. my.ini  (Linux에서는 my.cnf ) 에 설정 추가


  event_scheduler = ON  


*1번의 경우에는 Event Scheduler 사용을 위해 재시작이 필요없지만, 다음 재시작 때에는 Event Scheduler가 설정값을 따른다 (기본은 Off)

*2번의 경우에는 재시작을 해야만 설정에 추가되며, 한번 재시작 하고 난 다음에는 시작마다 설정이 On 되어 있다.



Event Scheduler 설정 확인


Event Scheduler 등록

Event Scheduler 등록하는 쿼리이다.
동작 주기는 Month, Hour, Minute, Second 등으로 다양하다.
너무 자주 동작하면 DB 성능에 무리가 갈 수도 있으나, 또 너무 긴 기간으로 설정하면 한번의 쿼리에 많은 시간이 필요한 Trade-Off가 있을 수 있다.
아래 Event에서는 SP를 호출하도록 했다.
(Raw 쿼리문을 입력하는 것보다, SP를 호출하게 하는 것이 유지보수상으로 더 좋다)




Event Scheduler 관리


+ Recent posts