SQLite 를 사용하는 간단한 예제
2025년 4월 18일 금요일
5-3-3강: SQLite 사용하기
5-3-2강: 파일 입출력(데이터 버퍼링, 데이터 직렬화)
1. 데이터 버퍼링이란?
데이터를 주고 받는 동안 일시적으로 데이터를 버퍼에 저장하는 것
2.데이터 직렬화란?
자료의 상태를 저장하기 위해 바이트 스트림으로 변환하는 것
직렬화된 데이터는 파일, 네트워크, 메모리에 저장할 수 있다.
반대로 원래의 형태로 복원하는 것을 역 직렬화 라고 한다.
예제는 Serde 를 사용해서 json 파일로 저장하고 복원한다.
5-3-1강: 파일 입출력(동기식, 비동기식)
1. 동기식 파일 입출력 이란?
동기식 입출력 방식은 작업이 완료될 때 까지 무한정 기다린다.
입출력이 완료될 때까지 기다리니 CPU 자원을 비효율적으로 사용한다.
2025년 4월 17일 목요일
5-2-2강: 동시성 제어 기법(Semaphore)
세마포어란?
복수의 제한된 자원에 다수의 스레드가 동시에 접근하는 것을 막는 동시성 제어 방법
여러 스레드가 동시에 세마포어에 접근할 수 있도록 Arc<T> 를 사용한다.
세마포어는 임계 지정을 직접 지정해야 한다.
세마포어를 사용하려면 tokio 크레이트를 사용해야 한다.
cargo.toml 에 다음과 같이 의존성 추가 한다.
[dependencies]
tokio = { version = "1.25.0", features = ["full"] }
5-2-1강: 동시성 제어 기법(Mutex)
Rust에서 스레드와 Mutex로 전역 변수 안전하게 공유하기
Mutex를 자주 사용합니다. counter를 안전하게 1씩 증가시키는 코드입니다.핵심 포인트
-
Mutex<i32>를 사용해 여러 스레드가 동시에 안전하게 공유 자원에 접근 가능 -
lock().unwrap()으로 lock을 획득하고, 해제는 스코프 종료 시 자동 -
join()으로 메인 스레드가 하위 스레드를 기다림
왜 Mutex가 필요한가?
스레드가 동시에 값을 수정하면 예상치 못한 오류가 발생할 수 있습니다.
Mutex는 이런 충돌을 방지하는 락(lock) 메커니즘을 제공합니다.
2025년 4월 16일 수요일
5-1-2: 동시성 중 async/await, tokio
5-1-1강: 동시성 중 thread, mpsc
동시성 - 시스템이 여러 작업을 동시에 실행되는 것처럼 보이게 하는 것
병렬성 - 여러 작업을 실제로 동시에 수행하는 것