22. 어떤 화면이 많이 쓰이는지 알고 싶다

de_sj_awa·2021년 9월 10일
0

22. 어떤 화면이 많이 쓰이는지 알고 싶다

모니터링 툴이 없는 상황에서 어떤 화면이 많이 호출되었는지를 확인하는 것은 쉽지 않다. 하지만 웹 서버만 있다면 이 문제애 대한 답을 찾을 수도 있다. 바로 웹 로그(일명 Access log)를 사용하여 시스템을 분석하는 방법이다. 상용 툴을 이용하여 분석하는 방법도 있지만, 무료 툴을 사용해도 시스템을 분석하는 데는 큰 지장이 없다.

1. 웹 로그란?

아파치나 Nginx, iPlanet과 같은 웹 서버에 공통적으로 제공되는 기능이 웹 로그이다.

서버에 어떤 사용자가 어떤 요청을 하였고, 결과가 어떠한지 파일에 한 줄씩 쌓아 준다. 사이트 규모 및 사용자의 양에 따라서 로그가 많이 쌓이는 사이트도 있고, 그렇지 않은 사이트도 있다. 일반적인 웹사이트의 경우 사용자가 많으면 기가바이트 단위로 웹 로그가 쌓이게 된다. 이렇게 로그가 많이 쌓이는 이유는 웹 서버에서는 모든 요청에 대한 로그를 쌓기 때문이다. 한화면을 구성하는 이미지, CSS, 자바스크립트, 플래시 파일 등 모든 파일에 대한 요청의 결과가 이 로그 파일에 쌓인다. 대부분 하나의 클라이언트에서 동일한 파일을 한 번 다운로드 받으면 304라는 리턴 코드를 제공한다. 그래서 다시 다운로드 받지는 안히만, 서버에는 변경 되었는지 확인하는 요청을 하므로, 이러한 내용도 하나하나 모두 로그에 남는다.

웹 로그가 어떻게 구성되어 있는지 아파치 웹 서버의 웹 로그 설정 부분을 참고하여 알아보자. httpd.conf 파일을 보면 로그 포맷(LogFormat)이라는 부분을 찾아보자. 로그 포맷 설정은 다음과 같이 되어 있다.

LogFormat: "%h %l $u %t \ "%r\" %>s %b" common

위와 같이 % 뒤에 표시하고자 하는 데이터의 지시어를 지정하도록 되어 있다. 쉽게 이해할 수 있도록, 위와 같은 설정에서 어떻게 로그가 나타나는지 확인해 보자.

127.0.0.1 - - [22/Oct/20XX:14.04.43 +0900] "GET /a.gif HTTP/1.1" 200 2326

각 항목이 의미하는 내용을 알아보면 다음과 같다.

  • 127.0.0.1 (%h) : 서버에 요청을 한 클라이언트(원격 호스트)의 IP 주소이다. 만약 HostnameLookups라는 설정값이 On이라면 IP 주소 대신 호스트 명이 명시된다. 그러나 이 설정은 서버를 매우 느리게 할 수 잇으므로 추천할 만한 기능은 아니다. 클라이언트가 프록시(proxy) 서버를 사용할 경우 클라이언ㅌ의 실제 주소가 아닌 프록시 서버의 주소가 이 부분에 표시된다.
  • - (%l) : '-'로 표시되어 있기 때문에 요청한 정보가 없음을 의미한다. identd라는 사용자 인식 데몬이 클라이언트에서 동작하고 있을 경우에만 이 정보가 나타난다.
  • - (%u) : HTTP 인증을 통하여 확인된 문서를 요청한 사용자의 ID가 표시된다. 암호화 되지 않은 페이지이기 때문에 이 항목도 앞의 항목과 같이 보통 '?'로 표시된다.
  • [22/Oct/2007:14:04:43 +0900] (%d) : 서버가 요청을 마친 시간이다. 즉, 웹 서버에서 해당 요청이 처리되어 종료된 시간으로 보면 된다. 앞에서부터 [날짜/월/년:시:분:초 타임존]의 순서로 표시한다. 만약 시간 형식을 수정하고 싶다면 이 부분에서 할 수 있다.
  • "GET /a.gif HTTP/1.1"(\"%r\") : 클라이언트에서 요청한 Request의 정보를 나타낸다. 요청 방식(method)이 가장 처음 나타나며, 그 다음에는 요청 주소(URL)이 표시된다. 가장 마지막에는 클라이언트에서 사용한 프로토콜의 종류와 버전이 표시된다.
  • 200 (%>s) : 서버에서 클라이언트로 보낸 최종 상태 코드를 의미한다. 만약 클라이언트에 해당 파일이 존재한다면 304가 표시된다.
  • 2326(%b) : 클라이언트로 전송한 데이터의 크기가 표시된다. 여기서 헤더 정보의 크기는 포함되지 않는다. 이 파일의 경우 이미지 파일이기 때문에 여기에 표시된 전송 데이터의 크기와 실제 전송된 파일의 크기는 동일하다.

여기에 설명되어 있는 로그 포맷은 표준 포맷으로, 어떤 웹 서버를 사용하더라도 대부분 동일하다. 그런데 여기서 기본 웹 로그의 단점을 알 수 있다. 이 로그만 갖고는 성능에 대한 아무런 데이터를 얻을 수 없다는 것이다. 어떤 URL이 언제 요청되었다는 것만 알아도 도움이 되긴 하지만, 우리는 더 많은 데이터를 원한다.

이때 로그 포맷이 %D와 %T를 추가하면 어느정도 갈증을 해소할 수 있다. 이 두개의 옵션을 간단히 알아보면 다음과 같다.

  • %D : 요청의 처리 시간을 마이크로초 단위로 나타낸다.
  • %T : 요청의 처리 시간을 초 단위로 나타낸다.

가장 정확하게 분석하기 위해서는 %D 옵션을 사용하는 것을 권장한다.

  • 초 : 우리가 일반적으로 이야기하는 초이다.
  • 밀리초 : 1/1,000 초를 의미한다.
  • 마이크로초 : 1/1,000,000 초를 의미한다.
  • 나노초 : 1/1,000,000,000 초를 의미한다.

또한 무료 웹 로그 분석 툴 중에서 권할 만한 툴은 세 가지이다.

  • Analog
  • AWSStats
  • Webalizer

무료 툴이지만, 각 툴이 제공하는 기능은 막강하다. 여기 명시된 툴 중에서 가장 최근까지 업데이트된 툴은 AWSStats이다. 다음과 같은 기능들을 제공한다.

  • 방문 횟수와 방문자 수
  • 방문하여 페이지에 머무른 기간 및 마지막 방문일
  • 각 시간 및 요일별 방문 페이지 수와 네트워크 사용량
  • 방문자의 국가(GeoIP 활용)
  • 가장 많이 본 페이지, 유입 경로 및 마지막 페이지
  • 웹 압축 통계
  • 사용 OS 및 브라우저 통계
  • 방문 검색 로봇의 횟수
  • 검색 엔진 및 검색 키워드
  • HTTP 에러 목록
  • 즐겨찾기 북마크에 추가된 횟수
  • 화면 크기(이 기능을 사용하기 위해서는 초기 페이지에 HTML 태그가 추가되어야 함)

어떻게 보면 웹 로그가 각 요청별로 간단하게 한 줄일 수도 있지만, 이 한 줄로 이와 같은 통계 자료를 뽑아낼 수 있다.

2. 웹 로그를 통해서 접근 통계를 분석하기 싫다면...

구글에서 제공하고 있는 'Google 애널리틱스'도 웹 사용자 통계를 제공하는 막강한 무료 툴 중 하나이다. 하지만 이 툴은 웹 로그 기반의 툴은 아니라, 접근하는 모든 페이지(혹은 모든 페이지가 불리는 공통 페이지)에 정보를 전달하는 자바 스크립트 코드를 넣고 구글 서버에 데이터를 쌓는 방식이다. 그러므로, 모든 정보는 구글에 위치하기 때문에, 개인 홈페이지가 아닌 회사의 서버에 구글 애널리틱스를 설치하면 회사의 사용량 정보가 유출될 우려가 있다. 이러한 문제를 해결하기 위해서 만들어진 Piwik(http://piwik.org/)이라는 오픈 소스가 있다.

Piwik은 오픈소스로 제공되는 웹 페이지 접근 통계 툴이며, 일반 브라우저 뿐만이 아니라 안드로이드나 아이폰 등 모바일 기기에서도 데이터를 확인할 수 있다.

Piwik에서 제공하는 기능은 500가지가 넘는데, 그중에서 주요 기능은 다음과 같다.

  • 실시간 사용량 정보
  • 방문자에 대한 상세한 정보
  • 변경 가능한 대시보드
  • 내부 검색엔진을 통한 검색 기능
  • 방문자의 위치에 대한 세계 지도

그리고, Piwik에서 제공하는 막강한 기능 중 하나는 바로 플러그인을 제공한다는 것이다. Jenkins, Sonar 등 개발과 연관된 웹 페이지에서 사용할 수 있는 플러그인 분만이 아니라, PHP, Java, python, django, Grails, Ruby, Obective-C, node.js 등 여러 언어에서 사용할 수 있는 API도 제공한다.

그렇다면, 이런 기능을 제공하는 Piwik을 회사 서버에 설치해서 사용하려면 어떤 것들이 준비되어야 할까? 당연히 데이터를 수집하는 수집 서버가 필요할 것이다. 수집 서버의 기본 요건은 다음과 같다.

  • PHP 5.1.3 이상의 버전을 제공하는 웹 서버
    - PHP의 pdo, pdo_mysql, GD 모듈 포함
  • MySQL 4.1 이상

간단하게, Piwik 서버를 설치하는 절차를 살펴보면 다음과 같다.

1) Piwik 소스 다운로드 및 압축 해제
2) 브라우저를 열어 Piwik 페이지 접근한다. 이제부터는 웹 페이지에서 버튼(Next)을 눌러 넘어가면 되는데, 이 때 서버의 설정 등을 변경해야 할 필요가 있다. 그러므로, 터미널 창을 열어 권한 변경 작업을 수행해야 한다.
3) 시스템 체크(필요 모듈 및 디렉터리 권한 확인)
4) 데이터베이스 설정
5) 사용자 계정 설정(아이디와 패스워드를 지정한다.)
6) 통계를 수집하고자 하는 웹페이지의 정보 입력
7) 통계를 수집하고자 하는 웹 페이지에 추가할 JavaScript 코드를 확인하고, 해당 스크립트를 복사하여 </body> 태그 앞에 붙여 넣는다.
8) Piwik을 통한 결과 확인

참고

  • 자바 성능 튜닝 이야기
profile
이것저것 관심많은 개발자.

0개의 댓글