KGS 키 할당 테스트 - LeeEuyJoon/lilling-be GitHub Wiki
1. 테스트 목적
KGS(Key Generation Service)가 다음 두 가지 상황에서 정상 동작하는지 검증한다.
- 단일 서버 환경
- ID 블록이 소진될 때 자동으로 새 블록이 재할당되는지 확인
- 다중 서버(분산 환경)
- 여러 App 서버가 동시에 요청할 때 중복 없이 블록이 분배되는지 확인
2. 단일 서버 블록 재할당 테스트
목적
App 서버가 1,000개의 ID를 모두 사용한 후,
KGS가 새로운 블록(예: +1000)을 올바르게 할당하는지 확인한다.
초기 상태
mysql> SELECT current_max FROM id_generator;
+-------------+
| current_max |
+-------------+
| 7000 |
+-------------+
실행
for i in {1..1001}; do
curl -X POST http://localhost:80/api/v1/url/shorten \
-H "Content-Type: application/json" \
-d "{\"originalUrl\": \"https://example.com/test$i\"}"
done
기대 결과
| 구분 | 내용 |
|---|---|
| 블록 사용량 | 첫 1,000회 요청 → 기존 블록 사용 |
| 추가 요청 | 1,001번째 요청 시 새 블록 할당 |
| DB 상태 | current_max = 8000 |
→ KGS가 블록 단위로 ID를 안정적으로 갱신하는 것을 확인함.
실행 결과
mysql> select current_max from id_generator;
+-------------+
| current_max |
+-------------+
| 8000 |
+-------------+
3. 분산 환경 블록 분배 테스트
목적
5개의 App 서버가 병렬로 URL 생성 요청을 보낼 때,
각 서버가 고유한 ID 블록을 사용하는지 검증한다.
환경 구성
| 구성 요소 | 내용 |
|---|---|
| App 서버 수 | 5개 (test-20251030-1 ~ test-20251030-5) |
| 초기 블록 크기 | 1000개 |
| 로드밸런서 | Nginx |
| 요청 수 | 총 6,000건 |
실행
for i in {1..6000}; do
curl -X POST http://localhost:80/api/v1/url/shorten \
-H "Content-Type: application/json" \
-d "{\"originalUrl\": \"https://example.com/test$i\"}"
done
검증 쿼리
SELECT
app_id,
CONCAT(
FLOOR((kgs_id - 1) / 1000) * 1000 + 1,
' ~ ',
FLOOR((kgs_id - 1) / 1000) * 1000 + 1000
) AS id_range_label,
COUNT(*) AS count
FROM url_mapping
GROUP BY app_id, id_range_label
ORDER BY app_id, MIN(kgs_id);
결과 요약
| app_id | id_range_label | count |
|---|---|---|
| test-20251030-1 | 1 ~ 1000 | 1000 |
| test-20251030-1 | 5001 ~ 6000 | 200 |
| test-20251030-2 | 1001 ~ 2000 | 1000 |
| test-20251030-2 | 6001 ~ 7000 | 200 |
| test-20251030-3 | 2001 ~ 3000 | 1000 |
| test-20251030-3 | 7001 ~ 8000 | 200 |
| test-20251030-4 | 3001 ~ 4000 | 1000 |
| test-20251030-4 | 8001 ~ 9000 | 200 |
| test-20251030-5 | 4001 ~ 5000 | 1000 |
| test-20251030-5 | 9001 ~ 10000 | 200 |
시각화
해석
- 각 App 서버는 서로 다른 ID 블록을 사용함
- 블록 단위 분배(1000개씩) 정상 작동
- ID 중복 또는 교차 없음
-> KGS가 분산 환경에서도 완벽한 블록 분리 및 동기화를 보장함을 확인