이번에 처음으로 관리자 페이지 구축계획도 세워볼까 한다.
나아가 로그관련해서는 한번도 다루어 본적이 없기에 왜 로그가 필요하며, 이번 프로젝트에서 로그를 저장하고 어떻게 관리 및 시각화 할것인가에 대해 고민해보고자 한다.
왜 로그가 필요할까?
우선적으론 '더 나은 서비스를 창출하기 위해' 라고 답할 수 있다.
한 예시로
다음과 같이 회원가입 관련 로그를 다룬다고 가정해보자
로그를 보면 한 A사용자가 10분에 회원가입 방문 페이지를 방문하였고 20분에 회원가입 완료 페이지를 방문한것을 알 수 있다.
물론 이렇게 하나의 로그만을 가지고 있다면 활용가치가 없을 수 있다.
만약 이것이 1000개가 된다면??
1000명이 회원가입 방문 페이지를 만들었는데 회원가입 완료 페이지를 방문한 숫자는 400명밖에 되지 않는다.
즉 60%사용자는 회원가입 프로세스에서 불편함을 느끼고, 최종적으로 회원가입을 진행하지 않았다는것이다.
이를 통해 회원가입 프로세스에서 불편한 과정이 포함되어 있다고 예측할 수 있다. 나아가 해당 프로세스를 수정할 수 있는 근거가 생긴다.
생각해보니 쿠팡같은데에서도 주문완료를 하면 다음과 같이 주문이 완료 되었습니다. 라는 페이지가 나온다.
물론 그저 사용자에게 주문이 완료되었다고 알려주는 웹페이지일 수도 있으나,
해당 웹페이지를 통해 실제로 장바구니를 담은 사람중 몇몇이 주문완료 프로세스 까지 완료했을지 로그데이트를 통해 비교할 수 있을것 같다.
로그데이터의 종류
- 개발 영역
- 버그 혹은 크래시율 수집 및 상시 트래킹
- 이슈 발생 후 롤백 및 대응 등에 대한 의사결정 판단의 근거로 활용
- 특정 기능에 대한 사용성 진단
- 마케팅 영역
- 마케팅 채널별 ROI 진단 및 비용 최적화
- 배너/프로모션/이벤트 효과 측정
- 유저 Segmentation, Targeting
- 기획/디자인 영역
- 시나리오/기능/디자인에 대한 성과 측정 및 개선 (A/B 테스트)
- 유저 Journey 경로 분석 및 이탈 구간 개선 (UX/UI 최적화)
- 유저 Persona 구축 (with 리서치) 및 신규 기능 Ideation
- 기타 영역
- 영업 및 CS 관련 대응
- 사업 및 투자 성과 진단
이외에도 여러가지 로그를 분류해볼 수 있겠지만, 내가 진행중인 프로젝트에서는 '개발영역'에 초첨을 맞추어서 진행할 것이다.
그 이유는 내가 실제 프로그램을 만드는 개발자이기에, 프로그램을 안전하게 유지보수하는것이 최우선 이기때문이다.
그럼 '개발영역'의 로그에는 무엇이 있을까?
- 시스템 로그 : OS에서부터 RDBMS 등과 같은 미들웨어에서 올라오는 로그 등, 시스템의 문제가 발생 했을 때 장애의 원인 파악을 위해서 필요
- 애플리케이션 로그 : 개발자가 작성한 애플리케이션 로그, 애플리케이션의 장애 원인 파악이나 디버깅을 위해서 생성되는 로그
- 비즈니스 로그 : 사용자의 서비스 사용 형태, 거래 기록을 이용한 감사 등을 이용해서 애플리케이션에서 인위적으로 찍어내고 수집하는 로그
이 3개종류의 로그를 어떻게 저장하고 관리하며 시각화 할지 고민해도록 해야한다.
내가 로그를 수집하기 위한 목적
로그는 목적이 가장중요하다.
내가 만약 로그 필요없다고 생각하면 로그 수집을 안하면 된다.
하지만, 나는 백오피스 구축을 위해서 로그를 수집하길 원한다.
백오피스에서 원하는 기능은 다음과 같다.
통계
- 총 회원수, 대학교별 회원 수
- 접속 회원수(당일, 주, 월)
- 게시판 갯수(대학별, 총)
- 채팅 메세지 개수(대학별, 총)
검색 및 수정, 삭제
- 회원정보 관리
- 게시판 관리
- 채팅 관리
실시간
- 실시간 API 호출 로그 데이터
- 실시간 채팅 내역
그중에서 로그 관련된것은 다음과 같다.
즉, 내가 필요한건 스프링부트 내에서 발생하는 로그데이터를 시각화하기 위함이다.
어디에다 로그를 저장할까?
1.ELK 스택
우선 많이 거론되고 있는 ELK 스택이다.
거두절미 하고 아키텍쳐를 보면 다음과 같다.
하지만 진행중인 프로젝트의 예산도 작을뿐더러 예전에 잠깐 ElasticSearch, Kibana를 구동해본적이 있는데 이는 최소 RAM 8G가 필요하다. 로컬에서 사용하면 무리가 없겠지만, 나는 클라우드 상에서 사용할예정이며, 이는 비용적으로 한계가 있을것 같기에 Pass
또한 작은 프로젝트임에도 MYSQL, MONGOdb에다 ELk스택까지 활용하려면 부담도 너무 크다....
특히 나의 목적인 단순히 로그를 저장하고 관리자페이지에서 시각화하기 위해서는 다음과 같은 기술스택은 너무 무겁다
2. MongoDB에 저장
나의 로그데이터 사용목적에 어느정도 맞다. 하지만 채팅DB와 같이 사용하기에 로그를 위해 따로 DB를 사용해두되지않은것이 장점이지만
고려사항이 있다.
고려 사항
1. 채팅 DB와 같이 사용하여도 괜찮을까?
http://clearpal7.blogspot.com/2018/06/mongodb.html
해당 게시물에서 확인할 수 있듯이
각각의 document에는 원자성(atomic)이 보장된다. 그러나 그 수행작업 전체에는 원자성이 보장되지 않고, 다른 수행작업이 간섭할 수 있다.
다음과 같이 수행작업 전체에는 원자성이 보장되지 않는다. 오히려 채팅데이터와 분리하여 사용하고자 하는 나에게는 적합하다
2. 실시간 로그 가져오기
어드민 페이지에 필요한 기능중 하나는 실시간으로 새로고침하지 않고 로그를 가져와야한다.
이것은 프론트단에서 polling기능을 추가하면 될것 같다.
또한 스키마로 부터 자유롭게 때문에 추후에 log데이터 형식을 변경하더라도 저장하기 유용하다
(MYSQL에 저장하면 스키마로부터 제한적이기에 부담이 있다.)
3. S3
실은 Mongodb와 S3가 제일 고민이었다.
어떤곳에서는 로그데이터를 db에 저장하고 어떤곳에서는 S3를 통해 저장하고 있었다.
찾아보니 추후 로그데이터를 가공하여 유의미한 정보를 얻고자 한다면 DB에 사용하는것이 적합하고, 가공하지 않을 계획이라는 파일이 관리 측면에서 더 우수하다는것이다.
나는 추후 어드민페이지에 더 많은 요소를 추가할 계획이고 추후에 로그데이터를 가공할것이기에 DB에 저장하는것이 더 적합하다고 생각이 들었다.
결론은 MongoDB에 로그데이터를 저장할 계획이다!!
참고
https://7942yongdae.tistory.com/78
'프로젝트 > 캡스톤디자인' 카테고리의 다른 글
[기숙사 룸메구하기] NOSQL vs RDB 둘중 어떤걸 써야할까? (0) | 2022.11.23 |
---|