본문 바로가기

자바 기초

자바 기초 개념 - Oracle DB에서 Java 사용

※ 본 글은 Oracle의 java-developers-guide를 참고하였습니다.

 

자바에 대한 개인적 공부와 정리를 위해 Oracle의 공식적인 자바 개발자를 위한 가이드를 보며

 

주기적으로 글을 작성하도록 해본다.

 


 

1.2 자바 클래스 계층 구조

Java 애플리케이션을 DB 내에서 작성하고 로드할 수 있는 이유는 Java가 많은 보안 기능을 가진 안전한 언어이기 때문이다. Java는 코드가 있는 운영 체제를 조작하지 못하도록 설계되었다. 반면 C와 같은 일부 언어는 DB 내에 보안 문제를 유발할 수 있다.

 

Java는 개발자에게 많은 장점을 제공하지만, 확장 가능한 방식으로 Java 서버 애플리케이션을 지원하는 JVM을 구현하는 것을 도전 과제이다. 이 섹션에서는 아래와 같은 과제를 다룬다.

 

  • Java와 RDBMS
  • 멀티스레드
  • 메모리 공간 관리
  • 메모리 크리
  • Oracle JVM
  • 동적 클래스 로딩

 

1.2.1 Java와 RDBMS

 

Oracle DB는 복잡한 쿼리와 동일 데이터의 다양한 뷰를 지원하는 동적 데이터 처리 엔진을 Java 애플리케이션에 제공한다. 모든 클라이언트 요청은 즉각적인 처리를 위해 데이터 쿼리로 조립되고, 쿼리 결과는 동적으로 생성된다.

 

Java와 Oracle DB의 조합은 컴포넌트 기반의 네트워크 중심 애플리케이션을 쉽게 업데이트할 수 있게 돕는다. 또한, 애플리케이션과 데이터 저장소를 데스크탑에서 지능형 네트워크와 네트워크 중심 서버로 이동시킬 수 있다. 중요한 것은 이러한 애플리케이션과 데이터 저장소에 모든 클라이언트 장치에서 접근할 수 있다는 점이다.

 

1-5는 클라이언트가 PL/SQL 저장 프로시저를 호출하는 것과 같은 방식으로 Java 저장 프로시저를 호출하는 전통적인 2계층 클라이언트/서버 구성을 보여준다. 이는 또한 Oracle Net Services Connection Manager가 많은 네트워크 연결을 하나의 DB 연결로 결합하는 방법을 보여준다. 이를 통해 Oracle DB는 많은 동시 사용자를 지원한다.

 

 

 

 

1.2.1 멀티스레딩

 

멀티스레딩은 Java 언어의 주요 확장성 기능 중 하나이다. Java 언어와 클래스 라이브러리는 Java에서 멀티스레드 애플리케이션을 다른 많은 언어보다 쉽게 작성할 수 있도록 하지만, 여전히 어떤 언어로도 신뢰할 수 있고 확장 가능한 멀티스레드 코드를 작성하는 것은 어렵다.

 

Oracle DB 서버는 수천 명의 사용자 작업을 효율적으로 스케줄링 한다. Oracle JVM은 Oracle DB의 세션 아키텍처를 활용하여 수백에서 수천 명의 사용자를 동시에 자바 애플리케이션을 실행할 수 있게 한다. Oracle DB는 JLS(자바 언어 사양)와 JCK(자바 호환성 키트)가 요구하는 자바 언어 수준의 스레드를 지원하지만, DB 범위 내에서 스레드를 사용한다고 해서 확장성이 증가하지는 않는다. DB의 내장 확장성을 사용하면 멀티스레드 자바 서버를 작성할 필요가 없다.

 

단일 스레드 자바 애플리케이션을 작성하여 사용자를 스케줄링하는 데 Oracle DB의 기능을 사용해야 한다. DB는 각 애플리케이션 간의 프로세스를 스케줄링할 수 있으므로 스레드를 관리하지 않고도 확장성을 달성할 수 있다. 여전히 멀티스레드 자바 애플리케이션을 작성할 수 있지만, 여러 자바 스레드를 사용해도 서버의 성능이 향상되지는 않는다.

 

멀티스레딩이 야기하는 한 가지 복잡한 문제는 스레드와 자동 저장소 관리 또는 가비지 컬렉션의 상호 작용이다. 일반 JVM에서 실행되는 가비지 컬렉터는 어떤 자바 언어 스레드가 실행 중인지 또는 기본 운영 체제가 그것들을 어떻게 스케줄링 하는지 알지 못한다. 비 Oracle DB 모델과 Oracle JVM 모델읠 차이점은 다음과 같다.

 

  • 비 Oracle DB 모델

단일 사용자는 단일 자바 스레드와 매핑되고, 단일 가비지 컬렉터가 모든 사용자의 모든 가비지를 관리한다. 다양한 수명과 크기의 객체 할당 및 수집을 처리하는 데 일반적으로 다른 기술이 사용된다. 많은 스레드를 사용하는 애플리케이션에서는 최선의 경우에도 운영 체제의 네이티브 스레드 지원에 의존하게 되며, 이는 신뢰할 수 없고 확장성이 제한될 수 있다. 이러한 구현에서 높은 수준의 확장성은 설득력 있게 입증되지 않는다.

 

  • Oracle JVM 모델

수천 명의 사용자가 서버에 연결하여 동일한 자바 코드를 실행하더라도, 각 사용자는 자신이 자신의 JVM에서 자신의 자바 코드를 실행하는 것처럼 경험한다. Oracle JVM의 책임은 운영 체제 프로세스와 스레드를 사용하고 Oracle 데이터베이스의 확장 가능한 접근 방식을 사용하는 것이다. 이 접근 방식의 결과로, Oracle JVM의 가비지 컬렉터는 한 번에 한 사용자 이상의 가비지를 수집하지 않기 때문에 더 신뢰할 수 있고 효율적이다.