Rust + Rocket으로 웹 서비스 만들기 (1)
안녕하세요, kentakang 입니다.
오늘부터 Rust 언어와 Rust로 개발된 웹 프레임워크인 Rocket을 이용해서 웹 서비스를 개발하는 강좌를 작성해보려고 합니다.
우선 강좌에 들어가기 전에 Rust에 대해서 소개해 드리겠습니다.
Rust?
Rust는 Firefox로 유명한 Mozilla 재단에서 개발 중인 프로그래밍 언어입니다.
Mozila 소속 개발자인 그레이던 호어가 개인으로 진행하던 프로젝트였는데,
Mozilla 재단에서 개발하고 있는 웹 브라우저 엔진인 Servo 개발에 쓰면서 함께 연구 프로젝트로 편입 되었습니다.
병렬 처리와 동시성 프로그래밍에 강점을 가지고 있는 시스템 프로그래밍 언어입니다.
Rust의 가장 큰 특징으로는 변수가 변경 불가능하다는 특징이 있습니다.
변수를 선언하면 기본적으로 변경 불가능한 변수가 선언되며, 변경 가능한 변수를 만들려면 'mut' 키워드를 별도로 붙여야합니다.
이는 다른 프로그래밍 언어들과 가장 차별화된 점으로, Rust는 하나의 값이 여러 곳에서 동시에 수정 되는 것을 막음으로써
안전한 프로그램을 짜는데 큰 도움이 됩니다.
Rocket?
이 강좌는 Rocket을 통해서 웹 서비스를 제작하게 됩니다.
Rocket은 Sergio Benitez 님이 개발하신 Rust 웹 프레임워크로,
기본적으로 Routing이나 Dynamic Routing 등의 기능을 제공하고 있습니다.
Rocket을 이용하기 위해서는 Rust를 Nightly Build로 사용해야 합니다.
개발환경 구축
서비스를 개발하기 앞서 Rust를 이용하기 위한 개발 환경을 구축하도록 하겠습니다.
먼저 Rust를 설치하겠습니다.
Rust는 Rustup이라는 인스톨러를 이용해서 쉽게 설치 가능합니다.
우선 https://www.rust-lang.org/ko-KR/ 에서 Rust 설치를 눌러 Rust를 설치해주세요.
기본으로 설치되는 버전은 안정 버전입니다.
설치가 완료되셨다면 명령 프롬프트 등의 터미널을 열어 아래 명령어를 입력해주세요.
rustup default nightly
조금 기다리시면 다운로드 및 설치가 완료됩니다.
그 다음 IDE를 셋팅하도록 하겠습니다.
저는 원래 IntelliJ IDEA를 사용하고 있어서, IntelliJ IDEA의 Rust 플러그인을 사용하도록 하겠습니다.
이렇게 되어 있는 IntelliJ IDEA 초기화면에서 Configure -> Plugins 에 들어가주세요.
위 사진과 같이 플러그인 설정 메뉴에 들어오셨다면 아래에 있는 Install JetBrains plugin... 버튼을 눌러주세요.
그 다음, 플러그인 검색 창에서 위 사진과 같이 Rust를 검색해 해당 플러그인을 설치해주세요.
플러그인을 선택하시고 Install 버튼을 누르면 설치됩니다.
설치가 완료 되시면 IntelliJ IDEA를 재시작 해주세요.
플러그인 설치가 완료되면, 위 사진과 같이 New Project에서 Rust 프로젝트를 생성할 수 있게 됩니다.
저희가 위에서 Rustup의 기본 빌드를 nightly로 설정했기 때문에, Toolchain Version이 1.27.0 으로 표시되는 걸 보실 수 있습니다.
Hello, World!
이제 프로젝트를 만들어 보겠습니다.
기본적으로 프로젝트의 구조는 이렇게 되어 있습니다.
Cargo.toml 파일을 통해 모듈을 설치하는 것도 가능합니다.
우선 Rocket 사이트에 나와 있는 예제 코드를 통해 Hello, World!를 출력하는 사이트를 만들고, 1일차 글을 마치겠습니다.
Rocket을 사용하려면 Rocket 모듈을 설정해줘야 합니다.
Cargo.toml을 열어 dependencies 항목을 수정해주세요.
[dependencies] rocket = "0.3.10" rocket_codegen = "0.3.10"
그 다음 main.rs에 아래와 같이 작성해주세요.
#![feature(plugin)]
#![plugin(rocket_codegen)]
extern crate rocket;
#[get("/")]
fn index() -> &'static str {
"Hello, World!"
}
fn main() {
rocket::ignite().mount("/", routes![index]).launch();
}
그 다음 실행을 하셨을때,
콘솔에 이런 식으로 나온다면 성공입니다.
콘솔에 나와 있는 http://localhost:8000 으로 접속 했을 때,
제대로 출력되는 걸 확인할 수 있습니다.
Rocket에 입문하신 걸 축하드립니다!
빌드가 안되는데요?
제가 패키지를 빌드하면서 경험한 오류들을 정리해놨습니다.
같은 오류가 발생하고 계시다면 해결에 도움이 되실까 싶어 적어놓습니다.