프로젝트/webflux 채팅서버
로깅, 푸시 알림 요청 비동기로 처리하기
개발하는 민우
2025. 2. 14. 23:18
요구사항
비즈니스 로직
payload 로 넘어온 채팅방 PK가 정말 있는 채팅방인지와 사용자가 채팅방에 들어가있는지 확인
해당 채팅방에 채팅 레코드 추가
해당 채팅방에 있는 사용자 모두 조회
조회된 사용자들의 device 에 모두 push 요청
push 요청 보내기 시작하면서부터 모든 사용자의 device 에게 요청 다 보낼 때까지의 시간 측정
로깅
들어오는 모든 요청에 대해 로그를 남겨야 함
- response 없이 request 요청에 대한 로그만 남기도록
- request header 의 Authorization 헤더 제외
- http method, uri, 요청 온 시간, 요청 ip, request body 로깅 필요 (GET 요청 무시)
- DB 에다가도 로그 남겨야 하고 파일에다가도 로그 남아야 함
- DB 그리고 파일로의 로그 저장에 실패하더라도 사용자의 요청은 정상적으로 진행
- 푸시 알림 서버로의 요청 중 에러가 발생하는 경우, 그리고 서버 자체에서 에러가 발생하는 경우 별도의 파일에 에러 Call Stack 출력
- 서버 자체에서 에러가 발생하는 경우: 이를테면 존재하지 않는 채팅방 PK 를 담아 요청하는 경우 에러 발생, 에러 로깅용 파일에 에러가 발생한 위치 단순히 Call Stack 으로 출력
- 막 에러 발생 시 Class 이름, Method 이름 가져와서 출력하라는 소리가 아님
- 서버 자체에서 에러가 발생하는 경우: 이를테면 존재하지 않는 채팅방 PK 를 담아 요청하는 경우 에러 발생, 에러 로깅용 파일에 에러가 발생한 위치 단순히 Call Stack 으로 출력
- 결국 만들어지는 로그 파일은 두개
- server.log
- Spring boot 서버 자체의 로그와 api log 가 남음
- error.log
- 서버 내에서 에러가 발생한 경우
- server.log
피드백
동기로 처리하게 되면, ChatServer -> PushServer로 요청이 완료되고, response가 반환될 때까지 기다려야 한다.
그래서 대부분의 로깅이나, 푸시 서버 요청을 비동기로 처리하였다.
시퀀스 다이어그램
느낀점
클라이언트가 요청을 할때, 얼마나 빨리 처리를 하는게 중요함을 느꼈다. 요청을 비동기로 처리해야 함에 있어 중요성을 한층 느꼈다.