![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/y1mnA/btrerzoUV14/CsT6mgKNW4ITPrgslO5Okk/img.png)
trait은 다른 종류의 추상화를 사용할 수 있도록 해준다. 이는 타입들이 공통적으로 갖는 동작에 대하여 추상화 하도록 해준다. trait이란 러스트 컴파일러에게 특정한 타입이 갖고 다른 타입들과 함께 공유할 수도 있는 기능에 대하여 정의한다. trait은 다른언어들의 interface와 기능이 유사하지만 몇가지 다른점이 있다. 트레잇 정의하기 어떤 타입의 동작은 해당 타입 상에서 호출할 수 있는 메서드의 집합이다. 만약 서로 다른 타입에 대해 모두 동일한 메서드를 호출할 수 있다면 이 타입들은 동일한 동작을 공유한다. 트레잇의 정의는 어떠한 목적을 달성하기위해 필요한 동작의 집합을 정의하기위해 메서드 시그니처들을 함께 묶는 방법이다. 예를 들어 신문기사 생각했을 때, 다양한 종류와 양을 갖는 여러가지 ..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/JyYc3/btrd3bOpUsv/QqI8wJakAkqr6y0LhRTh9K/img.png)
Sorting algorithm 2. 버블정렬 버블정렬은 현재 인덱스와 현재 인덱스 + 1의 원소를 비교하여 정렬하는 방법이다. 1. 0번째 index의 값과 0 + 1번째 index의 값을 비교한다. 2. 0번째 index의 값이 더 클경우 swap을 진행한다. 간단하게 위 과정을 배열의 길이만큼 반복하면 된다. 코드로 구현 rust fn bubble_sort(array: &mut Vec) { for i in (0..array.len()).rev() { for j in 0..i { if array[j] > array[j + 1] { let curr = array[j]; array[j] = array[j + 1]; array[j + 1] = curr; } } } println!("{:?}", array)..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/dYD2dU/btrdVkqVE5X/3DY9bQ8pzq70wAqb0qXyIk/img.png)
반복자 패턴은 일련의 항목에 대하여 순서대로 어떤 작업을 수행할 수 있도록 해준다. 러스트에서 반복자는 항목들을 사용하기위해 반복자를 소비하는 method를 호출하기 전까지 아무런 동작을 하지 않는다. 예를 들어보자. let v1 = vec![1, 2, 3]; let v1_iter = v1.iter(); // v1_iter에는 Iter([1, 2, 3])가 들어있다. 위의 코드는 v1 변수에 vector를 할당한것이고, v1_iter변수에 v1의 반복자를 할당해둔 것이다. (v1_iter는 Iter([1, 2, 3])로 출력된다.) iter를 이용하여 단지 할당만 했을 뿐 어떠한 일도 일어나지 않는다. 이러한 반복자를 사용하기 위해 다른 조치가 필요하다. let v1 = vec![1, 2, 3]; let..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/7C37o/btrdInaqwH1/aflkEkHdgf9pzrxRUY1041/img.png)
이벤트, Event Event 프로그래밍하고 있는 시스템에서 일어나는 사건(action) 혹은(occurrence)이며, 이는 원한다면 그것들에 어떠한 방식으로 응답 할 수 있도록 시스템이 말해주는 것입니다. - mdn - 시스템은 event가 발생될 때 몇몇 종류의 신호를 생산 또는 발생시키도 event가 발생되었을 때 action이 자동적으로 취해질 수 있는 메커니즘을 제공한다. Web에서, event는 browser 내에서 발생되고, 그것이 거주하는 특정한 요소에 부착되는 경향이 있다. 이것은 하나의 element 또는 element의 집합, 현재 탭에 load된 HTML문서, 전체 브라우저 윈도우 등이 될 수 있다. 이러한 이벤트는 다양한 타입이 있다. 키보드 또는 마우스 handling brow..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/A9hXS/btrdkNtOfGA/Q18YiHx1X1G8tF5WDZfj5K/img.png)
Rust 코드로 작성하는 WASM (with react) EventListener 이번 포스트는 EventListener를 이용하여 마우스 이벤트 또는 키보드 이벤트를 배워보도록 하겠습니다. rust에서는 javascript의 EventListener를 지원하기위해 gloo라는 라이브러리가 있습니다. 먼저 gloo 라이브러리를 cargo의 dependencies에 추가해줍니다. // Cargo.toml ... [dependencies] ... gloo="0.3.0" ... click event 그런다음 wasm 프로젝트의 lib.rs에 rust 함수를 작성해보겠습니다. Rust 코드 pub mod wasm_event; use wasm_event::*; #[wasm_bindgen] pub fn on_cli..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/mxMzK/btrdr3xhilp/fplUosp9bkrtmjQAio7U2K/img.png)
Rating Limiting 개념 혼잡 제어(flow control)기법으로 traffic rate를 제한한다. 배경 server에서 처리할 수 있는 throughput이 정해져 있다. 하지만 과도한 트래픽이 들언다면 시스템 전체의 성능을 떨어뜨리게 되고 심한 경우 시스템이 다운될 수 있다. Rating Limiting은 이러한 현상에 대한 방어를 할 수 있다. Dos, DDos공격을 막기 위한 방법이 될 수 있다. DOS, Denial-Of-Service : 특정 네트워크 또는 리소스에 합법적인 유저가 접근하지 못하도록 방해하는 공격, 막대한 양의 트래픽을 집중하여 서버의 다운을 유도나 악의적인 요청을 통한 리소스 오작동 유도 DDOS, Distributed Denial-Of-Service : 분산 서..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/0qEba/btrdqiuVDzK/oVr656BgUxPV9dscAYbS00/img.png)
문자열 검색 알고리즘 문자열 검색 알고리즘은 자동완성, ctrl+f를 눌렀을 때 특정 단어를 찾을 경우 등 수많은 곳에서 활용된다. KMP알고리즘은 이 알고리즘을 개발한 사람의 이름을 따서 (Knuth, Morris, Prett) KMP알고리즘이라고 한다. 2개의 문자열간 일치하는 패턴을 확인하는 알고리즘이다. 만약 하나의 문자열과 다른 문자열을 비교할때 가장 단순하게는 문자열 하나하나를 비교해나가는 것일것이다. 단순 검색 문자열1은 "ABABCABCDE"이고 문자열2는 "ABCDE"라고 하자 문자열1을 기준으로 문자열2를 맞추어 나가면서 일치하는 문자열을 찾을때까지 순회할 수 있다. 1번째 비교 0 1 2 3 4 5 6 7 8 9 A B A B C A B C D E A B C D E 2번째 비교 0 1..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/7RZJ6/btrc7Og25Ja/7LtZSBghtv6HZQKYgqTBC0/img.png)
Leader Election Leader Election 사용처 Subscription(구독) 시스템 ex)Netflix, Youtube premium, Notion, Watcha, etc... 유저별 구독 날짜는 payment system에 중요한 데이터지만, payment system 자체가 새로운 비즈니스이므로 직접 구축하지 않는다. ex) Shopify, paypal, Kakao pay, etc... 유저들의 구독을 처리하는 방법 Leader server는 주기적으로 DB에 payment가 필요한 user list를 요청 DB에서는 요청에 대한 응답을 Leader server에 반환 Leader server는 응답받은 user list를 Third Party에서 payment를 진행하도록 User..