IT 전용글/MongoDB

MongoDB 셋팅과 php 연동 관련

회상형인간 2014. 2. 18. 15:56

1. MongoDB 설치

  OS별 설치방법이 공식홈페이지에 잘 나와있습니다.
   http://www.mongodb.org/display/DOCS/Quickstart

 

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

 

apmsetup  설치후 php.ini

 

extension=php_mongo-1.3.2RC1-5.2-vc9.dll 추가 및 server/php5/ext 에 해당 라이브러리 파일 복붙

후 아파치 서버를 재기동한후 phpinfo() 를 실행해 MongoDB관련 설정된것이 있나확인 있으면 성공

 

후에

$m  = new Mongo();

이걸 실행했을때 에러가 안나면 일단 성공임.

 

 

 

 

codeIgniter ?

php 프레임워크

공식홈페이지에서 다운로드 받고, apache 경로에 압축풀어주면 됩니다.

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. 뭔가 작성하면서 빠뜨린 기분이네...

 

 

 

 

'IT 전용글 > MongoDB' 카테고리의 다른 글

MongoDB JAVA Driver  (0) 2014.02.19
MongoDB 툴 로보몽고  (0) 2014.02.19
MongoDB 쿼리문들 정리  (0) 2014.02.18
MongoDB 정렬 및 java distinct 관련  (0) 2014.02.17
몽고DB설치관련  (0) 2014.01.31