상세 컨텐츠

본문 제목

46. 데이터 경합 방지 원리

RUST 온보딩/러스트를 배우고 만들자_초보자

by 러스트코리아 2026. 9. 23. 09:03

본문

반응형

오늘은 프로그래밍을 할 때 우리를 가장 힘들게 하는 문제 중 하나인 **'데이터 경합(Data Race)'**을 Rust가 어떻게 똑똑하게 방지하는지 알아보겠습니다.

 

어려워 보이지만, 저와 함께 차근차근 살펴보면 금방 이해하실 수 있을 거예요!

 

---

### 1. '데이터 경합'이란 무엇일까요? (비유로 이해하기)

 

공용 게시판이 하나 있다고 상상해 보세요. 이 게시판에는 딱 한 문장만 적을 수 있습니다.

 

* **철수**는 게시판에 "오늘 날씨 맑음"이라고 적으려고 합니다.

* **영희**는 동시에 "내일 비 소식 있음"이라고 적으려고 합니다.

 

두 사람이 **동시에** 달려들어 글자를 적기 시작하면 어떻게 될까요? 게시판에는 "오내일 날씨 비 맑음 있음"처럼 앞뒤가 맞지 않는 이상한 낙서가 남게 될 거예요.

 

이렇게 여러 명(스레드)이 동시에 하나의 데이터에 접근해서 값을 바꾸려다가 데이터가 엉망이 되는 현상을 **데이터 경합(Data Race - 여러 작업이 데이터를 차지하려고 다투는 상황)**이라고 합니다.

 

---

### 2. Rust는 어떻게 이 문제를 해결할까요?

 

Rust는 아주 엄격하고 친절한 **'도서관 사서'** 같은 역할을 합니다. Rust에는 데이터 경합을 막기 위한 아주 중요한 **'빌려주기 규칙'**이 있어요.

 

1. **공유 빌리기(Immutable Borrow):** 여러 명이 동시에 책을 **읽는 것**은 괜찮아요. (내용이 변하지 않으니까요!)

 

2. **독점 빌리기(Mutable Borrow):** 하지만 누군가 책에 내용을 **쓰려고(수정하려고)** 한다면, 그동안은 아무도 그 책을 읽거나 쓸 수 없어요. 오직 그 한 사람만 책을 가질 수 있죠.

 

이 규칙 덕분에 Rust에서는 "누군가 데이터를 고치는 도중에 다른 사람이 읽거나 고치는 일" 자체가 아예 불가능합니다.

 

---

### 3. 코드로 살펴보기

 

Rust가 어떻게 실수를 미리 잡아내는지 아주 간단한 예시로 확인해 봐요.

fn main() {
    let mut data = String::from("안녕"); // 수정 가능한 데이터를 만듭니다.

    let ref1 = &data; // 첫 번째 사람이 데이터를 빌립니다 (읽기 전용).
    let ref2 = &data; // 두 번째 사람도 동시에 빌려서 읽을 수 있습니다.

    println!("{} {}", ref1, ref2); // 둘 다 읽는 건 아무 문제 없어요!

    // 만약 여기서 누군가 데이터를 고치려고 하면?
    // let ref3 = &mut data; // <- 이 줄의 주석을 풀면 Rust가 "안 돼!"라고 에러를 냅니다.
}

 

* `let mut data`: 'data'라는 이름의 고칠 수 있는 변수(데이터 저장소)를 만듭니다.

* `&data`: 데이터를 읽기 위해 잠시 빌려오는 것입니다. (공유 가능)

* `&mut data`: 데이터를 고치기 위해 빌려오는 것입니다. (독점 필요)

* **Rust의 원칙:** 누군가 읽고 있을 때는 아무도 고칠 수 없고, 누군가 고치고 있을 때는 아무도 읽을 수 없습니다!

 

---

### 4. 핵심 정리 (용어 풀이)

 

* **스레드(Thread):** 컴퓨터가 일을 처리하는 최소 단위입니다. 여러 스레드를 쓴다는 건 여러 명이 동시에 일을 한다는 뜻이에요.

* **데이터 경합(Data Race):** 두 개 이상의 스레드가 동시에 같은 메모리(데이터)에 접근하고, 그중 하나라도 데이터를 수정하려고 할 때 발생하는 충돌입니다.

* **소유권(Ownership):** Rust만의 독특한 규칙으로, 데이터의 주인을 명확히 정해서 관리하는 원리입니다.

* **빌림 검사기(Borrow Checker):** 우리가 코드를 짤 때 규칙을 잘 지켰는지 실시간으로 감시하며 데이터 경합을 막아주는 고마운 감시관입니다.

---

### 여러분을 응원합니다!

처음에는 Rust의 이런 규칙들이 조금 까다롭게 느껴질 수 있어요. "왜 내 마음대로 못 하게 하지?"라는 생각이 들 수도 있죠. 하지만 이건 마치 **"사고가 나기 전에 미리 안전벨트를 매주는 것"**과 같답니다.

반응형

관련글 더보기