본문 바로가기

개발

자바에서의 MongoDB INSERT 방식

728x90
반응형

MongoDB에 데이터를 INSERT하는 JDBC 프로그램을 조사하게 되었으며,
해당 방식을 한눈에 이해하는 데 도움이 될 수 있는 글을 공유합니다.

 

1. 가장 일반적인 방법인 Document 방식

코드 예제) MongoInsertExample.java

import cohttp://m.mongodb.client.MongoClients;
import cohttp://m.mongodb.client.MongoClient;
import cohttp://m.mongodb.client.MongoDatabase;
import cohttp://m.mongodb.client.MongoCollection;
import org.bson.Document;

import java.util.Date;

public class MongoInsertExample {
    public static void main(String[] args) {
        // MongoDB 연결 (localhost 기준)
        String uri = "mongodb://192.168.0.123:27017";
        try (MongoClient mongoClient = MongoClients.create(uri)) {

            // DB 선택
            MongoDatabase database = mongoClient.getDatabase("testdb");

            // 컬렉션 선택
            MongoCollection<Document> collection = database.getCollection("test01");

            // 삽입할 도큐먼트 구성
            Document doc = new Document("id", 1)
                    .append("name", "홍길동")
                    .append("addr", "서울")
                    .append("regdate", new Date());

            // insert 수행
            collection.insertOne(doc);

            System.out.println("문서 삽입 완료!");
        }
    }
}

 

2. POJO 방식 (자바 객체를 자동 변환)

코드 예제) Person.java

import java.util.Date;

public class Person {
    private int id;
    private String name;
    private String addr;
    private Date regdate;

    // 필수: 기본 생성자
    public Person() {}

    public Person(int id, String name, String addr, Date regdate) {
        this.id = id;
        this.name = name;
        this.addr = addr;
        this.regdate = regdate;
    }

    // getter/setter
    public int getId() { return id; }
    public void setId(int id) { this.id = id; }

    public String getName() { return name; }
    public void setName(String name) { this.name = name; }

    public String getAddr() { return addr; }
    public void setAddr(String addr) { this.addr = addr; }

    public Date getRegdate() { return regdate; }
    public void setRegdate(Date regdate) { this.regdate = regdate; }
}

코드 예제) MongoInsertWithPOJO.java

import com.mongodb.ConnectionString;
import com.mongodb.MongoClientSettings;
import cohttp://m.mongodb.client.MongoClient;
import cohttp://m.mongodb.client.MongoClients;
import cohttp://m.mongodb.client.MongoCollection;
import cohttp://m.mongodb.client.MongoDatabase;
import org.bson.codecs.configuration.CodecRegistry;
import org.bson.codecs.pojo.PojoCodecProvider;

import java.util.Date;

import static org.bson.codecs.configuration.CodecRegistries.fromProviders;
import static org.bson.codecs.configuration.CodecRegistries.fromRegistries;

public class MongoInsertWithPOJO {
    public static void main(String[] args) {

        // ▶️ MongoDB 서버 주소 입력
        String uri = "mongodb://192.168.0.123:27017";  // 또는 Atlas URI, 인증 포함 주소 등

        // ▶️ Codec 설정 (POJO 지원)
        CodecRegistry pojoCodecRegistry = fromRegistries(
                MongoClientSettings.getDefaultCodecRegistry(),
                fromProviders(PojoCodecProvider.builder().automatic(true).build())
        );

        // ▶️ MongoClient 설정 (URI + Codec)
        MongoClientSettings settings = MongoClientSettings.builder()
                .applyConnectionString(new ConnectionString(uri))
                .codecRegistry(pojoCodecRegistry)
                .build();

        try (MongoClient mongoClient = MongoClients.create(settings)) {

            // ▶️ 데이터베이스 및 컬렉션 지정
            MongoDatabase database = mongoClient.getDatabase("testdb");
            MongoCollection<Person> collection = database.getCollection("test01", Person.class);

            // ▶️ 삽입할 자바 객체 생성
            Person p = new Person(1001, "홍길동", "서울", new Date());

            // ▶️ insert
            collection.insertOne(p);

            System.out.println("✅ POJO 방식으로 문서 삽입 완료!");
        }
    }
}

 

3. JSON 문자열을 Document로 파싱

코드 예제) JsonToDocumentInsert.java

import cohttp://m.mongodb.client.*;
import org.bson.Document;
import com.mongodb.ConnectionString;
import com.mongodb.MongoClientSettings;

public class JsonToDocumentInsert {
    public static void main(String[] args) {
        // ▶️ JSON 문자열 정의
        String json = "{ \"id\": 2001, \"name\": \"이순신\", \"addr\": \"부산\", \"regdate\": { \"$date\": \"2025-05-27T12:00:00Z\" } }";

        // ▶️ JSON → Document
        Document doc = Document.parse(json);

        // ▶️ MongoDB 연결
        String uri = "mongodb://192.168.0.123:27017";
        MongoClientSettings settings = MongoClientSettings.builder()
                .applyConnectionString(new ConnectionString(uri))
                .build();

        try (MongoClient mongoClient = MongoClients.create(settings)) {
            MongoDatabase database = mongoClient.getDatabase("testdb");
            MongoCollection<Document> collection = database.getCollection("test01");

            // ▶️ Document 삽입
            collection.insertOne(doc);
            System.out.println("✅ JSON → Document insert 완료!");
        }
    }
}

 

✅ MongoDB 자바 클라이언트 방식별 성능 비교

순위 방식 특징 성능 (10만 건 기준)
🥇 1위 Document 방식 - 가장 직접적인 방식
- 변환 과정 없음 → 가장 빠름
- new Document(...) 형태
- 타입 안정성 떨어짐, 코드 번거로움
🔹 약 1배 (기준 성능)
🥈 2위 POJO 방식 - CodecRegistry를 통해 자동 매핑
- 내부적으로 리플렉션 수행
- 코드 구조화 용이, 유지보수 유리
🔸 약 1.2~1.5배 느림
🥉 3위 JSON 문자열 → Document - Document.parse(json) 사용
- 문자열 파싱 → BSON 변환 비용 큼
- 동적 구조엔 유연하지만, 실시간 성능은 가장 떨어짐
🔻 약 2배 이상 느림

 

📌 어떤 걸 써야 할까? (성능 + 유지보수)

목적 추천 방식
최고의 성능 Document 직접 생성 (대용량 초기적재, 배치)
유지보수, 가독성, 타입 안정성 POJO (Spring Boot, 구조화된 코드)
외부 시스템과 JSON 연동 JSON 문자열 → Document

 

 

이상입니다.
궁금한 점이 있으시면 댓글로 남겨주세요.

728x90
반응형

'개발' 카테고리의 다른 글

JAVA - 살아 있는 스레드 확인 방법  (2) 2025.06.04
JAVA - PostgreSQL Multi Value Insert  (1) 2025.05.28