Skip to content

Commit 541f22c

Browse files
authored
Update README.md
1 parent 23337ad commit 541f22c

1 file changed

Lines changed: 45 additions & 15 deletions

File tree

‎README.md‎

Lines changed: 45 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
### 유저의 스크래치 행동 기반 AI 캡챠 SaaS 플랫폼
2-
---
1+
## 유저의 스크래치 행동 기반 AI 캡챠 SaaS 플랫폼
32
- 역할
43
- 시스템 아키텍처와 ERD 설계, AI 모델의 API 서빙
54
- 사용 기술
@@ -16,20 +15,51 @@
1615
- Kubernetes
1716
- Git Actions
1817

19-
### 시스템 아키텍처
20-
---
18+
## 시스템 아키텍처
2119
![백엔드_아키텍처-시스템아키텍처](https://github.com/user-attachments/assets/2223177e-4f17-48e1-8de0-8ee823c55179)
2220

2321

24-
### 배치 서버로 캡챠 문제 생성 일괄 처리
25-
---
26-
- **문제 확인**
27-
<img width="4720" height="1840" alt="image" src="https://github.com/user-attachments/assets/9b45838d-9fe4-416f-b90f-c373fdd7dc56" />
28-
- 캡챠 생성 요청마다 실시간으로 모델이 문제를 생성하여 지연 발생
22+
## 배치 서버로 캡챠 문제 생성 일괄 처리
23+
### 문제 확인
24+
<img width="4720" height="1840" alt="image" src="https://github.com/user-attachments/assets/9b45838d-9fe4-416f-b90f-c373fdd7dc56" />
25+
- 기존의 모놀리식 서버
26+
- 캡챠 생성 요청마다 실시간으로 모델이 문제를 생성하여 지연 발생
2927

30-
- **개선 사항**
31-
<img width="5044" height="3124" alt="image" src="https://github.com/user-attachments/assets/ca14270d-1dbc-4a38-89b4-a3097b725f43" />
32-
- 모델을 분리하고 스케줄링해서 일괄적으로 문제 생성
33-
- 매일 1000개의 문제를 생성하여 DB에 저장
34-
- 요청 시 DB에서 랜덤으로 1개의 문제가 제공
35-
- 문제 생성 시간 0초 확보
28+
### 개선 사항
29+
<img width="5044" height="3124" alt="image" src="https://github.com/user-attachments/assets/ca14270d-1dbc-4a38-89b4-a3097b725f43" />
30+
- API 서버와 문제 생성 서버(배치)를 생성
31+
- 기존의 로직에서 모델을 분리하고 배치 서버에서 스케줄링하여 일괄적으로 문제 생성
32+
- 매일 1000개의 문제를 생성하여 DB에 저장
33+
- 요청 시 DB에서 랜덤으로 1개의 문제가 제공
34+
- 문제 생성 시간 0초 확보
35+
36+
## JSON 전송 시, failed to fetch 에러 발생
37+
### 문제 확인
38+
<img width="2920" height="1040" alt="image" src="https://github.com/user-attachments/assets/79cf3d83-183a-4bd5-983b-58f1596769ec" />
39+
- 클라이언트에서 행동 검증 데이터를 서버로 전송할 때, failed to fetch 에러 발생 확인
40+
- axios의 fetch 시 전송 가능한 용량 제한 (약 29KB)
41+
42+
### 개선 사항
43+
<img width="3160" height="1560" alt="image" src="https://github.com/user-attachments/assets/19fe65c9-bb82-4422-9069-7d3947ad3ea7" />
44+
- 클라이언트에서 JSON 파일을 청크로 n개로 나누어 전송하고 먼저 오브젝트 스토리지에 저장
45+
- 스토리지의 청크로 나뉜 JSON 을 다시 병합하여 행동 데이터 모델의 인풋으로 전달
46+
- 데이터를 보내는 과정에서 지연 발생
47+
- fetch 문제는 해결했으나 행동데이터가 많을수록 청크 사이즈가 많아져 오히려 오브젝트 스토리지로 전송하는 지연이 발생 →약 1초
48+
49+
## 비동기 작업 구조
50+
<img width="6652" height="1800" alt="image" src="https://github.com/user-attachments/assets/d1b2765e-e380-46b1-a45a-1b4a47960e1d" />
51+
52+
### 행동검증 결과 데이터 업로드 비동기 처리
53+
- 행동 검증 모델의 지도학습 목적으로 검증 결과 데이터를 저장할 필요가 생김
54+
- 데이터의 저장이 완료되기까지의 지연을 줄이고 계속해서 다음 요청을 처리해야 하기에 도입
55+
56+
### 행동 검증 모델 로직의 비동기 처리
57+
- 실시간적으로 행동 검증 모델을 서빙하는데에 있어 서비스 지연의 우려가 고려되어 워커를 추가로 도입
58+
- 하지만 테스트시에 큰 변화를 확인하진 못함
59+
→ 오히려 클라이언트에서 비동기 작업을 체크하는 요청이 늘어나게 되어 성능적으로 부적절한 구조가 되었기에 현재는 실시간 처리로 변경함
60+
61+
## 문제세션 타임아웃 스케줄링
62+
### 도입 이유
63+
<img width="3360" height="1200" alt="image" src="https://github.com/user-attachments/assets/376cfd0b-3514-4812-a80b-09d246fdf560" />
64+
- 메시지 브로커의 워커로 Celery를 사용중이고 Beat라는 스케줄러를 지원하기에 채택
65+
- 새로고침으로 문제가 새로 생성되거나 네트워크의 오류로 유저가 풀지 못한 캡쳐를 TIMEOUT(3분) 으로 지정하여 세션과 로그의 1:1 트랜잭션을 유지하기 위함

0 commit comments

Comments
 (0)