본문 바로가기
카테고리 없음

[기획 연재 3편] 메모리(RAM)라는 우주: 변수가 사는 물리적 공간 (비트와 바이트)

by khhjyc_ 2026. 1. 17.

서론: 텅 빈 우주에 주소를 부여하다

지난 2편에서 우리는 0과 1이라는 전기 신호가 어떻게 논리(트랜지스터)가 되는지 살펴보았습니다. 이제 질문을 던져봅시다. 이 수많은 0과 1들은 도대체 어디에 존재할까요? 공중에 둥둥 떠다니는 것일까요? 아닙니다. 우주선에 탑승한 우주인에게 지정된 좌석이 있듯이, 데이터에도 머물러야 할 물리적인 '집'이 필요합니다.

우리는 그 공간을 메모리(Memory), 즉 RAM이라고 부릅니다. 제가 NASA에서 보이저 호의 구형 시스템을 다룰 때 가장 힘들었던 점은, 당시 탐사선의 메모리가 오늘날의 스마트폰 사진 한 장 용량보다도 적었다는 사실입니다. 그 좁은 공간에 우주의 비밀을 담기 위해 우리는 메모리 한 칸, 1비트조차 치열하게 아껴 써야 했습니다.

오늘 3편에서는 우리가 코딩할 때 무심코 선언하는 int a = 10;이라는 코드가, 실제 하드웨어 세계에서 어떤 물리적 사건을 일으키는지 심층 분석해 보겠습니다.

본론 1: 창고(HDD)와 책상(RAM)의 차이

컴퓨터에는 두 종류의 저장 공간이 있습니다. 많은 분들이 SSD(하드디스크)와 RAM의 역할을 혼동하곤 합니다. 이를 서재에 비유해 보겠습니다.

  • 보조기억장치 (SSD/HDD) = 거대한 도서관 서고: 책(데이터)이 수만 권 꽂혀 있습니다. 전기가 꺼져도 책은 사라지지 않습니다. 하지만 서고에 있는 책을 그 자리에서 바로 읽을 수는 없습니다.
  • 주기억장치 (RAM) = 작업용 책상: 책을 읽거나 글을 쓰려면, 서고에서 책을 꺼내와 내 책상(RAM) 위에 펼쳐야 합니다. 책상은 넓이가 한정되어 있어서 무한정 책을 쌓아둘 수 없습니다. 그리고 퇴근할 때(전원 Off) 책상을 싹 치우기 때문에 위의 내용은 사라집니다(휘발성).

우리가 프로그램을 '실행'한다는 것은, SSD라는 창고에 잠들어 있던 데이터를 깨워서 RAM이라는 책상 위로 불러오는 과정입니다. CPU는 오직 책상 위에 있는 데이터만 처리할 수 있기 때문입니다.

본론 2: 변수 선언의 물리학 (비트와 바이트)

프로그래밍에서 "변수를 선언한다"는 말은 추상적인 개념이 아닙니다. 이는 부동산 계약과 같습니다. "RAM이라는 거대한 땅에서, 내가 데이터를 저장할 공간을 확보하고 내 이름을 문패로 거는 행위"입니다.

1바이트(Byte)는 왜 8비트(Bit)인가?

메모리는 0 또는 1을 저장할 수 있는 아주 작은 방(Bit)들이 수없이 연결된 아파트와 같습니다. 컴퓨터 공학에서는 효율성을 위해 이 방을 낱개가 아니라 8개씩 묶어서 관리하는데, 이것이 바로 1바이트(Byte)입니다.

예를 들어 C언어에서 int(정수형) 변수를 선언하면, 시스템은 보통 4바이트(32개의 방)를 할당합니다.

  • char (문자): 1바이트 (작은 방 1개)
  • int (정수): 4바이트 (보통 크기의 방 4개 연결)
  • double (실수): 8바이트 (아주 큰 방 8개 연결)

개발자가 데이터 타입을 신중하게 골라야 하는 이유가 여기에 있습니다. 숫자 1을 저장하기 위해 굳이 8바이트짜리 double을 쓰는 것은, 1인 가구가 100평짜리 저택에 사는 것과 같은 공간의 낭비이기 때문입니다.

본론 3: 주소(Address), 메모리의 좌표

RAM은 수십억 개의 바이트가 일렬로 늘어선 기차와 같습니다. CPU가 원하는 데이터를 정확히 찾으려면 각 칸마다 고유한 번호가 필요합니다. 이것이 바로 메모리 주소(Memory Address)입니다.

보통 0x7fff0001과 같은 16진수로 표현됩니다. 우리가 1편에서 다루었던 C언어의 포인터(Pointer)가 바로 이 주소값을 저장하는 변수입니다.

"변수 A에 10을 더해라"라는 명령을 내리면, 컴퓨터 내부에서는 "1024번지 주소에 있는 상자를 열어서, 그 안의 내용물에 10을 더하고 다시 넣어라"라고 처리합니다. 즉, 모든 프로그래밍은 결국 이 주소지 위에서 벌어지는 데이터의 이동일 뿐입니다.

결론: 공간을 지배하는 자

지금까지 메모리(RAM)의 물리적 구조와 변수가 저장되는 원리에 대해 알아보았습니다. 코드를 작성할 때, 모니터 속의 글자 뒤편에 광활하게 펼쳐진 메모리 셀(Cell)들의 움직임을 상상해 보십시오.

유능한 개발자는 코드가 짧은 사람이 아니라, 한정된 자원인 메모리 공간을 효율적으로 설계하는 사람입니다. NASA가 50년 전의 기술로도 우주를 탐사할 수 있었던 비결은 바로 이 극한의 메모리 최적화에 있었습니다.

다음 [Part 4. 스택(Stack)과 힙(Heap)] 편에서는, 이 메모리 공간을 컴퓨터가 어떻게 두 구역으로 나누어 알뜰하게 사용하는지, 그 놀라운 정리 정돈의 기술에 대해 다뤄보겠습니다.