ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Rust Rocket 예제코드로 응용 공부하기(1)
    응애개발일기/Rust 2023. 8. 7. 03:13

    우연히 회사에서 Rust로 서버를 개발할 수 있는 기회를 얻게되었다. 먼저 그 어렵다는 Rust 문법을 공부하기 위해 Rustlings라는 github repository를 이용해 공부했다. 원래 JS를 이용해 공부할 때는 메모리는 무슨 그냥 변수타입도 신경 안 쓰고 막 짰다면 Rust는 변수의 소유권을 잘 관리해가며 코딩을 해야하니 여간 까다로운게 아니었다. 게다가 Rustlings를 이용해서 공부를 해도 실제 응용을 하며 사용하기엔 실제 몸에 익숙한 코드도 아니고 어렵기만 해서 Rocket이라는 서버 프레임워크의 예제를 통해 어떻게 통신하고 어떻게 언어를 사용하는지 공부해보려고 한다.

    Rocket 시작하기.

    git clone https://github.com/SergioBenitez/Rocket
    cd Rocket
    git checkout v0.5-rc
    # 각 폴더마다 cargo run을 통해 빌드하여 서버를 킬 수 있음.
    cd examples/hello
    cargo run
    • Cargo란?
      • Node.js의 NPM과 같은 Rust 패키지 관리 툴로써 패키지 종속성을 쉽게 관리하고 프로젝트 빌드를 도와주는 친구!
      • Rust를 설치하는 과정에서 따라서 설치가 되니 cargo가 설치되지 않았다면 Cargo installation따라 설치해주세요!
      • 더 많은 내용은 이 블로그에서 잘 알려주심! 좋은 정보 감사합니다!

    그럼 먼저 example/hello에 있는 코드를 분석해보자!

    #[macro_use] extern crate rocket;

    extern crate rocket 부분부터 알아보자!

    • crate? 하나의 binary나 library 파일들의 트리이다. 해당 트리의 노드들이 모여있는 폴더가 보통 src 폴더가 되고 추상적으로 생각하면 src 내의 폴더가 crate tree를 만든다고 생각하면 될 것 같다., 그 안의 main.rs나 lib.rs 파일이 그 crate의 root가 된다. 더 알아보기 요 링크가 되게 확 와닿았다. 요 링크도 요링크도!
    • extern? extern 키워드는 외부 라이브러리나 패키지의 함수나 모듈을 가져오는 느낌이다! 보통 cargo.toml파일에 등록된 다른 crate트리를 불러오거나 다른 언어로 빌드된 .so/.dll 파일을 c api를 통한 방식으로 안전성을 유지하며 사용할 수 있도록 해준다! JS의 require이나 import와 같이 사용되나 빌드된 파일의 함수도 사용할 수 있다는 점이 있다! 더 알아보기
    • 그래서 현재 main.rs라는 crate root를 가진 crate에서 rocket이라는 다른 crate 트리를 호출하는 문장이다!

    #[macro_use] attribute는 extern crate를 통해 불려온 모듈 내의 macro 형태로 선언된 rust macro들을 이미 현재 crate에서 선언된 매크로처럼 사용할 수 있도록 해주는 attribute이다!

    JS에서도 require과 import가 있다면 Rust에서도 이 방식과 use crate::rocket::*의 방식으로 호출할 수 있따. 같은 기능을 하지만 어떤 방식으로 진행되는지는 차이를 확인하지 못해 성능의 차이는 확인하지 못했다! 혹시 아시는 분 댓글 부탁드립니다....

    #[cfg(test)] mod tests;

    다음 내용은.. 추가 블로그로 하나씩 따로 분석해서 작성할 예정!

Designed by Tistory.