Spring Boot에서 @Id 사용시 주의할 점 - JPA와 Spring Data의 차이

문준일·2025년 2월 3일
post-thumbnail

Spring Boot 프로젝트에서 @Id를 사용할 때 패키지 경로를 잘못 지정하면, 예상치 못한 오류가 발생할 수 있습니다.
특히 JPA를 사용할 때와 Spring Data를 사용할 때 @Id의 패키지가 다르기 때문에 주의해야 합니다.
이번 글에서는 @Id의 차이를 살펴보고, 올바른 사용법을 정리해 보겠습니다.

🔍 1. @Id 어노테이션이란?

@Id는 엔티티(Entity)의 기본 키(Primary Key)를 지정하는 어노테이션입니다.
이 어노테이션은 Spring Data와 JPA에서 서로 다른 패키지를 사용하므로 주의해야 합니다.

✅ 올바른 @Id 패키지 정리

사용 목적패키지설명
JPA (RDBMS)jakarta.persistence.IdMySQL, PostgreSQL, H2 등 RDBMS 사용
Spring Data (NoSQL)org.springframework.data.annotation.IdMongoDB, Elasticsearch 등 NoSQL 사용



🔥 2. JPA에서 @Id 사용(RDBMS)

JPA를 사용할 때는 반드시 jakarta.persistence.Id를 사용해야 합니다.

📌 예제 코드 (JPA + MySQL)

import jakarta.persistence.*;

@Entity
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Post {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;  // 기본 키

    @Column(nullable = false)
    private String title; // 제목

    @Column(nullable = false, length = 1000)
    private String content; // 내용
}

✅ JPA에서 @Id와 함께 @GeneratedValue 사용

  • @Id는 기본 키를 명시하는 역할
  • @GeneratedValue(strategy = GenerationType.IDENTITY)는 자동 증가(Auto Increment) 설정
  • MySQL, PostgreSQL, MariaDB 등에서 사용 가능

📌 Gradle에서 JPA 설정

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'mysql:mysql-connector-j:8.0.33'
}



⚠️ 3. Spring Data에서 @Id 사용(NoSQL)

NoSQL 데이터베이스를 사용할 경우, org.springframework.data.annotation.Id를 사용해야 합니다.

📌 예제 코드 (MongoDB + Spring Data)

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

@Document(collection = "posts")
public class NoSqlPost {
    @Id
    private String id;  // MongoDB의 기본 키

    private String title;
    private String content;
}

📌 MongoDB 사용 시 Gradle 설정

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-mongodb'
}

❌ 잘못된 예제 (JPA에서 Spring Data의 @Id 사용)

아래와 같이 JPA 프로젝트에서 org.springframework.data.annotation.Id를 사용하면 오류가 발생할 수 있습니다.

import org.springframework.data.annotation.Id;  // ❌ 잘못된 패키지

@Entity
public class Post {
    @Id  // ❌ Spring Data의 @Id를 사용하면 오류 발생 가능
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
}



🎯 4. Spring Boot에서 @Id를 사용할 때의 핵심 포인트

  1. JPA (@Entity)를 사용할 때는 jakarta.persistence.Id를 사용하자!
  2. MongoDB (@Document)를 사용할 때는 org.springframework.data.annotation.Id를 사용하자!
  3. 잘못된 패키지를 사용하면 Hibernate가 @Id를 인식하지 못하는 오류가 발생할 수 있음!


🔥 5. 마무리

Spring Boot에서 @Id 어노테이션을 사용할 때는 데이터베이스 유형에 따라 올바른 패키지를 선택해야 합니다.
특히 JPA를 사용할 경우 반드시 jakarta.persistence.Id를 사용해야 하며,
NoSQL(MongoDB)에서는 org.springframework.data.annotation.Id를 사용해야 합니다.

🚀 Spring Boot 프로젝트에서 @Id 설정할 때 이 글을 참고하면 더 이상 혼동할 일이 없을 거예요!

profile
하나씩 실천하는 개발자

0개의 댓글