πŸ¦€

Rust μ›Ή μƒ˜ν”Œ Β· μ‹€μ‹œκ°„ μ±„νŒ…

Rust(Axum) WebSocket λ°±μ—”λ“œ β€” λ‹‰λ„€μž„μ€ 접속 IP, μ„œλ²„ νŒŒμΌμ— 기둝(졜근 1μ‹œκ°„ 보관)
← Rust μ›Ή
μ—°κ²° 쀑… λ‚΄ λ‹‰λ„€μž„(IP): … ν˜„μž¬ μ ‘μ†μž: 0λͺ…
πŸ“ ꡬ쑰 μš”μ•½ 보기 β€” 이 μ±„νŒ…μ—μ„œ Rust둜 κ΅¬ν˜„λœ 뢀뢄은?

κ²°λ‘ λΆ€ν„°: 이제 μ±„νŒ…μ˜ μ‹€μ‹œκ°„ λ°±μ—”λ“œκ°€ Rust둜 κ΅¬ν˜„λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. μ ‘μ†Β·λŒ€ν™”Β·κΈ°λ‘Β·λ³΄κ΄€ μ²˜λ¦¬λŠ” Rust(Axum) WebSocket μ„œλ²„κ°€ λ‹΄λ‹Ήν•˜κ³ , ApacheλŠ” HTTPS 쒅단과 mod_proxy_wstunnel λ¦¬λ²„μŠ€ν”„λ‘μ‹œ μ—­ν• λ§Œ ν•©λ‹ˆλ‹€. PHPλŠ” 더 이상 μ‚¬μš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€(이전 api.phpλŠ” 폴백으둜만 보관).

ν˜„μž¬ ꡬ성 (μ‹€μ œ λ™μž‘ μŠ€νƒ)

κ³„μΈ΅κΈ°μˆ μ—­ν• 
ν”„λŸ°νŠΈμ—”λ“œHTML Β· CSS Β· Vanilla JSUI, WebSocket μ†‘μˆ˜μ‹ (폴링 μ—†μŒ)
μ—£μ§€Apache 2.4 + mod_proxy_wstunnelHTTPS 쒅단, /rust/chat/ws β†’ λ°±μ—”λ“œ WS ν”„λ‘μ‹œ
λ°±μ—”λ“œRust Β· Axum + Tokio (127.0.0.1:8787)WebSocket ν—ˆλΈŒ, λΈŒλ‘œλ“œμΊμŠ€νŠΈ, 기둝/정리
μ €μž₯μ†ŒνŒŒμΌ data/chat.jsonl (JSON Lines)Tokio Mutex 보호, 졜근 1μ‹œκ°„λ§Œ 보관
식별접속 IP(X-Forwarded-For)λ‹‰λ„€μž„μœΌλ‘œ μ‚¬μš©
보관 정리Tokio interval νƒœμŠ€ν¬(60초)1μ‹œκ°„ μ§€λ‚œ 기둝 μ‚­μ œ(파일 μž¬μž‘μ„±)

μ‹€μ‹œκ°„ 흐름 (WebSocket)

λΈŒλΌμš°μ €(JS WebSocket)
   β”‚  μ—°κ²° β†’  Apache :443  /rust/chat/ws   (wss)
   β”‚             └─ mod_proxy_wstunnel ─→ ws://127.0.0.1:8787/ws
   β–Ό
Rust Axum μ„œλ²„
   β”œβ”€ 접속 μ¦‰μ‹œ: 졜근 1μ‹œκ°„ history 전솑 + join λΈŒλ‘œλ“œμΊμŠ€νŠΈ
   β”œβ”€ λ©”μ‹œμ§€ μˆ˜μ‹ : 전체 μ ‘μ†μžμ—κ²Œ broadcast + 파일 append
   β”œβ”€ presence: 접속/ν•΄μ œ μ‹œ ν™œμ„± IP λͺ©λ‘ push
   └─ 60μ΄ˆλ§ˆλ‹€ 1μ‹œκ°„ μ§€λ‚œ 기둝 정리(파일 μž¬μž‘μ„±)

Rust 핡심 μš”μ†Œ

μš”μ†ŒRust κ΅¬ν˜„
HTTP/WS λΌμš°νŒ…axum::Router + WebSocketUpgrade
λ™μ‹œμ„±/λŸ°νƒ€μž„tokio (async), broadcast::channel νŒ¬μ•„μ›ƒ
곡유 μƒνƒœArc<App> + tokio::sync::Mutex
직렬화serde / serde_json
보관 정리tokio::time::interval μ£ΌκΈ° νƒœμŠ€ν¬
⚑ Rust(Axum) WebSocket μ‹€μ‹œκ°„ 전솑 Β· λͺ¨λ“  λŒ€ν™”λŠ” μ„œλ²„ νŒŒμΌμ— 기둝되며 1μ‹œκ°„ ν›„ μžλ™ μ‚­μ œλ©λ‹ˆλ‹€.