종이 명함 대신 회로기판을 건네면 어떨까. 한 개발자가 신용카드 크기의 검은 PCB에 금색 아트워크와 이름을 새기고, 두 가지 보이지 않는 기능을 심었다. 하나는 휴대폰을 갖다 대면 자신의 웹사이트가 열리는 NFC 태그이고, 다른 하나는 배터리 없이 켜지는 LED다. 카드에 그려진 캐릭터의 꼬리 끝에 빨간 LED가 놓여 있는데, 휴대폰을 대는 순간 그 꼬리에 불이 붙는다. 코인셀도, 충전용 배선도 없다. LED는 오직 휴대폰이 방출하는 전파에서 끌어온 에너지만으로 작동한다. 취미로 만든 물건이지만, 그 안에는 실무자가 곱씹어 볼 만한 몇 가지 기술적 결이 담겨 있다.
태그가 아니라 전원을 공급받는 장치
NFC 명함 자체는 새롭지 않다. 카드 가장자리를 일곱 바퀴 감은 구리 코일이 안테나 역할을 하고, 이 코일을 13.56MHz에서 공진시키는 것이 작업의 핵심이다. 흥미로운 지점은 전력의 방향이다. NFC 휴대폰은 태그의 신호를 단순히 수신하는 것이 아니라, 배터리가 없는 태그를 작동시키기 위해 강한 무선 필드를 먼저 쏜다. 일반 NFC 스티커의 칩은 이 빌려온 에너지로 잠깐 깨어나 응답하고, 휴대폰이 떨어지면 다시 꺼진다. 그런데 일부 칩은 응답에 쓰고 남은 전력을 별도 핀으로 내보내 준다. NXP 데이터시트는 특정 테스트 조건에서 약 2V, 5mA 수준의 하비스팅 출력을 제시하는데, 많지는 않아도 LED를 켜거나 저전력 센서를 깜빡이거나 마이크로컨트롤러를 순간적으로 깨우기에는 충분하다.
태그가 응답하는 방식도 직관과 다르다. 태그는 자체 신호를 송신하지 않는다. 대신 휴대폰의 필드를 순간순간 얼마나 흡수할지를 바꾸고, 휴대폰은 자기 신호에 실리는 그 미세한 흔들림을 0과 1로 읽는다. 스스로 빛을 내지 않고 광원을 반사할 뿐인 거울에 가깝다. 에너지는 전부 휴대폰이 대고, 카드는 무엇을 되튕길지만 결정한다. 참고로 NFC는 RFID의 경쟁 기술이 아니라 13.56MHz의 근거리 영역에 해당한다. 짧은 통신 거리는 의도된 것으로, 사용자가 일부러 갖다 댄 대상하고만 통신하도록 만든 설계다.
코드로 그린 기판, 그리고 공장
제작자는 마우스로 배선을 끄는 대신 KiCad의 파이썬 API로 기판 전체를 스크립트로 생성했다. 모든 배선과 안테나 코일, 글자 위치까지 계산으로 배치했기 때문에, 코일을 한 바퀴 더 감고 싶으면 숫자 하나를 바꿔 다시 실행하면 된다. 하드웨어를 프로그램처럼 재현 가능하게 다룰 수 있다는 점은 초심자에게 특히 든든한 방식이다. 카드 뒷면은 실제 부품 데이터시트처럼 꾸며 안테나 공진 계산식을 실크스크린에 인쇄하고, 계량기로 찍어 볼 수 있는 실제 테스트 포인트 두 곳(TP1·TP2)을 노출시켰다. 앞면에서 칩 접점처럼 보이는 금색 사각형은 그림일 뿐이고, 진짜 NFC 칩은 뒷면에 숨겨 둔 위트도 넣었다. 완성된 설계 파일은 JLCPCB에 올렸고, 약 75달러에 열 장을 제조하고 칩과 LED까지 실장해 배송받았다.
진짜 난관은 마지막의 소프트웨어
전기적으로는 교과서대로였다. 안테나 계산은 한 번에 맞았고 LED도 켜졌다. 그런데 카드를 대도 링크가 열리지 않았다. 빈 칩에는 URL을 써 넣어야 하는데, 표준 앱인 NFC Tools는 "지원되지 않는 태그"라며 거부했다. 원인은 칩 선택에 있었다. 그가 고른 NTAG I²C Plus는 평범한 스티커 태그가 아니라, 기기 내부에서 마이크로컨트롤러와 배선으로 통신하도록 만든 브리지 칩이다. LED에 필요한 에너지 하비스팅 핀을 얻으려고 일부러 택한 칩이지만, 소비자 앱이 기대하는 NDEF 포맷 없이 출고된다. iOS의 고수준 NDEF 경로를 쓰는 앱은 이를 미지원으로 처리했다. 백업용 안드로이드로 우회하려 했으나, 통신사 버전에서 NFC 칩이 빠져 있어 하드웨어 자체가 없었다.
돌파구는 소비자 앱이 칩을 쓸 수 없어서가 아니라 고수준 검사 단계에서 멈췄을 뿐이라는 사실을 깨달은 데서 나왔다. 이 칩은 아래 계층에서 일반 태그와 동일한 메모리 명령에 응답한다. 앱은 문 앞에서 신분증을 확인하는 경비였을 뿐, 칩 자체는 주문을 받을 준비가 되어 있었던 셈이다. iOS의 Core NFC에는 태그에 원시 명령을 직접 보내는 저수준 모드가 있어, 그는 약 60줄짜리 앱을 직접 작성했다. NFC 세션을 열고 "나는 URL 태그"라는 헤더를 쓴 뒤 웹 주소를 4바이트씩 기록하며 각 명령의 응답을 확인하는 단순한 동작이다. 이후 모든 카드에서 탭 한 번에 사이트가 열렸다.
다만 한 가지 제약이 남았다. 카드를 휴대폰 상단 가장자리에 바짝 붙이지 않으면 쓰기가 실패한다. 결합이 예민한 이 현상의 원인은 빛나는 LED로 추정된다. LED가 칩이 써야 할 전력의 일부를 나눠 마시면서, 평범한 태그보다 여유 마진이 줄어든 것이다. 다음 개정판에서 밝기를 조금 낮추고 통신 거리를 늘리는 트레이드오프를 저울질할 대목이다. 이 프로젝트가 다시 확인시켜 준 교훈은 분명하다. 하드웨어에서 정작 사람을 붙드는 것은 물건이 물리적으로 존재하는 단계와 실제로 동작하는 단계 사이의 마지막 한 뼘, 곧 끝단의 소프트웨어인 경우가 많다는 점이다. 전자 회로는 매끄러웠지만, 그를 좌절 직전까지 몰아넣은 것은 자신의 칩을 알지 못하던 앱의 호환성 검사 한 줄이었다. 배터리를 소유하지 않은 물체가 잠깐 깨어나는 이 원리는, 접촉하는 순간에만 살아 있으면 되는 수많은 물건으로 확장될 씨앗이기도 하다.