-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCargo.toml
More file actions
231 lines (200 loc) · 8.66 KB
/
Copy pathCargo.toml
File metadata and controls
231 lines (200 loc) · 8.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
# =============================================================================
# CTS (Code Storage) 워크스페이스 루트 Cargo.toml
# =============================================================================
#
# 워크스페이스란?
# - 여러 크레이트(패키지)를 하나의 프로젝트로 관리
# - 공통 의존성 버전을 한 곳에서 관리
# - cargo build 한 번으로 모든 크레이트 빌드
#
# 파일 위치: 프로젝트 루트 (code-storage-server/Cargo.toml)
# =============================================================================
[workspace]
# -----------------------------------------------------------------------------
# resolver: 의존성 해석 알고리즘 버전
# -----------------------------------------------------------------------------
# "2": Rust 2021 에디션 기본값
# - 더 똑똑한 feature 통합
# - 빌드 스크립트와 proc-macro의 의존성 분리
resolver = "2"
# -----------------------------------------------------------------------------
# members: 워크스페이스에 포함될 크레이트 목록
# -----------------------------------------------------------------------------
# 각 경로에 Cargo.toml이 있어야 함
# 상대 경로로 지정
members = [
"crates/cli", # CTS CLI (cts 명령어) - 사용자가 터미널에서 사용
"crates/server", # CTS Server (API) - 웹 서버, REST API 제공
"crates/core", # 핵심 로직 - 해싱, 객체 모델, 압축
"crates/shared", # 공유 타입 - 에러, 공통 타입 (모든 크레이트가 사용)
]
# =============================================================================
# 워크스페이스 공통 패키지 메타데이터
# =============================================================================
# 각 크레이트에서 version.workspace = true 로 상속받아 사용
# 장점: 버전 업데이트 시 한 곳만 수정하면 됨
[workspace.package]
# 시맨틱 버전 (Semantic Versioning): MAJOR.MINOR.PATCH
# - MAJOR: 호환되지 않는 API 변경
# - MINOR: 하위 호환되는 기능 추가
# - PATCH: 하위 호환되는 버그 수정
version = "0.1.0"
# Rust 에디션: 언어 기능 세트
# - 2015: 초기 안정화 버전
# - 2018: NLL, async/await 준비
# - 2021: 현재 최신, IntoIterator for arrays 등
edition = "2021"
# 작성자 정보 (crates.io 배포 시 표시됨)
authors = ["Your Name <your.email@example.com>"]
# 라이선스
license = "MIT"
# =============================================================================
# 워크스페이스 공통 의존성
# =============================================================================
# 여기서 버전을 정의하면 각 크레이트에서:
# tokio.workspace = true
# 이렇게 버전 명시 없이 사용 가능
#
# 장점:
# 1. 모든 크레이트가 같은 버전 사용 → 호환성 보장
# 2. 버전 업데이트 시 한 곳만 수정
# 3. Cargo.lock 충돌 방지
[workspace.dependencies]
# -----------------------------------------------------------------------------
# 비동기 런타임 (Async Runtime)
# -----------------------------------------------------------------------------
# Rust의 async/await는 런타임이 필요함 (언어에 내장 안 됨)
# tokio: 가장 널리 쓰이는 비동기 런타임
#
# features = ["full"]: 모든 기능 포함
# - rt: 런타임 코어
# - rt-multi-thread: 멀티스레드 스케줄러
# - io-util: AsyncRead, AsyncWrite
# - net: TCP, UDP, Unix 소켓
# - time: sleep, timeout
# - fs: 비동기 파일 시스템
# - macros: #[tokio::main], #[tokio::test]
tokio = { version = "1", features = ["full"] }
# -----------------------------------------------------------------------------
# 웹 프레임워크 (Server)
# -----------------------------------------------------------------------------
# axum: Tokio 팀이 만든 현대적인 웹 프레임워크
# - 타입 안전한 라우팅
# - 미들웨어 지원 (tower 기반)
# - 매크로 없이 핸들러 작성
axum = "0.7"
# tower-http: HTTP 관련 미들웨어
# - cors: Cross-Origin Resource Sharing
# - trace: 요청/응답 로깅
tower-http = { version = "0.5", features = ["cors", "trace"] }
# -----------------------------------------------------------------------------
# CLI 파싱
# -----------------------------------------------------------------------------
# clap: Command Line Argument Parser
# - derive: #[derive(Parser)] 매크로로 선언적 CLI 정의
# - 자동 --help, --version 생성
# - 서브커맨드, 플래그, 옵션 지원
clap = { version = "4", features = ["derive"] }
# -----------------------------------------------------------------------------
# 직렬화/역직렬화 (Serialization)
# -----------------------------------------------------------------------------
# serde: Rust의 표준 직렬화 프레임워크
# - derive: #[derive(Serialize, Deserialize)] 매크로
# - JSON, YAML, TOML, MessagePack 등 다양한 포맷 지원
serde = { version = "1", features = ["derive"] }
# serde_json: JSON 포맷 지원
# - API 요청/응답 처리
# - 설정 파일 파싱
serde_json = "1"
# -----------------------------------------------------------------------------
# 데이터베이스
# -----------------------------------------------------------------------------
# sqlx: 컴파일 타임 검증되는 비동기 SQL 라이브러리
#
# features:
# - runtime-tokio: tokio 런타임 사용
# - postgres: PostgreSQL 드라이버
# - uuid: UUID 타입 매핑
# - chrono: 날짜/시간 타입 매핑
#
# 특징:
# - 컴파일 시 SQL 문법 검증 (sqlx::query!)
# - 비동기 쿼리 실행
# - 연결 풀 내장
sqlx = { version = "0.7", features = ["runtime-tokio", "postgres", "uuid", "chrono"] }
# -----------------------------------------------------------------------------
# 해싱 (Hashing)
# -----------------------------------------------------------------------------
# sha1: SHA-1 해시 (Git 호환용, 레거시)
# - Git은 SHA-1 사용
# - 보안상 취약하지만 Git 호환 위해 포함
sha1 = "0.10"
# sha2: SHA-2 해시 (SHA-256 등)
# - CTS는 SHA-256 사용 (더 안전)
# - Blob, Tree, Commit 해시에 사용
sha2 = "0.10"
# hex: 16진수 인코딩/디코딩
# - 해시값을 문자열로 표현할 때 사용
# - "a1b2c3..." 형태
hex = "0.4"
# -----------------------------------------------------------------------------
# 압축 (Compression)
# -----------------------------------------------------------------------------
# flate2: zlib/deflate 압축
# - Git과 동일한 압축 방식
# - Blob 저장 시 용량 절약
flate2 = "1.0"
# -----------------------------------------------------------------------------
# 에러 처리 (Error Handling)
# -----------------------------------------------------------------------------
# thiserror: 커스텀 에러 타입 정의
# - #[derive(Error)] 매크로
# - #[error("...")] 로 Display 구현
# - 라이브러리 코드에 적합
thiserror = "1"
# anyhow: 간편한 에러 처리
# - Result<T, anyhow::Error>
# - .context("추가 정보") 로 에러 체이닝
# - 애플리케이션 코드에 적합
anyhow = "1"
# -----------------------------------------------------------------------------
# 로깅 (Logging)
# -----------------------------------------------------------------------------
# tracing: 구조화된 로깅 + 분산 추적
# - span: 작업 범위 추적
# - event: 로그 이벤트
# - 비동기 코드에 최적화
tracing = "0.1"
# tracing-subscriber: tracing 구현체
# - env-filter: RUST_LOG 환경변수로 로그 레벨 설정
# 예: RUST_LOG=debug,sqlx=warn
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
# -----------------------------------------------------------------------------
# 유틸리티 (Utilities)
# -----------------------------------------------------------------------------
# uuid: 범용 고유 식별자 (UUID)
# - v4: 랜덤 기반 UUID (가장 많이 사용)
# - serde: JSON 직렬화 지원
uuid = { version = "1", features = ["v4", "serde"] }
# chrono: 날짜/시간 처리
# - DateTime<Utc>: UTC 시간
# - serde: JSON 직렬화 지원
chrono = { version = "0.4", features = ["serde"] }
# async-trait: trait에서 async fn 사용
# - Rust는 기본적으로 trait에 async fn 불가
# - 이 매크로가 변환해줌
# - 포트(인터페이스) 정의에 필수
async-trait = "0.1"
# dotenvy: .env 파일 로드
# - 환경변수를 파일로 관리
# - 개발 환경 설정에 유용
dotenvy = "0.15"
# -----------------------------------------------------------------------------
# 인증 (Phase 8)
# -----------------------------------------------------------------------------
# jsonwebtoken: JWT 발급/검증 (HS256)
jsonwebtoken = "9"
# bcrypt: 비밀번호 해싱
bcrypt = "0.15"
# rpassword: CLI 비밀번호 숨김 입력
rpassword = "7"