Kotlin Exposed ORM - 3

구워먹는 삼겹살·2025년 2월 16일
0

1. DateBase 연결

class DatabaseUtil(
    private val dataSource: DataSource) {

    // Spring DataSource를 Exposed에 연결
    fun connectToDatabase() {
        Database.connect(dataSource)  // Spring Boot의 DataSource를 Exposed에 연결
    }

    // 테이블 생성
    fun createTables() {
        connectToDatabase()  // 데이터베이스 연결

        transaction {
            SchemaUtils.create(UserTable)  // UserTable 생성
        }
    }
}
  1. Exposed와 Spring DataSource 연결
    Exposed를 사용하기 위해서는 Spring DataSource를 직접 연결해야 합니다. JPA에서는 Spring Boot가 자동으로 DataSource를 설정하고 연결해주지만, Exposed에서는 데이터베이스 연결을 명시적으로 설정해야 합니다. H2 DB와 같은 경우에도 동일합니다.

  2. 데이터베이스 연결 설정
    Exposed와 Spring Boot의 DataSource를 연결하려면, 다음과 같은 방법을 사용합니다:

  3. application.yml 파일에서 DataSource를 설정합니다.
    DatabaseUtil 클래스에서 Database.connect(dataSource) 메서드를 호출하여 Spring Boot의 DataSource를 Exposed에 연결합니다.
    테이블 생성
    Exposed에서는 SchemaUtils.create()를 사용하여 테이블을 생성할 수 있습니다. 이 과정도 명시적으로 transaction 블록 안에서 처리해야 합니다.

  • JPA에서는 데이터베이스 연결을 Spring Boot가 자동으로 처리해주지만, Exposed에서는 명시적으로 DataSource를 연결해줘야 합니다. H2와 같은 DB를 사용할 때도 이 점을 유의하여 연결 작업을 처리해야 합니다.

2. Exposed 테이블 자동 생성

@Component
class DatabaseInitializer(
    @Autowired private val dataSource: DataSource
) {

    private val databaseUtil: DatabaseUtil = DatabaseUtil(dataSource)  // Spring DataSource를 이용한 DatabaseUtil 초기화

    @PostConstruct
    fun init() {
        // 애플리케이션 시작 시 테이블을 생성
        databaseUtil.createTables()  // 클래스 메서드 호출
    }
}
  1. Exposed에서 애플리케이션 시작 시 자동으로 테이블을 생성하려면, Spring Boot의 @PostConstruct 애너테이션을 활용하여 초기화 작업을 처리할 수 있습니다. 이를 통해 애플리케이션이 시작될 때 필요한 데이터베이스 테이블을 자동으로 생성하는 방식으로 설정할 수 있습니다.

  2. DatabaseInitializer 클래스
    DatabaseInitializer 클래스는 Spring의 @Component 애너테이션을 사용하여 애플리케이션 시작 시 자동으로 초기화 작업을 수행하도록 설정됩니다. 이 클래스는 @PostConstruct 애너테이션을 이용하여 애플리케이션이 시작될 때 DatabaseUtil.createTables() 메서드를 호출해 테이블을 생성합니다.

  • @Component: 이 애너테이션을 통해 DatabaseInitializer 클래스는 Spring의 빈으로 등록됩니다. Spring 컨텍스트에서 자동으로 관리되며, 애플리케이션이 시작될 때 빈이 자동으로 초기화됩니다.

  • @Autowired: Spring에서 관리하는 DataSource 객체를 주입받습니다. 이 DataSource는 애플리케이션의 데이터베이스 연결에 사용됩니다.

  • @PostConstruct: 애플리케이션이 시작될 때 자동으로 호출되는 메서드로, 여기서는 createTables() 메서드를 호출하여 테이블을 생성하는 작업을 수행합니다.

  • 요약
    Spring Boot 애플리케이션 시작 시 Exposed 테이블을 자동으로 생성하려면, @PostConstruct 애너테이션을 활용하여 초기화 작업을 처리할 수 있습니다. DatabaseInitializer 클래스에서 DatabaseUtil을 통해 Spring의 DataSource를 연결하고, 애플리케이션이 시작될 때 필요한 테이블을 생성할 수 있습니다.

0개의 댓글