서버용 컴퓨터 사용할 때, ECC RAM을 사용하는 이유 정리

Ryan Kim
5 min readOct 15, 2023

--

서버용 하드웨어 조립하면서 알아가는 메인보드와 CPU, 그리고 RAM

주변에서 노트북이나 데스크탑을 새로 맞출 때, 메모리가 중요하다는 얘기를 종종 듣게되거나 본인이 메모리가 중요하다는 사실을 잘 인지하고 높은 메모리를 갖고 있는 컴퓨터를 구매할 것이다.

이러한 메모리를 중요하게 여기는 이유는 우리가 컴퓨터를 사용하면서 조금 더 빠른 작업 (보통 cpu에서 프로세스를 생성하면 연산을 위해 메모리가 필요하다) 을 많이, 그리고 많은 양의 데이터를 처리하려면 메모리 양과 비례하는 경우가 많은데, 높은 메모리가 있는 컴퓨터를 산다는 것은 이러한 일들에 많이 사용하는 것을 뜻한다.

그리고 기본적으로 메모리가 부족하면, 컴퓨터가 종료되기 때문에 (OOM, Out of Memory라고 하며 메모리 부족으로 프로세스가 종료되는 상황) 이는 많은 리소스가 필요한 워크로드에서는 무척 치명적이다.

우리가 일반적으로 알고 있는 RAM은 DRAM으로 아래와 같은 이미지처럼 생겼다.

이러한 DRAM은 데스크탑에 많이 탑재되며, 메인보드 슬롯에 따라 삽입할 수 있는 DRAM 갯수는 보통 정해져있다.

삼성전자 DRAM 이미지.

하지만 서버에 사용되는 메모리는 DRAM과 다르게 생겼다.

이 때 사용되는 메모리는 ECC (Error correction code memory) 라고 하며, 오류 정정 코드 메모리라고 한다.

가운데 오류를 정정하는 메모리 칩이 한 개 더 삽입되어 있다.

ECC 메모리는 메모리 데이터 손상의 가장 일반적인 종류를 탐지하고 수정하는 기능을 가지는데, 이는 서버용 메인보드를 확인해보면 CPU가 2개가 있는 것을 볼 수 있고, 이 2개의 cpu 사이의 데이터에서 오차가 발생했을 때 오차 값을 바로잡아주는 역할도 한다고 알고 있다.

서버용 메인보드는 대략 이런 형태로 cpu가 2개씩 들어가게 되어 있다.

따라서 서버용 컴퓨터는 데이터 무결성과 최대 가용성을 요구하는 시스템이므로, ECC 메모리를 사용함으로써 데이터 손상으로 인한 시스템 다운이나 잘못된 연산을 방지할 수 있다.

구글링을 해보니 ECC 메모리의 목적은 크게 2가지를 수행할 수 있다.

  • 데이터 손상을 감지하고 수정하기: ECC 메모리는 데이터를 메모리에 쓸 때 추가 비트를 사용하여 암호화된 코드를 저장하며, 동시에 ECC 코드가 저장된다. 데이터를 읽을 때, 저장된 ECC 코드를 데이터를 읽을 때 생성된 ECC 코드와 비교하는데 이 때 읽은 코드가 저장된 코드와 일치하지 않으면, 패리티 비트에 의해 해독되어 어떤 비트가 오류인지 판별한 다음 이 비트가 즉시 수정되는데 이렇게 하면 전기적 또는 전자적 방해로 인한 단일 비트 오류나 다중 비트 오류를 바로잡을 수 있다.
  • 데이터 무결성과 최대 가용성 보장하기: 서버용 컴퓨터는 금융, 과학, 의료 등 다양한 분야에서 중요한 역할을 하며, 많은 사용자들의 요청을 처리하는데 이러한 시스템에서는 데이터 손상이나 오류가 발생하면 심각한 문제가 될 수 있다. 예를 들어, 은행 서버에서 잔액이나 거래 내역이 잘못 표시되거나, 과학 연구 서버에서 실험 결과가 잘못 계산되거나, 의료 서버에서 환자 정보가 잘못 전달되거나 하는 경우가 있을 수 있다. 이러한 문제들은 시스템의 신뢰성과 안전성을 저하시키고, 사용자들의 불만이나 피해를 야기할 수 있다. ECC 메모리는 이러한 문제들을 방지하기 위해 데이터 무결성과 최대 가용성을 보장할 수 있다.

즉, ECC 메모리는 서버 상에서 데이터의 어떤 작업을 수행할 때 발생할 수 있는 오차 값을 바로 잡아주는 역할을 함으로써 데이터 상의 오차로 인한 비즈니스적인 손실을 줄이는 역할을 수행하는 것으로 본다.

그럼 일반적인 DRAM보다 성능적으로 더 많은 작업을 처리할 수 있는가? 라고 봤을 때, 그건 또 아닌 것 같다.

자료를 찾다가 ECC 메모리가 일반 DRAM 보다 비싼지 저렴한지에 대해 정리한 글을 봤는데 DRAM은 각 메모리 셀 하나 당 트랜지스터 + 하나의 축전기 (커패시터라고 한다, Capacitor)로 이뤄져 있어 구조가 무척 간단한 덕에 높은 메모리 밀도를 가질 수 있다고 한다. 하지만 ECC는 구조도 복잡할 뿐더러 메모리 가운데 오차를 잡아주는 셀이 존재하기 때문에 좀 더 구조적으로 복잡하고 공간도 더 많이 차지한다. 따라서 단위 셀 당 비용이 ECC가 더 높을 수 밖에 없다.

그럼에도 ECC 메모리를 사용하는 이유는 데이터 손상 방지 및 무결성 보장이라는 이슈 때문에 서버용 메모리는 ECC가 들어가는 것으로 보인다.

사실 비즈니스적으로 잘못된 연산이나 데이터를 사용하면 초래할 수 있는 산업적 손실이 천문학적으로 늘어날 수 있을 것을 잠재한다면, 즉, 데이터의 정합성을 보전할 수 없다면 수치적인 에러를 찾기 무척 힘들 뿐더러 최근 클라우드를 사용하는 많은 개발자들 특성상 하드웨어 레이어에서 이런 문제 찾는 것은 무척 쉽지 않을 것이다.

그러니, 비즈니스 레벨에선 부디 온프레미스 구성할 때 데스크탑 사용은 자제하길…

참고로 서버용 메인보드와 데스크탑 메인보드 모두에 ECC & DRAM 칩은 잘 삽입 되지만, 서버용 메인보드에 DRAM을 꽂거나 일반 데스크탑 메인보드에 ECC 메모리를 꽂아보면 알겠지만 부팅 자체가 안된다.

왜냐하면 해당 메인보드에 각 메모리가 호환이 안되기 때문…

이래저래 서버 직접 조립하면서 많이 배우게 되는 컴퓨터 구조다…

Ryan

--

--

Ryan Kim
Ryan Kim

No responses yet