AWS RDS


기존 개발 환경은 로컬과 STG - US.EAST Region EC2 의 WAS 에서


Toyko Region MySQL 을 바라보고 있었는데


Seoul Region 이 생겨서 로컬에서 더 빠르게 응답받고자 RDS.MySQL 을 생성했다.



로컬 앱과 WorkBench 에서는 별 문제 없이 잘 동작되는데


US.EAST 의 EC2 WAS 에서 DB Connection error 가 발생했다.


Security Group 은 Default 를 사용했는데 Inbound Rules 은


All Traffic 으로 되어 설정 돼있었는데, 


아래와 같이 TCP 를 따로 추가하니 DB 연결이 정상적으로 되더라.


US.EAST RDS 는 저 rule 을 추가하지 않아도 문제없었는데, 왜 Seoul Region 만 이런지는 잘모르겠다.







'AWS > RDS' 카테고리의 다른 글

[RDS] Seoul Region 에서 RDS 생성 후 TCP 접근 안되는 문제  (0) 2016.03.24
YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST



MongoDB 쿼리 옵션 모음



1. 프로젝션

프로젝션은 결과 값 도큐먼트에 대해 리턴할 필드를 지정하는 데 사용한다.


특별히 도큐먼트의 수가 많을 때 프로젝션을 사용하면 네트워크 지연(latency)과 디시리얼라이제이션에 들어가는

비용을 줄일 수 있다.


프로젝션은 다음과 같이 리턴할 필드로 보통 정의된다.


1) 리턴받고 싶은 필드를 정의하거나, 제외할 필드를 정의 할 수 있다.


db.users.find({}, {username:1})

==> 위 쿼리는 users 도큐먼트에서 username 필드와 _id 필드만을 리턴한다. _id는 디폴트로 항상 리턴한다.


포함시키지 않고싶은 필드는 0을 주면된다.

db.users.find({}, { address : 0, pay : 0})  // address와 pay 필드는 제외된 값이 리턴된다.



2) $slice - 리턴될 배열의 값을 어떤 범위 내에서 정할 수있다.

  예를 들어 리뷰를 여러 페이지로 나눠서 보여주길 원한다면 $slice 연산자로 제한할 수 있다.


도큐먼트 : { a:1, b:2, review:[{rating:3, ...},{},{},{},{},{},{},{},{},{}...] }


db.products.find({}, { review : { $slice: 12} }) // 결과값중 처음 12개만 가져온다.

db.products.find({}, { review : { $slice: -5} }) // 결과값중 마지막 5개만 가져온다.



$slice 는 2개의 숫자로 된 배열로도 가능하다. 각각. 스킵(skip), 리미트(limit) 를 나타낸다.


처음 24개의 리뷰를 제외하고 난 후 가져올 리뷰를 12개로 제한하는 쿼리

db.products.find({},{ review : { $slice : [24, 12]} })



3)   1) 과 2)를 조합하여 사용하는 예


바로위 쿼리에 review의 rating 필드만 가져오고 싶을때 


db.products.find({}, { review : { $slice : [24, 12], 'review.rating' : 1} } )








1. 정렬

정렬은 오름차순, 내림차순으로 정렬할 수 있다.


내림차순 

==> db.products.find({}).sort({ rating : -1 })


오름차순 

==> db.products.find({}).sort({ rating : 1 })


2개이상의 조건 

==> db.products.find({}).sort({ helpful: -1, rating: -1 })



추가중



YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST



노드에서 EventEmitter 를 이용하여 이벤트 방식으로 


웹 서버에서 라우트하는 코드에서


디비작업을 하는 코드를 분리하여, 의존성을 제거하고 비동기 처리 방법.


express 를 사용하였습니다.



1. 서버 js

var express = require('express')

  , routes = require('./routes') // 기본 index.js

  , pp = require('./public/properties').properties

  , clog = require('clog');


var app = module.exports = express.createServer();


.............. 설정들



app.post('/searchArea.margo', routes.searchArea);



2. Route - index.js

var dao = require('./db'); // routes/db.js 

exports.searchArea = function(req, res){

var cb = dao.getArea(req.body);

cb.on('end', function(err, result){

if(err) throw err;

res.send(result);

});

};



3. DB - db.js
(MySql을 사용하였습니다.)

var db = require('mysql');


var DATABASE = '데이타베이스 명';

var MYSQL_USER = "root";

var MYSQL_PASS = "apmsetup"; 


var mysql = db.createClient({

host: '127.0.0.1'

, database : DATABASE

, user: MYSQL_USER

    , password: MYSQL_PASS

});


var EventEmitter = require('events').EventEmitter;


var dao = module.exports = {


getArea: function(param){

var evt = new EventEmitter();

mysql.query("SELECT * FROM address WHERE area3 like concat(?, '%')"

, [param.searchText]

, function(err, result, fields){


evt.emit('end', err, result);

});

return evt;

}

};



설명

3번 에서 EventEmitter 를 생성하여 디비쿼리를 실행시킨후에 evt 를 리턴한다. (쿼리는 아직 끝나지않았다. 쿼리를 실행만 시켜놓고 바로 evt를 리턴해버린다.)


2번 에서 cb 는 3번에서 리턴해준 evt 에 on 리스너를 달아서 아까 발생시킨 'end' 이벤트를 기다린다.


디비 쿼리 작업이 다끝나고 디비결과가 콜백메소드로 들어오면 'end'이벤트를 발생시킨다. res.send(result);


그러면 2번에서 'end'이벤트에 달았던 리스너가 동작하면서 리스너 콜백이 실행된다.


끝. 즐거운 NodeJS~~~~ 


참고 : 변정훈님이 지으신 NODE.JS 프로그래밍 - 에이콘 출판사

YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST
  1. 로즈 2012.07.11 14:14 신고  댓글주소  수정/삭제  댓글쓰기

    와 감사합니다.. 도움이 많이 됬어요...

    코멘트 잘 안 다는데.. 너무 재밌게 잘보고 가게되서 몇자 적었네요.. ^^



출처 My Life Story | 복러브
원문 http://blog.naver.com/gjsfjqm/30003253480

mysql에서 LIMIT의 사용법

 

LIMIT는 출력되는 레코드의 개수를 제한할 때 사용됩니다가령 Table에 다음과 같이 입력되어있다고 가정할 때,

 

Item

Type

Amount

Day

주유비

책 구입

점심값

저녁값

담배구입

지출

지출

지출

지출

지출

40000

25000

5000

5000

1600

2003-12-24 10:00:00

2003-12-24 10:00:00

2003-12-24 10:00:00

2003-12-24 10:00:00

2003-12-24 10:00:00

 

처음부터 3개의 레코드를 읽어오려면 다음과 같이 SQL을 사용합니다.

 

mysql> select * from table LIMIT 3;

 

그럼 결과는 다음과 같이 출력되어집니다.

 

Item

Type

Amount

Day

주유비

책 구입

점심값

지출

지출

지출

40000

25000

5000

2003-12-24 10:00:00

2003-12-24 10:00:00

2003-12-24 10:00:00

 

또는 2번째부터 3개의 레코드도 가져 올수 있습니다그 사용법은 다음과 같습니다.

 

mysql> select * from table LIMIT 1, 3;

 

이때 주의 할 점은 첫번째 레코드의 시작은 0 입니다즉 LIMIT 1, 3 - 2번째부터 3 의 결과를 출력하게 됩니다그 결과는 아래와 같을 것입니다.

 

Item

Type

Amount

Day

책 구입

점심값

저녁값

지출

지출

지출

25000

5000

5000

2003-12-24 10:00:00

2003-12-24 10:00:00

2003-12-24 10:00:00

 

이 LIMIT를 사용하면 게시판등을 사용할 때 Paging시에 유용하게 사용될 수 있습니다.

 

'♨ DataBase > MySQL' 카테고리의 다른 글

MySQL 관련 10가지 TIP  (0) 2011.07.22
Mysql 함수 모음  (0) 2011.07.22
MySQL Query(쿼리)문 모음  (0) 2011.07.22
MYSQL 날짜 데이터 타입  (0) 2011.07.22
mysql 컬럼 삭제, 추가, 변경  (0) 2011.07.22
mysql에서 LIMIT의 사용법  (0) 2011.07.22
YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST