OS별 설치방법이 공식홈페이지에 잘 나와있습니다.
http://www.mongodb.org/display/DOCS/Quickstart
저는 Windows라서 다운로드 받고, 압축 푼 다음에 \data\db 폴더 만들고, mongod 실행하니까 바로 되더라구요. 이렇게 손쉽게 설치되는 DB라니.....ㅠㅠ
2. php에 MongoDB Driver 설치
이것도 공식홈페이지에 잘 나와있네요.
http://www.mongodb.org/display/DOCS/PHP+Language+Center
https://github.com/mongodb/mongo-php-driver/downloads 여기서 Driver를 다운로드 받아서 dll파일을 extension에 추가만 해주면 됩니다.
압축 풀면 vc6~9별로 나눠져있는데, apache 버전에 맞춰서 dll을 복사해야합니다. 안그러면 에러납니다.
extension=php_mongo.dll
3. CodeIgniter 설치
php쪽 프레임워크는 처음 써보는데, 코드이그나이터가 제일 괜춘한가보네요. 회사에서 쓰려고 알아보다 보니 여기까지 왔네요.
공식홈페이지에서 다운로드 받고, apache 경로에 압축풀어주면 됩니다. 저는 localhost/codeigniter에 풀었습니다.
http://codeigniter.com/downloads/
저는 config에서 base_url과 index_page를 수정했습니다.
/application/config/config.php
$config['index_page'] = '';
그리고, localhost/codeigniter/index.php/~~~ 이런 형태가 되는데, index.php를 없애고 싶으면 이렇게 하면 되는 듯 합니다.
압축푼 폴더에 즉, codeigniter에 .htaccess 파일을 만들어서
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /codeigniter/index.php/$1 [L]
라고 쓰면 되는 듯.
여기 참고 -> http://codeigniter.com/user_guide/general/urls.html
4. MongoDB CodeIgniter용 library 다운로드 및 설치
Mongo클래스를 CodeIgniter에 맞게 잘 래핑한 클래스가 있습니다.
https://github.com/kyledye/MongoDB-CodeIgniter-Driver
여기서 다운로드 하면, Config폴더랑 libraries폴더에 mongo_db.php파일이 있습니다.
config폴더에 있는 것은 /application/config/ 폴더로, libraries폴더에 있는 것은 /application/libraries/ 폴더로 복사합니다.
config에 있는 mongo_db.php파일은 각자 설정에 맞게 고쳐줘야 합니다.
5. CodeIgniter Model 만들기
생성자에서 mongo_db library를 로드합니다. 그리고, 리스트를 가져오는 getList, 글쓰는 write, 삭제하는 delete함수를 만들었습니다.
이 라이브러리를 보니까, 가져오기전에 조건문(where, orderby 등등)을 미리 셋팅하고, get이나 delete 등을 호출하는 방식입니다. 아래 클래스를 보시면 매우 쉽습니다.
/application/models/board_model.php
class Board_model extends CI_Model
{
public function __construct()
{
parent::__construct();
$this->load->library("mongo_db");
}
public function getList()
{
$this->mongo_db->order_by(array("_id"=>-1));
$data = $this->mongo_db->get("board");
return $data;
}
public function write($name, $contents)
{
$this->mongo_db->insert("board", array("name"=>$name, "contents"=>$contents));
}
public function delete($id)
{
$this->mongo_db->where(array("_id"=>new MongoId($id)));
$this->mongo_db->delete("board");
}
}
?>
6. CodeIgniter Controller 만들기
리스트를 보여주는 index와 글쓰기 write, 글삭제 delete가 있습니다.
/application/controllers/board.php
{
public function __construct()
{
parent::__construct();
$this->load->model("board_model");
$this->load->helper('url');
}
public function index()
{
$data["list"] = $this->board_model->getList();
$this->load->view("board", $data);
}
public function write()
{
$name = $this->input->post("name", true);
$contents = $this->input->post("contents", true);
$this->board_model->write($name, $contents);
redirect("/board/index", "refresh");
}
public function delete()
{
$id = $this->input->post("id", true);
$this->board_model->delete($id);
}
}
?>
7. Condeigniter view 만들기
위에 Controller에서 index()함수를 보면 board라는 view를 호출하게 되어있습니다. board라는 view를 만듭니다.
/application/views/board.php
<html>
<head>
<meta charset="utf-8">
<script type="text/javascript" src="http://code.jquery.com/jquery-1.6.1.min.js"></script>
<script>
$(document).ready(function(){
$(".btnDelete").click(function(){
var _id = $(this).attr("_id");
$.post("delete", {id:_id}, function(){
alert("삭제되었습니다.");
window.location.href = "index";
});
});
});
</script>
</head>
<body>
<form action="write" method="post">
<input type="text" name="name" /><br />
<textarea name="contents"></textarea>
<input type="submit" value="글쓰기" />
</form>
<ul>
<?php foreach ($list as $board):?>
<li>
<?php echo $board["name"];?> : <?php echo $board["contents"];?>
<input class="btnDelete" type="button" _id="<?php echo $board["_id"]?>" value="삭제" />
</li>
<?php endforeach;?>
</ul>
</body>
</html>
지금 jquery ajax랑 form전송이 짬뽕이 되었는데, 그냥 그러려니 하세요-_-
어쨌든 글 작성 시에는 write를 호출하고, 삭제 시에는 delete를 호출하면 잘 작동합니다. MongoDB도 잘 작동을 해서 입력 삭제가 잘 되네요.
PS. 뭔가 작성하면서 빠뜨린 기분이네...