Taron Foxworth 작성
아두이노에 버튼을 연결해 본 경험이 있다면 아래와 같은 회로도를 한 번쯤은 접해 보셨을 겁니다.

처음 이 회로도를 마주하면 혼란스럽기 마련입니다. "그냥 버튼이 눌렸는지만 알려주면 되는데, 대체 왜 저항까지 필요하지?"라는 의문이 드는 게 당연합니다. 저 역시 처음엔 그랬습니다. 관련 자료를 수없이 찾아 읽었지만, 쉽고 명확하게 설명된 글은 찾기 어려웠습니다. 이 글은 바로 그 지점을 짚어주기 위해 쓰였습니다.
버튼의 동작 원리부터 이해하기
도식 1
버튼, 즉 스위치 내부의 배선은 영문자 'H' 모양으로 되어 있습니다. 가운데 부분은 서로 연결되어 있지 않으며, 버튼을 누르는 순간에야 비로소 회로가 연결됩니다.
우리가 궁극적으로 원하는 것은 단순합니다. 아무것도 누르지 않았을 때는 아두이노에서 0을, 버튼을 눌렀을 때는 1을 읽어내는 것입니다. 아두이노에서는 이런 용도의 핀을 GPIO(General Purpose Input Output, 범용 입출력)라고 부릅니다.
전원만 연결하면 끝일까?
도식 2
회로 왼쪽에 양극 전원(5V, 3.3V 또는 VCC)을 연결해 봅시다. 이제 버튼을 누르면 GPIO가 1을 읽어냅니다. 모든 게 잘 되는 것처럼 보입니다.
과연 그럴까요?
도식 3
숨겨진 문제: 플로팅(Floating) 상태
도식 2를 다시 살펴보겠습니다.
도식 2
우리는 버튼을 누르지 않았을 때 GPIO가 0을 읽기를 원했습니다. 하지만 이걸 어떻게 보장할 수 있을까요? 현재 회로로는 GPIO가 반드시 0이 된다고 장담할 방법이 없습니다.
공기 중에는 각종 전자기파가 존재하며, 이런 외부 간섭이 GPIO 값을 0으로도 1로도 끌어당길 수 있습니다. 심지어 두 값 사이를 계속 오가며 요동칠 수도 있습니다. 이렇듯 입력 핀이 어느 쪽으로도 확정되지 않은 상태를 '플로팅'이라고 부르며, 예측 불가능한 값이 읽혀 시스템 오류의 원인이 됩니다.
핀을 접지에 연결하면 해결될까?
확정적인 논리 0을 얻는 한 가지 방법은 핀을 그라운드(GND)에 직접 연결하는 것입니다.

좋습니다! 이제 버튼을 누르지 않으면 확실한 논리 0이 됩니다. 그럼 버튼을 누르면 1이 되겠지요?
아닙니다.

방금 여러분은 단락(short circuit, 합선)을 만들어낸 것입니다. 버튼을 누르는 순간 전원(+)과 접지(-)가 저항 없이 직접 연결되어 과도한 전류가 흐르고, 회로나 부품이 손상될 위험이 생깁니다.
풀다운 저항의 등장
바로 이 지점에서 저항이 필요합니다. 단락을 막으려면 회로에 저항을 추가해야 하며, 저항이 전류의 흐름을 통제해 회로를 안전하게 지켜줍니다.

여기서 중요한 원리가 하나 등장합니다. 전류는 저항이 가장 낮은 경로를 따라 흐른다는 것입니다. 버튼을 누르면 전류는 저항이 큰 경로 대신 훨씬 저항이 낮은 버튼 경로로 흐르고, GPIO는 1을 읽어냅니다.


드디어 제대로 작동하는 회로가 완성되었습니다!
정반대 개념, 풀업 저항
이번에는 정반대인 풀업 저항(pull-up resistor)을 살펴보겠습니다. 동작 원리는 같지만 방향이 반대입니다. 버튼을 누르지 않으면 GPIO가 1을, 버튼을 누르면 GPIO가 0을 읽어냅니다.
버튼을 누르지 않은 상태에서는 GPIO가 양극(VCC)에 연결되어 있어, 흐르는 전류가 GPIO 쪽으로 끌려 올라가면서 논리 1이 됩니다. 이름이 '풀업(끌어올림)'인 이유가 바로 여기에 있습니다.

여기서 기억할 핵심은, 전류는 언제나 그라운드(접지)로 향하려는 성질이 있다는 점입니다. 따라서 버튼을 누르면 흐르던 전류가 그라운드 쪽으로 빠져나가고, 원래 GPIO로 가야 할 전류마저 함께 빠져나가 GPIO는 논리 0이 됩니다.

이것으로 풀다운과 풀업 저항의 기본 원리를 모두 살펴봤습니다!
왜 이 글을 썼나요?
저는 2016년 9월, 하드웨어 경험이 전혀 없는 상태로 Losant에 입사했습니다. 하드웨어 스타터 키트에는 반드시 버튼이 포함되어 있지만, 정작 이 개념에 대한 설명은 어디에도 없었습니다. 이 글이 여러분의 머릿속에 '번쩍'하는 깨달음을 주는 계기가 되기를 바랍니다.
물론 이 글은 극히 일부만 다룬 내용입니다. 더 깊이 공부하고 싶다면 아래 자료를 참고하세요.
Pull-up Resistors - learn.sparkfun.com
참고로 풀업 저항의 저항값이 클수록 핀이 입력 변화에 반응하는 속도는 느려집니다._learn.sparkfun.com
피드백은 언제나 환영합니다. 개선할 점이 있다면 알려주세요. 내용에 잘못된 부분이 있다면 꼭 지적해 주세요! 다른 독자들을 위해 더 나은 글로 다듬고 싶습니다.
무료로 코딩을 배워보세요. freeCodeCamp의 오픈 소스 커리큘럼은 이미 4만 명 이상의 사람들이 개발자로 취업하는 데 도움을 주었습니다. 지금 시작해 보세요.