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로 전환하면서 해당 부분이 불필요해졌고, 해당 코드를 제거해주었다.