강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

tjrwn0716님의 프로필 이미지
tjrwn0716

작성한 질문수

죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.

3장. 작전1: 관계형 데이터베이스 읽고 쓰기 (테이블의 심장에 처형장을 세우다 ☠️)

멀티모듈에서 DB 커넥션 풀 분리

작성

·

20

1

DataSource에 대한 질문

 

배치를 적용중인데, 멀티모듈에서 배치용 Application을 따로두고, 배치용 yaml에서 datasource를 두었고, api쪽도 yaml에서 datasource를 보고 있다.

이때 , 아래와 같이 Config에서 Bean을 통해 Datasource을 생성, JobRepository에 전달해주지 "않아도" 커넥션이 분리가 되는가?

API 쪽 디비와, 배치 디비의 커넥션풀을 따로 쓰고싶은데 아래와 같이 별도 세팅 없이 yaml만으로 분리는 안되는지 궁금하다...

@Configuration
class JpaConfig {
    @Bean
    @ConfigurationProperties("spring.datasource")
    fun batchDataSource(): DataSource {
        return HikariDataSource()
    }

    @Bean
    fun jobRepository(
        batchDataSource: DataSource,
        transactionManager: PlatformTransactionManager,
    ): JobRepository {
        return JobRepositoryFactoryBean().apply {
            setDataSource(batchDataSource)
            setDatabaseType(DatabaseType.POSTGRES.name)
            setTransactionManager(transactionManager)
            afterPropertiesSet()
        }object
    }
}

답변 2

1

KILL-9님의 프로필 이미지
KILL-9
지식공유자

#!/bin/bash
# KILL-9 Response System v1.0

echo ">> 미안하다 늦잠 이슈로 답변을 이제한다. 열심히 달리는구나. 좋다."
echo ""
echo "[TARGET LOCKED] 네가 찾는 답 = 5장 작전2"
echo ""
echo "=== 질문 내용 분석 ==="
echo "API DB와 Batch DB의 커넥션 풀 분리?"
echo "YAML만으로 해결 가능한가?"
echo ""
echo ">>> 답: 불가능하다. 설정 코드가 필요하다."
echo ""
echo "=== 처형 매뉴얼 위치 ==="
echo "5장 작전2에서 완벽히 해부해놨다."
echo ""
echo "가급적 5장 작전1부터 차례로 살펴보길 권장하지만,"
echo "당장 알고 싶다면 얼른 달려가서"
echo ""
echo "  [Command + F] → 'TransactionManager 분리하기'"
echo ""
echo "검색해라."
echo ""
echo ">>> 5장에서 만나자."
echo ""
kill -9 $$

0

안녕하세요, 인프런 AI 인턴입니다.

tjrwn0716님께서 배치와 API 모듈에서 서로 다른 데이터베이스 커넥션 풀을 사용하는 방법에 대해 궁금하신 것 같습니다.

문제 설명 및 해결 방법

멀티모듈 프로젝트에서 배치 모듈과 API 모듈이 각각 별도의 데이터 소스를 가지도록 설정할 수 있습니다. 데이터 소스를 분리하여 사용하려면 Spring Boot의 프로파일(profile)이나 별도의 환경 설정 파일(yaml)을 활용하는 방법이 있습니다.

1. Yaml 설정

지금 설정하신 것처럼 application.yml 파일에 각 모듈의 데이터 소스를 별도로 설정할 수 있습니다. 예를 들어, 아래처럼 별도의 프로파일을 사용해 서로 다른 데이터 소스를 지정할 수 있습니다:

# 배치 모듈에서 사용할 데이터 소스
spring:
  datasource:
    url: jdbc:postgresql://localhost:5432/batchDb
    username: batch_user
    password: batch_password
    hikari:
      maximum-pool-size: 10

# API 모듈에서 사용할 데이터 소스
spring:
  profiles: api
  datasource:
    url: jdbc:postgresql://localhost:5432/apiDb
    username: api_user
    password: api_password
    hikari:
      maximum-pool-size: 10

--spring.profiles.active=batch와 같은 방법으로 프로파일을 활성화하면 해당 설정이 적용됩니다.

2. 데이터 소스 빈을 통한 명시적 설정

또한, 명시적으로 각 모듈에서 사용할 DataSource를 설정할 수 있으며, 이는 @Bean을 통해 빈으로 등록해서 사용할 수 있습니다. 위 코드는 이미 별도의 DataSource 빈을 생성하여 JobRepository에 설정하고, 배치 모듈에서 빈으로 등록된 데이터 소스를 사용하는 사례입니다.

@Configuration
public class ApiConfig {
    @Bean
    @ConfigurationProperties("api.datasource")
    public DataSource apiDataSource() {
        return new HikariDataSource();
    }
}

3. 커넥션 분리 확인

설정에서 DataSource가 여러 개로 설정되어 있고, 필요한 모듈에서 각기 다른 DataSource 빈을 참조하게 되는 경우, 설정에 따라 데이터 소스의 커넥션 풀이 분리되므로 별도의 Config 설정 없이도 이 두 데이터 소스는 독립적으로 관리됩니다.


이와 관련된 유사한 질문에 대한 답변 링크:
- Spring Boot 멀티모듈에서 데이터베이스 분리 적용하기

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

tjrwn0716님의 프로필 이미지
tjrwn0716

작성한 질문수

질문하기