달력

10

« 2017/10 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  
  •  
  •  
  •  
1. 컨셉

2. 정의

3. 구현

4. 적용
신고
Posted by summerwars
2010.08.17 16:43

MongoDB 관련 링크 MongoDB2010.08.17 16:43


1) MongoDB 홈페이지 : http://www.mongodb.org
2) MongoDB 다운로드 : http://www.mongodb.org/downloads
3) MongoDB Java Driver 다운로드 : http://github.com/mongodb/mongo-java-driver/downloads
4) MongoDB Java Tutorial 설치부터 응용까지 : http://www.mongodb.org/display/DOCS/Java+Tutorial

5) Morphia (mapping Java Object to/from MongoDB) Library 홈페이지 : http://code.google.com/p/morphia
6) Morphia DAO Query Interface : http://code.google.com/p/morphia/wiki/Query
7) Morphia Google Groups 커뮤니티 : http://groups.google.com/group/morphia
신고
Posted by summerwars
2010.08.17 11:10

MongoDB-Morphia DAO Support 사용하기 MongoDB2010.08.17 11:10

Document DB 역시 객체를 영속화 시키려면 객체 그대로를 저장할수는 없고, 나름대로 변경하는 작업이 필요했다. 이것은 Aspect로 뺄수 있을 것이다. 그래서 Morphia의 DAO클래스에서 그걸 처리해 준다. 해당 클래스에 대해서 좀더 알아보자. Morphia의 DAO 클래스르 확장한 Dao는 아래와 같다.

@Repository
public class AccountDaoImpl extends DAO implements AccountDao {

	@Autowired
	protected AccountDaoImpl( @Qualifier("mongo") Mongo mongo, 
							  @Qualifier("morphia") Morphia morphia, 
							  @Qualifier("dbName") String dbName) {
		super(mongo, morphia, dbName);
	}
	public Account update(Account entity) {
		this.save(entity);
		return entity;
	}
	public List find(String query) {
		return ds.find(entityClazz).filter("name = ", query).asList();
	}
}


생성자 방식의 의존성 주입 이외에 일반 DAO 클래스와 다를께 없다. Morphia DAO는 Datastore 개념의 몇가지 메서드를 제공하고 있다. 그것을 이용하여 원하는 CRUD를 구현하면 된다. 아래는 위 코드는 테스트한 코드다. 테스트 코드는 일반 테스트코드와 특별한게 없다.

	@Autowired AccountDao accountDao;
	
	@Test
	public void diTest(){
		Assert.assertNotNull(accountDao);
	}

	@Test
	public void save(){
		// save()
		Account account = new Account("yunsunghan","yunsunghan@gmail.com");
		Account account2 = accountDao.update(account);
		Assert.assertEquals("yunsunghan@gmail.com", account2.getEmail());
		// print
		System.out.println("=========================================");
		System.out.println(account.getId() +":"+account2.getId());
		System.out.println("=========================================");
		
		// find()
		List list = accountDao.find("yunsunghan");
		Assert.assertNotNull("하나이상 존재한다.", list);
		// print
		System.out.println("=========================================");
		for(Account a : list)System.out.println(a.getId() + " : " + a.getName());
		System.out.println("=========================================");
	}

이로써, 전에 봤던, toDBObject나 fromDBObject 같은 귀찮은 객체 전환 작업을 캡슐화 시킬수 있었다. 하지만 아직도 야생에서 쓰기엔 뭔가 어색해 보인다. 아직 개선의 여지가 있다는 생각이 드는 것인데, Morphia DAO를 Spring의 Template 시리즈나, Support 시리즈처럼 좀더 편리하게 쓸수는 없을까 하는 생각이 든다.

신고
Posted by summerwars
2010.08.16 18:07

Sprnig에서 Morphia Junit Test하기 MongoDB2010.08.16 18:07


1) applicationContext.xml 설정하기

  <bean id="mongo" class="com.mongodb.Mongo">
   <constructor-arg value="127.0.0.1"/>
   <constructor-arg value="27017"/>
  </bean>
 
  <bean id="db" class="com.sws.spring.config.DbFactoryBean">
   <property name="mongo" ref="mongo"/>
   <property name="name" value="test"/>
  </bean>
   
  <bean id="morphia" class="com.google.code.morphia.Morphia"/>


2) Junit Test 코드 작성하기
  @Autowired DB db;
 @Autowired Mongo mongo;
 @Autowired Morphia morphia;

...(생략)...

 @Test
 public void save(){
  // collection 가져오기
  DBCollection dBCollection = db.getCollection("account"); 
  // 저장할 객체선언후
  Account account = new Account("yunsunghan","yunsunghan@gmail.com1");
  // 객체를 MongoDB로 저장할수 있게, DBObject객체로 변환
  DBObject accountObj1 = morphia.toDBObject(account);
  // collection에 저장
  dBCollection.save(accountObj1);
  // 저장된 객체를 찾아서,
  DBObject accountObj2 = dBCollection.findOne(accountObj1);
  // 저장전 객체로 변환하고,
  Account account2 = morphia.fromDBObject(Account.class, accountObj2);
  // 각각의 객체와 비교 후, 같으면 통과
  Assert.assertEquals(accountObj1.get("name"), accountObj2.get("name"));
  Assert.assertEquals(account.getEmail(), account2.getEmail());
 }

물론 다른 방법도 존재한다. morphia.createDatastore(String dbName) 같은 메서드는, DB설정 정보가 기본값으로 저장되어 있어서, 따로 설정하지 않아도, DB에 저장을 간편하게 시킬수 있다.

Account 객체는 Morphia의 어노테이션을 써서 매핑했는데, 소스는 아래와 같고 더 많은 기능이 있는데, 여길 참고하자.

@Entity
public class Account {
 
 @Id private String id;
 private String name;
 private String email;
...(생략)...
신고

'MongoDB' 카테고리의 다른 글

MongoDB 관련 링크  (0) 2010.08.17
MongoDB-Morphia DAO Support 사용하기  (1) 2010.08.17
Sprnig에서 Morphia Junit Test하기  (0) 2010.08.16
MongoDB - Morphia Maven Dependency  (0) 2010.08.16
MongoDB Maven Dependency  (0) 2010.08.13
Java환경에서 MongoDB 설정(사용)하기  (0) 2010.08.13
Posted by summerwars
2010.08.16 16:04

MongoDB - Morphia Maven Dependency MongoDB2010.08.16 16:04

1) Maven Repository & Dependency

 <repository> 
            <id>morphia.googlecode.com</id> 
            <name>Morphia Repo at Google Code</name> 
            <url>http://morphia.googlecode.com/svn/mavenrepo</url> 
</repository> 

<dependency> 
            <groupId>com.google.code.morphia</groupId> 
            <artifactId>morphia</artifactId> 
            <version>0.93-SNAPSHOT</version> 
</dependency> 



2) 관련 사용법 및 홈페이지는 http://code.google.com/p/morphia/ 여기...

신고
Posted by summerwars
2010.08.13 16:49

MongoDB Maven Dependency MongoDB2010.08.13 16:49

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongo-java-driver</artifactId>
    <version>2.0</version>
</dependency>
신고
TAG maven, MongoDB
Posted by summerwars
2010.08.13 16:41

Java환경에서 MongoDB 설정(사용)하기 MongoDB2010.08.13 16:41

'초간단, Window에 MongoDB 설치하기' 에서 MongoDB 설정을 했다면, 이제 java에서 해당 DB에 접속해서, 사용할수 있어야 한다. 방법은 환경설정 만큼이나 간단하다.

1) Java Driver 다운로드
http://github.com/mongodb/mongo-java-driver/downloads 에서 가장 최신 driver인 jar파일을 다운 받아 알맞은 classpath 또는 lib 폴더에 넣는다.

2) Connection Test 하기
아래와 같이 Unit Test를 작성하고 테스트 한다. 통과되면, 정상적으로 DB와 연결된 것이다.
@RunWith(JUnit4.class)
public class MongoConnectionTest {

@Test
public void getConnection(){
Mongo m = null;
try {
m = new Mongo( "localhost" , 27017 );
} catch (UnknownHostException e) {
System.out.println("UnknownHostException");
e.printStackTrace();
} catch (MongoException e) {
System.out.println("MongoException");
e.printStackTrace();
}

Assert.assertEquals("2.0", m.getVersion());
System.out.println("=================================");
System.out.println(m.getVersion());
System.out.println("=================================");
DB db = m.getDB("test");
Assert.assertEquals("test", db.getName());
System.out.println("=================================");
System.out.println(db.getName());
System.out.println("=================================");
}
}
나의경우 아래와 같이 잘 통과 되었다.


테스트한 이클립스 프로젝트를 통째로 압축해서 올린다.


보통 RDB에서는 Connection시 인증을 사용한다. Mongo도 db.authenticate(myUserName, myPassword) 로 인증기능이 가능하나, 대부분의 사용자들은 인증없이 사용한다.

 

신고
TAG MongoDB
Posted by summerwars
2010.08.13 16:41

초간단, Window에 MongoDB 설치하기 MongoDB2010.08.13 16:41

MongoDB에 대한 기본 정보는 홈페이지인, http://www.mongodb.org 에서 얻길 바라고, 관심이 있으면 아래와 같이 간단히 설치하고 테스트 할수 있다.

1) 다운로드
http://www.mongodb.org/downloads 에서 가장 최신 버전을 다운 받는다. 나는 Windows32-bit 1.6.0 버전을 다운 받았다.

2) 설치
다운 받은 zip 파일을 원하는 디렉토리에 압축을 푼다. [ ex) D:\MongoDB\mongodb-win32-i386-1.6.0]

3) Data를 저장할 디렉토리 만들기
설치가 되었다면, Data를 저장할 디렉토리를 만든다. [ ex) D:\MongoDB\DATA\DB]

4) DB 실행하기
Dos창에서 압축을 푼, 디렉토리의 bin 폴더로 이동하여, mongod.exe를 실행시킨다. 이때, Data저장소를 따로 지정했다면, dbpath 옵션으로 실행시킨다. 
ex)
d:\MongoDB\mongodb-win32-i386-1.6.0\bin>mongod --dbpath d:\MongoDB\DATA\DB



5) DB 접속하기
DB 실행하기처럼 bin 디렉토리로 이동후, mongo를 실행하면, 콘솔창으로 접속할수 있고, 이후 원하는 작업이 가능하다.
ex)
d:\MongoDB\mongodb-win32-i386-1.6.0\bin>mongo


만약 MySQL Window zip 버전을 사용해본 경험이있다면, 상당히 유사함을 느낄것 같다. 서버를 실행시킨 다음, 콘솔이나 툴로 접속하여 테스트 하는 방법 말이다. MongoDB도 그와 유사하게 간단히 설치하여 사용할수 있다.

6) Window Service에 등록하여 자동으로 실행하기
mongod.exe 는 --install(추가), --remove(삭제) 옵션으로 간편히 윈도우 서비스에 추가하거나 삭제 할수 있다. 
ex)
mongod --bind_ip 127.0.0.1 --logpath D:\MongoDB\logs\logs --logappend --dbpath D:\MongoDB\DATA\DB --directoryperdb --install

복잡한 옵션들이 있는데, mongod는 많은 옵션들이 있다. 'mongod --help'로 확인 할수 있다. 

더보기



신고
TAG Mongo
Posted by summerwars


티스토리 툴바