API Log 처리 개요(Spring)

API process

api log sequence diagram

고려 사항
– API Log의 저장은 비동기 처리를 하는것에 성능 관점에서 유리하다.
– 실시간 Log의 검색등이 필요할 경우 Database에 실시간 또는 짧은 시간 간격으로 저장한다.
– 실시간 Log의 검색이 필요하지 않을 경우, was log로 기록후 일단위 배치를 통해 database로 기록한다.
– Log의 통계는 일단위 배치를 통해서 수행한다.

API Log 구성 항목

API Log에 기록될 항목들을 아래와 같이 정리해 보았다.
*표시가 붙은 항목은 가급적 포함시켜야 하는 항목이다.

api transaction id*
ㆍ구성예 : api was의 host명 + ‘-’ + api was에서 생성한 uuid
ㆍhost name 조회 방법 예(java) : InetAddress.getLocalHost().getHostName()
ㆍuuid 획득 방법 예(java) : UUID.randomUUID()
ㆍ생성 : WAS

client trnsaction id
ㆍclient에서 전달한 client transaction id
ㆍ생성 : request header

result code*
ㆍ처리 결과 코드
ㆍ코드 정보를 DB table등으로 관리하여 사용한다.
ㆍ생성 : WAS

request time*
ㆍ처리 요청 시각
ㆍ생성 : WAS

process time*
ㆍapi 처리시간( 단위 : 초 ).
ㆍ1/1000 초 사용시 0초로 기록되는 경우가 발생하니 프로젝트 성격에 따라 이하 단위까지 측정하여 기록할지 결정하도록 한다. 0초로 기록됐을 경우 표시는 ‘0.001 초 이하’ 로 표시하면 된다.
ㆍ생성 : WAS

api server instance*
ㆍapi를 처리한 api was instance host name
ㆍ생성 : WAS

response content*
ㆍapi 응답 메시지 내용
ㆍ문자열보다 json type 사용 권장.
ㆍ생성 : WAS

user id
ㆍapi 요청자
ㆍ생성 : request header or request parameter

request parameter content*
ㆍ요청 파라메터 내용을 json 형식으로 표시.
ㆍ문자열보다 json type 사용 권장.
ㆍ생성 : request parameter

client id
ㆍclient가 복수이거나 client instance가 복수일 경우 기록.
ㆍ생성 : request header

client request time
ㆍclient에서 전달한 요청 시각.
ㆍ생성 : request header

url*
ㆍdomain과 request parameter를 제외한 api request url.
ㆍ생성 : WAS( from HttpServletRequest )

method *
ㆍhttp request method
    > GET : 주요 기능이 조회일 경우.
    > POST : 주요 기능이 추가일 경우.
    > PUT : 주요 기능이 변경일 경우.
    > DELETE : 주요 기능이 삭제일 경우.
ㆍ생성 : WAS( from HttpServletRequest )

ip address
ㆍapi를 요청한 ip 주소
ㆍ생성 : WAS( from HttpServletRequest )

write time*
ㆍapi log  등록 시각.
ㆍinsert시 CURRENT_TIMESTAMP 사용.
ㆍ생성 : DBMS.

referer*
ㆍapi를 요청한 referer.
ㆍ생성 : request header 또는 WAS( from HttpServletRequest )