프로그래밍/JAVA2024. 11. 26. 11:06
728x90

open JDK 관련된 내용도 자주 검색되는것 같아 2024년 11월 버전으로 갱신하여 자료 올립니다.
 
* 요약 *
주 사용버전 : 1.8버전  / 11버전  / 17버전  / 21버전
 
라이프 사이클(EOS)
 
1.8버전 - 2026년 11월
11버전 - 2024년 10월
17버전 - 2027년 10월
21버전 - 2029년 12월
 
현재 23버전까지 지원하는것 같지만 21버전 사용하시는게 가장 현명할것 같습니다.(톰캣과 같이 사용하실 경우 톰캣 11버전 까지 지원하는것 같습니다.)
 
 
 

 

 
 
https://wiki.openjdk.org/display/JDKUpdates/Archived+Releases

Archived Releases - Archived Releases       -    OpenJDK Wiki

wiki.openjdk.org

 
 
https://access.redhat.com/ko/articles/6973017

OpenJDK 라이프 사이클 및 지원 정책 - Red Hat Customer Portal

이 문서에서는 RHEL(Red Hat Enterprise Linux) 및 Windows 배포판에 제공된 OpenJDK 라이프 사이클 및 지원 정책에 대해 설명합니다. Sun, Oracle 또는 IBM에서 제공하는 Java 런타임 또는 JDK의 다른 구현은 다루지

access.redhat.com

 

728x90
Posted by 내맘대로내뜻대로
프로그래밍/JAVA2024. 11. 26. 10:47
728x90

제가 올린글 중에 꽤 관심이 많았던 글이 톰캣 버전별 자바 지원 여부 였던것 같아 업데이트 차원에서 글 올립니다.
 
요약 :
톰켓 9.0.X  -  java 1.8 이상 (openJdk 존재함) 
톰켓 10.1.X - java 11 이상 (openJdk 존재함) 
톰캣 11.0.X - java 17 이상 (openJdk 존재함) 
 
나머지 버전은 EOS 고려하여 사용하지 않는것을 권장드립니다.
 

 
 
 

728x90
Posted by 내맘대로내뜻대로
프로그래밍/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

★ ★ ★ 2024년 11월 버전을 추가로 올렸으니 최신글을 참고하세요. 
https://programdev.tistory.com/m/51



아파치 톰켓 버전별로 필요 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
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 내맘대로내뜻대로