개발자가 ECC 안 쓴다는 게 실화냐? 방구냐?

어느 날 아침 PC를 켰는데 갑자기 부팅이 안 된다.

파일시스템 손상.
Git 저장소 손상.
데이터베이스 손상.
원인 불명.

사람들은 보통 SSD 제조사 욕부터 한다.

근데 SSD 제조사들은 이미 메모리가 얼마나 불안정할 수 있는지 잘 알고 있다.

그래서 SSD 안에는 ECC가 들어있다.

SSD 제조사들은 NAND 플래시를 그대로 믿지 않는다.


그래서:

  • ECC

  • CRC

  • LDPC

  • 내부 RAID 유사 보호 기법


같은 것들을 써서 데이터를 보호한다.

심지어 SSD 컨트롤러 내부 DRAM에도 ECC를 넣는 제품이 있다.

왜냐?

메모리에는 오류가 발생할 수 있기 때문이다.

그런데 이상하게 개발자들 중에는:

"시스템 RAM은 괜찮겠지"

라고 생각하는 사람이 많다.

Non-ECC RAM에서 비트 하나가 뒤집히면:

  • CPU는 모를 수 있음

  • OS도 모를 수 있음

  • 파일시스템도 모를 수 있음

  • 사용자도 모를 수 있음

그 상태로 잘못된 데이터가 디스크에 기록될 수 있다.

그리고 한참 뒤 어느 날 갑자기:

"알 수 없는 이유로 파일시스템이 깨졌습니다."

가 된다.

SSD는 ECC로 보호하면서,

정작 SSD에 기록할 데이터를 만드는 시스템 RAM은 보호하지 않는 것이다.

이게 얼마나 이상한 상황인지 생각해 본 적 있는가?

AI 서버나 데이터센터 장비를 보면 더 분명하다.

거기서는 GPU VRAM만 ECC를 쓰는 게 아니다.

시스템 RAM도 ECC를 쓴다.

모델 파라미터가 지나가는 GPU 메모리도 중요하지만,

커널, 컴파일러, Git, 데이터베이스, 파일시스템, 소스코드가 지나가는 시스템 RAM도 똑같이 중요하기 때문이다.

SSD 제조사도 메모리를 그대로 믿지 않아서 ECC를 쓴다.

데이터센터도 메모리를 그대로 믿지 않아서 ECC를 쓴다.

근데 일부 개발자들은 자기 RAM만은 우주의 법칙을 초월했다고 믿는 것 같다.

ECC는 성능 기능이 아니다.

신뢰성 기능이다.

문제가 생겼을 때 가장 비싼 부품은 RAM이 아니라, 날아간 시간이다.