인프런 커뮤니티 질문&답변
멀티모듈에서 DB 커넥션 풀 분리
작성
·
76
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
}
}퀴즈
JdbcCursorItemReader와 JdbcPagingItemReader가 대용량 데이터를 다루는 방식의 주된 차이는 무엇일까요?
JdbcCursor는 각 아이템마다 새 쿼리를 실행하고, JdbcPaging은 청크 단위로 배치 처리해요.
JdbcCursor는 커서로 연결 유지하며 순차 읽고, JdbcPaging은 페이지별 쿼리로 나눠 읽어요.
JdbcCursor는 인메모리에서 데이터를 처리하고, JdbcPaging은 디스크를 사용해요.
JdbcCursor는 Named Parameter를 쓰고, JdbcPaging은 물음표(?) 플레이스홀더를 써요.
답변 2
1
#!/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 멀티모듈에서 데이터베이스 분리 적용하기
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.




