# Show GN: 바로 사용 가능한 가볍지만 빠른 사용자 행동/이벤트 수집기(rust) 오픈 소스

> Clean Markdown view of GeekNews topic #18647. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=18647](https://news.hada.io/topic?id=18647)
- GeekNews Markdown: [https://news.hada.io/topic/18647.md](https://news.hada.io/topic/18647.md)
- Type: show
- Author: [leelou2](https://news.hada.io/@leelou2)
- Published: 2025-01-09T17:45:41+09:00
- Updated: 2025-01-09T17:45:41+09:00
- Original source: [github.com/lee-lou2](https://github.com/lee-lou2/rust-events)
- Points: 9
- Comments: 1

## Summary

러스트를 사용하여 가볍고 빠르게 사용자 행동이나 이벤트를 수집할 수 있는 웹서버가 개발되었습니다. 이 시스템은 10만 개의 채널과 10개의 경량 쓰레드를 사용하여 이벤트를 수집하고, 오픈서치에 대량 등록하며, 필요 시 펜딩 데이터베이스에 저장합니다. 또한, 스케줄러를 통해 펜딩 데이터베이스에 저장된 이벤트를 주기적으로 조회하여 처리합니다.

## Topic Body

사용자 행동이나 이벤트 자체 수집이 필요하다면 꼭 한 번써보세요(제발🙏) 분명 만족하실겁니다!  
  
러스트를 이용해서 가볍지만 빠르게 데이터 수집이 가능한 웹서버를 개발했습니다  
  
코드가 간단해서 러스트에 익숙하지 않은 분들이라도 쉽게 코드 변경 등의 커스텀이 가능합니다 (필요하다면 제가 일부 수정해드릴 수 있음 🥳)  
  
이벤트 수집기는 다음과 같이 구현되었습니다  
  
### 기술 스펙  
- 개발 언어 : rust(axum)  
- 저장소 : 이벤트 저장(오픈서치), 펜딩 데이터 저장(Sqlite3)  
  
다른 저장소도 사용 가능하도록 추가할 예정  
  
### 시스템 구조  
#### API 종류  
1. GET /ping : 헬스체크  
2. POST /events : 이벤트 수집  
  
#### 수집 데이터  
- Headers 에 포함된 토큰의 사용자 정보  
- Headers 에 포함된 디바이스/앱 정보  
- Body 에 포함된 이벤트 상세 정보  
  
스키마 변경만으로 간단히 수정 가능 👍  
  
### 기술 상세  
#### 기본 구성(간단한 설명)  
- 10만개의 채널 : 요청 받은 이벤트를 컨슈머로 전달하는 역할, 10만개의 채널이 모두 차있는 경우 데이터베이스에 펜딩 이벤트 저장  
- 10개의 쓰레드 + 컨슈머 : 채널로부터 이벤트를 받아와서 1000개씩 묶거나 10초 동안 쌓인 이벤트를 오픈 서치에 저장  
- 1개의 스케쥴러 : 펜딩 데이터베이스에 저장된 이벤트를 특정 시간 주기로 불러와 다시 채널로 전달  
  
#### 데이터 생성 요청(http)  
- http api 를 이용해서 데이터 생성 요청  
- 요청을 받으면 채널로 전달, 채널이 모두 차있으면 펜딩 데이터베이스에 저장  
  
#### 이벤트 컨슈머(10개의 경량 쓰레드)  
- 채널로부터 받은 이벤트를 1000개씩 묶어 오픈서치 대량 등록 요청  
- 1000개가 쌓이지 않은 경우 10초 단위로 쌓인 이벤트를 오픈서치에 대량 등록  
- 오픈서치 등록 실패 시 펜딩 데이터베이스에 저장  
  
#### 펜딩 이벤트 등록(Sqlite3)  
- 채널이 꽉 차거나 오픈서치 등록 오류 발생 시 펜딩 데이터베이스에 저장  
  
#### 스케쥴러  
- 펜딩 데이터베이스에 쌓인 이벤트를 특정 주기로 조회해서 채널로 전달  
- 추후 연속으로 쌓이는 이벤트나 데이터 문제로 오픈서치 저장 안되는 이벤트는 별도 처리를 추가할 예정  
  
채널 수나 경량 쓰레드 수는 배포되는 환경의 리소스나 오픈서치 종류에따라 조정해야합니다 💪  
  
아직 러스트 2~3개월차라 문법은 조금 어색할 수 있습니다 꾸준히 개선해나갈 예정입니다  
  
많은 관심 부탁드려요 다양한 피드백도요~~~  
감사합니다 🙇‍♂️

## Comments



### Comment 33194

- Author: leelou2
- Created: 2025-01-09T17:54:03+09:00
- Points: 1

시스템 구조 차트 : https://github.com/lee-lou2/rust-events/blob/main/docs/flowchart.png
