개발/SpringDataMongoDB

@Document에서 ObjectId를 id로 사용하는법

낭곰 2023. 10. 24. 10:15
반응형

MongoDB에는 ObjectId 타입을 지원하는데 Primary Key와 같은 고유한 키를 의미합니다. Collections에 데이터를 넣을때 ObjectId를 직접 넣어주지 않는 이상 자동으로 값이 부여되며 모든 Document 들은 각각의 ObjectId가 생긴다. 만약 ObjectId를 형식에 맞지않게 넣는다거나 중복된 값을 넣게될 경우 예외가 발생됩니다.

 

ObjectId의 구조

출처 - https://kim-jong-hyun.tistory.com/95

 

ObjectId는 3개의 영역으로 나뉘어져 있습니다.

  • 첫번째 4byte는 Unix epoch 이후 초 단위로 측정된 ObjectId의 생성을 나타내는 4바이트 타임스탬프 값
  • 두번째 5byte는 프로세스당 한 번 생성 되는 5바이트 임의 값이며 이 임의 값은 기계와 프로세스에 고유
  • 세번째 3byte는 임의의 값으로 초기화 되는 3바이트 증분 카운터

 

 

이제 SpringDataMongoDB에서 ObjectID를 Id로 사용해보도록 합시다.

 

@Data
@Document(collection="content")
public class Content implements Serializable {

	private static final long serialVersionUID = 1L;

	@MongoId
	private ObjectId id;

	private String url;
	@NotNull
	private String title;

	@Indexed(unique = true)
	private String link;

	@JsonFormat(pattern="yyyy-MM-dd'T'HH:mm:ss.SSSX")
	private String pubDate;

	private String thumbnail;
	private String htmlContents;

	private String rootDomain;
	private String siteName;
	private String author;

	private String category1;
	private String category2;

	@JsonFormat(pattern="yyyy-MM-dd'T'HH:mm:ss.SSSX")
	private Date regDate;
	@JsonFormat(pattern="yyyy-MM-dd'T'HH:mm:ss.SSSX")
	private Date modDate;

	private String isDeleteFlag;

}

 

@MongoId 어노테이션을 선언 후, ID 필드의 타입을 org.bson.types.ObjectId로 선언합니다.

 

이후 Repository의 Id타입을 ObjectId로 선언하면 끝

@Repository
public interface ContentRepository extends MongoRepository<Content, ObjectId> {

}

 

 

반응형