Chapter 1. 목적 및 개요



Goldilocks JDBC Driver를 이용해 maven 기반의 Spring Legacy framework 을 사용한  환경에서

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

JAVA(JDK)가 설치되어 있어야 한다.

 

[테스트 환경 - DB]

OS : CentOS Linux release 7.9.2009

GOLDILOCKS : 22c.1.4

 

[테스트 환경 - Spring]

OS : Ubuntu 16.04.7 LTS

GOLDILOCKS Client : 22c.1.4

Spring : 5.3.15

Maven : 3.3.9

JAVA : 1.8.0_171






Chapter 2. Maven 설치

 

다음은 apt-get 으로 maven 을 설치하는 예시이다. 

$ sudo apt-get install maven

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

$ mvn -v

Apache Maven 3.3.9
Maven home: /usr/share/maven
Java version: 1.8.0_171, vendor: Oracle Corporation
Java home: /opt/jdk1.8.0_171/jre
Default locale: ko_KR, platform encoding: UTF-8
OS name: "linux", version: "4.15.0-142-generic", arch: "amd64", family: "unix"







Chapter 3. Spring 예제 생성

 

Spring 예제 프로젝트는 maven 명령어(mvn) 로 생성할 수 있다.

다음은 예제 프로젝트 생성 예시이다.

$ mvn archetype:generate -DgroupId=com.example -DartifactId=goldilocks-spring -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

 

[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:1.0
[INFO] ----------------------------------------------------------------------------

..

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9.327 s
[INFO] Finished at: 2024-10-28T17:42:05+09:00
[INFO] Final Memory: 21M/387M
[INFO] ------------------------------------------------------------------------

 

  • archetype 플러그인으로 초기 템플릿 생성
  • com/example 패키지 구조
  • 프로젝트 아티팩트 ID 는 goldilocks-spring

 

다음과 같은 구조로 프로젝트가 생성된다.

goldilocks-spring/
├── pom.xml
└── src
    ├── main
    │   └── java
    │       └── com
    │           └── example
    │               └── App.java
    └── test
        └── java
            └── com
                └── example
                    └── AppTest.java




Chapter 4. 연동 환경 설정 및 sample 예제

GOLDILOCKS 는 JVM 버전에 따라 JDBC Driver 파일을 제공한다.

($GOLDILOCKS_HOME/lib/goldilocks*.jar)

 

프로젝트 디렉토리에서 lib 디렉토리를 생성해 이 goldilocks8.jar 파일을 복사한다.

$ pwd

/home/spring/goldilocks-spring

 

$ mkdir lib

$ cp goldilocks8.jar /home/spring/goldilocks-spring/lib/

 

$ ls -al /home/spring/goldilocks-spring/lib

goldilocks8.jar



pom.xml 에 디펜던시 및 예제에 필요한 plugin 들을 등록한다.

다음은 pom.xml 전체 파일의 예제이다.

 

  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

  <modelVersion>4.0.0</modelVersion>

  <groupId>com.example</groupId>

  <artifactId>goldilocks-spring</artifactId>

  <packaging>jar</packaging>

  <version>1.0-SNAPSHOT</version>

  <name>goldilocks-spring</name>

  http://maven.apache.org







  <dependencies>

    <!-- JUnit -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>

 

    <!-- Spring Core -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>5.3.15</version>
    </dependency>

 

    <!-- Spring Context -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.3.15</version>
    </dependency>

 

    <!-- Spring Beans -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>5.3.15</version>
    </dependency>

 

    <!-- Spring JDBC -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>5.3.15</version>
    </dependency>

    <!-- Goldilocks JDBC Driver -->
    <dependency>
        <groupId>GOLDILOCKS</groupId>
        <artifactId>goldilocks_test</artifactId>
        <version>22.1.4</version>
        <scope>system</scope>
        <systemPath>/home/spring/goldilocks-spring/lib/goldilocks8.jar</systemPath>
    </dependency>

  </dependencies>

 

  <build>
    <plugins>

        <plugin>  <!-- Maven Surefire Plugin -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>3.0.0-M5</version>
        </plugin>
        <plugin>  <!-- Maven Compiler Plugin: Java 버전 설정 -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
        <plugin>  <!-- Maven Jar Plugin: Main-Class 지정 -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.1.0</version>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>com.example.Main</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
        <plugin>  <!-- Maven Assembly Plugin: 모든 의존성을 포함한 실행 가능한 JAR 생성 -->
            <artifactId>maven-assembly-plugin</artifactId>
            <version>3.3.0</version>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>com.example.Main</mainClass>
                    </manifest>
                </archive>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

    </plugins>
  </build>
</project>

 

 

 

DB 접속 정보 및 필요한 bean ( jdbcTemplate) 를 설정한다.

(src/main/resources/applicationContext.xml)


      xmlns:context="http://www.springframework.org/schema/context"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.springframework.org/schema/beans
          http://www.springframework.org/schema/beans/spring-beans.xsd
          http://www.springframework.org/schema/context
          http://www.springframework.org/schema/context/spring-context.xsd">

    <!-- Component Scan 설정 -->
    <context:component-scan base-package="com.example" />

    <!-- DataSource 설정 -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="sunje.goldilocks.jdbc.GoldilocksDriver"/>
        <property name="url" value="jdbc:goldilocks://192.168.0.120:9311/test"/>
        <property name="username" value="test"/>
        <property name="password" value="test"/>
    </bean>

    <!-- JdbcTemplate 설정 -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource" />
    </bean>

</beans>






sample 예제 코드

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

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

 

tree 는 다음과 같다.

goldilocks-spring
├── lib
│   └── goldilocks8.jar
├── pom.xml
└── src
    ├── main
    │   ├── java
    │   │   └── com
    │   │       └── example
    │   │           ├── Main.java
    │   │           ├── controller
    │   │           │   └── TestController.java
    │   │           ├── dao
    │   │           │   └── TestDao.java
    │   │           └── service
    │   │               └── TestService.java
    │   └── resources
    │       └── applicationContext.xml
    └── test
        └── java
            └── com
                └── example
                    └── AppTest.java






src/main/java/com/example/Main.java

package com.example;

import com.example.controller.TestController;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        TestController testController = context.getBean(TestController.class);

        /*
        * 다음과 같은 테이블이 존재한다고 가정
        * CREATE TABLE T_TEST
        * (
        *   ID INTEGER PRIMARY KEY,
        *   NAME VARCHAR(20)
        * )
        * ;
        */

        /* C/R/U/D 동작 수행 */
        testController.insertData(1004, "anbo");
        testController.selectData();
        testController.updateData(1004, "SUNJE SOFT");
        testController.selectData();
        testController.deleteData(1004);
    }
}







src/main/java/com/example/controller/TestController.java

package com.example.controller;

import com.example.service.TestService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

@Controller
public class TestController {

    @Autowired
    private TestService testService;

    public void insertData(int id, String name) {
        testService.insertData(id, name);
        System.out.println("[INSERT]  row inserted: (" + id + ", " + name + ")");
    }

    public void selectData() {
        System.out.println("[SELECT]  Name: " + testService.selectData());
    }

    public void updateData(int id, String newName) {
        testService.updateData(id, newName);
        System.out.println("[UPDATE]  Name updated to: " + newName);
    }

    public void deleteData(int id) {
        testService.deleteData(id);
        System.out.println("[DELETE]  row with ID " + id + " is deleted.");
    }
}






src/main/java/com/example/dao/TestDao.java

package com.example.dao;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import java.util.List;

@Repository
public class TestDao {

    private final JdbcTemplate jdbcTemplate;

    public TestDao(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    public void insertData(int id, String name) {
        String sql = "INSERT INTO T_TEST (id, name) VALUES (?, ?)";
        jdbcTemplate.update(sql, id, name);
    }

    public List<String> selectData() {
        String sql = "SELECT name FROM T_TEST";
        return jdbcTemplate.queryForList(sql, String.class);
    }

    public void updateData(int id, String newName) {
        String sql = "UPDATE T_TEST SET name = ? WHERE id = ?";
        jdbcTemplate.update(sql, newName, id);
    }

    public void deleteData(int id) {
        String sql = "DELETE FROM T_TEST WHERE id = ?";
        jdbcTemplate.update(sql, id);
    }
}




 

src/main/java/com/example/service/TestService.java

package com.example.service;

import com.example.dao.TestDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class TestService {

    @Autowired
    private TestDao testDao;

    public void insertData(int id, String name) {
        testDao.insertData(id, name);
    }

    public List<String> selectData() {
        return testDao.selectData();
    }

    public void updateData(int id, String newName) {
        testDao.updateData(id, newName);
    }

    public void deleteData(int id) {
        testDao.deleteData(id);
    }
}





Chapter 5. 프로젝트 실행

컴파일 명령어는 다음과 같다.

$ mvn package

 

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.477 s
[INFO] Finished at: 2024-11-08T21:20:17+09:00
[INFO] Final Memory: 37M/403M
[INFO] ------------------------------------------------------------------------

 

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

$ java -cp target/goldilocks-spring-1.0-SNAPSHOT-jar-with-dependencies.jar:/home/spring/goldilocks-spring/lib/goldilocks8.jar com.example.Main

 

[INSERT]  row inserted: (1004, anbo)
[SELECT]  Name: [anbo]
[UPDATE]  Name updated to: SUNJE SOFT
[SELECT]  Name: [SUNJE SOFT]
[DELETE]  row with ID 1004 is deleted.

 

블로그 이미지

차트

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

,