본문으로 건너뛰기

9.1 데이터소스 서브시스템에 대해

  • 데이터소스란

    데이터소스란 데이터베이스에 연결하는 방법을 캡슐화한 것으로 RDBMS와 상관없이 공통의 인터페이스를 사용해 연결할 수 있도록 하는 방식이다. 데이터베이스 드라이버나 URL에 대한 정보를 애플리케이션에서 분리하여 서버 측에서 별도로 관리하기 때문에, 애플리케이션은 데이터소스를 네이밍 서비스에서 룩업하여 가져다가 데이터베이스 연결을 사용할 수 있다. 이 네이밍 서비스는 Java Naming and Directory Interface (이하, JNDI)를 사용하고 있기 때문에, 애플리케이션에서 룩업할 때 데이터소스의 JNDI 이름만 있으면 된다.

데이터베이스와의 연결 관리는 클라이언트 애플리케이션이 아닌 JBoss EAP 6에서 하게 된다. 비교적 비용이 많이 소요되는 데이터베이스와의 연결도 풀 형태로 관리하여 데이터베이스 연결에 대한 부하를 최소화한다.

  • 데이터소스 관련 리소스

    JBoss EAP 6의 데이터소스 서브시스템은 Java 표준 데이터소스와 JDBC 드라이버 리소스를 하나로 통합하여 관리한다.

데이터소스 리소스에서는 데이터소스의 동작에 대한 여러 가지 설정을 할 수 있다. 또, 이 리소스를 여러 개 작성하여 데이터소스를 여러 개 정의할 수 있다.

JDBC 드라이버 리소스에서는 모듈 형태로 참조하기 위한 설정이 필요하다. 여기서 말하는 모듈은 JDBC 드라이버의 jar 파일을 EAP 6용 모듈로 만드는 것이다. JBoss EAP 6에서는 클래스 패스가 없어 jar 파일을 직접 참조하지 않기 때문에, 데이터소스에서 사용하는 JDBC 드라이버도 모듈화해야 한다.

JBoss EAP 6에서 데이터소스를 만들려면, JDBC 드라이버를 모듈로 설치하고 데이터소스를 정의해야 한다.

데이터소스는 일반 데이터소스(Non-XA)와 XA 데이터소스 두 가지 형태가 있다.

XA 데이터소스는 하나의 트랜잭션이 여러 데이터베이스에 걸쳐 사용되는 경우에 사용된다. 그래서 XA 데이터소스를 사용하게 되면 오버 헤드가 늘어나게 된다.

Non-XA데이터소스는 한 개의 데이터베이스에 대해서만 트랜잭션을 사용하는 애플리케이션에서 사용한다.

관리 콘솔 또는 CLI에서 데이터소스를 만들 때, 애플리케이션의 요구사항에 따라 데이터소스를 XA데이터소스로 만들지, Non-XA 데이터소스로 만들지 결정하게 된다.

💡 TIP: JDBC란?

JDBC API는 Java 애플리케이션이 데이터베이스에 접근하는 방법을 정의하는 표준이다. JDBC 드라이버를 참조하는 데이터소스는 애플리케이션 서버에서 설정한다. 그런 다음 애플리케이션에서는 애플리케이션 서버에서 설정한 데이터소스를 룩업하여, 표준 JDBC API를 사용하여 코드를 작성하면, 드라이버가 그 코드를 해당 데이터베이스에 사용할 수 있도록 변환하여 실행한다. 따라서 애플리케이션에서 JDBC 드라이버를 참조하는 코드를 한 번만 작성하면 어떤 데이터베이스에도 사용할 수 있다.

JDBC 4.0 표준은 다음 사이트에 정의되어 있다.http://jcp.org/en/jsr/detail?id=221

💡 TIP: JPA와 데이터소스

|최근에는 Java EE의 애플리케이션에서 데이터베이스에 접근하는 경우 JPA를 사용하는 경우가 있다. JPA는 O/R맵핑 아키텍처를 사용하는 Java 프레임워크이며 Java EE6 표준이다. JPA를 사용하면, Java의 오브젝트 구조와 데이터베이스의 테이블 구조가 자동으로 변환되기 때문에 애플리케이션의 코딩 및 데이터베이스 변경이 쉬워진다. JPA에서 데이터베이스에 접근할 때에도 데이터소스를 사용한다.