1. MongoDB 설치

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['base_url']    = 'http://localhost/codeigniter/';
$config['index_page'] = '';


그리고, localhost/codeigniter/index.php/~~~ 이런 형태가 되는데, index.php를 없애고 싶으면 이렇게 하면 되는 듯 합니다.
압축푼 폴더에 즉, codeigniter에 .htaccess 파일을 만들어서
RewriteEngine on
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
<?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
class Board extends CI_Controller
{
    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
<!DOCTYPE html>
<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. 뭔가 작성하면서 빠뜨린 기분이네...
 
Posted by 머드초보
,