분류
-
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) ..
-
Jenkins: Rust 프로젝트 테스트컴퓨터/Jenkins 2023. 4. 17. 19:35
해볼 것: Jenkins 빌드 오류 시 메일 보내기 Jenkins를 경험하기 위해 Rust 프로젝트 테스트를 하는 것을 해보았다. Dockerfile을 이용하여 러스트 프로젝트 테스트를 실행할 것이다. Windows11에서 하려고 했으나 복잡해져서 Zorin OS 듀얼 부팅으로 넘어왔다. 윈도우 에러 설치 시에 this account either does not have the privilege to logon as a service 부터 막혀서 Windows Tools - 로컬 보안 정책 - 로컬 정책 - 사용자 권한 할당 - 서비스로 로그온 - 사용자 추가를 눌러 현재 계정을 넣었다. 비번은 windows 에 연결된 마이크로소프트 비번이었다. localhost에 돌리는 만큼 아래 플러그인을 받아서 D..
-
Ubuntu/Zorin OS 설치 파티션 설정컴퓨터 2023. 4. 16. 14:36
빈 공간을 선택하고 "추가" 버튼을 클릭하여 새로운 파티션을 생성합니다. 1. 루트 파티션을 생성하려면 다음 설정을 선택하세요: 크기: 약 20-30GB 정도를 권장합니다. 종류: Primary 위치: 디스크의 시작 파일 시스템: ext4 마운트 지점: / 2. 남은 빈 공간을 선택하고 "추가" 버튼을 클릭하여 스왑 파티션을 생성합니다. 크기: RAM 용량에 따라 4-8GB를 추천합니다. 종류: Primary 위치: 디스크의 시작 파일 시스템: swap area 스왑 파티션 크기에 대한 공식은 다양하며, 사용자의 실제 사용 패턴과 시스템 요구 사항에 따라 달라집니다. 일반적으로 램 크기에 따라 스왑 크기를 설정하는 것이 좋습니다. 24GB의 RAM이 있는 시스템의 경우, 다음과 같은 고려 사항이 있습니다..