log 2021-12-09
blog
어제 형 블로그 셋업 도와줌. 조만간 블로그 이사 예정.
study
msa
k8s 일부 부분까지 듣다가, 직접 따라가보고 싶어서 결국 블로그 소스에 추가함.
2부 어플리케이션 강의는 규모가 상당히 크고, 내가 생각했던 문제들을 내가 생각했던 해결방법으로 해결한다고 한다 (중복 코드 문제 -> npm 모듈로 해결, 이벤트 타입 문제 -> ts 적용 등)
티케팅 경매 어플리케이션인데 (stubhub 비슷), 어떤 유저가 구매하려 할 때 다른 유저는 해당 티켓을 구매하거나, 판매자 또한 그 티켓 값을 변경할 수 없어야 한다. 그렇지 않으면 구매 진행 도중 가격이 바뀌어버리는 등의 문제가 발생할 수 있다.
결국 이것은 크로스 도메인간 데이터 무결성, 원자적 실행과 같은 문제를 가지고 있을 듯하다. 어쨌든 계속 수강해 보자.
생각해 본 건데, 플로우 이해 및 테스트가 어렵다고 했는데, 그걸 시각화하고, 동시에 테스트 커버리지를 보여줄 수 있다면 좋을 듯. (어떤 이벤트들의 흐름이 어떤 테스트에 의해 커버된다 등.) 그리고, postman처럼 msa에 일련의 임의 이벤트들을 발생시킬 수 있는 내부 도구가 있으면 좋을 듯하다.
rust
gitpod을 통한 브라우저 기반 rustlings 저장소 셋업 완료. gitpod.dockerfile을 통한 커스텀 이미지도 사용가능하다.
rustlings - strings2 부분이 잘 이해가 안 된다.
&
연산자는 borrow 기능을 하는 걸로 알았는데, String
은 스마트 포인터라서 Deref, Drop
trait를 구현하고, 따라서 &
를 사용해서 borrow와 캐스팅을 통해 &str
를 얻을 수 있다는 것인지, 아니면 Deref
를 통해 &str
를 얻는 것인지 잘 모르겠다.
fn main() {
let word = String::from("green"); // Try not changing this line :)
if is_a_color_word(word) { // 이 부분 `word`를 `&word`로 바꾸면 해결.
println!("That is a color word I know!");
} else {
println!("That is not a color word I know.");
}
}
fn is_a_color_word(attempt: &str) -> bool {
attempt == "green" || attempt == "blue" || attempt == "red"
}
다음 strings3 예제에서 여러 케이스를 확인할 수 있는데, 여전히 규칙이 헷갈린다. 같은 &str
로부터 호출한 함수도 결과가 String
일 수도, &str
일 수도 있다.
fn string_slice(arg: &str) {
println!("{}", arg);
}
fn string(arg: String) {
println!("{}", arg);
}
fn main() {
string_slice("blue");
string("red".to_string());
string(String::from("hi"));
string("rust is fun!".to_owned());
string("nice weather".into());
string(format!("Interpolation {}", "Station"));
string_slice(&String::from("abc")[0..1]);
string_slice(" hello there ".trim()); // 이것은 `&str`
string("Happy Monday!".to_string().replace("Mon", "Tues"));
string("mY sHiFt KeY iS sTiCkY".to_lowercase()); // 이것은 `String`
}
왜 trim()
의 결과는 &str
인지 모르겠다.
검색한 결과, trim()
은 문자열 내용의 변경이 필요 없는, 새로운 view이기 때문이라고 한다.
그와 달리 lowercase같은 경우는 문자열 내용의 변경이 필요하다.
Comments