BackEnd

[코프링] MongoDB → PostgreSQL: 이관 과정 A to Z

mingg123 2025. 1. 14. 22:15

배경

진행하고 있던 프로젝트의 DB 인스턴스가 삭제 되었다. 🤣
복구가 불가능하다고 판단되었고, Supabase를 이용하기 위해 mongoDB에서 postgreSql로 이관 프로젝트를 진행 하였음


STEP

1. 유지해야하는 API, 불필요한 API 분리

  • 기본적인 CRUD 작업은 프론트에서 Supabase로 바로 접근하여 데이터를 읽어올 것이기 때문에 복잡한(인증, 푸시알림 등)API 를 제외하곤 삭제하려함

2. build.gradle.kt

  • implementation("org.springframework.boot:spring-boot-starter-data-mongodb") 제거
  • implementation("org.postgresql:postgresql:42.2.20") 추가

3. 서버 로직 업데이트

  • controller -> service -> repository -> entity 순으로 수정하려 한다.

controller, service

  • 불필요한 부분을 주석 처리 한다.

repository

  • MongoRepository 제거
  • JpaRepostiroy 추가

entity

  • @Document 제거
  • @Entity, @Table 추가

entity 정규화 하기

  • noSql의 장점중 하나인 데이터 저장형식이 자유로운부분이 rdb로 바꾸면서 고민이 필요했음
  • 컬럼으로 추가할 것인가 vs 정규화 할 것인가


data class Contact(
        val phoneNumber: String?,
        val countryCode: String?,
        val verificationCode: String?,
    )


Trouble shooting

Parameter 0 of constructor in 'A' required a bean of type 'B' that could not be found.

entity, repository 순으로 정리하면 순조롭게 될 줄 알았던 내 예상과 다르게 해당 에러를 만났다.

  • Service파일에는 @Service 어노테이션이 잘 적용되어있는지 확인
  • Repository 에서 JpaRepository와 PK가 잘 적용되어있는지 확인
  • Entity와 실제 DB 데이터 구조가 잘 매핑되어있는지 확인
  • application.yml DB 접속 정보 올바른지 확인

모두 충족했음에도 계속 발생하였다. 하루정도 삽질하다가 찾은 방안은 ..

원인은 아래와 같다.

mongoDB를 사용할 때 Config로 DB설정해둔 부분이 있었는데 이를 위해 DataSourceAutoConfiguration을 예외처리 해두었나보다.
postgresql로 전환하면서 해당 부분이 불필요해졌고, 해당 코드를 제거해주었다.