MongoDB

seobin·2025년 2월 25일

MongoDB는 NoSQL 데이터베이스이므로 RDBMS처럼 FOREIGN KEY 제약 조건이 존재하지 않음
따라서 연결된 데이터(room_id, sender_id)는 일반적인 필드로 저장함

#  MongoDB용 ChatMessage 모델

@Document(collection = "chat_messages")  // MongoDB 컬렉션 지정
public class ChatMessage {

    @Id
    private String id;  // MongoDB에서는 String 타입의 ObjectId 사용

    private Long roomId;  // 채팅방 ID (MySQL과 연결)
    private Long senderId; // 작성자 ID (MySQL과 연결)
    private String message;
    private LocalDateTime createDate;
    private String attachment;  // 첨부파일

    public ChatMessage(Long roomId, Long senderId, String message, String attachment) {
        this.roomId = roomId;
        this.senderId = senderId;
        this.message = message;
        this.createDate = LocalDateTime.now();
        this.attachment = attachment;
    }

    // Getter & Setter
}
  • @Document(collection = "chat_messages") → MongoDB의 chat_messages 컬렉션에 저장
  • @Id → MongoDB의 기본 키 (_id)는 String(ObjectId)로 저장됨
  • roomId, senderId는 MySQL의 room, user 테이블과 연결될 값 (Foreign Key는 아님)
  • LocalDateTime.now()로 메시지 생성 시간을 자동 설정

JPA 트랜잭션과 MongoDB 트랜잭션의 차이

MySQL(JPA)의 트랜잭션은 @Transactional을 사용하면 롤백이 가능하지만,
MongoDB는 기본적으로 트랜잭션을 지원하지 않음.
MongoDB 트랜잭션을 사용하려면 별도의 설정이 필요.

0개의 댓글