🦀 Rust 심화 면접 질문 20선
- 메모리 모델 및 소유권 (Memory & Ownership)
Memory Leak: Rust에서 메모리 누수가 발생할 수 있는 시나리오(예: Rc 순환 참조)를 설명하고, 이를 Weak 포인터로 해결하는 방법을 설명해 주세요.
Stack vs Heap: 대규모 데이터를 다룰 때 Box
- 동시성 및 비동기 프로그래밍 (Concurrency & Async)
Send & Sync: *const T와 같은 Raw Pointer가 기본적으로 Send나 Sync가 아닌 이유는 무엇이며, 이를 수동으로 구현해야 할 때의 주의점은 무엇인가요?
- 타입 시스템 및 아키텍처 (Type System & Architecture)
Marker Traits: 아무런 메서드가 없는 마커 트레이트를 정의하여 컴파일 타임에 특정 로직을 강제(Safety Guard)해 본 경험이 있나요?
newtype Pattern: String이나 u64 대신 Newtype 패턴을 사용하여 도메인 로직의 안정성을 높이는 방법과 그 이점을 설명해 주세요.
- 실시간 처리 및 성능 (Streaming & Performance)
Drop Trait: 리소스(DB 커넥션, 파일 핸들 등)를 명시적으로 해제해야 할 때 Drop 트레이트를 어떻게 활용하며, Panic 발생 시 안정성을 어떻게 보장하나요?
SIMD & Optimization: Rust에서 intrinsics나 SIMD를 활용해 수치 계산(예: 오디오 처리)을 최적화하는 것에 대해 어떻게 생각하시나요?
Allocators: 기본 할당자 대신 jemalloc이나 mimalloc을 도입하여 Rust 서버의 성능을 개선할 수 있는 시나리오는 무엇인가요?
- 프로젝트 관리 및 안정성 (Operations & Reliability)
Unsafe Rust: unsafe 블록을 최소화해야 하는 이유는 무엇이며, 부득이하게 사용할 경우 Safety 주석을 어떻게 작성하시나요?
Testing: proptest와 같은 속성 기반 테스트(Property-based testing)를 Rust 프로젝트에 도입해 본 적이 있나요? 그 효용성은 무엇이었나요?
Conditional Compilation: #[cfg(feature = "...")] 를 활용해 특정 플랫폼이나 환경에 맞는 기능을 분리하는 전략을 설명해 주세요.
Cargo Mastery: Cargo.toml의 workspace 기능을 활용해 거대 모노레포를 관리할 때, 의존성 충돌과 빌드 시간을 최적화하는 방법은 무엇인가요?
- Rust 멀티스레딩 & 동시성 심화 면접 질문
1. 비동기 환경에서의 락(Lock) 관리
Arc<Mutexstd::sync::MutexGuard가 Send를 구현하지 않는 이유(OS 레벨 락의 특성)와 tokio::sync::Mutex 도입 시의 성능 트레이드오프, 혹은 블록 스코프({ })를 이용한 락 점유 시간 최소화 전략.
2. 채널(Channel)과 백프레셔(Backpressure)
- 핵심 포인트: 메모리 무한 증식(OOM) 위험성,
mpsc::channel(capacity)사용 시 송신측의 대기 방식, 그리고 데이터 유실이 허용되는 경우watch나broadcast채널로의 전환 고려.
3. 타입 시스템과 메모리 안전성
- 핵심 포인트: 데이터 레이스(Data Race) 방지를 위한
Send/Sync마커 트레이트의 역할,Rc의 비원자적 참조 카운팅과Arc의 원자적(Atomic) 연산 차이.
4. 성능 최적화와 데이터 대여(Borrowing)
- 핵심 포인트: 힙 할당 및 참조 카운팅 오버헤드 제거, 부모 스레드의 스택 프레임을 안전하게 참조하는 구조, 실시간 영상 처리 시 제로 카운팅 오버헤드 달성.
5. 런타임 스케줄링 및 응답성
- 핵심 포인트:
Tokio이벤트 루프 블로킹 방지, 미디어 인코딩/립싱크 연산과 I/O 작업의 분리 설계,yield_now를 통한 협력적 멀티태스킹 이해도.