몽고DB(MongoDB) Spring 기반, Insert (java-driver)

    스프링(Spring) 프레임워크로 몽고DB에 데이터를 삽입하는 방법이야 많겠지만, 이번 방식은 JDBC 방식과 유사한 방식(java-driver)으로 직접 제어를 하여 데이터를 가져오는 것을 보여준 후, 추후 MongoTemplate 방식을 활용하여 Connection을 제어를 하지 않는 방식을 포스팅하고자 한다.


    MongoDB는 모든 데이터가 JSON구조로 저장이 되기 때문에 기존 DB에서처럼 테이블을 미리 설계하고 데이터를 넣는 번거로운 작업이 필요없이 DB가 만들어지고, 콜렉션만 만들어졌다면 자유롭게 데이터를 넣을 수 있다.  그렇기 때문에 몽고DB의 장점은 자유롭게 데이터를 넣을 수 있어서 개발 공수가 짧다라는 큰 장점을 가지고 있다.


    보통 DBA 혹은 DA롤을 가진 사람이 깊게 고민을 하여 데이터 구조를 설계하고 설계가 완료되면 쿼리 방식을 고민하고 개발을 하는 과정이 몽고DB에는 존재하지 않는다 다만 조인을 할 수 없다는 커다란 단점으로 인해서 생기는 문제점도 존재할 수 있다. 예를 들어, 정보를 중복을 넣을 수 있는데 이렇기 때문에 몽고DB를 모든 시스템에 적용하는 것은 썩 좋은 선택은 아닐 것이다.




    Maven 설정


    Maven으로 해도 되고, Library를 인터넷에 검색해서 받아도 무방한데 필자는 Spring 기반의 Maven을 활용하는 것은 선호하기에 이 예제는 Maven을 기반으로 진행하였다.


    <dependency>

        <groupId>org.mongodb</groupId>

        <artifactId>mongo-java-driver</artifactId>

        <version>3.4.1</version>

    </dependency>


    위 내용을 pom.xml에 입력하여 mongo-java-driver 라이브러리를 적용을 한다



    Connection 설정


    /**

     * MongoDB의 커넥션 획득

     * 

     * @return

     * @throws UnknownHostException 

     */

    public MongoClient getConnection () throws UnknownHostException {

    return new MongoClient("127.0.0.1", 27017);

    }


    비록 한줄밖에 안되는 메소드지만, 호출하는 함수가 많아지면 추후 IP를 변경하거나 포트등이 변경될 때 작업하는 부분들이 많아지기 때문에 커넥션을 맺는 부분은 메소드를 만들어주는 것이 좋다



    Insert 및 Connection 관리


    /**

     * 정보를 Insert

     * 

     * @return

     */

    public int insertInfo() {

    MongoClient mongoClient = null;

    int rc = 0;


    try {

    mongoClient = getConnection();

    DB database = mongoClient.getDB(mongoDbNm);

    DBCollection collection = database.getCollection("test");

    DBObject obj = new BasicDBObject (); 

    obj.put("name", "홍길동"); 

    obj.put("title", "동해물과 백두산이 마르고 닳도록");

    WriteResult wr = collection.insert(obj);

    } catch (Exception e) {

    LOGGER.error("insertConvst : " + e.getMessage());

    e.printStackTrace();

    rc = -1;

    } finally {

    if(mongoClient != null) {

    mongoClient.close();

    }

    }

    return rc;

    }


    위 소스를 보면 지극히 간단하게 데이터를 생성하여 저장한다. 데이터 구조는 name과 title이라는 key로 되어 있으며, 콜렉션은 test라는 명칭을 사용한다. WriteResult는 처리결과를 가지고 있으니, 결과에 대한 후처리를 하려면 이 결과를 활용하면 될 것이다. 혹은, 다시 Select를 해서, 결과가 들어왔는지 체크를 해도 될 것이다.


    이 방식은 기본중에 기본이고 본인이 제어를 해야 될 부분이 많기 때문에, 이후 쓸 포스팅인 MongoTemplate을 활용하여 데이터를 처리하는 것을 권장 드리고 싶다.


    댓글

    Designed by JB FACTORY