Part 1: Rust 시작하기 및 기초 문법 (Step 1 ~ 10)
- Rust 소개: 왜 Rust인가? (안전성과 성능)
- 개발 환경 구축: rustup, 툴체인, 에디터 설정
- 첫 번째 프로그램: "Hello, World!" 작성 및 분석
- Cargo 기초: 프로젝트 생성, 빌드, 실행 (new, build, run)
- Cargo.toml 구조와 패키지 관리 이해하기
- 변수와 가변성:
let과mut키워드 - 스칼라 데이터 타입: 정수, 부동소수점, 불리언, 문자
- 컴파운드 데이터 타입: 튜플(Tuple)과 배열(Array)
- 함수 선언, 매개변수, 그리고 반환값
- 코드 문서화: 주석 작성법과
rustdoc
Part 2: 제어 흐름과 미니 프로젝트 (Step 11 ~ 20)
- 제어 흐름 1:
if표현식 - 제어 흐름 2:
loop반복문과 값 반환 - 제어 흐름 3:
while반복문 - 제어 흐름 4:
for반복문과 컬렉션 순회 - 변수 섀도잉 (Shadowing) 기법
- 상수(
const)와 스태틱(static) 변수 - 기본 연산자와 표현식(Expressions)
- 표준 라이브러리(
std::io)를 이용한 사용자 입력 받기 - 미니 프로젝트 1: 숫자 맞추기 게임 만들기 (CLI 기초)
- 외부 크레이트(Crate) 추가 및 사용법 (
rand크레이트)
Part 3: 소유권(Ownership)과 메모리 관리 (Step 21 ~ 30)
- 메모리 구조: 스택(Stack)과 힙(Heap)의 이해
- Rust의 핵심: 소유권(Ownership) 3대 규칙
- 변수 데이터 상호작용: 이동(Move)의 개념
- 변수 데이터 상호작용: 복제(Clone)와 복사(Copy)
- 소유권과 함수의 관계
- 반환값과 소유권의 이동
- 참조(References)와 대여(Borrowing)
- 가변 참조자(Mutable References)와 데이터 경쟁 방지 규칙
- 댕글링 참조(Dangling References)와 컴파일러의 보호
- 슬라이스(Slice) 타입: 문자열 슬라이스와 배열 슬라이스
Part 4: 구조체(Struct)와 열거형(Enum) (Step 31 ~ 40)
- 구조체(Struct) 정의 및 인스턴스화
- 튜플 구조체와 유닛(Unit-like) 구조체
- 구조체의 데이터 소유권 및 생명주기 기초
- 메서드(Method) 정의 구문 (
impl블록) - 연관 함수(Associated Functions)와 생성자 패턴
- 열거형(Enum) 정의와 활용
Option열거형: Null 없는 프로그래밍의 핵심match제어 흐름 연산자 기초match를 활용한Option<T>패턴 매칭if let을 사용한 간결한 제어 흐름
Part 5: 모듈 시스템과 가시성 (Step 41 ~ 50)
- 모듈 시스템 개요: 패키지(Package)와 크레이트(Crate)
- 모듈(Module) 정의를 통한 코드 스코프 및 그룹화
- 모듈 트리에서 항목을 참조하기 위한 경로(Path)
pub키워드를 이용한 가시성(Visibility) 제어super및self키워드 활용- 구조체, 열거형, 메서드의 가시성 세부 규칙
use키워드로 경로를 스코프 안으로 가져오기as키워드로 임포트 항목에 새로운 이름 부여하기- 모듈을 여러 파일 및 디렉터리로 분리하기
- Cargo 작업 공간(Workspace) 구성하기
Part 6: 표준 컬렉션과 에러 처리 (Step 51 ~ 60)
- 벡터(Vector) 기초:
Vec<T>생성과 요소 추가 - 벡터 요소 접근 및 반복 순회
- 텍스트 처리:
String과&str의 심층 이해 - 문자열 결합, 슬라이싱, 반복
- 해시맵(HashMap) 기초: 생성과 키-값 삽입
- 해시맵 값 접근, 업데이트 및 소유권
- 에러 처리 기초:
panic!매크로와 복구 불가능한 에러 Result열거형을 이용한 복구 가능한 에러 처리match를 활용한 세밀한Result매칭- 에러 전파(Propagation)와
?연산자
Part 7: 제네릭, 트레이트, 라이프타임 (Step 61 ~ 70)
- 제네릭(Generics)의 개념과 코드 중복 제거
- 함수, 구조체, 열거형에서의 제네릭 데이터 타입
- 제네릭 메서드 구현 및 단형화(Monomorphization)
- 트레이트(Trait): 공통 동작 정의하기 (인터페이스)
- 특정 타입에 트레이트 구현하기
- 트레이트를 함수의 매개변수로 사용하기 (
impl Trait, Trait Bound) - 트레이트 바운드를 사용한 조건부 메서드 구현
- 라이프타임(Lifetimes)의 개념과 대여 검사기(Borrow Checker)
- 함수 시그니처에서의 라이프타임 어노테이션
- 구조체, 메서드, 정적(
'static) 라이프타임 명시
Part 8: 클로저, 반복자, 스마트 포인터 기초 (Step 71 ~ 80)
- 클로저(Closure) 기초: 환경을 캡처하는 익명 함수
- 클로저의 타입 추론과 캡처 방식 (
Fn,FnMut,FnOnce) move키워드와 클로저의 소유권 이전- 반복자(Iterator) 패턴의 이해와
Iterator트레이트 - 소비 어댑터(Consuming Adaptors)와 반복기(Iterator) 메서드
- 반복자 어댑터(Iterator Adaptors):
map,filter등 활용 - 루프와 반복자의 성능 차이 이해 (Zero-cost Abstraction)
- 스마트 포인터(Smart Pointers)란 무엇인가?
Box<T>를 사용하여 힙(Heap) 공간에 데이터 할당하기Deref트레이트를 통한 스마트 포인터 참조 역참조
Part 9: 고급 스마트 포인터와 동시성(Concurrency) (Step 81 ~ 90)
Drop트레이트와 초기화/해제 리소스 관리Rc<T>: 참조 카운팅 기반 스마트 포인터 (복수 소유권)RefCell<T>과 내부 가변성(Interior Mutability) 패턴- 참조 순환(Reference Cycles) 방지와
Weak<T> - 두려움 없는 동시성: 스레드(Thread) 생성과
join move클로저를 활용한 스레드 간 데이터 이동- 메시지 패싱(Message Passing): 채널(
mpsc)을 통한 통신 - 채널을 활용한 다중 프로듀서 단일 컨슈머 패턴
- 공유 상태(Shared State) 동시성:
Mutex<T>의 이해 - 다중 스레드 환경을 위한
Arc<T>와 동시성 제어
Part 10: 고급 기능 및 멀티스레드 기초 프로젝트 (Step 91 ~ 100)
- 마커 트레이트(Marker Traits):
Send와Sync - Rust에서의 객체 지향 프로그래밍(OOP) 특성 구현
- 트레이트 객체(Trait Objects)를 이용한 동적 분배(Dynamic Dispatch)
- 고급 패턴 매칭: 다양한 위치의 패턴 (
if let,while let,for) - 패턴 문법 심화 (다중 매칭, 범위 매칭, 구조 분해 할당)
- 고급 트레이트: 연관 타입(Associated Types)과 기본 타입 매개변수
- 안전하지 않은 Rust (
unsafe): 메모리 직접 제어 - 매크로(Macros) 1: 선언적 매크로 (
macro_rules!) 기초 - 매크로(Macros) 2: 절차적 매크로(Procedural Macros) 개요
- 중간 프로젝트: 스레드 풀(Thread Pool)을 활용한 멀티스레드 웹 서버 구축
Part 11: 테스트, 도구 및 실무 생태계 (Step 101 ~ 110)
- 단위 테스트(Unit Test) 작성과
#[test]속성 - 통합 테스트(Integration Test) 디렉토리 구조 및 환경 설정
- 테스트 에러 처리 (
Result반환) 및should_panic속성 - 코드 품질 관리:
Clippy를 활용한 린팅(Linting)과 관용적 코드 작성 - 자동 코드 포맷팅:
Rustfmt적용 및 설정 - 고급 문서화: 마크다운 주석 작성 및
cargo doc으로 웹 페이지 퍼블리싱 - 데이터 직렬화/역직렬화의 표준:
Serde크레이트의 이해 serde_json을 활용한 JSON 데이터 파싱 및 생성- 우아한 에러 처리 1:
Anyhow크레이트를 활용한 어플리케이션 에러 핸들링 - 우아한 에러 처리 2:
Thiserror크레이트를 활용한 라이브러리 커스텀 에러 정의
Part 12: 비동기 프로그래밍(Async) 및 확장 분야 (Step 111 ~ 120)
- 비동기 프로그래밍의 필요성과 멀티스레딩 모델과의 차이점
async와await키워드의 이해 및 상태 머신(State Machine)Future트레이트와 비동기 런타임의 개념 (Rust의 런타임 분리 철학)- Tokio 런타임 기초: 비동기 작업 스폰 (
tokio::spawn) - Tokio 심화: 비동기 I/O, 타이머, 그리고 비동기 채널 통신
- HTTP 클라이언트:
Reqwest크레이트를 활용한 외부 API 비동기 호출 - 실무 로깅 시스템 구축:
Tracing크레이트와 로그 레벨링 - WebAssembly (Wasm) 기초: Rust 코드를 빌드하여 브라우저에서 실행하기
- 외부 함수 인터페이스 (FFI): C/C++ 또는 Python과 Rust 코드 연동하기
- 최종 실전 프로젝트: Tokio, Reqwest, Serde를 결합한 고성능 비동기 분산 웹 크롤러(또는 API 서버) 구축