158 lines
6.1 KiB
Markdown
158 lines
6.1 KiB
Markdown
# TO-DO.md — 추후 개발 항목
|
|
|
|
> 본 파일은 ARCHITECTURE.md와 CLAUDE.md 등에 정의되었으나 **아직 구현되지 않은** 항목들을 추적한다.
|
|
> Phase 0 (데모 UI)는 완료되었으며, Phase 1부터 순차적으로 진행 예정이다.
|
|
|
|
---
|
|
|
|
## 1. 서버·전송 계층 구현 (Phase 1)
|
|
|
|
### 1.1. Proto 정의 및 코드 생성
|
|
- `proto/aiot/inference/inference.proto` — AI 추론 요청/응답
|
|
- `proto/aiot/device/device.proto` — 디바이스 등록·상태 보고
|
|
- `proto/aiot/gateway/gateway.proto` — 게이트웨이 데이터 전달 서비스
|
|
- `make proto` — protoc + protoc-gen-go + protoc-gen-go-grpc 설치 및 자동화
|
|
|
|
### 1.2. 전송 계층 (`internal/transport/`)
|
|
- `transport.go` — Listener/Dialer 인터페이스 정의
|
|
- `h2_listener.go` — HTTP/2 (TCP) 리스너
|
|
- `quic_listener.go` — QUIC 리스너 (quic-go 래핑)
|
|
- `quic_dialer.go` — QUIC 클라이언트 다이얼러
|
|
- **리스크**: quic-go `quic.Stream`과 `net.Conn` 인터페이스 호환성 검증 필요
|
|
|
|
### 1.3. 서버 구현 (`internal/server/`, `cmd/server/`)
|
|
- `internal/server/inference_server.go` — InferenceService 구현
|
|
- `internal/server/device_server.go` — DeviceRegistry 구현
|
|
- `internal/server/gateway_server.go` — GatewayService 구현
|
|
- `cmd/server/main.go` — `--transport=quic|h2` 플래그 기반 진입점
|
|
|
|
### 1.4. 클라이언트 구현 (`internal/client/`)
|
|
- `internal/client/inference_client.go` — gRPC 클라이언트 (재시도·타임아웃)
|
|
- `internal/client/rest_client.go` — REST 비교군 클라이언트
|
|
|
|
### 1.5. 미들웨어 (`internal/middleware/`)
|
|
- `logging.go` — 요청/응답 로깅 인터셉터
|
|
- `metrics.go` — latency 측정 인터셉터
|
|
|
|
---
|
|
|
|
## 2. REST 비교군 구현 (Phase 1)
|
|
|
|
### 2.1. REST 서버
|
|
- `cmd/rest-server/main.go` — HTTP/1.1 + JSON REST API 서버
|
|
- `--edge` 플래그 지원 (REST-Edge, 엣지 ROI 1차 처리)
|
|
|
|
### 2.2. REST 클라이언트
|
|
- `rest_client.go` — gRPC 클라이언트와 동일 시나리오 보장
|
|
|
|
---
|
|
|
|
## 3. 게이트웨이 구현 (Phase 2~3)
|
|
|
|
### 3.1. 게이트웨이 코어 (`internal/gateway/`)
|
|
- `gateway.go` — 라우팅·변환 엔진
|
|
- `protocol_adapter.go` — IoT 프로토콜 어댑터 인터페이스
|
|
- `mqtt_adapter.go` — MQTT → Protobuf 변환
|
|
- `coap_adapter.go` — CoAP → Protobuf 변환 (P1)
|
|
- `route_table.go` — 서비스 디스커버리·라우팅 테이블 (YAML 기반)
|
|
|
|
### 3.2. 라우터 (`internal/router/`)
|
|
- `task_router.go` — 엣지 라우팅 로직 (ROI 결과 기반)
|
|
|
|
### 3.3. 게이트웨이 서버
|
|
- `cmd/gateway/main.go` — 게이트웨이 진입점
|
|
- HTTP/2 fallback 모드 지원 (quic-go 리스크 대비)
|
|
|
|
---
|
|
|
|
## 4. 스크립트·빌드 인프라
|
|
|
|
### 4.1. Shell 스크립트 (`scripts/`)
|
|
- `proto-gen.sh` — protoc 컴파일 자동화
|
|
- `tc-setup.sh` — `--delay --loss --rate --interface` 옵션 지원
|
|
- `tc-reset.sh` — tc 설정 초기화
|
|
|
|
### 4.2. Docker (`docker/`)
|
|
- `Dockerfile.server` — gRPC 서버 컨테이너
|
|
- `Dockerfile.rest-server` — REST 서버 컨테이너
|
|
- `docker-compose.yml` — 전체 실험 환경 구성
|
|
|
|
### 4.3. Makefile (루트)
|
|
- `make proto`, `make build`, `make run-server`, `make test`
|
|
- `make benchmark`, `make lint`, `make docker-up/down`, `make clean`
|
|
|
|
### 4.4. Lint 설정
|
|
- `.golangci-lint.yaml` — errcheck, govet, staticcheck 등
|
|
|
|
### 4.5. `go.mod` / `go.sum` (루트)
|
|
- 루트 Go 모듈 초기화 (`src/`와 별도)
|
|
|
|
---
|
|
|
|
## 5. 벤치마크 (Phase 2~3)
|
|
|
|
### 5.1. 벤치마크 러너 CLI
|
|
- `cmd/benchmark-runner/main.go` — `--mode=once|matrix --scenario --transport`
|
|
- 분산 환경 end-to-end 측정 (P50/P95/P99, RPS)
|
|
- 2모드: 단일 측정(`once`) / 전체 매트릭스 sweep(`matrix`)
|
|
|
|
### 5.2. Go testing.B 벤치마크 (`benchmarks/scenarios/`)
|
|
- `unary_test.go` — Unary RPC 마이크로벤치마크
|
|
- `streaming_test.go` — Streaming RPC 벤치마크
|
|
- `rest_compare_test.go` — REST vs gRPC 비교
|
|
- 역할: 단일 프로세스 내 직렬화 시간·처리량 측정 (benchmark-runner와 분리)
|
|
|
|
### 5.3. 실험 결과 저장소
|
|
- `benchmarks/results/YYYY-MM-DD/*.json` — raw latency + 메타데이터
|
|
- 사후 분석: percentile + CI95 + Tukey outlier + Mann-Whitney U
|
|
|
|
---
|
|
|
|
## 6. 문서·설계 결정
|
|
|
|
### 6.1. ADR (Architecture Decision Records)
|
|
`docs/decisions/` 디렉터리에 다음 ADR 작성 필요:
|
|
- `001-go-grpc-baseline.md` — Go + gRPC 기술 스택 선정 배경
|
|
- `002-quic-grpc-compatibility-poc.md` — quic-go 호환성 검증 결과
|
|
- `003-gateway-architecture.md` — 게이트웨이 아키텍처 및 novelty 정의
|
|
- `004-protocol-adapter-design.md` — MQTT/CoAP 변환 전략
|
|
- `005-routing-data-model.md` — 라우팅 데이터 모델 및 설정 형식
|
|
- `006-experiment-design.md` — 실험 매트릭스·워크로드 파라미터 고정
|
|
|
|
### 6.2. 위험 관리 (`docs/risks.md`)
|
|
- quic-go 호환성 (R-01)
|
|
- Docker tc 미작동 (R-02)
|
|
- MQTT/CoAP 범위 과다 (R-03)
|
|
- Go 버전업 호환성 (R-04)
|
|
- 합성 부하의 한계 (R-05)
|
|
|
|
---
|
|
|
|
## 7. Phase 0 UI — 사소한 개선
|
|
|
|
### 7.1. `types.go` — 6개 시스템 확장 (낮은 우선순위)
|
|
- REST-Cloud / REST-Edge / gRPC-H3-Stream / gRPC-H3-GW 추가
|
|
- **메인 비교 대상은 REST-H2 / gRPC-H2 / gRPC-H3 3개**이므로 시급하지 않음
|
|
|
|
### 7.2. `Result.Latencies` RingBuffer 전환 (선택)
|
|
- 타입 레벨에서 cap을 명시하거나 RingBuffer로 변경
|
|
- 현재는 simulator.go에서 500개로 제한 중
|
|
|
|
### 7.3. `padVisible()` 개선 (선택)
|
|
- `runewidth.StringWidth()` 사용하여 한글 정렬 보정
|
|
- (`mattn/go-runewidth`는 이미 간접 의존성에 존재)
|
|
|
|
---
|
|
|
|
## Phase별 요약
|
|
|
|
| Phase | 주요 작업 | 의존성 |
|
|
|-------|---------|--------|
|
|
| **1** | Proto 정의 + 전송 계층 + gRPC 서버/클라이언트 + REST 비교군 | — |
|
|
| **2** | 게이트웨이 + MQTT 어댑터 + 라우팅 | Phase 1 완료 |
|
|
| **3** | tc 스크립트 + Docker + 벤치마크 러너 | Phase 1 완료 |
|
|
| **4** | Mininet 토폴로지 + 다중 컨테이너 부하 | Phase 3 완료 |
|
|
| **5** | simulator 실측 교체 + 0-RTT/HoL 측정 | Phase 3~4 완료 |
|
|
|
|
> 상세 우선순위는 `TASK_LIST.md`를, 의존 순서는 `IMPLEMENTATION.md` §6.2를 참조한다.
|