서버를 어떻게 세팅해야 할까?


설정해야 하는 대상

개발하는 것만큼 중요한 것이 서버의 세팅이다. 개발된 프로그램이 0.1초 걸린다고 해도 서버 세팅을 잘못하면 1초가 걸릴 수도 있다.
이러한 문제를 진단하는 가장 좋은 방법은 성능 테스트를 통해서 병목 지점을 미리 파악하는 것이다.

무조건 애플리케이션 위주로 병목을 찾는 것보다, 일단 문제가 될만한 세팅 값을 먼저 진단하는 것이 가장 효율적이다.
웹 기반의 시스템에서 성능에 영향을 줄만한 세팅을 나열해 보면 다음과 같다.


아파치 웹 서버의 설정

웹 서버는 반드시 WAS 앞에 두어야 한다.
웹에서 사용하는 어플리케이션 서버이지 웹 서버가 아니다. 정적인 부분은 웹 서버에서 처리해야 한다.


웹 서버의 Keep Alive

웹 서버와 웹 브라우저가 연결이 되었을 때 KeepAlive 기능이 켜져 있지 않으면, 매번 HTTP 연결을 맺었다 끊었다 하는 작업을 반복한다.
KeepAlive 기능이 켜져 있으면 두 개 정도의 연결을 열어서 끊지 않고, 연결을 계속 재사용한다.

KeepAlive 설정을 할 때 반드시 같이 해야 하는 설정이 있다.
KeepAlive-Timeout 설정이다.
마지막 연결이 끝난 이후에 다음 연결이 될 때까지 얼마나 기다릴지를 설정한다.

하지만 무조건 KeepAlive 옵션을 켜야 성능이 좋게 나오는 것은 아니다. 상황에 맞게 사용해야 한다.


DB Connection Pool 및 스레드 개수 설정

DB Connection Pool 과 스레드 개수에 대해서 알아보자.
이 두 항목의 개수는 메모리와 관련이 있다.

많이 사용할수록 메모리를 많이 점유하게 된다.
그렇다고 메모리를 위해서 DB Connection Pool 과 스레드 개수를 적게 지정하면,
서버에서는 많은 요청을 처리하지 못하고 대기할 수밖에 없다.

대부분의 WAS에서 DB Connection Pool의 개수를 최소치, 증가치, 최대치 등으로 지정할 수 있다.
최소치는 서버가 기동될 때 연결을 수행하는 개수이다.
최소 개수가 많으면 많을수록 서버 기동하는 시간이 오래 소요된다.

운영 중에는 최소 및 최대 값을 동일하게 하는 것이 좋다.

대부분 DB Connection Pool 보다 스레드 개수를 10개 정도 더 지정하는데,
이유는 스레드 개수가 DB Connection Pool 의 개수보다 적으면 적은 수만큼의 연결은 필요 없기 때문이다.

쉽게 스레드는 입구이고 DB Connection Pool은 출구라고 생각하면 된다.