[SW마에스트로] DB가 2개일 경우 생기는 오류 처리

2023. 10. 24. 17:55· 기술적 고민/Side Match
목차
  1. - 문제 상황 -
  2. - 해결 - 

 

 

- 문제 상황 -

원래는 MySQL을 사용하고 있었는데 채팅 메세지를 적재하기 위해서 NoSQL인 DynamoDB를 연결했다. 그런데 연결만 했을 뿐인데 에러가 빵빵 터졌다.

대체 왜 그러니 나한테

 

에러 메세지를 보니 약간 Bean이 중복(?)되는 느낌인거 같았다.

 

 

- 해결 - 

 

구글링 결과 JPA의 경우 default로 SpringBoot가 실행되면 컴포넌트 스캔으로 전체 패키지를 돌아 Entity와 Jpa를 사용하는 DAO단을 빈에 올린다. 그런데 DynamoDB랑 충돌이 일어난 것이었다.

 

그래서 우선 JPA를 사용하는 패키지와 DynamoDB를 사용하는 패키지를 분리하였다.

 

@RequiredArgsConstructor
@Configuration
@EnableJpaRepositories(basePackages =
        {"com.example.matchup.matchupbackend.repository",
                "com.example.matchup.matchupbackend.entity"})
@EnableConfigurationProperties({JpaProperties.class, HibernateProperties.class})
public class JPAConfig {
}

그리고 JPAConfig에서 컴포넌트 스캔 할  Entity와 Jpa를 사용하는 DAO단을 지정해 주었다.

 

@Configuration
@EnableDynamoDBRepositories(basePackages = "com.example.matchup.matchupbackend.dynamodb")
public class DynamoDBConfig {
    @Value("${cloud.aws.access-key}")
    private String awsAccessKey;
    @Value("${cloud.aws.secret-key}")
    private String awsSecretKey;
    @Value("${cloud.aws.region.static}")
    private String awsRegion;


    public AWSCredentialsProvider amazonAWSCredentialsProvider() {
        return new AWSStaticCredentialsProvider(amazonAWSCredentials());
    }

    @Bean
    public AWSCredentials amazonAWSCredentials() {
        return new BasicAWSCredentials(awsAccessKey, awsSecretKey);
    }

    @Bean
    @Primary
    public DynamoDBMapperConfig dynamoDBMapperConfig() {
        return DynamoDBMapperConfig.DEFAULT;
    }


    @Bean
    @Primary
    public DynamoDBMapper dynamoDBMapper(AmazonDynamoDB amazonDynamoDB, DynamoDBMapperConfig config) {
        return new DynamoDBMapper(amazonDynamoDB, config);
    }

    @Bean
    public AmazonDynamoDB amazonDynamoDB() {
        return AmazonDynamoDBClientBuilder.standard().withCredentials(amazonAWSCredentialsProvider())
                .withRegion(awsRegion).build();
    }

    static public class LocalDateTimeConverter implements DynamoDBTypeConverter<String, LocalDateTime> {

        @Override
        public String convert( final LocalDateTime time ) {

            return time.toString();
        }

        @Override
        public LocalDateTime unconvert( final String stringValue ) {

            return LocalDateTime.parse(stringValue);
        }
    }
}

 

마찬가지로 DynamoDB에서도

@EnableDynamoDBRepositories(basePackages ="com.example.matchup.matchupbackend.dynamodb")

를 통해 스캔 할 범위를 지정해주었다.

 

이렇게 빈에 올릴 범위를 패키지를 통해 나누어 주니 에러가 해결되었다!

'기술적 고민 > Side Match' 카테고리의 다른 글

[SW마에스트로] CI/CD 구축 (Github Action, SCP)  (0) 2024.07.12
[SW마에스트로] 프로젝트의 로그 관리하기 (Sentry)  (0) 2023.11.12
[SW마에스트로] 채팅 기능을 만들면서 하는 고민(DB 선정, 메세지 전송 방식)  (4) 2023.10.21
[SW마에스트로] Base64로 인코딩된 사진 받아서 S3에 업로드하기  (0) 2023.10.07
[SW마에스트로] 팀원-팀원 상호 평가 API를 만들면서 하는 고민  (0) 2023.09.12
  1. - 문제 상황 -
  2. - 해결 - 
'기술적 고민/Side Match' 카테고리의 다른 글
  • [SW마에스트로] CI/CD 구축 (Github Action, SCP)
  • [SW마에스트로] 프로젝트의 로그 관리하기 (Sentry)
  • [SW마에스트로] 채팅 기능을 만들면서 하는 고민(DB 선정, 메세지 전송 방식)
  • [SW마에스트로] Base64로 인코딩된 사진 받아서 S3에 업로드하기
생선묵김치찌개
생선묵김치찌개
생선묵김치찌개
준혁's 코딩 연구기록
생선묵김치찌개
전체
오늘
어제
  • 분류 전체보기 (96)
    • Java (5)
    • Spring Boot (3)
    • 자료구조 (8)
    • 네트워크 (4)
    • 데이터베이스 (4)
    • 기술적 고민 (17)
      • Side Match (13)
      • 자리나따 (4)
    • C++ (3)
    • Algorithm (4)
    • PS 연습 (38)
    • 잡동사니 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • DN
  • Stream
  • 큐
  • dp
  • 열혈 자료구조
  • 배열 리스트
  • ㄱ
  • 트리
  • 스택
  • 예외처리
  • 파일 업로드
  • 백준 골드
  • 자료구조
  • 브루트 포스
  • 알고리즘
  • open api
  • 원형 연결 리스트
  • CPP
  • 수식트리
  • backend
  • 양방향 연결 리스트
  • 완전탐색
  • 해커톤
  • 백준
  • aws rds
  • 이진트리
  • 스프링
  • 단순 연결 리스트
  • 재귀
  • sentry

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.1
생선묵김치찌개
[SW마에스트로] DB가 2개일 경우 생기는 오류 처리
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.