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 |
이상입니다.
궁금한 점이 있으시면 댓글로 남겨주세요.
'개발' 카테고리의 다른 글
JAVA - 살아 있는 스레드 확인 방법 (2) | 2025.06.04 |
---|---|
JAVA - PostgreSQL Multi Value Insert (1) | 2025.05.28 |