Sunday, April 28, 2013

Extends Session Time for Every Request

Extend Session
Why I worte this post?


1. After loging application, session time starts {Session Time}
2. For example, Session time set as 30 It means, your Session will validate after 30minutes late from first login
3. if you want to extends session time from some request within 30minute
4. you have to add duration from
4. below is solution to extends session time
// this is the time session created
long createdtime=session.getCreationTime();
// current Time
long currentTime = System.currentTimeMillis();
long lastAcessedTime = session.getLastAccessedTime();
// duration from first session created
int duration= (int)((currentTime - lastAcessedTime)/1000);
// session time
int inactive=session.getMaxInactiveInterval();
// set new session time (duration + original session Time)
request.getSession().setMaxInactiveInterval(duration+ inactive);


Saturday, April 27, 2013

Very Easy Setting Mod_jk

Why I write this post is I spend a lot of my time to setting up Apache and Tomcat7 width Mod_jk
There are lots of posts on website But proper to my computer setting
I Hope this guide to save your time
yum remove httpd
yum install httpd httpd-devel
after httpd installed
you have to download tomcat-connectors.
the version what i installed is tomcat-connectors-1.2.35-src
cd native
./configure --with-apxs=/usr/sbin/apxs
make
make install

you can find mod_jk.so /etc/httpd/modules
### Mod_jk : connect tomcat ####

httpd.conf add below
LoadModule jk_module modules/mod_jk.so

JkWorkerProperty worker.list=ajp13w
JkWorkerProperty worker.ajp13w.type=lb
JkWorkerProperty worker.ajp13w.balanced_workers=WAS1,WAS2
JkWorkerProperty worker.sticky_session=true

JkWorkerProperty worker.WAS1.type=ajp13
JkWorkerProperty worker.WAS1.host=localhost
JkWorkerProperty worker.WAS1.port=8009
JkWorkerProperty worker.WAS1.socket_timeout=3
JkWorkerProperty worker.WAS1.prepost_timeout=1000
JkWorkerProperty worker.WAS1.connect_timeout=1000
JkWorkerProperty worker.WAS1.lbfactor=1

JkWorkerProperty worker.WAS2.type=ajp13
JkWorkerProperty worker.WAS2.host=192.168.0.32
JkWorkerProperty worker.WAS2.port=8009
JkWorkerProperty worker.WAS2.socket_timeout=3
JkWorkerProperty worker.WAS2.prepost_timeout=1000
JkWorkerProperty worker.WAS2.connect_timeout=1000
JkWorkerProperty worker.WAS2.lbfactor=1

JkLogFile logs/jk.log
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
#JkMount /*.jsp ajp13w
JkMount /* ajp13w
JkMount /example/* ajp13w

JkUnMount /*.html ajp13w
JkUnMount /*.txt ajp13w
JkUnMount /*.gif ajp13w
JkUnMount /*.jpg ajp13w
#JkMount /servlet/* ajp13w
apache mpm should use worker.
basic setting is prefork
[root@node1 httpd]# apachectl -l
Compiled in modules:
core.c
prefork.c
http_core.c
mod_so.c


/etc/sysconfig/httpd
#HTTPD=/usr/sbin/httpd.worker remove #

[root@buy-0936 sysconfig]# apachectl -l
Compiled in modules:
core.c
worker.c
http_core.c
mod_so.c

You finally success mod_jk. If you have Question Reply~!

Wednesday, April 24, 2013

Spring Scope

Generally Spring has 5type of scopes
  • 1. SingleTon : Spring IOC make one bean context for container
  • 2. Prototypes : Every request, Spring IOC make every new context
  • 3. Request : For One Request, Spring IOC make one bean context
  • 4. Session : For Session, Spring IOC make one bean context
  • 5. GlobalSession : ...
First default Scope(Singleton)
Student class
package prototype;

/**
 * @author jjhangu
 * 
 */
public class Student {
 private String name = null;

 /**
  * @author jjhangu @create 2013. 4. 25.
  */
 public String getName() {
  return name;
 }

 /**
  * @author jjhangu @create 2013. 4. 25.
  */
 public void setName(String name) {
  this.name = name;
 }

}
Bus class
package prototype;

import java.util.ArrayList;
import java.util.List;

/**
 * @author jjhangu
 * 
 */
public class Bus {

 private List students = new ArrayList();

 public void addStudent(Student student) {
  students.add(student);
 }

 public String getStudents() {
  String names = "";
  for (final Student student : students) {
   names = names + "," + student.getName();
  }
  return names;
 }
}

Main class
package prototype;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @author jjhangu
 * 
 */
public class Main {

 public static void main(String args[]) {
  final ApplicationContext context = new ClassPathXmlApplicationContext("Prototype.xml");

  final Student aaa = (Student) context.getBean("aaa");
  final Student bbb = (Student) context.getBean("bbb");
  final Student ccc = (Student) context.getBean("ccc");

  final Bus bus1 = (Bus) context.getBean("bus");
  bus1.addStudent(aaa);
  bus1.addStudent(bbb);

  System.out.println(" Bus 1 list : " + bus1.getStudents());

  final Bus bus2 = (Bus) context.getBean("bus");
  bus2.addStudent(ccc);

  System.out.println(" Bus 2 list : " + bus2.getStudents());
 }
}

Prototype.xml class


      
    
 
 
 
   
    aaa
   
 
 
 
   
    bbb
   
 
 
 
   
    ccc
   
 
 
 

Bus 1 list : ,aaa,bbb
Bus 2 list : ,aaa,bbb,ccc

Second Scope(prototype)
Prototype.xml class


      
   
 
 
 
   
    aaa
   
 
 
 
   
    bbb
   
 
 
 
   
    ccc
   
 
 
 

Bus 1 list : ,aaa,bbb
Bus 2 list : ,ccc
Today, I registered this Blogger for writing some useful codes.
I hope this first step would bring me good things

Tuesday, April 23, 2013

Spring Annotation Qualifier

@Autowired Annotation finds which bean is proper to set
if there are more than one bean, @Autowired don't know which bean is proper
so use @Qualifier to target the proper bean

HelloController class
public class Qualifier{
package com.sang.common.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
@RequestMapping("/welcome")
public class HelloController {

 @Autowired
 @Qualifier("helloTwoWorld")
 private HelloWorld helloWorld;

 @RequestMapping(method = RequestMethod.GET)
 public String printWelcome(ModelMap model) {

  model.addAttribute("message", helloWorld.getName());
  return "hello";

 }

}
}
HelloWorld class

package com.sang.common.controller;

/**
 * Spring bean
 * 
 */
public class HelloWorld {
 private String name;

 public void setName(String name) {
  this.name = name;
 }

 /**
  * @author jjhangu @create 2013. 4. 24.
  * 
  * @return the name
  */
 public String getName() {
  return name;
 }

 public void printHello() {
  System.out.println("Spring 3 : Hello ! " + name);
 }
}
mvc-dispatcher-servlet.xml


 

 
  
   /WEB-INF/pages/
  
  
   .jsp
  
 
 
 


Qualifier.xml


      
 
   
    one
    
   
 
 
 
   
    two
    
   
 
 
 
Log
http://localhost:8080/SpringQualifier/welcome
you will see : Message : two

This is How to Use SyntaxHighlighter in blogger

Hello SyntaxHighlighter

If you want to make your codes clean in your blog
use this SyntaxHighlighter
It Probably make your code clean
follow this step





 
 



 



 





 





Hello SyntaxHighlighter



function helloSyntaxHighlighter()
{
 return "hi!";
}


Awesome ?? !

function helloSyntaxHighlighter()
{
 return "hi!";
}

Monday, April 22, 2013

cassandra nodetool troubleshooting

./nodetool -h localhost ring

if you can see this line

Failed to connect to '127.0.0.1:7199': Connection refused


change "cassandra-env.sh"

JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=<hostname>"

Friday, April 19, 2013

HttpClient setCookies from Webview in android

this is real

I seached a bunch of time but there are nothing to work

this is a solution

if you are interested in Huybrid Webview

doing this


URI uri = new URI("http://www.xxx.xxxx/files/test.jsp");

HttpClient httpclient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(uri);

String cookies = CookieManager.getInstance().getCookie(
"http://203.233.82.229/files/test.jsp");
Log.i("cookie", "cookie " + cookies);

httpPost.setHeader("Cookie", cookies);
HttpResponse response = httpclient.execute(httpPost);

Thursday, April 18, 2013

@Async in Spring Future

FutureAnnotaion class
/**
 * (c)Copyright 2010-2010, BaruSoft Co., Ltd. All rights reserved 
* * @description
* * @create 2013. 4. 18. * @author jjhangu */ package com.jjhangu.core; import java.util.concurrent.Future; import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.AsyncResult; /** * @author jjhangu * */ public class FutureAnnotaion { @Async public Future getMessage(int j) { final int result = 0; for (int i = 0; i < 10000000; i++) { if (i == (10000000 - 1)) { System.out.println("finish : " + j); } } return new AsyncResult(result); } }
FutureAnnotationMain class
/**
 * (c)Copyright 2010-2010, BaruSoft Co., Ltd. All rights reserved 
* * @description
* * @create 2013. 4. 18. * @author jjhangu */ package com.jjhangu.core; import java.util.concurrent.ExecutionException; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * @author jjhangu * */ public class FutureAnnotationMain { public static void main(String args[]) throws InterruptedException, ExecutionException { final ApplicationContext context = new ClassPathXmlApplicationContext("SpringBeans.xml"); final FutureAnnotaion obj = (FutureAnnotaion) context.getBean("futureAnnotaion"); for (int i = 0; i < 10; i++) { obj.getMessage(i); } } }
SpringBeans.xml


      
 
      
 

 
 
 
pom.xml

 4.0.0
 com.mkyong.core
 Spring3Example
 jar
 1.0-SNAPSHOT
 Spring3Example
 http://maven.apache.org

 
  3.0.5.RELEASE
 

 
  
   junit
   junit
   4.8.2
   test
  

  
  

  
   org.springframework
   spring-context
   ${spring.version}
  

  
   cglib
   cglib
   2.2.2
  

 


log
finish : 8
finish : 4
finish : 9
finish : 7
finish : 6
finish : 5
finish : 3
finish : 0
finish : 2
finish : 1

Tuesday, April 16, 2013

Cassandra Node and Cluster add

http://theeye.pe.kr/entry/an-example-of-adding-new-node-and-operating-nodes-on-cassandra

노드랑 클러스트 추가

Monday, April 15, 2013

java Object Poolable

GenericObjectPool의 설정에 관한 메모이다. 
아래의 사이트에서 번역해 온 내용임을 밝힌다. 
누군가 벌써 해놨을지도 모르지만.. 
http://commons.apache.org/pool/apidocs/org/apache/commons/pool/impl/GenericObjectPool.html 

설정가능한 ObjectPool의 구현체


적절한 PoolableObjectFactory과 관련하여 GenericObjectPool은 
임의의 오브젝트에게 견고한 풀링을 기능적으로 제공한다. 

GenericObjectPool은 수많은 설정가능한 파라메터를 제공한다. 

* maxActive : 주어진 시간에서의 풀(클라이언트가 보고있거나, 대기상태에 있는)에 의해 할당되어 관리되는오브젝트의 최대수. 설정이 양수가 아닌경우에는 한번에 풀에서 관리될 수 있는 오브젝트의 숫자에는 제한이 없다. 오브젝트의 수가 maxActive에 다다른 경우, 풀은 고갈되었다라고 말한다. 기본 설정은 8이다. 

* maxIdle : 어떠한 시간에 풀에서 대기상태로 관리되어 질수 있는 최대 수이다. 음수인경우에는 풀에서 대기상태로 있는 오브젝트의 수에 제한이 없는것으로 간주한다. 기본설정은 8이다. 

* whenExhaustedAction : borrowObject() 실행시 풀이 고갈되었을때의 행동을 지정한다. 

* WHEN_EXHAUSTED_FAIL, borrowObject() 인경우 NoSuchElementExcption을 던질것이다.

* WHEN_EXHAUSTED_GROW, borrowObject() 인경우 새로운 오브젝트를 만들고 그것을 리턴한다. (근본적으로 maxActive가 의미가 없어진다. )

* WHEN_EXHAUSTED_BLOCK, borrowObject() 인경우 새 오브젝트혹은 대기오브젝트가 사용가능해 질때까지  블럭- Object.wait()를 호출 - 시킨다. maxWait값이 양수인경우 수 밀리세컨드동안 borrowObject()를 블럭시키고 그후에 NoSuchElementException을 던지게 될것이다. maxWait가 음수라면 borrowObject()메서드는 영원히 블럭된다. (헐~)

* testOnBorrow가 설정되어 있으면, borrowObject()메서드를 통해 오브젝트를 리턴하기 전에 각각의 오브젝트의 유효성을 확인 하려고 할것이다.
(팩토리의 PoolableObjectFactory.validateObject(T) 메서드를 사용한다. ) 
유효성 체크에 실패하면 풀에서 그 오브젝트를 떨궈내고 다른 오브젝트를 빌려오게 될것이다. 기본설정은 false이다. 

* testOnReturn이 설정되어 있으면, returnObject(T)를 통해 풀에 오브젝트를 반환하려고 할때 그 오브젝트의 유효성을 확인 하려고 할것이다. (팩토리의 PoolableObjectFactory.validateObject(T) 메서드를 사용한다.) 
유효성 체크에 실패하면 풀어세 떨궈낸다. 기본 설정은 false이다. 


옵션으로, 한가지 설정이 더있다. 풀에서 대기상태로 주저 앉아버린 오브젝트들을 쫓아낼 수 있는지 조사하기 위해 그리고 대기 오브젝트 수를 최소값이 되도록 보장하기위한 것이다. 이것은 한개의 'idle object eviction(대기 오부젝트 쫒아내기)' 스레드에
의해 수행되며, 비동기적으로 실행된다. 이 옵션을 설정할 경우는 주의해야한다. Eviction(오브젝트 쫓아내기)은 풀로 부터 오브젝트를 얻으려고하는 클라이언트 스레드와 다툴것이다. 그러므로 Eviction이 매우 빈번하게 일어난다면 성능상의 문제를 가져오게 될것이다. 대기 오브젝트를 쫓아내는 스레드는 아래의 어트리 뷰트들로 설정이 가능할것이다. (할것이다는 머임)

* timeBetweenEvictionRunsMillis : 대기 오브젝트를 쫓아내는 스레드가 "실행" 되기전에 얼마만큼 잠들어 있어야 되는지를 나타낸다. 음수로 되어있으면, 대기 오브젝트 쫓아내는 스레드는 올라오지 않는다. 디폴트 설정은 -1 이다. (즉 기본 설정은 사용안함이다.)

* minEvictableIdleTimeMills : 오브젝트가 풀에서 대기상태로 주저앉기 전에 idleTime에 의거해 쫓아 낼수 있는 최소 시간량을 명시한것이다. (시간제 피씨방, 만화방을 생각하면 되는건가.) 음수로 설정되어 있으면, idle time만으로는 어떤 오브젝트로 쫓아내지 않는다.  이 설정은 timeBetweenEvictionRunsMillis > 0 이 아니면 전혀 효과가 없다. 기본값은 30분이다. 

* testWhileIdle : 대기 오브젝트이든 아니든 팩토리의 PoolableObjectFactory.validateObject(T)에 의해
유효성을 체크하게된다. 유효성체크에 실패한 오브젝트는 풀에서 떨궈진다. 이 설정은 timeBetweenEvictionRunsMillis > 0 이 아니면 전혀 효과가 없다.디폴트 설정은 false이다. 

* softMinEvictableIdleTimeMills : 오브젝트가 풀에서 대기상태로 주저앉기 전에 대기오브젝트를 쫓아내는 스레드에 의해 쫓겨나게 되는 최소시간량을 몇시한다. 추가적인 조건으로 "minIdle"오브젝트의 인스턴스는 풀에 남아 있어야 된다. 음수로 설정되어 있으면 어떠한 오브젝트가 대기상태에 빠지더라도 쫓겨나지 않는다. timeBetweenEvictionRunsMillis > 0 이 아니면 이 설정은 무효다. 그리고 이 설정은 minEvictableIdleTimeMills가 유효한경우에는 무시된다. 디폴트 설정은 -1이다. (무효)

* numTestsPerEvictionRun : 대기 오브젝트를 쫓아내녀석(스레드)의 갯수. timeBetweenEvictionRunsMillis > 0 이 아니면 이 설정은 무효다. 기본값은 3이다.

대기 오브젝트를 존중해주려면, 풀은 LIFO큐로도 설정이 가능하다. 항상 가장 최근에 사용된 객체가 풀에서 부터 리턴된다. 또는 FIFO 큐는 풀의 가장 오래된 오브젝트 부터 빌려온다. 


* lifo : 대기 오브젝트이든 아니든 풀은 last-in-first-out으로 객체를 리턴한다. 디폴트는 true

GenericObjectPoll 은 PoolableObjectFactory가 없다면 쓸모없다. null이 아닌 팩토리는 풀이 생성되기 전에 생성자의 인자 혹은 setFactory(org.apache.commons.poll.PoolableObjectFactory)로 제공되어 져야한다. 

Friday, April 12, 2013

1.2.3 user and password setting

1.In the cassandra.yaml, comment out the default AllowAllAuthorizer and add the CassandraAuthorizer as shown
here:
#authorizer: org.apache.cassandra.auth.AllowAllAuthorizer
authorizer: org.apache.cassandra.auth.CassandraAuthorizer


and restart -> now you can access to cassandra 

cassandra-cli -u cassandra -pw cassandra 

because cassandra/cassandra is default setting

============================================================================

2. if you use window and want to connect cqlsh 

refer to this blog


============================================================================

3. access on prom "cassandra_path/bin"/python cqlsh -u cassandra -p cassandra

CREATE USER spillman WITH PASSWORD 'Niner27';
CREATE USER akers WITH PASSWORD 'Niner2' SUPERUSER;
CREATE USER boone WITH PASSWORD 'Niner75' NOSUPERUSER;

DROP USER user_name

Wednesday, April 10, 2013

Cassandra Gui Tool download site

currently cassandra port 8080 was change to 7199


download 0.8beta gui tool

http://code.google.com/a/apache-extras.org/p/cassandra-gui/downloads/list

Tuesday, April 9, 2013

2 day : get where


// make Users column tables


create column family Users with comparator=UTF8Type and default_validation_class=UTF8Type and key_validation_class=UTF8Type and column_metadata=[{column_name: fname, validation_class: UTF8Type}, {column_name: email, validation_class:UTF8Type}, {column_name: state, validation_class: UTF8Type, index_type:KEYS}];

//


set Users['song']['fname']='moo chan';
set Users['song']['email']='mcsong@example.com';
set Users['song']['state']='seoul';

set Users['choi']['fname']='won woo';
set Users['choi']['email']='wonwoo@example.com';
set Users['choi']['state']='seoul';

set Users['jang']['fname']='jang woo';
set Users['jang']['email']='jangwoo@example.com';
set Users['jang']['state']='boosan';

 get Users where state='seoul';

Cassandra Basic Use~!


this is basic Guide for users who start it first time

follow step by step from top to bottom

// make keyspace
[default@unknown] create keyspace MyKeyspace with placement_strategy='org.apache.cassandra.locator.SimpleStrategy' and strategy_op
tions ={replication_factor:1};

use MyKeyspace

// make column fammily
create column family User with comparator=UTF8Type and default_validation_class=UTF8Type and key_validation_class=UTF8Type;

// insert data
[default@MyKeyspace] set User['song']['fname']='moo chan';
Value inserted.
Elapsed time: 36 msec(s).
[default@MyKeyspace] set User['song']['email']='ehewitt@example.com';
Value inserted.

// count data
[default@MyKeyspace] count User['song'];
2 columns

// get data
[default@MyKeyspace] get User['song'];
=> (column=email, value=ehewitt@example.com, timestamp=1365494876521000)
=> (column=fname, value=moo chan, timestamp=1365494847746000)
Returned 2 results.
Elapsed time: 28 msec(s).

// remove data
[default@MyKeyspace] del User['song']['email'];
column removed.
Elapsed time: 19 msec(s).

카산드라 설치 (윈도우)


카산드라 설치 (윈도우)
1. 파일을 다운 받는다.
2. 일단 JAVA_HOME이라는 환경변수가 잡아져있어야 한다
3. cassandra 설치한 폴더로 간다
4. cmd cassandra -f 실행  // -f 옵션은
5. cssandra-cli 로 접속한다.
 - cassandra-cli -h localhost -p 9160
6. Mission Complete

질문이 있으면 댓글 달아주세요

Monday, April 8, 2013

SNS Time Line if using No Sql

I'm not sure if it is best choice

plz share your opinion

1. if new topic is created, the data should be inserted into writer's friends time line.
2. if topic is deleted, the data should be removed from writer's friends time line.
3. if we are no more friends, all of friend's datas should be removed
4. if i'm your friend from now on, you data should be inserted into my time line.
..

Sunday, April 7, 2013

mod_jk Thread 설정


yum install httpd httpd-devel

해서 httpd 설치

그다음

cd tomcat-connectors-1.2.35-src
./configure --with-apxs=/usr/local/apache2/bin/apxs
make
make install
하면 mod_jk.so 파일이 httpd의 모듈 디렉토리에 들어감


### Mod_jk : connect tomcat ####

LoadModule jk_module modules/mod_jk.so

JkWorkerProperty worker.list=ajp13w
JkWorkerProperty worker.ajp13w.type=lb
JkWorkerProperty worker.ajp13w.balanced_workers=WAS1,WAS2
JkWorkerProperty worker.sticky_session=true

JkWorkerProperty worker.WAS1.type=ajp13
JkWorkerProperty worker.WAS1.host=localhost
JkWorkerProperty worker.WAS1.port=8009
JkWorkerProperty worker.WAS1.socket_timeout=3
JkWorkerProperty worker.WAS1.prepost_timeout=1000
JkWorkerProperty worker.WAS1.connect_timeout=1000
JkWorkerProperty worker.WAS1.lbfactor=1

JkWorkerProperty worker.WAS2.type=ajp13
JkWorkerProperty worker.WAS2.host=192.168.0.32
JkWorkerProperty worker.WAS2.port=8009
JkWorkerProperty worker.WAS2.socket_timeout=3
JkWorkerProperty worker.WAS2.prepost_timeout=1000
JkWorkerProperty worker.WAS2.connect_timeout=1000
JkWorkerProperty worker.WAS2.lbfactor=1

JkLogFile logs/jk.log
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
#JkMount /*.jsp ajp13w
JkMount /* ajp13w
JkMount /example/* ajp13w

JkUnMount /*.html ajp13w
JkUnMount /*.txt ajp13w
JkUnMount /*.gif ajp13w
JkUnMount /*.jpg ajp13w
#JkMount /servlet/* ajp13w



#### 아파치 MPM은 Worker 모델을 사용한다
[root@node1 httpd]# apachectl -l
Compiled in modules:
  core.c
  prefork.c
  http_core.c
  mod_so.c

[root@node1 httpd]# httpd -V
#HTTPD=/usr/sbin/httpd.worker 주석 해제

/etc/sysconfig/httpd

[root@buy-0936 sysconfig]# apachectl -l
Compiled in modules:
  core.c
  worker.c
  http_core.c
  mod_so.c


worker.c로 동작

웹서버에서의 AJP connection 개수는 AJP connector의 maxThreads 개수보다 작아야 한다.

AJP connector는 쓰레드가 하나의 connection을 서비스하는 구조이므로, 쓰레드 개수를 넘는 connection은 받아들일 수 없다.
따라서, 웹 서버의 최대 ajp connection 개수를 maxThreads 이상 설정해서는 안된다.


그렇다면 최대 ajp connection 개수는 어떻게 설정될까?
최대 ajp connection 개수 = 최대 프로세스 개수 * connection_pool_size



  최대 프로세스 개수
    Prefork 모델: MaxClients
    Worker 모델: MaxClients / ThreadsPerChild
    NT Thread 모델: 1

  connection_pool_size 기본값
    Prefork 모델: 1
    Worker 모델: ThreadsPerChild
    NT Thread 모델: ThreadsPerChild




reference http://clotho95.blog.me/140047805883