반응형
1. 🔍 DB 3개를 사용하는 프로젝트에서 발생한 문제와 해결 방법
이번 프로젝트에서는 3개의 데이터베이스(DB)를 사용하면서 몇 가지 문제가 발생했습니다. 그중 하나는 내부 DB와 외부 DB에서 서로 다른 설정을 사용하는 부분에서 생긴 문제였습니다.
🔹 프로젝트 구조
- 프로젝트는 총 3개의 포털로 이루어져 있으며, 각 포털마다 3개의 DB를 사용합니다.
- 서비스는 하나의 공통된 로직을 사용하며, 각 포털의 controller를 통해 필요한 서비스를 호출하는 방식으로 이루어집니다.
🔹 DB 연결 방식
각 DB를 연결하기 위해, Mapper 설정 시 3가지의 커스텀 어노테이션을 사용하여 각 포털에 맞는 DB 연결을 설정했습니다. 구체적으로는 아래와 같은 방식으로 @MapperScan을 사용해 각 포털에 맞는 mapper
를 스캔하고, 이를 주입하여 bean으로 등록하는 방식입니다.
@MapperScan(basePackages = "com.project.\*\*.mapper",
annotationClass = com.project.configuration.annotation.MapperForEXT.class,
sqlSessionFactoryRef = "projectextSqlSessionFactory")
이 과정에서 커스텀 어노테이션을 사용하여 각 포털에 맞는 DB 연결 설정을 잡아주게 되었습니다.
🔹 문제 발생: Mapper 주입 오류
하지만 문제가 발생한 부분은, @MapperScan을 통해 스캔할 수 없는 내부에서만 사용하는 mapper가 있을 때였습니다. 이 경우, 의존성 주입이 이루어지지 않아서 Mapper가 설정에 없다는 오류가 발생했습니다.
🔹 해결 방법
이 문제를 해결하기 위해, 내부 DB와 외부 DB의 구조가 같은 테이블에 대해서는 @MapperForINT
와 @MapperForEXT
두 가지 어노테이션을 모두 mapper에 적용했습니다. 이를 통해 두 가지 DB 모두에 맞는 Mapper를 주입할 수 있도록 설정했습니다.
또한, 한쪽 DB에서만 사용하는 서비스의 경우, 추상 메서드를 사용하여 공통 서비스에서 처리하는 대신, 각 포털 프로젝트에서 따로 의존성을 주입하도록 구조를 변경했습니다.
✨ 정리
- 내부 DB와 외부 DB의 설정 차이로 발생한 문제 해결을 위해, 동일한 테이블 구조에서는 두 가지 어노테이션(
@MapperForINT
,@MapperForEXT
)을 적용했습니다. - 한쪽 DB에서만 사용하는 서비스는 추상 메서드를 이용해, 공통 서비스가 아닌 각각의 프로젝트에서 직접 주입하도록 구조를 변경했습니다.
이렇게 해서 발생했던 Mapper 주입 문제를 해결할 수 있었습니다!
반응형
'Java' 카테고리의 다른 글
Spring boot maven project 만들기 (0) | 2023.02.14 |
---|---|
[JAVA] 파일 다운 시 한글 이름 깨짐 현상 (0) | 2023.01.05 |
[JAVA]Spring Boot 압축 파일 다운받기(Spring boot zip file download) (0) | 2022.05.09 |
[JAVA] Primitive type(기본 타입) VS Reference type(참조 타입) (0) | 2022.04.11 |
[JAVA] @ReqeustBody와 @ResponseBody 란? (0) | 2022.02.12 |