레드스톤으로 이해하는 논리 회로
와 마인크래프트라니. Logicae에는 어울리지 않을 수 있다. 하지만, 마인크래프트의 레드스톤과 커맨드 영역 만큼은 Logicae에서 다뤄질 자격이 있다고 생각한다. (아님 말고)
레드스톤은 마인크래프트 세상 속에서 전기의 역할을 한다. 레드스톤을 이용하여 수많은 장치를 만들고 이용할 수 있다. 필자는 마인크래프트에서 레드스톤을 매우 높게 평가한다. 이 글에서는 레드스톤을 이용하여 만든 논리 회로에 대해 설명하겠다.
레드스톤 개략도
필자는 편의를 위해서 어떤 회로를 설명할 때 해당 회로를 위에서 바라본 모양을 사용할 것이다. 이를 레드스톤 개략도라고 부른다.
여기에 등장하는 모든 개략도는 필자가 만든 프로그램에서 직접 캡처한 것이기 때문에 마인크래프트의 텍스처와 살짝 다를 수 있다. 또한, 여기에 등장하는 모든 개략도는 가장 효율적인 방법이 아니다. 최대한 직관적으로 만들다 보니 효율을 포기할 수 밖에 없었다. 가장 효율적인 방법이 궁금하다면 마인크래프트 위키를 참고하면 된다.
https://minecraft.fandom.com/wiki/Redstone_circuits/Logic
레드스톤의 부품
마인크래프트에는 다양한 레드스톤 부품이 존재하고 이들을 적절히 조합하여 수많은 유용한 장치를 만들 수 있다. 아래에 소개되는 부품들은 레드스톤으로 만든 논리 회로를 이해하기 위해 먼저 알아야 하는 부품들이다.
원천 (Origin)
원천은 전원의 역할을 한다. 원천 블록이 있는 것은 아니고 일부 블록들이 원천의 기능을 할 수 있다. 대표적으로 버튼, 레버, 레드스톤 블록 등이 있다. 그 중 논리 회로를 이해하는 것에 효과적인 원천은 레버이다. 레버는 직관적이기 때문이다. 레버를 활성화하면 15의 전류를 방출하고 레버를 비활성화하면 전류를 방출하지 않는다.
원천은 레드스톤 개략도에서 연두색 양털로 표현하겠다.
레드스톤 가루 (Redstone Dust)

레드스톤 가루는 다른 레드스톤 부품을 만드는데 필수적이기 때문에 아이템으로서의 그 가치가 대단하다. 동시에 레드스톤 가루는 설치가 가능한 블록이기도 하다. 이 글은 논리 회로에 초점이 맞춰져 있기 때문에 블록으로서의 레드스톤 가루를 다루겠다.
레드스톤 가루는 설치되었을 때 도선의 역할을 한다. 원천에서 나온 전류를 전달한다. 하지만 한 가지 단점이 있다. 길이 제한이 있다는 점이다. 1m(한 칸) 전진할 때마다 전류가 1씩 줄어들기 때문이다. 원천에서 15(최대) 전류가 방출된다고 가정했을 때 그 원천에 직접 연결된 레드스톤 가루는 전류를 15m까지밖에 전달하지 못하고 16번째 칸부터는 비활성화 된다. 레드스톤 가루의 밝기를 통해서 얼마나 강한 전류가 흐르고 있는지 알 수 있다.
레드스톤 횃불 (Redstone Torch)

레드스톤 횃불은 레드스톤 신호를 반전 시켜주는 부품이다. 레드스톤 횃불이 설치된 블록에 레드스톤 신호가 들어가면 레드스톤 횃불이 꺼진다. 이런 특성 덕분에 레드스톤 횃불이 설치된 블록에 신호가 들어가지만 않게 하면 원천으로도 쓸 수 있다. 레드스톤 횃불은 켜져있을 때 최대 강도인 15 전류를 방출한다.
여담으로 레드스톤 회로와는 관련이 없지만 은은한 빛을 내기 때문에 음침한 분위기의 건축물에 사용하기 적절하다. 필자는 건축할 때 자주 사용한다.
출력 (Output)
출력은 말 그대로 레드스톤 신호가 들어오면 특정 변화가 생기는 블록들이다. 대표적으로 레드스톤 램프, 피스톤 등이 있다. 논리 회로를 이해하기 가장 좋은 블록은 레드스톤 램프이다. 입력 신호의 유무를 가장 직관적으로 드러내기 때문이다. 레드스톤 램프는 신호가 들어올 때 켜지고 들어오지 않을 때 꺼진다.
원천은 레드스톤 개략도에서 분홍색 양털로 표현하겠다.
논리 회로
이제 이 글의 핵심인 논리 회로로 들어가보자. 이 글에서는 기본적인 Buffer, NOT, OR, AND, 그리고 조금 더 파고 들어가 NOR, NAND, XOR, XNOR, Imply까지 알아볼 것이다.
그 전에 입력 값, 출력 값의 표현에 대해서 조금만 알아보자. 입력 값이 0이면 신호가 들어오지 않는 것이고 입력 값이 1이면 신호가 들어오는 것이다. 또한, 출력 값이 0이면 신호를 내보내지 않는 것이고 출력 값이 1이면 신호를 내보내는 것이다. 마지막으로, 입력 값은 논리 회로에 따라 1개일 수도 있고 여러 개일 수도 있다.
Buffer 게이트
Buffer 게이트의 입력 값은 하나이다. 입력 값을 그대로 출력하는 회로이다. 입력 값이 1이면 출력 값은 1이고 입력 값이 0이면 출력 값은 0이다. 사실 논리 회로라고 부르기도 민망하다. 다음은 Buffer 게이트를 표현한 개략도이다.

가장 왼쪽이 일반적인 표현형이다. 가운데가 입력 값이 0인 경우, 오른쪽이 입력 값이 1인 경우이다.
논리식으로 표현하자면 그냥 \(P\)이다.
NOT 게이트
NOT 게이트의 입력 값은 하나이다. Buffer와 반대로 입력 값의 반대를 출력하는 회로이다. 입력 값이 1이면 출력 값은 0이고 입력 값이 0이면 출력 값은 1이다. 이 회로는 레드스톤 횃불로 간단하게 구현할 수 있다. 다음은 NOT 게이트를 표현한 개략도이다.

다음은 NOT 게이트의 예시이다. 순서대로 입력 값이 0일때, 1일때이다.

논리식으로 표현하면 \(\neg P\)이다.
OR 게이트
OR 게이트부터는 입력 값이 2개이다. 정확히는 입력 값이 2개 이상이다. 여러 개여도 상관 없다. 하지만 설명의 편의를 위해 입력 값이 2개일 때만 다루겠다. 앞으로 이 입력 값들을 A, B로 나누고 입력 값을 표현할 때는 (A, B)로 표현하겠다. OR 게이트는 A와 B 중 하나라도 1이면 1을 출력하는 회로이다. 입력 값이 (0, 1), (1, 0), (1, 1)일 때 모두 출력 값이 1이고 입력 값이 (0, 0)일 때만 출력 값이 0이다. 다음은 OR 게이트를 표현한 개략도이다.

다음은 OR 게이트의 예시이다. 순서대로 입력 값이 (0, 0), (0, 1), (1, 0), (1, 1)일 때이다.

논리식으로 표현하면 \(A \lor B\)이다.
나머지 모든 논리 회로는 지금까지 쓴 NOT 게이트와 OR 게이트 만으로 설명할 수 있다. 앞으로 NOT과 OR만 사용하여 쓴 논리식을 확장 논리식이라고 하겠다.
AND 게이트
AND 게이트 또한 입력 값이 2개 이상이다. AND 게이트에 대해서도 입력 값 2개를 (A, B)로 표현하겠다. AND 게이트는 A와 B 모두 1이어야만 출력 값이 1이다. 입력 값이 (0, 0), (0, 1), (1, 0)일 때 모두 출력 값이 0이고 입력 값이 (1, 1)일 때만 출력 값이 1이다. 다음은 AND 게이트를 표현한 개략도이다.

다음은 AND 게이트의 예시이다. 순서대로 입력 값이 (0, 0), (0, 1), (1, 0), (1, 1)일 때이다.

논리식으로 표현하면 \(A \land B\)이다.
확장 논리식으로 (굳이) 표현하면 \(\neg (\neg A \lor \neg B)\)이다.
NOR 게이트
NOR 게이트는 OR 게이트의 정반대이다. 즉, A와 B 중 하나라도 1이면 0을 출력하는 회로이다. A와 B가 모두 0이어야 1을 출력한다. OR 게이트의 마지막 부분에 NOT 게이트를 추가하면 된다. 입력 값이 (0, 1), (1, 0), (1, 1)일 때 모두 출력 값이 0이고 입력 값이 (0, 0)일 때만 출력 값이 1이다. 다음은 NOR 게이트를 표현한 개략도이다.

다음은 NOR 게이트의 예시이다. 순서대로 입력 값이 (0, 0), (0, 1), (1, 0), (1, 1)일 때이다.

논리식으로 표현하면 \(\neg (A \lor B)\)이다. 확장 논리식도 똑같다.
NAND 게이트
NAND 게이트는 AND 게이트의 정반대이다. 즉, NAND 게이트는 A와 B 모두 1이어야만 출력 값이 0이다. A와 B 중 하나라도 0이면 1을 출력하는 회로이다. AND 게이트의 마지막 부분에 있는 NOT 게이트를 제거하거나 추가하면 된다. 입력 값이 (0, 0), (0, 1), (1, 0)일 때 모두 출력 값이 1이고 입력 값이 (1, 1)일 때만 출력 값이 0이다. 다음은 NAND 게이트를 표현한 개략도이다.

다음은 NOR 게이트의 예시이다. 순서대로 입력 값이 (0, 0), (0, 1), (1, 0), (1, 1)일 때이다.

논리식으로 표현하면 \(\neg (A \land B)\)이다.
확장 논리식으로 표현하면 \(\neg A \lor \neg B\)이다.
XOR 게이트
여기부터는 조금 심화 내용이다. XOR 게이트는 A와 B가 다른지 확인하는 회로이다. 즉, A와 B가 다르면 출력 값이 1, A와 B가 같으면 출력 값이 0이다. 입력 값이 (0, 1), (1, 0)일 때 출력 값이 1, 입력 값이 (0, 0), (1, 1)일 때 출력 값이 0이다. 다음은 XOR 게이트를 표현한 개략도이다.

다음은 XOR 게이트의 예시이다. 순서대로 입력 값이 (0, 0), (0, 1), (1, 0), (1, 1)일 때이다.

논리식으로 표현하면 \(A \oplus B\)이다.
확장 논리식으로 표현하면 \(\neg (\neg (A \lor B) \lor \neg (\neg A \lor \neg B))\)이다.
XNOR 게이트
XNOR은 XOR 게이트와 정반대이다. 즉, A와 B가 같은지 확인하는 것이다. 즉, A와 B가 같으면 출력 값이 1, A와 B가 다르면 출력 값이 0이다. 입력 값이 (0, 1), (1, 0)일 때 출력 값이 0, 입력 값이 (0, 0), (1, 1)일 때 출력 값이 1이다. 다음은 XNOR 게이트를 표현한 개략도이다.

다음은 XNOR 게이트의 예시이다. 순서대로 입력 값이 (0, 0), (0, 1), (1, 0), (1, 1)일 때이다.

논리식으로 표현하면 \(\neg (A \oplus B)\)이다.
확장 논리식으로 표현하면 \(\neg (A \lor B) \lor \neg (\neg A \lor \neg B)\)이다.
Imply 게이트
마지막으로 Imply 게이트이다. A implies B의 형식으로 쓴다. A implies B는 A가 켜져 있을 때 B도 켜져 있는지 확인하는 논리 회로이다. 즉, A가 켜져 있는데 B가 꺼져 있으면 출력 값이 0이다. 입력 값이 (0, 0), (0, 1), (1, 1)일 때 출력 값이 1이고 입력 값이 (1, 0)일 때 출력 값이 0이다. 다음은 A implies B 게이트를 표현한 개략도이다.

다음은 A implies B 게이트의 예시이다. 순서대로 입력 값이 (0, 0), (0, 1), (1, 0), (1, 1)일 때이다.

논리식으로 표현하면 \(\neg A \lor B\)이다. 확장 논리식도 똑같다.
논리 회로로 표현 가능한 경우
이제 지금까지 배운 논리 회로로 (A, B)가 (0, 0), (0, 1), (1, 0), (1, 1)일 때 나올 수 있는 모든 출력의 배열을 표현할 수 있다. 예를 들어서 (0, 0), (0, 1), (1, 0), (1, 1)일 때 나오는 출력을 (a, b, c, d)라고 하자. 이때 (a, b, c, d)로 나타날 수 있는 모든 16가지 경우를 위 논리 회로 만으로 표현할 수 있다. 다음은 각 (a, b, c, d)의 경우에 대해 해당 출력이 나오는 논리 회로를 제시한 것이다.
(0, 0, 0, 0): (적절하지는 않지만 굳이 따지자면) [NOT A] AND A
(0, 0, 0, 1): A AND B
(0, 0, 1, 0): NOT [A implies B]
(0, 0, 1, 1): A
(0, 1, 0, 0): NOT [B implies A]
(0, 1, 0, 1): B
(0, 1, 1, 0): A XOR B
(0, 1, 1, 1): A OR B
(1, 0, 0, 0): A NOR B
(1, 0, 0, 1): A XNOR B
(1, 0, 1, 0): NOT B
(1, 0, 1, 1): B implies A
(1, 1, 0, 0): NOT A
(1, 1, 0, 1): A implies B
(1, 1, 1, 0): A NAND B
(1, 1, 1, 1): (적절하지는 않지만 굳이 따지자면) [NOT A] OR A
사실 논리 회로는 마인크래프트에서는 많이 쓰이지 않지만 실제 세상에서 많이 쓰인다. 코딩할 때도 조건과 관련되어 많이 쓰인다. 한 번 쯤 알아두면 살아가는데 도움이 될 것 같다.
여담으로 필자가 만든 프로그램인 Redstone Schematics는 레드스톤을 이용하여 직접 회로를 구성해보고 개략도로 표현해 볼 수 있는 프로그램이다. 이 글에서 쓰인 모든 개략도 그림이 필자가 Redstone Schematics로 만든 그림이다. 원래는 이 글을 올리기 전에 Redstone Schematics를 웹사이트로 전환하려고 했으나 각종 버그와 도메인 문제 때문에 아직 못 하고 있다. 언젠가 성공적으로 웹사이트가 되면 이 글에 댓글로 공지하겠다.