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를 사용해야 합니다.

+ Recent posts