[웹서버] 웹 서버 포퍼먼스 튜닝 [1] – 개념 및 정의
Web Performance Tuning 입니다. 웹서버 관리자라면 누구나 한번쯤 읽어보고 참고해야될 사항인거 같습니다. 도움이 되시길…
참고로 이글은 프세 99년 7월호에도 나왔던 글입니다.
Web Performance Tuning
한별 텔레콤 Internet Business Center
정성욱 [ Netkiller ]
비트 교육센터 강사
netkiller at hbtel.com | info at netkiller.com
1. Web Performance Tunning 소개 및 정의
웹 서비스의 성능 최적화는 오직 서버측에서만의 튜닝을 생각하기 쉬운데 사실, 정확한 의미의 성능 최적화는 웹 서비스 이용자와 서버측 모두의 성능 개선에 있다. 이 글은 아파치 웹 서버나, 유닉스, 리눅스 그리고 웹 브라우저에 이르기까지 통합적인 웹 서비스 성능 개선 방안을 다루므로, 세부적인 웹 서버 구축에 대한 설명등은 포함하지 않았다.
그러나 글의 후반부에서는 가상 호스팅 관리자를 위한 아파치 웹 서버의 성능 개선에 필요한 요소나 관련 세부 옵션에 대한 언급을 하고 있다.
필자는 현재 인터넷 관리자를 위한 온라인 공동체라는 [ 넷킬러 웹 사이트 : http://www.netkiller.com ]를
운영하고 있으며, 글에 대한 세부적인 질문과 의견은 해당 분야별 게시판을 이용하기 바란다. : – )
2. 기본적인 성능 개선 방안
가. 이용자측의 성능 개선 [익스플로러, 네스케이프]
웹 브라우저의 캐시를 최대한 활용한다.
브라우저의 옵션을 보면 다운 로드 받은 웹 문서를 브라우저의 캐시에 저장하여 다음 접속시 문서 변경 확인 여부 설정을 할수 있다.
여기서 가급적 자동(섹션당 한번)으로 설정해 준다. 익스플로러의 경우 캐시 사용량까지 미리 정해 줄수 있다.
Proxy 서비스를 활용한다.
프락시 서버는 이용자가 요청한 웹 페이지를 서버의 캐시에 임시로 저장하여 다음 요청이 있을시 해당 캐시 파일을 보내주어 속도의 개선 및 인터넷 부하를 줄여준다.
더 빠른 DNS 서버를 사용한다.
임의의 웹 사이트를 접속할 때 자주 볼수 있는 웹 브라우저의 접속 상황 메시지는 Contacting Host , Host Connected, File Transferred at 3.4kbps 등이다.
여기서 Contacting Host에서 Host Connected의 시간 간격이 비정상적으로 길다면 DNS 서버를 한번 체크해볼 필요가 있다.
DNS 서버는 이용자가 인터넷 에 접속할 때마다 사용하는 서비스이므로, 가급적 자신의
ISP에서 제공하는 빠른 네임 서버를 쓰는 것이 좋다.
자신의 ISP가 제공하는 프로그램 배포 관련Mirror 사이트를 활용한다.
해외 인터넷 사이트에서 프로그램 다운로드등에 대한 부하를 감소시키기 위하여 국내ISP들은 대부분 자사의 홈페이지아래 각종 Mirroring 사이트를 운영하고 있다. 예를 들어 tucows라는 인터넷 유틸리티 전문 사이트는 국내 isp에서 주기적으로 웹 사이트 전체를 복사하여 Mirror 사이트를 운영하고 있다.
자바 애플릿을 웹 브라우저에 미리 설치한다.
자바의 로딩 속도를 향상 시키기 위하여 필요한 자바 애플릿의 클라스 파일들을 이용자 웹 브라우저의 자바 라이브러리에 미리 설치한다. 가령 네스케이프의 경우 zip으로 압축된 라이브러리 파일을 열어 필요한 클라스 파일들을 추가하고 다시 zip으로 묵어주면 된다. 또는 임의의 디렉토리안에 클라스 파일들을 넣어 이용자가 직접 CLASSPATH에 해당 디렉토리를 추가하면 웹 서버로부터 애플릿을 다운받아 로컬에 설치된 코드를 참조하여 사용할 수 있다.
그러나 이방법은 임의의 이용자를 위한 성능 개선안이 될순 없다.
[O’Reilly : Web Performance Tuning 인용]
더 빠른 모뎀과 시스템 그리고 더 나은 그래픽 카드를 구입한다.
모뎀은 인터넷 속도를 좌우하므로 빠를수록 좋으며 그래픽 카드가 좋을수록 화면에 브라우징하는 속도가 개선될 수 있다.
나. 서버측의 성능 개선 [ 웹 서버 ]
더 빠른 인터넷 전용선을 확보한다.
성능을 개선할수 있는 가장 확실한 선택은 바로 더 빠른 전용선을 확보하는 것이다. 그러나 비용면에서 월 유지비가 많이 들어 가급적 사용량에 따라 최적의 전용선 속도를 선택하는 것이 현명하다.
인터넷 전용선 사용량은 Unix, Linux 용 네트워크 모니터링 프로그램으로 널리 알려진
MRTG(http://ee-staff.ethz.ch/~oetiker/webtools/mrtg/mrtg.html)를 가 많이
쓰인다. 이미 국내 모 ISP에서는 전용선 가입자에 대한 MRTG 및 보안 체크 서비스까지 제공하고 있다.
MRTG에서 자사의 인터넷 사용량(IN/OUT)이 전용선 속도의 80% 이상까지 다다르면 패킷 손실이 생겨 폭주 및 과부하가 자주 발생할수 있으므로, 전용선 업그레이드를 고려할 필요가 있다.
최적의 Subnet Mask를 설정한다.
라우터의 경우 불필요한 Subnet Mask를 줄여줄 필요가 있다.
가령 같은 라우터에 연결된 컴퓨터들의 IP address 갯수가 30개밖에 되지 않으면서 굳이 subnetmask를 255.255.255.0로 잡아 사용하게 되면 나머지 225개의 D class IP address를 검색하느라 라우팅 속도가 느려질 수 있다.
웹 서비스만을 위한 단독 시스템을 확보한다.
웹 서버와 메일 서버, 그리고 DNS 서버에 이르기까지 하나의 시스템으로 사용하는 경우가 많은데, 이것은 웹 서비스로는 치명적이다. 보안 문제가 생길수도 있으며, 웹 서버의 부하에 의해 다른 서비스에 차질이 생길수 있다. 물론, 그 반대의 경우도 가능하다. 가급적이면 웹 서버 시스템을 따로 구성하는데, 웹 서버 시스템의 경우 보통 RAM 용량을 충분히 확보하고 하드 드라이브는 빠른 스카시 타입을 사용함으로써 IO의 부하를 줄여 속도 향상을 가져올 수 있다. 연산이 과도한 CGI 프로그램이나 대용량의 DB 서버가 없다면 CPU까지는 굳이 업그레이드 할 필요는 없다. ^^
운영체제의 각종 제한 수치를 조정한다.
Linux의 경우 Sun과 같이 대용량 시스템이 아닌 PC급 서버를 기본 플렛폼으로 개발되고 서비스되는 까닭에 OS의 기본 설정이 Solaris에 비해 낮게 설정되어 있다. 결국 Linux에서 과부하를 이겨내기 위해서는 Linux 커널의 수정이 불가피하다. 그리고 운영체제에서의 TCP 재전송 최대 대기 시간 (TCP retransmit timeout)을 증가시킬 필요가 있다. 보통200 msec로 잡혀 있는데 느린 인터넷 환경에서는 200msec의 경우 TCP의 재전송 최대 대기 시간으론 부족할 수 있다. 이 외에도 웹 서버의 성능을 위해 각종 프로세스 관련 제한 수치를 조정할 필요가 있다.
웹 서버 프로그램의 성능을 최적화 한다.
웹 서버의 config 파일등에서 성능 향상을 위한 적절한 설정이 필요하다. 특히 아파치 웹 서버의 경우 기본 디폴트 값이 중 대형 웹 서비스를 하기엔 부족한면이 없지 않다. 최신 버전으로 업그레이드를 거듭할수록 더 많은 부하 및 속도에 대한 향상이 이루어 지므로, 가급적이면 최신 버전으로 업데이트를 해주는것도 좋은 방안이 될것이다. 이 글의 후반부에서 아파치 웹 서버에 대한 자세한 튜닝을 언급할 것이다.
자주 사용되는 cgi 결과들은 FILE(HTML…) 로 만든다.
이용자가 자주 실행하는 CGI 프로그램에 대한 결과나 DB 검색 결과등은 주기적으로
File(HTML…)로 만들 필요가 있다. 실행할 때마다 DB connect 에 의한 부하등을 획기적으로 줄일수 있기 때문이다. 현재 대부분의 검색 사이트들은 위와 같이 자주 읽히는 검색 결과들을 crontab을 이용하여 주기적으로 File로 만들어 두고 있다.
웹 서버를 분산 시킬 필요가 있다.
그래도 과부하에 의해 서비스가 지연될 경우에는 부하가 많이 걸리는 웹 사이트들을 따로 분리할 필요가 있다. 또는 DNS에서의 Round Robin 설정을 통해 이용자가nslookup 할 때마다 다수의 IP 주소를 순차적으로 보내어 같은 웹 페이지를 가진 여러대의 웹 서버로 접속을 분산하면 그만큼 부하가 줄어들 것이다.
이외에도 전문 로드 밸런싱 소프트웨어를 이용하면 웹 서버의 접속 분산에 있어서 보다 지능화된 연결이 가능하다.
가령 DNS에서의 Round Robin 방식의 경우 단순히 IP 주소만을 달리 말해줄 뿐이지만, 전문 로드 밸런싱 서버를 이용하면 그때 마다의 각 웹 서버별 부하량을 체크하여 가장 부하가 적은 웹 서버로 접속을 유도할 수 있다. 물론, 접속 분산에 대한 스케줄 설정까지 가능하다. 유명한 무료 개인 홈페이지 제공 업체인 Geocity의 경우 지능형 로드
벨런싱 서버를 이용하여 수십대의 웹 서버를 분산시켜 운영하고 있다.
다. 웹 페이지의 성능 개선 [ HTML 문서]
HTML 문서의 용량을 최소한으로 줄인다.
여기서 말하는 HTML 문서의 용량은 웹 페이지에 속하는 각종 이미지등을 모두 고려한 용량을 말한다. 가령 이미지가 너무 크거나 웹 페이지의 소스가 필요없이 길경우 전체적인 웹 페이지의 용량은 증가하기 마련이다. 가령 56kbit/sec 모뎀의 이용자는 최대 초당 7 kbyte/sec 의 용량을 받을 수 있으므로, 웹 페이지의 전체 용량이 약 70Kbyte를 넘어설 경우 최소 10초 이상의 다운 로딩 시간이 필요하게 된다. 국내 및 해외 유명 웹 사이트들은 그 용량이 보통 60K 이하이다.
웹 브라우저의 캐시 기능을 활용한다.
전체적인 웹 페이지의 용량을 고려할 때 가급적 70K를 넘지 않는 것이 좋다고 했는데, 용량이 큰 이미지가 있다면 바로 앞의 용량에 여유가 있는 웹 페이지안에 픽셀 크기를 1로 잡아 점으로 처리하여 이용자의 브라우저 캐시에 미리 넣어 두는것도 좋은 방법이다. 물론, 목적 페이지에 도달하면 브라우저의 캐시에 저장된 이미지가 단숨에 로딩된다.