
무슨 일이 있었나요
NAND 게이트 277,248개만으로 만든 컴퓨터 ‘NAND-16’이 공개됐어요. 다른 부품 없이 딱 한 종류의 논리 게이트만 쌓아서 동작하는 컴퓨터를 만든 프로젝트예요. 이름에 붙은 16은 16비트 아키텍처를 떠올리게 해요.
처음 들으면 ‘그게 무슨 의미가 있지?’ 싶을 수 있는데요. 이 프로젝트는 우리가 매일 쓰는 컴퓨터가 결국 아주 단순한 부품 하나의 반복이라는 걸 눈으로 보여줘요. 추상화 계층 맨 아래를 들여다보게 해주는 거죠. 세부 구현이나 인터랙티브 데모는 프로젝트 페이지에서 직접 확인해보시는 걸 추천해요.
NAND 게이트, 이게 뭐냐면
NAND는 ‘NOT AND’예요. 입력 두 개가 둘 다 1일 때만 0을 내고, 나머지 경우에는 전부 1을 내요.
| A | B | NAND |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
별거 아닌 것 같지만 NAND에는 놀라운 성질이 있어요. NAND 하나만 있으면 모든 논리 회로를 만들 수 있다는 거예요. 이걸 ‘함수적 완전성(functional completeness)’이라고 불러요. 레고 블록 한 종류로 집, 자동차, 우주선을 다 만들 수 있는 것과 비슷해요.
- NOT: NAND의 두 입력에 같은 신호를 넣으면 돼요.
NAND(A, A) = NOT A - AND: NAND 뒤에 NOT을 붙이면 돼요. 게이트 2개예요.
- OR: 입력을 각각 뒤집은 다음 NAND하면 돼요. 드모르간 법칙이죠. 게이트 3개예요.
- XOR: NAND 4개로 만들 수 있어요.
- Nand2Tetris: NAND 하나로 시작해서 16비트 컴퓨터 Hack, 어셈블러, 컴파일러, OS, 테트리스까지 만드는 유명한 강좌이자 책이에요. NAND-16이라는 이름도 이 전통을 떠올리게 해요.
- Ben Eater의 8비트 브레드보드 컴퓨터: 논리 IC 칩을 브레드보드에 꽂아 실제 하드웨어로 만든 프로젝트예요. 유튜브 영상으로 유명하죠.
- Megaprocessor: 영국에서 개별 트랜지스터 수만 개로 방 하나 크기의 CPU를 만든 프로젝트예요. LED로 신호 흐름이 다 보여요.
- 마인크래프트 레드스톤 CPU: 게임 속 회로 블록으로 CPU를 만드는, 일종의 취미 문화예요.
- 컴퓨터 구조 공부의 최고 교보재예요. 학부 때 ‘컴퓨터 구조’ 과목이 추상적으로 느껴졌다면, 이런 프로젝트를 따라가면서 비트가 어떻게 움직이는지 눈으로 확인할 수 있어요.
- 추상화에 대한 감각이 생겨요. 우리가 쓰는 파이썬 한 줄 아래에 인터프리터, OS, 명령어, 게이트가 층층이 쌓여 있다는 걸 체감하면 성능 문제를 바라보는 시야가 넓어져요.
- 반도체와 하드웨어 쪽 커리어에 관심 있다면 Nand2Tetris를 따라 해본 뒤 Verilog 같은 하드웨어 기술 언어(HDL)와 FPGA로 넘어가는 경로를 추천해요. 국내 반도체 업계에서 설계 인력 수요가 꾸준하다는 점도 기억해둘 만해요.
게이트에서 컴퓨터까지 올라가는 길
이제 블록을 조금씩 크게 쌓아볼게요.
1) 덧셈기: XOR와 AND를 조합하면 한 자리 이진수를 더하는 반가산기가 나와요. 반가산기 두 개로 받아올림까지 처리하는 전가산기를 만들고, 전가산기 16개를 이어 붙이면 16비트 덧셈기가 돼요.
2) ALU: 덧셈기에 AND, OR, NOT, 부호 반전 같은 연산과 선택 회로(멀티플렉서)를 붙이면 CPU의 계산 담당인 ALU(산술논리장치)가 완성돼요.
3) 기억 장치: 여기가 제일 신기한 부분이에요. NAND 두 개의 출력을 서로의 입력으로 엇갈려 연결하면 SR 래치가 돼요. 신호가 빙글빙글 돌면서 0이나 1을 ‘기억’하는 회로예요. 여기에 클록 신호를 붙이면 플립플롭이 되고, 플립플롭 16개를 모으면 레지스터, 레지스터를 잔뜩 모으면 RAM이 돼요.
4) CPU: 프로그램 카운터, 명령어 해석기, ALU, 레지스터를 연결하면 명령어를 하나씩 가져와 실행하는 CPU가 완성돼요.
27만 개는 얼마나 큰 숫자일까요
간단히 계산해볼게요. 실제 칩에서 쓰는 CMOS 공정으로 NAND 게이트 하나를 만들면 트랜지스터가 4개 들어가요. 그러면 277,248개는 트랜지스터 약 110만 개에 해당해요. 1989년에 나온 인텔 80486이 대략 120만 개였으니 숫자만 보면 비슷한 수준이에요.
물론 직접 비교하긴 어려워요. 실제 칩은 NAND만 쓰지 않고 훨씬 효율적인 회로를 섞어 쓰거든요. 게다가 메모리까지 게이트로 구현했다면 게이트 대부분은 기억 장치에 들어갔을 가능성이 커요. 비트 하나를 저장하는 데 게이트가 여러 개 필요하니까요. 실제 반도체 메모리는 트랜지스터 1개와 커패시터 1개로 비트 하나를 저장하는 DRAM처럼 훨씬 조밀한 구조를 써요.
비슷한 프로젝트들과 비교하면
NAND-16은 그중에서도 ‘한 종류의 게이트만 쓴다’는 제약을 끝까지 밀어붙였다는 점이 특징이에요.
한국 개발자에게 주는 시사점
솔직히 실무에 바로 쓸 기술은 아니에요. 그래도 배울 가치는 충분해요.
마무리
한 줄 정리: 입력 둘에 출력 하나인 작은 게이트 27만 개가 모이면 프로그램을 돌리는 컴퓨터가 돼요. 복잡함은 결국 단순함의 반복이에요.
여러분은 추상화 계층을 어디까지 내려가 봤나요? Nand2Tetris나 비슷한 프로젝트를 해보셨다면, 그 경험이 실무에 어떤 도움이 됐는지 궁금해요.
🔗 출처: Hacker News