Goldilocks JDBC Driver를 이용해 Spring boot 와 maven, Hibernate 를 사용한 구축 환경에서

GOLDILOCKS DB와 연동하는 과정을 설명한다.

 

웹 서버용 Tomcat, JAVA(JDK)가 설치되어 있어야 한다.


Chapter 1. 환경

 

[테스트 환경 - DB]

OS : Ubuntu 16.04.7 LTS
GOLDILOCKS : 22c.1.2

 

[테스트 환경 - Spring Boot]

OS : CentOS Linux release 7.8.2003
GOLDILOCKS Client : 22c.1.2
Spring Boot : 2.7.12
Maven : 3.9.2
Hibernate : 5.6.15 Final
JAVA : 11.0.19
Tomcat : 9.0.75



Chapter 2. Maven 설치

 

다음은 wget으로 maven 을 설치 및 심볼릭 링크를 생성하는 예시이다. 

$ wget http://apache.mirror.cdnetworks.com/maven/maven-3/3.9.2/binaries/apache-maven-3.9.2-bin.tar.gz

$ tar -xzf apache-maven-3.9.2-bin.tar.gz 

$ sudo cp -R apache-maven-3.9.2 /usr/local/

$ sudo ln -s /usr/local/apache-maven-3.9.2 /usr/local/maven

 

관련 환경변수를 설정한다.

#maven

export M2_HOME=/usr/local/maven

export PATH=$PATH:$M2_HOME/bin

 

다음과 같은 명령어로 maven 버전 확인을 할 수 있다.

$ mvn -v

Apache Maven 3.9.2 (c9616018c7a021c1c39be70fb2843d6f5f9b8a1c)

Maven home: /usr/local/maven

Java version: 17.0.7, vendor: Oracle Corporation, runtime: /home/spring/package/jdk-17.0.7

Default locale: ko_KR, platform encoding: UTF-8

OS name: "linux", version: "3.10.0-1127.18.2.el7.x86_64", arch: "amd64", family: "unix"

 

.


Chapter 3. Spring boot 예제 생성

 

Spring boot 예제는 https://start.spring.io/ 에서 다운로드 받을 수 있다. 

다운받은 demo.zip 파일을 리눅스 서버로 복사한다.

 

다음은 예제 생성 예시이다.

Project : Maven 체크

Language : Java 체크

Spring Boot : 2.7.12 체크

Packaging : Jar 체크

Java : 17 체크

우측 Dependencies :

    Spring Web - WEB

    Spring Boot DevTools - DEVELOPER TOOLS

    Spring Data JPA - SQL



Chapter 4. Hibernate jar 설치 및 설정

GOLDILOCKS 는 Hibernate ORM 버전에 따라 GoldilocksDialect.java 파일을 제공한다.

($GOLDILOCKS_HOME/app_dev/Hibernate)

 

Hibernate jar 파일 설치하기

Hibernate jar 파일은

https://repo1.maven.org/maven2/org/hibernate/hibernate-core/ 에서 다운로드 받을 수 있으며

GoldilocksDialect.java 컴파일을 위해 

https://repo1.maven.org/maven2/javax/persistence/javax.persistence-api/2.2/ 에서

컴파일용 persistence 패키지를 다운받을 수 있다.

 

본 문서는 hibernate-core-5.6.15.Final.jar, javax.persistence-api-2.2.jar 기준으로 작성한다.

 

 

Hibernate jar 파일에 이식하기

다운로드 받은 Hibernate jar 파일에 Goldilocks 관련 클래스들을 이식하는 방법은 다음과 같다.

 

1. GoldilocksDialect.java 파일을 javac로 컴파일하여 class 파일을 생성한다.

$ javac -cp hibernate-core-5.6.15.Final.jar:javax.persistence-api-2.2.jar  GoldilocksDialect.java

 

다음과 같은 클래스들이 생성된다.
  ├──GoldilocksDialect$1.class

  ├──GoldilocksDialect.class

  └──GoldilocksIdentityColumnSupport.class

 

2. Hibernate jar 파일의 압축을 해제한다.

$ jar -xvf hibernate-core-5.6.15.Final.jar

 

3. 생성된 org/hibernate/dialect 디렉토리로 Goldilocks 관련 클래스들을 복사한다.

$ cp Goldilocks*.class org/hibernate/dialect/

 

4. Hibernate jar 파일로 다시 압축한다. 예시는 구분을 위해 goldilocks 라는 이름을 부여한다.

$ jar -cvf hibernate-goldilocks-5.6.15.Final.jar META-INF/MANIFEST.MF .



Chapter 5. 연동 환경 설정

chapter 3 에서 다운받은 demo 파일을 압축 해제한다.

$ unzip demo.zip 

 

demo 디렉토리에서 lib 디렉토리를 생성해 jar 파일을 복사한다.

goldilocks8.jar 파일은 GOLDILOCKS 패키지의 $GOLDILOCKS_HOME/lib 디렉토리에 동봉되어 있으며

hibernate jar 파일은 chapter 4에서 생성한 jar 파일이다.

$ pwd

/home/spring/sample/demo

 

$ mkdir lib

$ cp goldilocks8.jar /home/spring/sample/demo/lib/

$ cp hibernate-goldilocks-5.6.15.Final.jar /home/spring/sample/demo/lib/

 

$ ls -al /home/spring/sample/demo/lib

goldilocks8.jar

hibernate-goldilocks-5.6.15.Final.jar

 

pom.xml 에 두 jar 파일 디펜던시를 등록한다.

<dependency>

   <groupId>GOLDILOCKS</groupId>

   <artifactId>GOLDILOCKS_test</artifactId>

   <version> 22.1.2</version>

   <scope>system</scope>

   <systemPath>/home/spring/sample/demo/lib/goldilocks8.jar</systemPath>

</dependency>

<dependency>

   <groupId>hibernate</groupId>

   <artifactId>hibernate-goldilocks</artifactId>

   <version>5.6.15</version>

   <scope>system</scope>

   <systemPath>/home/spring/sample/demo/lib/hibernate-goldilocks-5.6.15.Final.jar</systemPath>

</dependency>

 

DB 접속 정보 및 tomcat 포트를 설정한다.

(src/main/resources/application.properties)

 

아래는 192.168.0.113 서버의 GOLDILOCKS DB로 24681 포트를 이용해 접속하는 예시이다.

spring.datasource.driver-class-name=sunje.goldilocks.jdbc.GoldilocksDriver

spring.datasource.url=jdbc:goldilocks://192.168.0.113:24681/test

spring.datasource.username=test

spring.datasource.password=test

 

spring.jpa.database-platform=org.hibernate.dialect.GoldilocksDialect

spring.jpa.properties.hibernate.show_sql=true

spring.jpa.properties.hibernate.format_sql=true

 

spring.jpa.hibernate.ddl-auto=create

 

server.port=9300



sample 예제

간단한 C/R/U/D 용 예제 java 파일은 다음과 같다.

모두 src/main/java/com/example/demo/ 에 위치시킨다.

 

java 파일은 다음과 같다.

  ├──BoardRepository.java

  ├──Board.java

  └──TestController.java



BoardRepository.java

package com.example.demo;

 

import org.springframework.data.jpa.repository.JpaRepository;

 

public interface BoardRepository extends JpaRepository<Board, Long>{

}




Board.java

package com.example.demo;

 

import javax.persistence.Entity;

import javax.persistence.Id;

 

@Entity

public class Board {

    @Id

    private int bno;

    private String subject;

 

    public Board() {

        super();

    }

 

    public Board(int bno, String subject) {

        super();

        this.bno = bno;

        this.subject = subject;

    }

 

    public int getBno() {

        return bno;

    }

    public void setBno(int bno) {

        this.bno = bno;

    }

    public String getSubject() {

        return subject;

    }

    public void setSubject(String subject) {

        this.subject = subject;

    }

    @Override

    public String toString() {

        return "Board [bno=" + bno + ", subject=" + subject + "]";

    }

}




TestController.java

package com.example.demo;

 

import java.util.List;

 

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

 

 

@RestController

public class TestController {

    

    @Autowired

    private BoardRepository boardRepository;

    

@RequestMapping("/select")

    public List<Board> SelectAll(){

        return boardRepository.findAll();

    }

    @RequestMapping("/insert")

    public Board Insert(){

        Board valueToInsert =new Board(10,"Nam");

        return boardRepository.save(valueToInsert);

    }

    @RequestMapping("/delete")

    public String DeleteAll() {

        boardRepository.deleteAll();

        return "Delete succeeded.";

    }

    @RequestMapping("/count")

    public Long Count() {

        return boardRepository.count();

    }

}

 


Chapter 6. 프로젝트 실행

실행 명령어는 다음과 같다.

$ mvn spring-boot:run

 

..

[INFO] Attaching agents: []

23:21:53.885 [Thread-0] DEBUG org.springframework.boot.devtools.restart.classloader.RestartClassLoader - Created RestartClassLoader org.springframework.boot.devtools.restart.classloader.RestartClassLoader@56346c86

 

  .   ____          _            __ _ _

 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \

( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \

 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )

  '  |____| .__|_| |_|_| |_\__, | / / / /

 =========|_|==============|___/=/_/_/_/

 :: Spring Boot ::               (v2.7.12)

 

..

 

Hibernate: 

    

    drop table if exists board cascade constraints

Hibernate: 

    

    create table board (

       bno number(10,0) not null,

        subject varchar(255) null ,

        primary key (bno)

    )





설정한 tomcat url 에서 다음과 같은 대시보드를 확인할 수 있다.

 

url 에 매핑한 문자를 입력하여 트랜잭션의 수행을 확인할 수 있다.

 

 

 

 

 

 

 

 

 

 

 

 


 

블로그 이미지

차트

소소한 일상 C코드 DB 항상 행복하게^-^★

,