본문 바로가기

Java-Study

JDK, Spring Boot 정리

JDK(Java Development Kit)

  • 자바 애플리케이션을 개발하기 위한 환경을 지원하며,
    JRE(자바 실행 환경)와 컴파일러나 jar등 개발에 유용한 도구들을 포함하고 있다.
  • 자바 프로그램을 개발하기 위해서는 JDK를 사용해야 한다.

Open JDK / Oracle JDK

OpenJDK(Open Java Development Kit)

  • 무료로 사용 가능한 오픈 소스 Java 구현체로 개발 목적이나 비상업적 목적으로 사용하는 경우 적합

라이센스 및 지원

  • 오픈 소스 프로젝트로서 오픈 소스 라이센스를 사용
  • 무료로 사용하고 상업적으로 활용 가능하며, Oracle JDK와 달리 유료 지원 없이도 커뮤니티 지원을 받을 수 있다.

업데이트 정책

  • 여러 제공업체 및 커뮤니티 멤버들이 협력하여 개발하므로 업데잍트 및 지원이 계속 된다.
  • Open JDK LTS 버전은 다른 제고업체 및 커뮤니티로부터 장기 지원을 받을 수 있다.

추가 기능

  • 주로 오픈 소스 기반으로 제공되며, 추가 기능이나 패치는 주로 커뮤니티의 기여에 의해 개발됨

커뮤니티 참여

  • 다양한 개발자, 기업 및 커뮤니티의 협력으로 개발되며, 더 많은 커뮤니티가 참여 가능

 

Oracle JDK(Oracle Java Development Kit)

  • 상용 라이센스를 필요로 하는 Java 구현체

라이선스 및 지원

  • Oracle Corporation이 개발하고 제공하는 상용 라이센스를 요구
  • 상업적으로 사용하려면 Oracle로부터 유료 지원 또는 구독 구매해야함
  • 무료로 사용할 수 있는 개발 및 테스트 목적의 라이센스도 제공

업데이트 정책

  • 상용 라이센스 또는 구독 고객에만 LTS(장기 지원) 버전의 업데이트를 제공

추가 기능

  • 일부 추가 기능이나 커뮤니티 버전과는 다른 특정 기능을 제공하지만, 유로 라이센스 고객을 대상으로 제공

커뮤니티 참여

  • Oracle Corporation이 중심이 되어 개발되기 때문에 개발 프로세스에 대한 커뮤니티 참여가 상대적으로 적음

 

Version - 6부터

JDK 6(2006년)

  • Java Compiler API와 함께 컴파일러 API가 추가되어 동적으로 소스 코드를 생성하고 컴파일이 가능해짐
  • Scripting API를 통해 스크립트 언어와의 통합을 지원

JDK 7(2011년)

  • 다중 catch 블록, 문자열 switch문, 자동 자원 관리(try-with-resources)등의 언어 개선 사항이 도입됨
  • Fork/Join 프레임워크를 통해 병렬 프로그래밍을 간소화하고 향상시킴

JDK 8 (2014년, LTS)

  • 람다 표현식과 스트림 API가 도입되어 함수형 프로그래밍을 지원
  • java.time 패키지로 새로운 날짜 및 시간 API 도입됨
  • PermGen 영역이 제거되고 Metaspace 도입됨
  • Oracle사에서 지원하는 유료 버전인 Oracle JDK와 오픈소스 기반의 무료 버전인 Open JDK로 나뉨
  • 23년도 9월에 연장 지원 종료 예정

JDK 9 (2017년)

  • 모듈 시스템 (Project Jigsaw)이 도입되어 코드 모듈화를 지원
  • 리액티브 프로그래밍을 위한 Reactive Streams API가 추가됨

JDK 10 (2018년)

  • 로컬 변수 형식 추론 (var 키워드)이 도입됨

JDK 11 (2018년, LTS)

  • JDK 11부터는 Oracle의 라이선스 정책 변경으로 인해 긴 기간 동안 지원되는 LTS 버전이 등장
  • Oracle JDK와 Open JDK 통합되고 Oracle JDK가 구독형 유료 모델로 전환
  • HTTP 클라이언트 (HTTP/2 지원)와 지원된 로케일과 국제화 기능이 개선됨
  • 26년 9월에 연장 종료 예정

JDK 17 (2021년, LTS)

  • 8. 11 버전을 이을 세번째 LTS 버전
  • Pattern Matching과 Sealed Classes와 같은 언어 개선이 이루어짐
  • Foreign Function & Memory API가 도입되어 네이티브 코드와 상호 작용을 지원
  • 애플 M1 및 이후 프로세서 탑재 제품군에 대한 정식 지원
  • 의사난수 생성기를 통해 예측하기 어려운 난수를 생성하는 API 추가

 

 

Spring Boot

  • 스프링 기반의 어플리케이션을 쉽게 개발하고 실행하기 위한 도구와 프레임워크
  • 개발자들이 설정 작업에 많은 시간을 투자하지 않고도 빠르게 웹 어플리케이션 및 마이크로서비스를 개발할 수 있도록 돕는데 중점을 두고 있음

특징

스타터(Parent POM)

  • Spring Boot는 스타터 의존성을 제공하여 프로젝트에 필요한 의존성을 간편하게 추가할 수 있다

자동 설정(Auto-Configuration)

  • Spring Boot는 애플리케이션에 필요한 설정을 자동으로 추측하고 구성한다.
    개발자가 추가적인 설정을 직접 작성하지 않아도 된다.

통합된 개발 환경

  • Spring Boot는 개발, 테스트, 배포, 모니터링 등의 측면에서 통합된 환경을 제공하며,
    내장형 웹 서버(예: Tomcat, Jetty)를 사용하여 애플리케이션을 간단히 실행할 수 있다.

스프링 생태계와 통합

  • Spring Boot는 스프링 프레임워크와 원활하게 통합되어 스프링 기반 애플리케이션을 쉽게 구축할 수 있도록 한다.

마이크로서비스 지원

  • Spring Boot는 마이크로서비스 아키텍처를 구현하기에 적합하며,
    Spring Cloud 프로젝트와의 통합을 통해 마이크로서비스 패턴을 지원한다.

 

Version

Spring Boot 1.x

  • 초기 버전으로 Spring Framework 4.x와 함께 사용됨
  • 자동 설정, 스프링 부트 스타터, 내장형 웹 서버 지원 등의 기능이 포함

Spring Boot 2.x

  • JDK 8, 11, 16 지원
  • Spring Framework 5.x와 함께 사용됨
  • 리액티브 프로그래밍 지원 (WebFlux)
  • 모듈화된 구성 및 외부 설정 소스 확장
  • 스프링 부트 애플리케이션의 모니터링 및 관리를 위한 Actuator 제공
  • 더 많은 내장형 웹 서버와 스프링 프레임워크 기능 업그레이드
  • 개선된 애플리케이션 시작 시간과 성능 최적화
  • 개선된 자동 설정 및 확장 기능
  • Spring boot 2.6.x는 22년 11월에 상용 종료되어 그 이전 버전들은 다 상용 종료 상태
  • Spring boot 2.7.x는 23년 11월에 상용 종료 예정

Spring Boot 3.x

  • JDK 17이상 지원
  • Spring Framework 6.x와 함께 사용됨
  • Java EE를 Jakarta EE 9로 대체한다.
    • javax.* 에서 jakarta.*로 변경된다.
  • AOT maven, gradle 플러그인 제공
    • Spring AOT 엔진은 빌드 시 Spring 애플리케이션을 분석화하고 최적하는 도구
      -> 어플리케이션 시작 시간을 빠르게 가능