본문 바로가기

Java/Spring

Spring Boot 에 JOOQ 설정하기.


새로운 스프링 프로젝트를 만들때, Spring Initalizr를 사용한다.


Spring Initializr 는 인터넷이 연결된 상태에서만 설정이 가능하고, 기본적으로 https://start.spring.io 를 통해서 Service를 제공 받는다.



Java Build Tool 인 MavenGradle 둘 중에 하나를 선택하여서 프로젝트를 설정할 수 있다.



JOOQ Java Object Oriented Querying 의 준말로, 말그대로 Java 코드로 SQL을 작성할 수 있게 해주는 프로젝트다.



최근 런칭한 한 서비스에서 JPAJOOQ를 주 기술로 사용하였다고 한다.


JOOQJPA와 마찬가지로, DataBase에 상관없이 사용할 수 있다.



스프링 부트에서 JOOQ를 설정하는 것은 아주 간단하다. (스프링 부트에서는.. 모두 간단하다.)


먼저 dependency를 설정한다.

    <dependency>
        <groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-jooq</artifactId>
    </dependency>


그리고, JOOQ를 사용하기전 가장 중요한 과정이 있다.


바로, JOOQ에서 사용할 테이블 객체를 생성하는 일이다.


JOOQ는 아래와 같이 사용하는데, JOOQ에서 Generate 해준 테이블 객체를 사용한다.



1. 일반 Query

INSERT INTO
    POST (ID, WRITER_ID, TITLE)
    VALUES (:id, "jason", "spring boot with jooq");


2. JOOQ 를 사용한 코드 

dsl.insertInto(POST)
    .set(POST.ID, id)
    .set(POST.WRITER_ID, "jason")
    .set(POST.TITLE, "spring boot with jooq")
    .execute();


위의 코드에서 사용한 "POST" 가 바로 JOOQ에서 Generate 해준 클래스다.


이제 pom.xml 에 아래 설정을 추가한다.

<build>
    <plugins>
        <plugin>
            <groupid>org.jooq</groupid>
            <artifactid>jooq-codegen-maven</artifactid>
            <executions>
                <execution>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                </execution>
            </executions>
            <dependencies>
                <dependency>
                    <groupid>com.h2database</groupid>
                    <artifactid>h2</artifactid>
                    <version>${h2.version}</version>
                </dependency>
            </dependencies>
            <configuration>
                <jdbc>
                    <driver>org.h2.Driver</driver>
                    <url>jdbc:h2:file:~/test</url>
                    <user>sa</user>
                    <password></password>
                </jdbc>
                <generator>
                    <name>org.jooq.util.DefaultGenerator</name>
                    <database>
                        <name>org.jooq.util.h2.H2Database</name>
                        <includes>.*</includes>
                        <excludes>
                        <inputschema>PUBLIC</inputschema>
                    </excludes></database>
                    <target>
                        <packagename>com.jason.domain</packagename>
                        <directory>target/generated-sources/java</directory>
                    </target>
                </generator>
            </configuration>
        </plugin>
    </plugins>
</build>


사용할 데이터베이스 정보를 넣어주고, 테이블 객체가 만들어질 packagename 과, generate 될 클래스가 보관될 directory를 설정한다.


클래스를 생성하기전에, 테스트용으로 사용할 테이블을 생성한다.

DROP TABLE IF EXISTS POSTS;

CREATE TABLE POSTS (
  ID int(11) NOT NULL AUTO_INCREMENT,
  TITLE varchar(200) NOT NULL,
  CONTENT LONGTEXT DEFAULT NULL,
  CREATED_ON datetime DEFAULT NULL,
  PRIMARY KEY (ID)
);

DROP TABLE IF EXISTS COMMENTS;

CREATE TABLE COMMENTS (
  ID int(11) NOT NULL AUTO_INCREMENT,
  POST_ID int(11) NOT NULL,
  NAME varchar(200) NOT NULL,
  EMAIL varchar(200) NOT NULL,
  CONTENT LONGTEXT DEFAULT NULL,
  CREATED_ON datetime DEFAULT NULL,
  PRIMARY KEY (ID),
  FOREIGN KEY (POST_ID) REFERENCES POSTS(ID)
);


이제, 프로젝트 Root 에서 아래 명령어를 실행한다.

mvn clean install


명령을 실행하면, 이제 클래스가 생성된다.

이제 생성된 클래스를 사용해서 JOOQ를 마음껏 사용할 수 있다.



스프링 부트를 사용했기때문에, 이외의 설정은 모두 스프링 부트가 대신한다.


그저 개발자는 DSLContextAutowired해서 사용하면 된다.



아래에서 간단한 샘플 프로젝트를 다운 받을 수 있다.


JOOQ의 generate를 사용하기 위해서는, 먼저 테이블이 생성되어 있어야 한다는 점을 알아두자.


https://github.com/keumhwanmoon/spring-boot-jooq.git



더 자세한 내용은 아래 사이트에서 확인 할 수 있다.


http://www.jooq.org/