GiGong

Rust 배우기 1 - WSL 설치와 Hello World

0. 시작

Rust를 학습하게 되어 기록하는 의미로 포스팅을 하려 합니다. 개발에는 VS Code를 사용하고, 리눅스(WSL)에서 러스트를 실행합니다. (WSL 설치 과정도 같이 정리합니다)

이번 글에서는 Windows Subsystem for Linux (WSL)에 Ubuntu 설치, Rust 설치 후 VS Code로 Hello World 작성 및 실행까지 진행해 보겠습니다.

WSL 설치가 필요없으신 분은 바로 2. Rust 설치로 넘어가주시면 됩니다.

러스트 학습 자료는 The Rust Programming Language (한글)입니다.


ChatGPT에게 Rust의 특징에 대해 물어보았습니다.

Rust는 안전성, 속도, 병행성(Concurrency) 등을 강조하는 시스템 프로그래밍 언어입니다.

  1. 안전성(Safety): Rust는 메모리 안정성을 강조하여 메모리 오류로부터 보호합니다. ‘대여’ 규칙과 ‘소유권’ 시스템을 통해 컴파일러가 런타임에 메모리 오류를 방지하는 기능을 제공합니다.
  2. 속도(Speed): Rust는 고성능 시스템 프로그래밍을 지원하며, 제로 비용 추상화(zero-cost abstractions)를 통해 추상화 수준을 높이면서도 성능 손실을 최소화합니다.
  3. 병행성(Concurrency): Rust는 안전하고 효율적인 병행성을 강조합니다. 언어 자체에서 스레드 안전성을 보장하며, ‘안전한 공유자료구조’ 및 ‘메시지 전달형 병행성’을 지원하여 병렬 프로그래밍을 용이하게 합니다.
  4. 실용적인 문법(Practical Syntax): Rust는 쉽게 읽고 쓸 수 있는 문법을 가지고 있습니다. 패턴 매칭, 표현식 기반 제어 흐름 등 많은 현대적인 언어의 기능을 지원합니다.
  5. 크로스 플랫폼(Cross-Platform): Rust는 다양한 플랫폼에서 작동하며, 다양한 하드웨어 및 운영 체제에서 일관된 성능을 제공합니다.

이러한 특징들은 Rust를 안정적이고 안전하며 효율적인 언어로 만들어, 시스템 프로그래밍에서 사용되는 많은 언어들과 경쟁력을 가지게 만들었습니다.


1. WSL

WSL의 주요 명령어들입니다.

명령어 정보
wsl --install WSL 설치
wsl --version 현재 WSL 버전 확인
wsl --set-default-version {version} 기본 WSL 버전 설정
wsl --update 업데이트
wsl --list --online 온라인에서 사용 가능한 배포판 리스트
wsl --list --verbose 현재 설치된 배포판 리스트
wsl --install -d {image name} 배포판 설치
wsl --unregister {image name} 지우기 (데이터 삭제)
wsl --status 기본 WSL 정보
wsl --shutdown WSL 종료
wsl ~ WSL 실행 (Home 폴더)

1.1. WSL 2 설치

1.1.1. 요구사항

  • Windows 10 요구 사항 (11은 모든 버전에서 사용 가능합니다)
    • x64 시스템의 경우: 버전 1903 이상, 빌드 18362.1049 이상.
    • ARM64 시스템의 경우: 버전 2004 이상, 빌드 19041 이상

    실행(Win + R)에서 winver를 실행하여 현재 윈도우 버전을 확인할 수 있습니다. 버전이 낮을 경우 업데이트 혹은 설치를 해야 합니다.

  • HW에서 가상화 기능을 지원해야 합니다. (1.1.3. WSL 설치가 되지 않을 경우 참고)

1.1.2. 설치

PowerShell 혹은 명령 프롬프트(cmd)를 관리자 권한으로 실행시켜 아래 명령어를 입력합니다.

wsl --install

이미 WSL이 설치되어 있을 경우 WSL의 소개가 출력됩니다.

현재는 버전 2가 기본으로 설치되지만, 만약을 대비해 설정해줍니다.

wsl --set-default-version 2

설치는 이것으로 끝입니다.

1.1.3. WSL 설치가 되지 않을 경우

Windows 버전이 맞는데 설치가 진행되지 않는다면, PC에서 가상화 기능을 지원하는지 확인해야 합니다.

PowerShell 또는 cmd에서 systeminfo.exe를 실행하여 Hyper-V 요구 사항 부분이 모두 Yes가 되어야 합니다. (참고)

Hyper-V가 불가능 할 경우 WSL을 사용할 수 없습니다.

해당 내용을 통과하였을 경우 PowerShell을 관리자 권한으로 실행시켜 다음 명령들을 입력합니다.

1
2
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
  • 1번 줄: WSL 기능 켜기
  • 2번 줄: 가상 머신 기능 켜기

이제 다시 1.1.2. 설치를 진행합니다. (문제 발생 시 참고)

1.2. Ubuntu 설치

다음 명령으로 현재 사용 가능한 배포 버전을 확인합니다.

wsl --list --online
# 간략화: wsl -l -o

Ubuntu 22.04는 다음과 같이 설치합니다.

wsl --install -d Ubuntu-22.04

1.3. 완료

Ubuntu 설치가 완료되었습니다. 저장 공간은 Windows 탐색기의 좌측 목록에 Linux로 생성되며 탐색기에서 직접 접근할 수 있습니다.

파일 탐색기
[ 파일 탐색기 ]

다음은 자주 사용할 명령어입니다.

wsl Home 실행

wsl ~

백그라운드에서 실행중인 가상머신 종료

wsl --shutdown

이미지 제거

※ 주의: 이미지 제거 시 데이터도 같이 제거

wsl --unregister Ubuntu-22.04

2. Rust 설치

본 글은 WSL Ubuntu-22.04를 기준으로 진행하기 때문에, 이 외의 환경에서 진행하시는 분들은 러스트 설치 페이지학습 자료를 참고해 주세요.

2.1. Rustup 설치

WSL로 Ubuntu를 설치하셨다면 먼저 다음 패키지를 설치해주셔야 합니다.

C 컴파일러와 같이 설치되는 링커가 필요합니다.

sudo apt install build-essential

그 다음 Rust 관리 도구인 rustup을 설치합니다.

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

설치가 되었다면 다음 명령어로 잘 실행되는지 확인합니다.

rustc --version

설치가 되었으나 경로를 찾지 못한다면 PATH에 ~/.cargo/bin이 등록되었는지 확인하고, 등록되지 않았다면 등록해줍니다.

1
2
env | grep cargo # cargo 있는지 확인
export PATH=$PATH:~/.cargo/bin # cargo 경로 등록

다음은 러스트를 업데이트, 제거하는 명령어 입니다.

rustup update
rustup self uninstall

2.2. VS Code에서 열기

WSL에 설치하였을 경우 Code로 여는 방법은 여러가지 있습니다.

  • WSL shell 원하는 위치에서 code .
  • Code에 WSL 확장 설치, Command Palette(Ctrl + Shift + P)에서 wsl 검색, 원하는 방식으로 실행
  • Code 메뉴 중 Remote Explorer → 위쪽 리스트에서 WSL Targets 선택 후 실행 (메뉴가 없다면 Dev Containers 확장 설치)

3. Hello World!

프로그래밍 언어를 배울 때 가장 기초가 되는 Hello World를 실행시켜 봅니다. Rust의 확장자는 .rs이며 파일명은 main.rs로 생성합니다.

3.1. 코드

1
2
3
fn main() {
  println!("Hello World from WSL !");
}

3.2. 컴파일, 실행

기본적인 컴파일 방법입니다.

rustc main.rs

컴파일에 성공할 경우 main 파일이 생성됩니다.

1
2
./main
Hello World from WSL !

000. 마무리

WSL 설치와 Rust에서 Hello World 출력까지 진행해 보았습니다. 언뜻 보기에 문법이 Kotlin과 비슷한 느낌인데요, println!!는 매크로 역할이라고 합니다. (다음에 알아보겠습니다)

간단한 코드의 경우 rustc를 사용하여 컴파일 할 수 있지만, 라이브러리를 사용한다던지 옵션이 많아지면 직접 하는 것 보다 Cargo를 사용하는 것이 편하다고 합니다.

그럼 다음 글에서 Cargo를 사용하여 빌드, 실행하는 방법을 알아보고 코드도 살펴보도록 하겠습니다.

참고자료 (References)

Related Posts