기본 콘텐츠로 건너뛰기

6월, 2017의 게시물 표시

MongoDB C driver 사용법 6 - REMOVE

mongoc_collection_delete() 이것도 있는것 같지만 이놈은 Deprecated 됐습니다!
mongoc_collection_remove() 이놈을 사용해주세요!
그럼 remove는 예제소스로 간결하게 지나가 보겠습니다!

#include <bson.h> #include <mongoc.h> #include <stdio.h> #define SERVER "mongodb://localhost:27017/" #define DATABASE "MY_MONGO" #define COLLECTION "MY_MONGO_COLLECTION" int main (int argc, char *argv[]) { mongoc_client_t *client; mongoc_collection_t *collection; bson_error_t error; bson_t *doc; // mongoDB C driver 초기화 + DB 클라이언트 생성 mongoc_init (); client = mongoc_client_new (SERVER); mongoc_client_set_appname (client, "find_example"); // 컬랙션에 접근할 객체 생성 collection = mongoc_client_get_collection (client, DATABASE, COLLECTION); // 지울 대상을 찾을 조건 데이터 작성 doc = bson_new (); BSON_APPEND_UTF8 (doc, "uid", "user4"); if (!mongoc_collection_remove (collection, MONGOC_REMOVE_SINGLE_REMOVE, doc, NULL, &a…

MongoDB C driver 사용법 5-2 - FIND (SELECT)

"MongoDB C driver 사용법 5-1 - FIND (SELECT)"에서
기본적인 select만 했다면

내가 원하는 필드만 찾고,
정렬도 하고,
최대 탐색수도 설정할수있도록
옵션을 지정해보겠습니다.

예제소스 고고

#include <bson.h> #include <mongoc.h> #include <stdio.h> #define SERVER "mongodb://localhost:27017/" #define DATABASE "MY_MONGO" #define COLLECTION "MY_MONGO_COLLECTION" int main (int argc, char *argv[]) { mongoc_client_t *client; mongoc_collection_t *collection; mongoc_cursor_t *cursor; mongoc_read_prefs_t *read_prefs; bson_iter_t iter; bson_iter_t value; const bson_t *doc; bson_t *filter; bson_t *opts; bson_error_t error; char *str; // mongoDB C driver 초기화 + DB 클라이언트 생성 mongoc_init (); client = mongoc_client_new (SERVER); mongoc_client_set_appname (client, "find_example"); // 컬랙션에 접근할 객체 생성 collection = mongoc_clien…

MongoDB C driver 사용법 5-1 - FIND (SELECT)

NoSQL은 FIND
RDB는 SELECT

뭐가 다르다고.. 표현을 달리했을까 ?
암튼.. 익숙한 select라는 표현을 더 자주쓰게되는것 같다

select 에 요점은..
원하는걸 찾아서 필요한 데이터만 추출
원하는 데이터를 정렬 정도 이려나 ?

우선은 완전 기본적인 select 예제를 작성해봤습니다.
(미리 birth_year:2001 이라는 데이터 두개를 삽입해둔 상태에서 아래 소스를 실행합니다)



#include <bson.h> #include <mongoc.h> #include <stdio.h> #define SERVER "mongodb://localhost:27017/" #define DATABASE "MY_MONGO" #define COLLECTION "MY_MONGO_COLLECTION" int main (int argc, char *argv[]) { mongoc_client_t *client; mongoc_collection_t *collection; mongoc_cursor_t *cursor; bson_iter_t iter; bson_iter_t value; const bson_t *doc; bson_t *filter; bson_error_t error; char *str; // mongoDB C driver 초기화 + DB 클라이언트 생성 mongoc_init (); client = mongoc_client_new (SERVER); mongoc_client_set_appname (client, "find_example"); // 컬랙션에 접근할 객체 생성 …

MongoDB C driver 사용법 4 - UPDATE

UPDATE !

보통 업데이트라 함은
기존 내용에 일부를 변경할때 사용한다

그런데 이번 예제를 작성하면서는
기존 내용을 덮어쓰기 (overwrite)하는 현상때문에 해결방법을 찾느라 삽질을 좀했다..

삽질과정
update 함수의 플래그 변경을통한 update 시도도 해보고
다른 업데이트 함수가 있는지 찾다가
mongoc_collection_save함수가잇어서 사용하려고했더니
"Deprecated" 될거라고 하고 -_-
update문을 사용하려면 기존내용을 일단 select 해와서 동일 객체를 만들어서 일부만 변경된 값을 반영해야하나 ? 하고 고민고민고민...

다행히도 일부만 update 할수있도록 제공해주고있는걸 발견해서 아래 내용에 정리해보았다

그럼 예제소스 고고 ~


#include <bson.h> #include <mongoc.h> #include <stdio.h> #define SERVER "mongodb://localhost:27017/" #define DATABASE "MY_MONGO" #define COLLECTION "MY_MONGO_COLLECTION" int main (int argc, char *argv[]) { mongoc_client_t *client; mongoc_collection_t *collection; bson_error_t error; bson_t reply; bson_t *doc; bson_t child; bson_t *query; // mongoDB C driver 초기화 + DB 클라이언트 생성 mongoc_init (); client = mongoc_client_new…

MongoDB C driver 사용법 3 - BSON 객체 만들기 그리고 INSERT

MY_MONGO 라는 데이터베이스에
 - MY_MONGO_COLLECTION 이라는 컬레션을 만들었습니다.

그럼이제
MY_MONGO_COLLECTION에
bson_t 구조체로 문서(document)를 만들어서 insert 하는 방법을

예제소스와 함께 설명해보겠습니다.

[참고]
bson_t 객체를 만드는 방법은 3가지가 있습니다.
1. 함수를 사용하는방법
2. BCON을 사용하는 방법
3. JSON 문자열을 BSON으로 전환하는 방법
아래 소스에 주석으로 세가지방법이 안내되어있습니다.

#include <bson.h> #include <mongoc.h> #include <stdio.h> #define SERVER "mongodb://localhost:27017/" #define DATABASE "MY_MONGO" #define COLLECTION "MY_MONGO_COLLECTION" int main (int argc, char *argv[]) { mongoc_client_t *client; mongoc_collection_t *collection; bson_error_t error; bson_oid_t oid; // BSON Ojbect ID Abstraction bson_t *doc; // mongoDB C driver 초기화 + DB 클라이언트 생성 mongoc_init (); client = mongoc_client_new (SERVER); mongoc_client_set_appname (client, "insert_example"); // 컬랙션에 접근할 객체 생성 collection =…

MongoDB C driver 사용법 2 - create collection and key

MongoDB 서버 구축 완료
MongoDB C Driver 를 구비 완료
그럼 데이터베이스를 쌓아야겠죠 ?

우선 간단하게 집고넘어갈 개념을 MySQL 과 MongoDB를 비교해서 알려드릴께요

1. ----- 
MYSQL : 데이터베이스 = MongoDB : 데이터베이스
MYSQL : 테이블 = MongoDB : 컬레션

명칭이 다르긴한데.. 음..비슷한 개념이라고 이해하면 됩니다

2. ----- 
MongoDB 는 Document 기반 DB입니다.
Document라 함은 JSON 데이터 라고 생각하시면 되구요
mongoDB에서는 Binary JSON 이라고해서 BSON 이라는걸 사용하고있습니다

3. ----- 
따라서 아래와같은 간단한 설명을 할 수 있게됩니다
MYSQL : 데이터베이스에 테이블을 만들고 row 단위로 insert, update, select, delete를 한다.
MongoDB : 데이터베이스에 컬렉션을 만들고 document 단위로 insert, update, find, remove를 하다

여담. -----
RDB는 insert 뒤에 그 내용을 기반으로 update 를 하지만
NoSQL 에서는 insert 된게 없어도 update 시도하면
insert+update 가된느 upsert라는 개념이있다곤 하던데

그래서 찾아봤더니 _id 필드가 존재하면 update, 없으면 insert 하는 기능에
mongoc_collection_save() 함수가 있는데
이는.. 없어질것이니 사용하지말라고 권고되어있다.
(http://mongoc.org/libmongoc/current/mongoc_collection_save.html)

대신에 mongoc_collection_update() 함수 사용시
flag 파라미터를 MONGOC_UPDATE_UPSERT 로 설정하면 
upsert 를 수행한다


설명은 예제소스와 함께 주석으로 작성되며
동일한 기능에 대한 다른방식에 소스도 함께 작성해봤습니다.


주제 : 콜렉션 생성 및 키 설정
(키를 설정하게되면 키를 기준으로 인덱싱이…

MongoDB C driver 사용법 1 - 설치

MongoDB 서버를 설치했다면
Driver를 사용해서 서버에 접근해야할것이다.

아래 이미지에서 보여지듯이 다양한 언어를 지원하는 MongoDB Driver 종류를 볼수있는데요
저는 그중에서 C언어 기반에 MongoDB C Driver 1.6.3 을 사용하려고 합니다.



MongoDB C Driver Github :
https://github.com/mongodb/mongo-c-driver

드라이버 소개 페이지 :
http://mongoc.org/libmongoc/current/index.html



저는 MongoDB C Driver 소개페이지에서 안내하고있는 설치방법 중에서
소스설치 방법을 작성해보려 합니다.

초간단 드라이버 설치 시작 ! 

$ wget https://github.com/mongodb/mongo-c-driver/releases/download/1.6.3/mongo-c-driver-1.6.3.tar.gz

$ tar xzf mongo-c-driver-1.6.3.tar.gz

$ cd mongo-c-driver-1.6.3

$ ./configure --disable-automatic-init-and-cleanup

$ make

$ sudo make install

끝 ! 


그럼 컴파일할때 어떻게 참조 하나요 ? 

만약 C 로 코딩해서 test.c 라는 소스를 작성했다고 했을 때 
아래와같이 수행하면 됩니다. 

gcc -o test test.c -I/usr/local/include/libmongoc-1.0 -I/usr/local/include/libbson-1.0 -L/usr/local/lib/ -L/usr/lib64 -lmongoc-1.0 -lbson-1.0








MongoDB Server 설치 (몽고DB 서버 설치)

MongoDB Server 설치 (몽고DB 서버 설치)
[설치환경]
운영체제 : LINUX - Redhat 7.3 64bit (리눅스 레드햇)  설치방식 : 소스설치 ("mongodb-linux-x86_64-3.2.13.tgz")

아래 순서대로 차근차근 따라오시면 정상적으로 설치 가능하실거에요 ! 

[설치]
*** 모든 절차는 ROOT 계정으로 수행 합니다 ***
1. 소스 다운로드 (다운로드 경로는 임의로 / (root) 경로로 지정하겠습니다) $ cd / $ curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.2.13.tgz
2. 압축 해제 후 디렉토리명칭 변경 $ tar -zxvf mongodb-linux-x86_64-3.2.13.tgz $ mv mongodb-linux-x86_64-rhel70-3.4.4/ mongodb
3. 환경변수 등록 $ vi ~/.bashrc (아래 내용을 "~/.bashrc" 파일에 작성) export PATH=/mongodb/bin:$PATH
4. bashrc 적용 $ source ~/.bashrc
5. 설치확인 $ mongo --version  (버전출력되면 정상)
[DB 설정파일 작성 및 실행]
6. 변경 전 open file 수 변경확인 (아마 1024 일것이다) $ ulimit -a
7. linux open file 수 설정  $ ulimit -n 65536 (리눅스 오픈파일수 최대치)
$ vi /etc/security/limits.conf   nproc) (재부팅 후에도 반영될수있도록 아래내용 작성) (혹시모르니 openfile 말고도 open proccess 도 변경함) root          soft    nproc           65536                root          hard    nproc           65536 root          soft    nofile          65536 r…

[IONIC 개발팁]아이오닉 프레임워크 라이프사이클 (ionic framework lifecycle)

뷰에 접근하고, 나오기까지에 라이프사이클 정보입니다.

컨트롤러에서 화면 또는 데이터를 제어하고싶을때 꼭 필요한 정보이기에 공유해봅니다

[ 종류 ]

loaded
beforeEnter
enter
afterEnter
beforeLeave
leave
afterLeave

이름만 봐도 대충 짐작이 가시겠죠 ? ㅎㅎ
사용방법은 아래와 같습니다
◆◆◆◆◆ 영역에 위 이벤트를 작성하시면 해당하는 타이밍에 동작해요



$scope.$on('$ionicView.◆◆◆◆◆', function(){
});

[compressor.io]이미지 압축 온라인 툴

https://compressor.io/
손실 압축이라고는 하지만 거의 무손실에 가까운 화질 유지에  평균적으로 45% 수준의 용량감소 효과를 가져온다 
요즘 만들고있는 앱에 적용할수있을까 싶어서 찾아봤지만 별다른 소스코드는 제공하지 않는것 같고...
그냥 온라인에서 사용하는 이미지 압축도구 ?  정도로 생각하면 될것같다
완전 추천 !!! 

[ionic - 개발] 화면전환 애니메이션 제거 꿀팁

주제 : $state.go() 실행시 애니메이션 제거

Topic : Remove animation when running $state.go


ionic 은 화면관리를 ui-router 로 작동한다

이때 화면전환을 위해
$state.go("state_name"); 을 사용하게 되는데

화면전환시 멋대로 우에서 좌로 (forward)
또는 좌에서 우로 (back) 이동하는
애니메이션 효과가 발생한다


해결책 (solution)

$ionicViewSwitcher.nextDirection('none');
$state.go("state_name");

하.. 정말 화면전환 애니메이션 뻘짓때문에
처음에는
$ionicHistory.clearCache() 를 사용했었다...........


그리고..
IONIC - v1 으로 열심히 앱을 개발중입니다.
개발하면서 알게된 소소한 팁들 차차 공유해나가도록 해보겠습니다

그럼 이만 !