NoSql - MongoDB 적용

bw1611·2023년 8월 21일

📕 배포 환경에서 RDBMS를 NoSql로 적용하기


@Getter
@NoArgsConstructor(access = PROTECTED)
@Document(collection = "chat")
@SuperBuilder
public class ChatMessage {

    @Id
    private String id;
    private String content;

    private Long senderId;
    private String senderUsername;
    private String senderAvatar;

    private Long chatRoomId;
    private Long chatId;

    private LocalDateTime createDate;

    @Enumerated(STRING)
    private ChatMessageType type;
    
    public static ChatMessage create(String content, Long senderId, String senderUsername, String senderAvatar, ChatMessageType chatMessageType, Long chatRoomId) {

        ChatMessage chatMessage = ChatMessage.builder()
                .content(content)
                .senderId(senderId)
                .senderUsername(senderUsername)
                .senderAvatar(senderAvatar)
                .type(chatMessageType)
                .chatRoomId(chatRoomId)
                .createDate(LocalDateTime.now())
                .build();

        return chatMessage;
    }
}
  • Entity로 되어있던 것을 MongoDB로 바꾸면서 RDBMS에 연관관계 설정을 끊어주고 @Document(collection = "chat")로 MongoDB 설정을 해준다.
  • 위에 어노테이션을 보면 Entity가 사라지고 @Document로 대신하는것을 볼 수 있다.
public interface DmMessageRepository extends MongoRepository<DmMessage, Long> {

    List<DmMessage> findByDmId(Long dmId);

}
  • repository에서도 JPA설정을 끊어주고 MongoRepository를 설정해준다.
  • 사용법은 JPA랑 많이 비슷하여 JPA를 사용해봤다면 쉽게 사용할 수 있을 것이다.
@NoRepositoryBean
public interface MongoRepository<T, ID>
		extends ListCrudRepository<T, ID>, ListPagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {

	<S extends T> S insert(S entity);

	<S extends T> List<S> insert(Iterable<S> entities);

	@Override
	<S extends T> List<S> findAll(Example<S> example);

	@Override
	<S extends T> List<S> findAll(Example<S> example, Sort sort);
}
  • 이와 같이 JPA랑 비슷한걸 확인할 수 있습니다.
spring:
  data:
    mongodb:
      host: host
      port: portNumber
      database: chat
      username: [username]
      password: [password]
      authentication-database:
  • yml에 DB설정하는 것처럼 username과 password를 연결해주고 database를 통해서 DB를 만들어줍니다.
profile
Java BackEnd Developer

0개의 댓글