O(1) IP 할당기: 네트워크 크기와 무관한 효율적인 IP 관리
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
DevOps
대상자
네트워크 인프라 개발자, WireGuard 기반 IaaS 구축자, DevOps 엔지니어
핵심 요약
- Redis를 활용한 IP 재사용: 사용자 정의 IP 해제 시 Redis 스택에 저장하여
O(1)
시간 복잡도로 IP 할당 가능 - IP를 숫자로 저장: CIDR 기반 IP를 정수로 변환하여 DB에서 최대값 조회 시
O(1)
성능 달성 - DB 인덱싱 최적화:
ip_address
컬럼에 인덱스 추가로SELECT
쿼리 시간 복잡도O(1)
구현
섹션별 세부 요약
1. 문제 정의
- WireGuard의 IP 할당 한계: P2P 프로토콜로 서버측 IP 할당 기능 없음
- 기존 방식의 비효율성:
/8
네트워크의 1600만 호스트를 순회하는O(N)
시간 복잡도
2. O(1) 솔루션 설계
- Redis 활용: 해제된 IP를 스택에 저장,
PUSH
/POP
명령으로O(1)
할당 - DB 최대값 조회: IP를 숫자로 저장 후
SELECT MAX(ip_address)
쿼리 사용 - CIDR 지원:
/8
,/16
,/24
범위의 IP를 정수로 변환 후GenerateIP()
함수로 IP 생성
3. DB 인덱싱 최적화
- B+ Tree 인덱싱:
ip_address
컬럼에 인덱스 추가로ORDER BY DESC LIMIT 1
쿼리 성능 향상 - 인덱스 스캔 효율: 최대값 조회 시 인덱스 끝 노드만 스캔하여
O(1)
시간 복잡도 달성
결론
- Redis + DB 인덱싱 + 숫자 기반 IP 저장을 통해 전체 IP 할당 로직의 시간 복잡도를
O(1)
로 유지 SELECT MAX(ip_address)
쿼리에서 인덱스 활용으로O(1)
성능 확보, WireGuard 기반 IaaS의 확장성 극대화