[Rust] 입문 가이드

History
2021.09.20 작성
2022.04.16 보완
2023.06.07 보완
2024.02.25 보완
2024.03.30 보완
2025.11.23 보완
본인의 경혐을 바탕으로 해서, 야매로 써둔 글을 엮어둔 입문자 가이드용 포스트다.
별 생각 없이 끄적인게 상당수인지라, 그냥 참고만 하고 과신하지는 않길 바란다.
가장 좋은 자료는 공식문서다.
공식문서: https://doc.rust-lang.org/book/
한국어 번역: https://doc.rust-kr.org/
부분적은 문법 요소만 간단하게 보고 싶을 때는 이 문서가 좋다.
https://cheats.rs/
중급서: 이펙티브 러스트
https://www.lurklurk.org/effective-rust/cover.html
실제로 코드를 짜고 문제를 풀면서 학습하는 것을 선호한다면, rustlings라는 괜찮은 학습 도구가 있다.
https://blog.naver.com/sssang97/223669016038
Hello World부터 시작해보기
러스트 코드를 실행하려면 당연히 컴파일러가 있어야 한다.
맥, 리눅스 등의 OS에서는 패키지 매니저나 다음 명령을 실행해서 컴파일러 및 주변도구를 설치할 수 있다.
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
공식문서에서는 패키지매니저보다는 위의 명령을 사용하는 것을 권장한다.
윈도우즈에서는 아래 링크에서 인스톨러를 받아 설치할 수 있다.
https://www.rust-lang.org/tools/install
그렇게 해서 cargo와 rustc가 잘 실행된다면, 잘 설치가 된 것이다.

프로젝트는 cargo new 명령을 통해서 만들 수 있다.
cargo는 프로젝트에 대한 전반적인 관리를 대신해주는 핵심 툴체인이다. nodejs 환경의 npm 등에 대응된다.
아래 명령들은 helloworld라는 이름의 프로젝트 폴더를 생성하고 그 구조와 소스를 조회한다.
cargo new helloworld
ls
cd helloworld
cat src/main.rs
그럼 저렇게 기본 소스를 만들어서 제공해준다.
"Hello World"만 출력하는 간단한 소스다.
실행은 cargo run 명령을 통해서 수행할 수 있다.
컴파일부터 실행까지를 자동으로 처리해준다.
cargo run
자, 이제 여기까지 성공했다면 당신은 Rust의 세계에 발을 디딘 것이다.
자고로 시작이 반이라고 했다.
그리고 벌써 반이나 왔다! 좀더 힘을 내서 나머지 절반도 완주해보자.
개괄/개요
https://blog.naver.com/sssang97/221280642948
https://blog.naver.com/sssang97/221842267330
https://blog.naver.com/sssang97/221285929525
https://blog.naver.com/sssang97/221354984344
https://blog.naver.com/sssang97/221280654839
변수
https://blog.naver.com/sssang97/221286410982
https://blog.naver.com/sssang97/222813239635
상수
https://blog.naver.com/sssang97/223062248105
https://blog.naver.com/sssang97/223139345481
제어구문
https://blog.naver.com/sssang97/221290558221
https://blog.naver.com/sssang97/221290663005
https://blog.naver.com/sssang97/221631319925
https://blog.naver.com/sssang97/221419563647
https://blog.naver.com/sssang97/221663035778
https://blog.naver.com/sssang97/221290886894
https://blog.naver.com/sssang97/221710776435
https://blog.naver.com/sssang97/223152534280
참조와 포인터
https://blog.naver.com/sssang97/221288137993
https://blog.naver.com/sssang97/221608086218
https://blog.naver.com/sssang97/223572703991
문자열
https://blog.naver.com/sssang97/221295946540
https://blog.naver.com/sssang97/221639772334
https://blog.naver.com/sssang97/221286432854
https://blog.naver.com/sssang97/221646190634
https://blog.naver.com/sssang97/223376716945
https://blog.naver.com/sssang97/223377703932
함수
https://blog.naver.com/sssang97/221288110986
https://blog.naver.com/sssang97/221291349229
https://blog.naver.com/sssang97/221303890777
https://blog.naver.com/sssang97/222223638641
타입
https://blog.naver.com/sssang97/221293829090
https://blog.naver.com/sssang97/221290862596
https://blog.naver.com/sssang97/221290826542
https://blog.naver.com/sssang97/222230973926
https://blog.naver.com/sssang97/221605166403
https://blog.naver.com/sssang97/221639666248
https://blog.naver.com/sssang97/221631811708
https://blog.naver.com/sssang97/221292646952
https://blog.naver.com/sssang97/221615637103
https://blog.naver.com/sssang97/223262254364
https://blog.naver.com/sssang97/223292031798
https://blog.naver.com/sssang97/223971971418
구조체
https://blog.naver.com/sssang97/221289734171
열거형(enum)
https://blog.naver.com/sssang97/221290376959
https://blog.naver.com/sssang97/222237628664
https://blog.naver.com/sssang97/222235649010
오류처리
Rust는 강력하고 명시적인 오류 처리 방식을 지향하는 독특한 언어다.
오류 처리 방식에 있어서는 함수형 언어의 개념을 거의 그대로 다 가져와서 사용한다.
https://blog.naver.com/sssang97/223915940256
https://blog.naver.com/sssang97/223468200071
https://blog.naver.com/sssang97/221489085996
https://blog.naver.com/sssang97/222161933157
https://blog.naver.com/sssang97/223908197307
https://blog.naver.com/sssang97/222979785124
https://blog.naver.com/sssang97/223292046219
https://blog.naver.com/sssang97/222830437160
https://blog.naver.com/sssang97/223302358231
https://blog.naver.com/sssang97/222828143796
https://blog.naver.com/sssang97/223136396480
입출력
https://blog.naver.com/sssang97/221490135449
https://blog.naver.com/sssang97/221489377183
iterator 패턴
https://blog.naver.com/sssang97/221659601536
https://blog.naver.com/sssang97/221660082878
https://blog.naver.com/sssang97/223386609915
https://blog.naver.com/sssang97/223456054522
트레잇
트레잇은 다른 언어의 인터페이스, 프로토콜, 타입 클래스 등에 대응되는 단위다.
이걸 통해서 객체의 행동 인터페이스를 정의하고, 다형성 등을 구현할 수 있다.
https://blog.naver.com/sssang97/221698261401
https://blog.naver.com/sssang97/221660616266
https://blog.naver.com/sssang97/223138707267
https://blog.naver.com/sssang97/223141563733
https://blog.naver.com/sssang97/223141581809
https://blog.naver.com/sssang97/221410797622
https://blog.naver.com/sssang97/221294975958
https://blog.naver.com/sssang97/221656060506
https://blog.naver.com/sssang97/221572524435
https://blog.naver.com/sssang97/222194815968
https://blog.naver.com/sssang97/221987795374
https://blog.naver.com/sssang97/222228051696
https://blog.naver.com/sssang97/222271403606
https://blog.naver.com/sssang97/221582291059
https://blog.naver.com/sssang97/221700370814
https://blog.naver.com/sssang97/221711618737
https://blog.naver.com/sssang97/221681140178
https://blog.naver.com/sssang97/221700352899
https://blog.naver.com/sssang97/221678600461
https://blog.naver.com/sssang97/221411013707
https://blog.naver.com/sssang97/223057472977
https://blog.naver.com/sssang97/223440805210
소유권과 라이프타임
소유권은 Rust를 구성하는 핵심 구성요소 중 하나다.
Rust의 난이도를 상승시키는 주범이기도 하지만, 견고한 코드를 작성할 수 있게 해주는 토대이기도 하다.
그래서 좀 잘 알고 쓰는 것이 중요하다.
https://blog.naver.com/sssang97/221594974122
https://blog.naver.com/sssang97/221582343834
https://blog.naver.com/sssang97/222275500902
https://blog.naver.com/sssang97/222271249347
https://blog.naver.com/sssang97/223083238598
https://blog.naver.com/sssang97/222263684734
https://blog.naver.com/sssang97/223745667272
스레드와 동기화
Rust는 안전한 동시성을 지향하는 프로그래밍 언어다.
때문에 기본적으로 동기화 프리미티브를 잘 지원하고, 안전한 동기화 수단을 사용해야만 컴파일이 가능하도록 설계가 되어있다.
https://blog.naver.com/sssang97/221548254650
https://blog.naver.com/sssang97/221608026580
https://blog.naver.com/sssang97/221604111918
https://blog.naver.com/sssang97/221660521745
https://blog.naver.com/sssang97/223347574452
https://blog.naver.com/sssang97/223344197343
https://blog.naver.com/sssang97/222272690659
https://blog.naver.com/sssang97/223087309595
https://blog.naver.com/sssang97/224052716178
https://blog.naver.com/sssang97/224053855547
https://blog.naver.com/sssang97/222998648587
https://blog.naver.com/sssang97/223278506862
async-await: 비동기 시스템
https://blog.naver.com/sssang97/221702955397
https://blog.naver.com/sssang97/221917758804
https://blog.naver.com/sssang97/221915587415
https://blog.naver.com/sssang97/223097354723
https://blog.naver.com/sssang97/223392464919
https://blog.naver.com/sssang97/223396414519
https://blog.naver.com/sssang97/223770882159
프로젝트/소스 관리
https://blog.naver.com/sssang97/221293248931
(구버전) https://blog.naver.com/sssang97/221832916687
(리뉴얼) https://blog.naver.com/sssang97/223087167228
https://blog.naver.com/sssang97/222787700382
https://blog.naver.com/sssang97/223114443419
https://blog.naver.com/sssang97/222937559361
crate 및 종속성
crate는 Rust의 독립적인 모듈 단위다.
개별 라이브러리나 실행파일은 각각이 고유한 crate다.
https://blog.naver.com/sssang97/221722399992
https://blog.naver.com/sssang97/222373492319
https://blog.naver.com/sssang97/222030627195
https://blog.naver.com/sssang97/222904399354
https://blog.naver.com/sssang97/223353947366
https://blog.naver.com/sssang97/223473289560
테스트
Rust는 언어 수준에서 테스트 도구를 제공한다.
https://blog.naver.com/sssang97/221718437043
https://blog.naver.com/sssang97/222978542288
https://blog.naver.com/sssang97/223005488696
https://blog.naver.com/sssang97/223162023261
https://blog.naver.com/sssang97/223335914929
https://blog.naver.com/sssang97/223570112707
Lint
Rust는 언어 수준에서 코드 품질 관리를 위한 강력한 Lint 도구를 제공한다.
이것만 지켜도 꽤 많은 문제를 조기에 해결하거나 개선할 수 있다.
https://blog.naver.com/sssang97/222232255250
https://blog.naver.com/sssang97/223470734027
https://blog.naver.com/sssang97/223711220968
매크로
Rust의 주요 장점 중 하나가, 매크로를 기반으로 한 컴파일타임 확장 기능이다.
이를 통해 쓸데없는 보일러플레이트를 줄이고 성능과 사용성을 향상한다.
https://blog.naver.com/sssang97/221608332446
https://blog.naver.com/sssang97/221722452614
https://blog.naver.com/sssang97/223563571997
https://blog.naver.com/sssang97/222880127001
https://blog.naver.com/sssang97/222838069038
https://blog.naver.com/sssang97/223302985293
https://blog.naver.com/sssang97/223499309702
https://blog.naver.com/sssang97/223833304494
https://blog.naver.com/sssang97/224059530130
자잘한 팁
https://blog.naver.com/sssang97/222710219498
https://blog.naver.com/sssang97/222706768955
https://blog.naver.com/sssang97/222006882434
https://blog.naver.com/sssang97/222293215964
https://blog.naver.com/sssang97/222276383751
https://blog.naver.com/sssang97/221723030668
https://blog.naver.com/sssang97/221688924049
https://blog.naver.com/sssang97/221361724296
https://blog.naver.com/sssang97/223108175228
https://blog.naver.com/sssang97/222885147017
https://blog.naver.com/sssang97/222665768118
https://blog.naver.com/sssang97/223674126524
최적화
https://blog.naver.com/sssang97/222888877448
https://blog.naver.com/sssang97/222817883779
https://blog.naver.com/sssang97/223140670513
https://blog.naver.com/sssang97/223142654009
https://blog.naver.com/sssang97/223216318146
https://blog.naver.com/sssang97/223355101186
https://blog.naver.com/sssang97/223377768489
https://blog.naver.com/sssang97/223378569306
https://blog.naver.com/sssang97/223408774263
https://blog.naver.com/sssang97/223572553968
https://blog.naver.com/sssang97/223572593806
https://blog.naver.com/sssang97/223578430194
https://blog.naver.com/sssang97/223635870247
https://blog.naver.com/sssang97/223940053027
데이터 구조
https://blog.naver.com/sssang97/223129202293
패턴과 이디엄
https://blog.naver.com/sssang97/223146142392
보조도구
https://blog.naver.com/sssang97/223302872721
https://blog.naver.com/sssang97/222386594351
https://blog.naver.com/sssang97/222165609803
https://blog.naver.com/sssang97/222093385552
https://blog.naver.com/sssang97/221718450986
https://blog.naver.com/sssang97/223326987483
https://blog.naver.com/sssang97/223363446561
https://blog.naver.com/sssang97/223363451930
unsafe: 자유를 향하여
https://blog.naver.com/sssang97/221660436556
https://blog.naver.com/sssang97/221660609720
https://blog.naver.com/sssang97/222216883997
https://blog.naver.com/sssang97/221661630758
https://blog.naver.com/sssang97/221662505715
https://blog.naver.com/sssang97/223110057439
https://blog.naver.com/sssang97/223083230164
https://blog.naver.com/sssang97/223009817256
다른 언어와 연결하기 (FFI)
https://blog.naver.com/sssang97/221729300138
https://blog.naver.com/sssang97/221737607357
https://blog.naver.com/sssang97/223103102724
https://blog.naver.com/sssang97/223072977222
https://blog.naver.com/sssang97/223252145604
https://blog.naver.com/sssang97/223623326477
실험기능 맛보기
https://blog.naver.com/sssang97/222393388838
https://blog.naver.com/sssang97/222387764521
https://blog.naver.com/sssang97/222387734773
https://blog.naver.com/sssang97/222386693385
임베디드
Rust는 의외로 임베디드 환경에서도 강점을 보이는 언어이기도 하다.
ARM 환경에서의 지원이 꽤 강력해서, 안전한 시스템을 구현해보고 싶다고 한다면 고려해볼만한 선택지에 있다.
어차피 ARM 기반 임베디드 환경은 제약사항이 너무 많아서 라이브러리 환경이 그닥 중요하지도 않고, Rust를 사용하는 데서 오는 강력한 안정성이 다른 단점들을 덮어버릴 수 있다.
https://blog.naver.com/sssang97/223428498561
https://blog.naver.com/sssang97/223428566380
서드파티들
https://blog.naver.com/sssang97/222028285589
https://blog.naver.com/sssang97/221864535670
https://blog.naver.com/sssang97/223187546235
https://blog.naver.com/sssang97/223360117870
https://blog.naver.com/sssang97/221412346389
https://blog.naver.com/sssang97/223395265957
서드파티: 비동기 & 병렬처리
https://blog.naver.com/sssang97/222073543626
https://blog.naver.com/sssang97/222184184288
https://blog.naver.com/sssang97/222348642211
https://blog.naver.com/sssang97/223900420783
https://blog.naver.com/sssang97/224042695415
https://blog.naver.com/sssang97/223142669639
https://blog.naver.com/sssang97/223142667641
https://blog.naver.com/sssang97/223377751198
https://blog.naver.com/sssang97/223382745588
https://blog.naver.com/sssang97/223281932630
서드파티: DB
https://blog.naver.com/sssang97/223162050509
https://blog.naver.com/sssang97/223337869484
서드파티: 앱 프레임워크
https://blog.naver.com/sssang97/223144851661
https://blog.naver.com/sssang97/222958683756
https://blog.naver.com/sssang97/223357823376
https://blog.naver.com/sssang97/223362413706
https://blog.naver.com/sssang97/223596638010
https://blog.naver.com/sssang97/223596648272
https://blog.naver.com/sssang97/223597910259
https://blog.naver.com/sssang97/223597913650
https://blog.naver.com/sssang97/223599191921
https://blog.naver.com/sssang97/223372190032
응용
https://blog.naver.com/sssang97/222171757226
https://blog.naver.com/sssang97/221745344581
https://blog.naver.com/sssang97/222732903940
https://blog.naver.com/sssang97/223382617511
https://blog.naver.com/sssang97/222574697149
언어 히스토리
https://blog.naver.com/sssang97/224060974663
https://blog.naver.com/sssang97/224013553803
https://blog.naver.com/sssang97/223962985815
https://blog.naver.com/sssang97/223914224979
https://blog.naver.com/sssang97/223868305887
https://blog.naver.com/sssang97/223821481129
https://blog.naver.com/sssang97/223769012539
https://blog.naver.com/sssang97/223722750712
https://blog.naver.com/sssang97/223677744609
https://blog.naver.com/sssang97/223624628855
https://blog.naver.com/sssang97/223575229783
https://blog.naver.com/sssang97/223525788638
https://blog.naver.com/sssang97/223480407378
https://blog.naver.com/sssang97/223434631240
https://blog.naver.com/sssang97/223391294109
https://blog.naver.com/sssang97/223350073856
https://blog.naver.com/sssang97/223306429993
https://blog.naver.com/sssang97/223266999649
https://blog.naver.com/sssang97/223230049388
https://blog.naver.com/sssang97/223192813043
https://blog.naver.com/sssang97/223155658929
https://blog.naver.com/sssang97/223118127186
https://blog.naver.com/sssang97/223080811442
https://blog.naver.com/sssang97/223040072536
https://blog.naver.com/sssang97/222995831471
https://blog.naver.com/sssang97/222958023107
https://blog.naver.com/sssang97/222919165538
https://blog.naver.com/sssang97/222881928781
https://blog.naver.com/sssang97/222846225829
https://blog.naver.com/sssang97/222795695312
https://blog.naver.com/sssang97/222739086014
https://blog.naver.com/sssang97/222694791201
https://blog.naver.com/sssang97/222657518658
https://blog.naver.com/sssang97/222630536177
https://blog.naver.com/sssang97/222621617227
https://blog.naver.com/sssang97/222585446767
https://blog.naver.com/sssang97/222544625850
https://blog.naver.com/sssang97/222501021611
https://blog.naver.com/sssang97/222450356554
https://blog.naver.com/sssang97/222403295035
https://blog.naver.com/sssang97/222340853622
https://blog.naver.com/sssang97/222287883660
https://blog.naver.com/sssang97/222241066224
https://blog.naver.com/sssang97/222192156233
https://blog.naver.com/sssang97/222149339118
https://blog.naver.com/sssang97/222110933834
https://blog.naver.com/sssang97/222073216728
https://blog.naver.com/sssang97/222033287055
https://blog.naver.com/sssang97/221990583710
https://blog.naver.com/sssang97/221925807813
https://blog.naver.com/sssang97/221851018543
https://blog.naver.com/sssang97/221793151382