Back-End/JPA
JPA와 NoSQL: MongoDB와 함께 사용
봉의일상
2025. 3. 9. 22:55
1. JPA와 NoSQL의 개념
JPA(Java Persistence API)
JPA는 관계형 데이터베이스(RDBMS)와 객체를 매핑하는 ORM(Object-Relational Mapping) 기술입니다. 대표적인 구현체로는 Hibernate, EclipseLink 등이 있으며, 관계형 데이터 모델을 기반으로 동작합니다.
NoSQL과 MongoDB
MongoDB는 대표적인 NoSQL 데이터베이스로, 관계형 데이터베이스와 달리 스키마 없이 JSON(BSON) 형식으로 데이터를 저장합니다.
- 테이블 대신 컬렉션(Collection)
- 행(Row) 대신 문서(Document) 구조 사용
- 수직적 확장(Scale-Out)에 유리함
2. JPA와 MongoDB를 함께 사용할 수 있을까?
JPA는 본래 관계형 데이터베이스(RDBMS)를 위한 ORM 기술이기 때문에,
JPA 자체로 MongoDB를 직접 사용할 수는 없습니다.
하지만 Spring Data MongoDB를 활용하면 Spring Data JPA와 함께 사용할 수 있는 구조를 만들 수 있습니다.
3. Spring Boot에서 JPA와 MongoDB 함께 사용하기
(1) 의존성 추가 (Gradle 기준)
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa' // JPA
implementation 'org.springframework.boot:spring-boot-starter-data-mongodb' // MongoDB
runtimeOnly 'org.postgresql:postgresql' // RDBMS 예제 (선택 사항)
}
(2) application.properties 설정
# 관계형 데이터베이스 설정 (JPA)
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.hibernate.ddl-auto=update
# MongoDB 설정
spring.data.mongodb.uri=mongodb://localhost:27017/mydatabase
4. JPA 엔티티와 MongoDB 문서 작성
(1) JPA 엔티티 예제 (RDBMS)
import jakarta.persistence.*;
@Entity
public class User {
@Id @GeneratedValue
private Long id;
private String name;
}
(2) MongoDB 문서 예제
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
@Document(collection = "users")
public class UserDocument {
@Id
private String id;
private String name;
}
MongoDB에서는 @Entity 대신 @Document를 사용하며, ID는 기본적으로 String 타입입니다.
5. JPA와 MongoDB 저장소(repository) 설정
(1) JPA Repository (RDBMS)
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<User, Long> {
User findByName(String name);
}
(2) MongoDB Repository
import org.springframework.data.mongodb.repository.MongoRepository;
public interface UserDocumentRepository extends MongoRepository<UserDocument, String> {
UserDocument findByName(String name);
}
MongoDB에서는 JpaRepository 대신 MongoRepository를 사용해야 합니다.