분류
-
Rust: WASM async fn + 카카오맵 API 사용하기컴퓨터/Rust 2023. 6. 26. 12:05
소개 이 글에선 위와 같은 웹을 만들어 볼 것이다. 카카오맵 키워드 검색 함수를 Rust로 만들고 WASM으로 변환한다. Rust WASM으로 유명한 wasm-bindgen 라이브러리는 Rust와 JavaScript 간의 상호 운용성을 향상해, Rust에서 작성된 코드를 WASM으로 컴파일하고 JavaScript에서 이를 호출하게 할 수 있다. Rust에서 WASM으로 컴파일하는 기본 단계는 다음과 같다: Rust에서 원하는 기능(여기서는 카카오맵 키워드 검색과 같은 것)을 구현 wasm-bindgen을 사용하여 WASM과 JavaScript 간의 상호 운용성을 설정 wasm-pack 또는 비슷한 도구를 사용하여 Rust 코드를 WASM으로 컴파일 컴파일된 WASM 코드를 웹 페이지에 로드하고 JavaS..
-
Rust: actix-rs + React.js컴퓨터/Rust 2023. 6. 2. 19:53
소개: actix-rs (백엔드)에서 React.js (프론트엔드)를 간단하게 사용하는 방법이다. 우선 프론트엔드 폴더에서 프로젝트를 빌드하고 yarn build 백엔드를 아래처럼 수정한다. 1. 터미널에서 cargo add actix-files 2. main.rs actix_files로 파일 임베딩을 하는 법이다. 현재 백엔드 프로젝트 폴더가 A/ 라고 할 때 프론트엔드 빌드 결과물이 A/google-clone/build 에 있고 그 안에 index.html을 사용한다. ... use actix_files as fs; ... #[actix_web::main] async fn main() -> std::io::Result { ... // Start the HTTP server HttpServer::new..
-
Rust 문법: Box컴퓨터/Rust 2023. 5. 13. 22:47
Box 이해하기 Rust의 Box는 언어의 메모리 관리 모델에서 핵심 개념입니다. 이는 값들을 힙에 할당하는 방법을 제공하여 더 유연한 메모리 사용을 가능하게 합니다. Rust에서의 Box 타입은 힙 할당을 위한 스마트 포인터입니다. 단순한 스택 할당과 달리, Box를 사용하면 대량의 데이터를 저장하거나 값을 오랫동안 메모리에 유지하거나 런타임에서만 알 수 있는 타입의 값을 저장할 수 있습니다. Box란 무엇인가? Box는 특정 타입 T의 힙 할당을 고유하게 소유하는 포인터 타입입니다. 값이 Box에 들어가면 힙으로 이동되고 소유권이 Box로 이전됩니다. Box가 범위를 벗어날 때 소멸자가 호출되며 힙 메모리가 해제되고 값이 삭제됩니다. Box가 제공하는 메서드 Box는 생성, 사용 및 메모리 관리를 위..
-
Rust 문법: Ordering (Relaxed, Release, Acquire, AcqRel, SeqCst)컴퓨터/Rust 2023. 5. 11. 22:55
소개 Rust를 쓰다가 여러 스레드 상황에서 공유 변수를 사용해야 하는 상황이 생겼다. CTRL+C를 백그라운드에서 캡처하고 (tokio::signal::ctrl_c) CTRL+C를 누르면 exit_flag를 true로 만든다. 그러면 메인 함수 루프에서는 어떻게 읽고 종료해야 할까? 여기서 나올 수 있는 개념이 메모리 순서이다. 즉, 멀티스레드 프로그래밍에서 원자적 연산은 데이터가 여러 스레드를 통해 안전하게 처리되도록 보장하는 데 중요하다. 원자적이지 않은 연산은 여러 스레드의 상대적 타이밍에 따라 연산의 출력이 달라지는 경합 조건을 초래할 수 있으며, 이러한 조건은 디버깅하기 어려운 다양한 문제를 일으킬 수 있다. Rust의 std::sync::atomic::Ordering 열거형은 이러한 원자적 ..
-
Rust: 구글 Bard 바드 CLI 앱 만들기컴퓨터/Rust 2023. 4. 28. 17:21
Bard Bard is your creative and helpful collaborator to supercharge your imagination, boost productivity, and bring ideas to life. bard.google.com 소개 구글의 ChatGPT, 바드가 한국에서 사용할 수 있게 된 지 꽤 되었다. 성능은... 뭐라 못하겠고 아직 개발 초창기니까 믿어본다. 꽤 괜찮은 기능은 Bing처럼 Google 인덱싱 된 문서들을 긁어올 수 있고 출처도 남겨준다. (근데 물어봐도 이해를 잘못함) 아무튼 이 글에서는 Bard를 CLI 앱으로 만드는 과정을 적었다. Rust 언어 async로 작성하였다. How 우선 어떻게 답변이 생성되는지 확인하기 위해 네트워크에서 다음과 같이..
-
Github Action: 카카오톡 CI 봇컴퓨터 2023. 4. 26. 20:01
카카오톡 CI KakaoTalk CI Action - GitHub Marketplace A Github action for KakaoTalk CI github.com Github Action을 이용한 카카오톡 CI 봇을 만들어 보았다. function_name에는 send_to_me_custom (나한테 보내기)나 send_to_groups_custom (친구들에게 보내기)를 사용할 수 있습니다. (템플릿 이용한 버전) ! send_to_groups 에서는 with: 에 receiver_uuids를 ["uuid1", "uuid2"] 형식으로 지정해 넘겨야 합니다. Usage name: Example CI on: push: branches: - main jobs: build-and-notify: runs-..
-
Rust: async의 늪컴퓨터/Rust 2023. 4. 18. 22:08
actix 웹 프레임워크에서 POST를 받으면 load_courses라는 async 함수를 부르는 상황이다. CSV 파일이 커서 tokio를 이용해 async read를 했다. use csv::ReaderBuilder; use tokio::fs::File; use tokio::io::AsyncReadExt; async fn load_csv_data(file_path: &str) -> Result { let mut buf = Vec::new(); let mut file = File::open(file_path).await?; file.read_to_end(&mut buf).await?; let mut reader = ReaderBuilder::new() .delimiter(b',') .flexible(tr..
-
Rust: 한글 종성 유니코드 변경하기컴퓨터/Rust 2023. 4. 17. 22:18
할 것: 종성이 'ㄲ'인 것을 'ㄴ'으로 바꾸기 (pdf를 txt로 변환하다 보니 "깐"인데 "깎" 이런 식으로 되어 있어서 만들게 됨) 한글 유니코드: 초성: (음절 - 0xAC00) / (21 * 28) 중성: (음절 - 0xAC00) % (21 * 28) / 28 종성: (음절 - 0xAC00) % 28 음절의 종성이 'ㄲ'(02)인 경우, 이를 'ㄴ'(04)으로 바꿔야 한다. fn main() { let input = "갂깡깔깐깎..."; let result = replace_gg_with_n(input); println!("Result: {:}", result); // Result: 간깡깔깐깐... } /// ㄲ 받침 -> ㄴ으로 바꿈 fn replace_gg_with_n(text: &str) ..