LOG Agent 의 목적 [Bottom] [Top]
LOG Agent 는 이름 그대로 LOG 를 저장하는 보조 서버라고 생각하면 된다. 하지만 여기서 LOG 가 어떤 것이냐에 따라서 다르다. LOG 는 다음과 같이 2가지로 나눠볼 수 있다.
LOG 정보 - 데이터 처리에 대한 정보를 말한다. 예) 게임 로그, 로그인 정보 등
LOG 메세지 - 코드 실행에 대한 메세지로 주로 디버깅용 메세지를 말한다.
그렇다면 여기서 말하는 LOG Agent 는 어떤 LOG 를 처리하는 서버일까? 답은 LOG 메세지를 처리하는 보조 서버다. 그런데 대부분의 프로그래머들은 콘솔창을 잘 활용(?)하고 있는데 이런 것이 필요할까? 아마도 대부분은 필요 없다고 할 것이다. 콘솔창이 훨씬 쉽고 간단하고 무엇보다도 실시간으로 LOG 메세지를 볼 수 있기 때문이다. 그러나 조금만 시간을 갖고 생각해보면 콘솔창도 불편한 점이 만만치 않다.
- LOG 메세지가 많을 경우 화면이 스크롤되어 지나가 버리기 일수다.
- 단순 텍스트 형태로 출력되기 때문에 LOG 메세지가 많으면 알아보는 것이 쉽지 않다.
- 다양한 형태의 LOG 메세지 출력이 안된다. 시간이나 메세지 타입, 발생 위치별로 분류할 수 없다.
- LOG 메세지를 저장하기 위해서는 추가적인 파일 I/O 처리를 해줘야 한다.
- 윈도우 창 모드나 서비스 형태의 프로그램은 콘솔창을 띄우기 위해서 프로그래머를 귀찮게 만든다.
개인적으로 이런 불편한 것들을 반복하는 것이 짜증나서 생각해 본 것이 바로 LOG Agent 다. 이것은 표준 LOG 메세지 프로토콜을 만들어서 네트워크나 IPC 로 전송하고 그것을 LOG Agent 가 받아서 처리하는 일련의 과정을 말한다. 그리고 여기서 구상 중인 LOG Agent 는 DB I/O 처리를 생각 중인데 그렇다면 DB Agent 를 활용하면 되지않냐고 생각할지도 모르겠다. 하지만 나름대로 LOG Agent 를 독립된 서버로 만들어야겠다고 생각한 이유가 몇가지 있다.
- 우선, 표준 LOG 메세지 프로토콜을 사용할 생각이라서 한번 만들면 다시 만들 필요 없다. DB 쿼리가 변경되면 수시로 수정해야하는 DB Agent 와는 다르다.
- 개발 시를 제외하고는 사용 빈도가 낮기 때문에 필요에 따라서 사용 안 할 수도 있다. 그렇기 때문에 다른 서버에 굳이 그 기능을 넣을 필요가 없다.
- DB I/O 처리가 필요하기 때문에 독립된 서버가 유리하다. 하지만 DB 캐싱 기능이 없기 때문에 DB Agent 보다는 가볍게 동작할 것이다.
- DB 가 필요한 이유는 LOG 메세지를 웹페이지를 통하여 볼 수 있도록 하기 위해서다. 이것은 추가적인 프로그램 개발없이 편리한 인터페이스를 제공할 수 있기 때문이다. 즉, 다양한 형태(시간이나 메세지 타입, 발생 위치별 등)로 볼 수 있다.
이런 변명(?) 같은 LOG Agent 의 필요성을 말하고 있지만 DB Agent 처럼 커다란 필요성을 느끼지는 못한다. 그리고 궁색한 논리(?)로 프로그래머를 귀찮게 만드는 것들 때문에 고민하는 것들도 있다.
LOG Agent 를 만든 노력 만큼이나 큰 실용성이 있을까? 가장 큰 고민거리!
DB 가 꼭 필요할까? DB 가 필요없다면 DB I/O 처리가 필요없기 때문에 프로그래머가 편해질 수도 있다.
웹 프로그래밍도 같이 해야 된다. 프로그래머가 새로운 것을 배우는게 얼마나 귀찮은지 알고 있나?
- 콘솔창 처럼 실시간 LOG 메세지 출력을 볼 수 없다. 이건 좀 치명적인 것 같다.
LOG Agent 에 대하여 왜 필요한지, 어떤 것이 문제인지, 어떻게 만들지에 대하여 고민(?)했던 것들을 정리해 봤다. 다음 그림은 LOG Agent 의 역활에 대하여 좀 더 쉽게 이해할 수 있도록 만들어본 것으로 여러 개의 서버가 있지만 실제로는 LOG Agent 만 구현되면 쉽게 구성할 수 있을 것이라고 생각한다.
여기까지 LOG Agent 의 목적이나 역활에 대하여 이해했다면 프로그래머를 귀찮게 하는 구현 문제에 대하여 좀 더 고민해보자.
여기까지 정리되었음!!!
LOG Agent 의 기능 [Bottom] [Top]
프로그래머를 귀찮게 만들 LOG Agent 의 기능에 대하여 생각해 보자. 우선, LOG Agent 는 보조 서버이기 때문에 어떤 형태의 서버로 만들 것인지 생각해 봐야한다.
- 서버 기능 1 - 서비스 형태는 연결형/비연결형? (TCP / UCP 선택)
- ...
- 서버 기능 2 - 게임 서버 설정 방법?
- ...
서버 기능 3 - 게임 서버:LOG Agent:DB 서버 = X:1:1 ? (단일연결 / 다중연결)
- ...
- 서버 기능 4 - DB 연결 정보 얻는 방법?
- ...
- 서버 기능 5 - 초기화 / 종료 처리 방법?
- ...
- 서버 기능 6 - 세션 관리 방법?
- ...
두번째로 LOG Agent 는 DB I/O 처리가 있지만 DB Agent 와는 달리 단순히 저장만할 생각이라서 넘어가고 DB 저장된 LOG 데이터를 어떤 식으로 볼 것인지 생각해 봐야한다.
- 웹 페이지 기능 1 - 웹 페이지에 출력되는 기본 정보는? (프로그램 정보, 버전, 시간 정보, LOG 메세지, 실행 시간, ... 등)
- ...
- 웹 페이지 기능 2 - 정렬 기준은 무엇으로? (시간, LOG 타입, 발생 위치 등)
- ...
- 웹 페이지 기능 3 - 한 페이지에 몇 라인씩 볼 것인가? (20/40/100 라인 등)
- ...
- 웹 페이지 기능 4 - 다수의 LOG Report 중 선택 기능, LOG Report 삭제 기능
- ...
- 웹 페이지 기능 5 - 통계 페이지 (실행 시간, LOG 총 개수/타입별 개수, 발생 위치별 통계 등)
- ...
LOG 메세지 프로토콜 [Bottom] [Top]
LOG Agent 로 어떤 프로그램이든 접속하여 LOG 메세지를 저장할 수 있도록 표준 프로토콜을 만들어야 한다. 이런 표준 프로토콜을 생각해보고 정의 해보자.
- 접속 정보 (연결 정보)
- 프로그램 실행 정보 (프로그램 이름, 버전, 실행 파일명, ... 등)
- 프로그램 시작 (시간 정보)
- LOG 메세지 정보
시간
파일명
줄번호
로그레벨
에러코드
메시지
- 프로그램 종료 (시간 정보)
- 연결 해제 (연결 정보)
고려사항 [Bottom] [Top]
DBMS 의 연결이 끊어진 경우
- 로그레벨은 어떻게 나눌것인가?
우선순위
로그레벨
설명
선택
5
TRACE
실행과정을 추적하기 위한 로그
옵션
4
DEBUG
디버깅을 위한 로그
3
INFO
일반적인 정보
필수
2
ERROR
논리적인 오류 (로직 상에서 발생하는 오류)
1
FATAL
치명적인 오류 (프로그램이 다운될 정도로 심각한 오류)
CategoryCpp CategoryDatabase CategoryGame CategoryPrivate CategoryWin32
