프로그래밍/JAVA2022. 6. 7. 14:17
728x90

https://tomcat.apache.org/whichversion.html

 

Apache Tomcat® - Which Version Do I Want?

Apache Tomcat® is an open source software implementation of a subset of the Jakarta EE (formally Java EE) technologies. Different versions of Apache Tomcat are available for different versions of the specifications. The mapping between the specifications

tomcat.apache.org

 

아파치 톰켓 버전별로 필요 jdk 버전이 있습니다.

 

저는 현재 8.5나 9.0을 많이 사용하고 있는데 

8.5는 java 7 이상

9.0은 java 8 이상을 사용해야 합니다.

 

java 8(1.8) 이상을 사용하는 경우 톰캣 10.0.X 까지 사용할 수 있습니다.

 

10.1.X 버전을 사용해야 하는 경우 java 11 이상을 사용해야 합니다. (LTS 버전은 java 11하고 17이니 둘중 하나를 선택하심이 좋을거 같습니다.)

 

 

728x90

'프로그래밍 > JAVA' 카테고리의 다른 글

open jdk 관련  (0) 2022.06.07
java 쓰레드풀(Thread pool) 을 활용한 멀티쓰레드 처리  (0) 2020.12.21
quartz 사용시 스케쥴 cron 형식  (2) 2020.11.02
request 객체 활용  (0) 2020.10.23
자바자료형  (0) 2020.10.22
Posted by 내맘대로내뜻대로
프로그래밍/JAVA2022. 6. 7. 11:33
728x90

우리가 흔히 java 라고 부르는 단어는 jre 를 지칭하는 경우가 많습니다.

jre는 java의 가상머신(jvm)을 제공하는 프로그램으로 os 및 하드웨어가 다르더라도 java기반으로 제작된 프로그램을 쉽게 사용할 수 있도록 해주는 프로그램입니다.

 

이 jvm에서 구동되도록 java기반으로 제작되는 프로그램은 소스를 컴파일 하여 실행가능한 상태로 만들어주어야 하는데 이때 사용되는것이 jdk 입니다.(java se 라고 알고 있는 것도 jdk를 지칭합니다.)

 

일반적으로 개발자가 높은 버전의 jdk를 기준으로 작성한 프로그램은 낮은 jre에서 구동되지 않는 경우가 많습니다.

하지만 높은 버전의 jdk가 개발에 편의성을 제공하고 보안문제도 해결되는 경우가 많아 개발자는 높은 버전의 jdk를 사용하여 개발하는것이 유리합니다.

 

이 부분에서 적절한 jdk 버전을 고민해야 하는데 일반적으로 1.8 버전이 현재 많이 사용되는것으로 알고 있습니다.

1.8 버전을 사용하는 이유는 꽤 여러가지가 있지만 크게 보면 유료화 이슈와 tools.jar/ rt.jar 때문으로 생각됩니다.

 

1.8버전 이전에는 오라클에서 제공하는 일반적인 java jre 와 jdk를 사용했습니다.

하지만 오라클에서 1.8 버전(2019년 1월) 이후부터 유료화를 선언하여 무료로 제공되는 open jdk(jre)를 사용하는 경우가 많습니다.

 

오라클 java 유료버전은 

  • Java6 version 45 이후 (6u45~)
  • Java7 version 80 이후 (7u80~)
  • Java8 version 211 이후 (8u211~)
  • Java11이후 버전 모두 (11, 12, 13, 14, 15)

에 해당되므로 이보다 상위버전을 사용하려면 오라클에 라이센스를 취득한 후 사용해야 합니다.

자신이 사용하는 자바버전은 커맨드창(cmd) 에서 java -version 을 입력해보면 확인 할 수 있습니다.

 

라이센스를 취득하여 사용하는 경우에는 해당되지 않지만 라이센스 취득이 어렵거나 고객사에서 open jdk를 사용해달라는 요청을 할 경우 open jdk(무료)를 사용하게 됩니다.

 

일단 open jdk 다운로드 사이트는

https://github.com/ojdkbuild/ojdkbuild

 

GitHub - ojdkbuild/ojdkbuild: Community builds using source code from OpenJDK project

Community builds using source code from OpenJDK project - GitHub - ojdkbuild/ojdkbuild: Community builds using source code from OpenJDK project

github.com

 

open jdk의 공식 페이지는 https://openjdk.java.net/ 이지만 실제 사용할 jdk를 설치버전(msi)으로 다운받으려면 위에 적은 github 에서 msi 파일 형태로 다운로드 받아 설치하는게 용이합니다.(windows os 기준)

 

 

open jdk는 여러종류가 있지만 본인은 위 사이트에서 다운로드 한 jdk를 사용합니다.

jdk는 현재(2022년 06월 기준) 18버전까지 사용되지만 현업에서는 일반적으로 1.8 버전을 많이 사용합니다.

 

1.8 버전이란 java 8 기준이고 18 버전이란 java 18 버전이므로 꽤 버전차이가 많이 나지만 1.8의 경우 패치가 지속적으로 제공되고 있어 큰 문제가 없습니다.

또한 java 9 (1.9) 부터는 tools.jar 와 rt.jar 가 제거되므로 1.8 기준으로 작성된 프로그램을 1.9 이상으로 적용하려면 여러 수정과 고객사 환경(서버에 설치된 자바버전)을 고려해야 합니다.

 

java 1.8 버전을 사용하는 또 다른 이유로는 LTS(long term support)정책도 한몫 하는데 java 버전별로 지원되는 기간이 다르게 책정되어 있고 LTS 버전으로 발표된 버전이 java8 , java11, java17 입니다.

오라클에서 발표된 지원기간은

  • Java 8 : 2030년 12월까지
  • Java 11 : 2026년 9월까지
  • Java 17 : 2029년 9월까지

이고 현재 java 8 버전이 가장 길게 책정되어 있습니다.

이 버전 이외의 버전은 오히려 매우 짧은 지원기간을 갖고 있습니다.

 

open jdk의 경우 오라클 jdk와 호환성이 문제가 될 가능성에 대해서도 고민이 되긴 하지만 현재 현업에서 사용하는 1.8 버전의 경우 호환성 문제는 거의 없는것으로 확인되고 있습니다.

 

open jdk의 경우 여러 제공사이트가 있습니다.

adopt Open JDK가 꽤 많이 사용되는것으로 알고 있지만 본인은 openjdk.java.net 에서 제공하는 open jdk를 사용하고 있습니다.

AdoptOpenJDK https://adoptopenjdk.net/index.html

 

AdoptOpenJDK

AdoptOpenJDK provides prebuilt OpenJDK binaries from a fully open source set of build scripts and infrastructure. Supported platforms include Linux, macOS, Windows, ARM, Solaris, and AIX.

adoptopenjdk.net

 

 

 

Azul Systems Zulu / Zulu Enterprise

 

Red Hat OpenJDK

 

 

 

 

 
728x90
Posted by 내맘대로내뜻대로
프로그래밍/JAVA2020. 12. 21. 11:52
728x90

java 뿐만 아니고 일반적인 프로그래밍에서 멀티쓰레드의 활용이 꼭 필요할때가 있습니다.

멀티쓰레드란 무엇인가? 라는 내용을 자세하기 기록하기엔 너무 양이 많고 간단한 예를 들어 설명 하겠습니다.

 

일반적으로 햄버거매장(맥도날드나 버거킹 등등..)에 가면 화면을 터치하여 주문하는 키오스크 주문기가 있습니다.

구매자는 키오스크에 자신이 원하는 메뉴를 선택하고 결재를 진행한 후 대기표를 받아 기다리게 되고

매장직원은 주문순서에 따라 조리를 시작합니다.

이때 주문이 각각 업무(job)가 되고, 직원은 쓰레드가 된다고 생각하면 이해가 간단해 집니다.

 

주문이 1건밖에 없을 경우 직원 1명이 이 업무를 처리하면 간단하게 해결됩니다.

 

주문이 10건이상 쌓이고 직원이 1명밖에 없다면 현재 진행중인 주문건 이외의 주문건은  계속 기다리며 차례차례(순차적) 진행하게 될것입니다.

 

이런 진행을 막기 위해 매장에서도 직원을 여러명 두게 되는데 직원이 1명일때보다 3명일때 처리속도가 3배 나오게 되며 직원수가 많을수록 일처리 속도는 빨라지게 될것입니다.

 

하지만 당연히 직원이 많을수록 매장에서 감당해야 하는 고용비용은 증가하게 되겠지요.

따라서 직원수와 업무처리 효율이 적절히 조절되어야 합니다.

 

자바에서 쓰레드를 처리하기 위한 방법은 여러가지가 있습니다.

 

멀티 쓰레드의 경우 업무 1건당 쓰레드 1개를 배정하여 사용하는 방식이 사용되기도 하는데 단순히 멀티 쓰레드 처리를 하게 될 경우 작업량에 따라 쓰레드가 계속 늘어나게 되어 오히려 작업효율이 떨어지거나 필요이상의 자원을 사용하게 되는 경우가 있습니다.

 

쓰레드풀(Thread pool)은 활용할 쓰레드의 최대값을 미리 지정하여 그 쓰레드 안에서 처리가 되는 방식입니다.

 

멀티 쓰레드 처리시 작업수와 같은수의 쓰레드가 동작하게 되면 햄버거 매장의 예에서 손님이 동시에 10명이 몰려들었을때 직원 10명이 일을 하려고 하지만 주방의 크기나 매장 크기가 충분히 넉넉하지 않다면 직원들의 동선이 충돌하고 업무처리가 오히려 늦어지는 상황이 발생할 수 있습니다.

프로그램 처리에서도 너무 많은 쓰레드를 사용하게 되면 과도하 부하로 오히려 속도가 늦어지고 심한경우 프로그램이 비정상종료되거나 멈추는 현상도 발생됩니다.

 

쓰레드풀을 활용 할 경우 동시에 처리 가능한 업무의 수는 쓰레드풀에 설정한 쓰레드 갯수만큼 이지만 먼저 작업이 끝난 유휴쓰레드가 다음 작업을 바로 진행하며 쌓여있는 작업이 계속 진행되므로 적당한 부하와 효율적인 업무처리가 진행됩니다.

 

멀티쓰레드를 활용하기 좋은 업무는 TPC/IP 통신(대기시간이 존재)이나 동영상의 인코딩(작업시간이 많이 소요될때) 작업이 여러건 진행되어야 할때 등 한건의 작업이 대기시간이나 소요시간이 길어 다음 작업들이 계속 앞의 업무가 끝날때까지 기다려야 할 경우 입니다.

 

 

쓰레드풀을 활용한 예제

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;



ExecutorService executorService = Executors.newFixedThreadPool(5);

if(rs!=null){
	while (rs.next())
	{
		Runnable runnable = new Runnable() {
			@Override
			public void run() {
				//실제 처리할 작업 
				System.out.println("이런 저러 처리...");
			}
		};

		executorService.execute(runnable);	 
	}
}
//쓰레드풀 종료
executorService.shutdown();

 

코드상 rs는 DB에서 값을 불러온 레코드셋 입니다.

DB에 값이 있을 경우 반환된 값의 갯수만큼 반복하게 되며 이때 각 작업은 쓰레드풀에서 지정한 5개의 쓰레드를 이용하여 처리하므로 처음 5건은 동시에 처리가 진행되고 그 다음 6번째건 부터 작업이 끝나기를 기다렸다가 작업이 끝난 쓰레드에서 처리가 됩니다.

의외로 처리가 간단하여 많이 활용 가능할것으로 생각됩니다.

 

우리가 직접 처리할 내용은 public void run() 으로 감싸고 그 밖을 런어블(Runnable)처리 해준 뒤 그 내용을 실행executorService.execute(runnable); 해주면 됩니다.

 

물론 모든 반복작업(멀티작업)이 끝난 후에는 쓰레드풀을 종료 해주어야 합니다.

executorService.shutdown();

 

약간 헷갈릴수 있는 문구가 5개의 쓰레드로 작업시 6번째 작업부터 대기한다는 부분일텐데요..

 

그럼 그냥 반복작업을 하는거보다 오히려 대기가 있어서 비효율인거 아닌가? 라는 의문을 가지는 분도 계실수 있는데..

단순 반복작업의 경우 쓰레드1개로 처리하는 상황이라 이미 2번째 작업부터 대기하고 있는 상황이므로 멀티 쓰레드 처리시 충분히 속도 향상이 있습니다.

 

 

* 개념도 같은건 시간 날때 그려서 추가 하겠습니다.

728x90

'프로그래밍 > JAVA' 카테고리의 다른 글

아파치 톰캣 버전별 jdk 버전  (3) 2022.06.07
open jdk 관련  (0) 2022.06.07
quartz 사용시 스케쥴 cron 형식  (2) 2020.11.02
request 객체 활용  (0) 2020.10.23
자바자료형  (0) 2020.10.22
Posted by 내맘대로내뜻대로
728x90

javascript 로 무언가 개발을 하다보면 특정내용을 찍어보기 위해 alert() 함수를 많이 사용하게 됩니다.

 

일반적으로 alert(""); 형태 또는 alert(abcd); 형태로 사용하게 되는데 

이 경우에 alert 창을 지우는 행위를 까먹고 안하면 나중에 어디에서 사용했는지 찾는데 오랜 시간이 걸리는 경우가 많습니다.

특히 include 나 iframe 등을 사용한 경우 url을 따라가도 어디에서 발생하는 얼럿인지 도저희 찾기 힘든경우가 많습니다.

 

alert(abcd); 의 경우 향후에 ctrl+f 또는 ctrl+h(이클립스)등으로 검색해야 할 경우

실제 화면에서는 abcd에 담긴 값이 alert으로 나타나기 때문에 

abcd의 해당 내용으로는 alert 위치를 검색하기 힘들게 됩니다.

 

저의 경우에는 테스트시

alert("login page param1 ==="+abcd); 형태로 alert을 사용하는 경우가 많습니다.

이렇게 작업할 경우 실수로 삭제하지 않더라도 

alert("login page param1 === 부분이나 login page param1 === 부분을 검색해보면 쉽게 값을 찾을 수 있습니다.

 

그리고 이보다 더 좋은 사용예는 console.log 일듯 합니다.

주로 크롬에서 많이 개발하지만 IE 에서도 개발자도구를 보면 console 창에 잘 표시가 되고

alert 보다 많은 정보를 담고 있어 사용하기 매우 유용합니다.

 

console.log("console 로그 테스트 입니다."); 형태로 사용한 예 입니다.

 

console.log("window.screen=====",window.screen);

형태로 사용하면 다음과 같은 구조가 나타납니다.

 

브라우저가 가지고 있는 객체에 대한 정보나 현재 화면에서 변수/상수 또는 객체에 담긴 내용들을 확인하거나 제어 할때 매우 유용합니다.

728x90

'프로그래밍 > Jquery, javascript' 카테고리의 다른 글

부모창(opener)으로 submit 할때  (0) 2020.10.28
Posted by 내맘대로내뜻대로
프로그래밍/JAVA2020. 11. 2. 18:53
728x90

quartz 를 사용하여 스케쥴 설정시 croncronExpression 설정이 헷갈릴때가 많다.

 

가장 보편적으로 사용하는 형태가 다음과 같은 형태일 것이다.

 

00 30 01 * * ?

 

간단하게 정리하면 매일 01시 30분에 실행하는 스케쥴이라는 의미이다.

 

각 자리수의 의미는

 *     *     *     *    *      *       *

초    분   시   일   월   요일   년도(생략가능)

 

  1. 초(Seconds)
  2. 분(Minutes)
  3. 시(Hours)
  4. 일(Day-of-Month)
  5. 월(Months)
  6. 요일(Days-of-Week)
  7. 연도(Year) - 생략가능

“?”문자는 일(day-of-month)와 요일(day-of-week) 필드에서만 허용되며 값에 상관하지 않는다는 의미. 

"*" 문자는 매 단위(시간/분/초 ...)마다 실행한다는 의미.

요일은 일요일부터 1로 표기 (1-일, 2-월, 3-화, 4-수, 5-목, 6-금, 7-토)

 

몇가지 유용한 예...

 

1. 매일 매시 10분에 실행

     00 10 * * * ?

2. 매주 수요일 13시 10분에 실행

     00 10 13 ? * 4

3. 매월 첫번째 토요일 13시 10분에 실행

     00 10 13 ? * 7#1

4. 하루 4번 6시간마다 실행 ( 0시, 6시, 12시, 18시 4회실행)

     00 00 0/6 * * ?

5. 하루 4번 6시간마다 실행 ( 0시15분20초, 6시15분20초, 12시15분20초, 18시15분20초 4회실행)

     20 15 0/6 * * ?

6. 매10분마다 실행

     00 0/10 * * * ?

7. 매일 19시~20시 사이 30분 간격으로 19시 09분부터 실행 (19시09분, 19시39분, 20시09분, 20시39분)

     00 09/30 19-20 * * ?

     이 경우 정확히는 19~20시 사이라기 보다는 시간구간이 19시와 20시 일때이므로 실질적으로는 19시에서 21시다.

728x90

'프로그래밍 > JAVA' 카테고리의 다른 글

아파치 톰캣 버전별 jdk 버전  (3) 2022.06.07
open jdk 관련  (0) 2022.06.07
java 쓰레드풀(Thread pool) 을 활용한 멀티쓰레드 처리  (0) 2020.12.21
request 객체 활용  (0) 2020.10.23
자바자료형  (0) 2020.10.22
Posted by 내맘대로내뜻대로