Rust
-
Rust: 스타크래프트1 멀티 실행기 만들기 (windows api)컴퓨터/Rust 2024. 4. 22. 14:25
GitHub - somersby10ml/sc_multiloader Contribute to somersby10ml/sc_multiloader development by creating an account on GitHub. github.com 위 프로젝트를 보고, Rust로 windows-rs API는 개발이 잘되어가는지 궁금해서 위 앱을 Rust로 만들어보았다. (CLI + GUI) windows-rs API 문서 따위 아직 없다. 그냥 알아서 필요한거 찾아서 쓰고, 없는 건 만들어 써야 한다. docs.rs의 검색 기능 때문에 원하는 구조체, 함수 등 찾기는 쉽다. https://microsoft.github.io/windows-docs-rs/ microsoft.github.io 우선 "핸들" 이라는..
-
K6/JMeter로 WebSocket 성능 테스트 해보기 (nginx 로드 밸런서)컴퓨터 2023. 12. 21. 01:08
소개: Spring Boot 프로젝트에 마이크로서비스로 쓰일 채팅 웹소켓 서버를 Rust 및 Spring Boot WebFlux 버전으로 만들고 K6 및 JMeter를 이용해 로드 테스트를 해볼 것이다. i5-10600KF (6코어 - 가상 12) CPU와 24GB 컴퓨터 로컬에서 테스트한 과정이다. n명의 유저 중 80%가 트위터 예전 기준 140 단어 기준 (약 1KB) 메시지를 전송한다. (Lorem ipsum) Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse porttitor quam vitae aliquet faucibus. In condimentum mi id accumsan ullamcorper. Fusce conva..
-
Rust: OAuth2 구글, Github, 카카오, 네이버 로그인컴퓨터/Rust 2023. 8. 6. 12:58
로그인 만든 것: 사이트 내 회원가입 (편의상 내부 Vector), 로그인 (내부 db, 구글, Github, 카카오, 네이버), 프로필 spring boot으로 처음 로그인을 만들어보다가 스프링 설정이 너무 어색해서 자주 사용하던 Rust로 간단히 만들어 보기로 했다. (Rust yew 프론트엔드 + actix-rs 백엔드) OAuth2 간단히 각 플랫폼마다 로그인하고 유저 정보를 조회하는 방법이다. Google OAuth2 클라이언트 아이디와 리다이렉트 경로가 필요하다. https://accounts.google.com/o/oauth2/v2/auth 에 forward, 코드 요청하고 (params: redirect_uri, client_id, access_type, response_type, prom..
-
Rust: 카카오 소셜 로그인 하기 (JWT, actix-rs, react.js)컴퓨터/Rust 2023. 7. 10. 18:55
소개: 이 글에서는 React.js 프트엔드에서 간단하게 카카오 로그인을 구현한 예제이다. 프론트만으로 해결하려 했으나 redirect 등의 문제로 백엔드를 Rust로 구현하게 되었다. (React.js + Actix-rs) 왜냐하면 vercel로 배포했기 때문에 프론트만 업로드 되어있다...프론트+백엔드 같이 배포하면 더 쉬워진다. 백엔드는 fly.io와 같은 사이트를 이용해서 퍼블릭 주소로 서비스 해준다. 일단 https://developers.kakao.com/console/app 에서 앱을 만들고 카카오 로그인 기능을 켜준다. 그다음 아래에 REDIRECT URI에 개발 홈페이지 주소를 적어준다. https://developers.kakao.com/docs/latest/ko/kakaologin/r..
-
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 문법: 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: cargo something 만들기컴퓨터/Rust 2023. 3. 28. 10:06
cargo-subcommand 소개 cargo inspect cargo depsize cargo korea cargo 기본 옵션에 없는 위와 같은 옵션은 어떻게 만들까? cargo-subcommand라고도 불리며 Cargo를 수정하지 않고 새 하위 명령어를 추가할 수 있도록 설계되었다. $PATH에 있는 바이너리 파일의 이름이 cargo-something으로 지정되면 cargo something처럼 실행하여 마치 Cargo 하위 명령어인 것처럼 사용할 수 있다. 이러한 사용자 정의 명령어는 cargo --list를 실행할 때 나열된다. 이 글에서는 실제로 만들어보고 사용하는 과정을 적었다. @코드 바로 보기 만들 cargo-depsize는 Cargo 패키지 매니저를 사용하여 현재 Rust workspac..