KGS 키 할당 테스트 - LeeEuyJoon/lilling-be GitHub Wiki

1. 테스트 목적

KGS(Key Generation Service)가 다음 두 가지 상황에서 정상 동작하는지 검증한다.

  1. 단일 서버 환경
  • ID 블록이 소진될 때 자동으로 새 블록이 재할당되는지 확인
  1. 다중 서버(분산 환경)
  • 여러 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가 분산 환경에서도 완벽한 블록 분리 및 동기화를 보장함을 확인