납땜할 때 같은 값 부품을 한 번에 찾기: PCB 파일로 만든 납땜 도우미
수작업 납땜은 보통 릴 단위로 합니다. 1kΩ 릴을 하나 뜯어서 1kΩ 자리를 전부 채우고, 다음 릴로 넘어갑니다. 부품표에는 그 자리가 R6 R8-9 R22-25 R31 R38 R42-45 R51 R58 처럼 적혀 있습니다. 문제는 이 번호들이 보드 어디에 있느냐입니다.
0603 칩저항 열다섯 개가 보드 뒷면 여기저기 흩어져 있고, 실크 글자는 작거나 이미 붙인 부품 밑에 가려 있습니다. 양면 보드면 더 헷갈립니다. 보드를 뒤집어 들면 좌우가 바뀌는데, 아트웍 화면은 윗면 기준이라 머릿속에서 한 번 더 뒤집어야 합니다. 결국 부품 붙이는 시간보다 자리를 찾는 시간이 더 걸립니다.
그래서 보드 파일을 넣으면 같은 값 부품을 보드 그림 위에 한꺼번에 표시해 주는 도구를 만들었습니다.

만든 것
- PADS 보드 파일(
.asc)이나 KiCad 보드 파일(.kicad_pcb)을 배치 파일 위에 끌어다 놓으면 HTML 한 장이 만들어지고 브라우저가 열립니다. 회로도(.txt/.kicad_sch)는 같은 폴더에서 알아서 찾습니다. - 왼쪽은 값과 크기가 같은 부품끼리 묶은 목록입니다. 저항 → 캐패시터 → 다이오드 → 트랜지스터 → IC → 커넥터 순, 키 낮은 부품부터 붙이는 순서로 정렬했습니다.
- 묶음을 고르면 그 부품들이 보드에서 주황 동그라미와 번호로 깜빡입니다. 0603처럼 작은 칩도 보드 전체 보기에서 바로 보이도록 동그라미를 크게 그렸고, 휠로 확대하면 번호가 읽힙니다.
- 양면 보드는 윗면 그림과 뒤집어 본 뒷면 그림을 나란히 보여 줍니다. 실물 보드를 좌우로 뒤집어 든 모습 그대로라서 머릿속에서 뒤집을 필요가 없습니다.

붙인 부품은 클릭(또는 스페이스)으로 표시하고, 한 묶음을 다 붙였으면 목록의 체크 상자 하나로 묶음 전체를 표시합니다. 붙인 부품은 다른 묶음을 볼 때도 초록으로 남아서 보드 전체 진행 상황이 한눈에 보입니다. 진행 상태는 브라우저에 저장되니 내일 이어서 붙여도 됩니다.

값은 한 곳에 있지 않았다
처음엔 간단할 줄 알았습니다. PADS .asc 안에 부품마다 Value 속성이 있고, 저항·캐패시터는 98% 정도가 채워져 있었습니다. 표기가 제각각인 건 정규화로 풀었습니다. 같은 1kΩ이 102, 1K, 1K0 으로, 같은 100nF가 104, 0.1uF 로 적혀 있어서, 숫자만 3·4자리면 항상 EIA 코드로 읽는다는 규칙을 정해 하나로 묶었습니다.
그런데 회로도를 같이 넣기로 하면서 이런 말을 들었습니다.
회로의 값이 2D 라벨로 되어 있는 경우도 있으니까 그것도 감안해서 만들어줘
열어 보니 정말 그랬습니다. 확인한 PADS 회로도 10장 모두에 값이 부품 속성이 아니라 부품 옆에 따로 쓴 글자로 들어 있었습니다. LED 색(RED, GREEN), 다이오드 품번(1N4148), 트랜지스터(BSS138), 크리스탈(12MHz), 릴레이 코일 전압(PA1A-5V) 같은 것들입니다.
게다가 이 글자가 속성보다 정확했습니다. CB08 보드의 부품표와 대조해 보면 이렇습니다.
| 부품 | 파일 속성 | 회로도 글자 | 부품표 |
|---|---|---|---|
| Q13 | Part Number BSS123LT1 | BSS138 | BSS138 |
| IC5 | 파트타입 MAX485 | MAX13487E | MAX13487EESA |
| U3 | 파트타입 KPC18T1 | TLP291 | TLP290GB |
| D22 | 보드 값 SS36 | 1N4148 | LL4148 |
라이브러리 부품을 가져다 놓고 실제 부품은 바꾸면서, 바뀐 이름은 회로도에 글자로만 적어 둔 겁니다. 그래서 값을 고르는 순서를 회로도 값 → 회로도 글자 → 보드 값 → Part Number → 파트타입 으로 정했고, 출처끼리 값이 다르면 ⚠ 를 붙였습니다.
글자를 어느 부품에 붙일까 — 첫 방식은 틀렸다
글자는 그냥 글자라서, 어느 부품 것인지는 위치로 추측해야 합니다. 처음엔 “글자에서 가장 가까운 부품 원점”으로 붙였는데, 결과가 엉망이었습니다. RED 가 저항에 붙고, 1N4148 이 릴레이에 붙었습니다.
글자 종류로 후보를 좁히는 것까지 넣으니(다이오드 품번은 다이오드에만, 주파수는 크리스탈에만) CB08은 다 맞았는데, 릴레이 보드에서 또 틀렸습니다.

릴레이 사이에 PA1A-5V 가 두 개 붙어 있는데, 하나는 위 릴레이 아래쪽, 하나는 아래 릴레이 위쪽 글자입니다. 원점 거리로 재면 둘 다 아래 릴레이(K3)가 가깝습니다. 그래서 거리를 심볼 몸체 사각형과 글자 사각형 사이의 간격으로 바꾸고, 글자 하나는 부품 하나에만 붙도록 보드 전체에서 가까운 짝부터 확정하게 했습니다. 그 뒤로 CB08 글자 38개가 부품표 기준 정답에 모두 붙었고, 릴레이 보드 두 장도 K 번호마다 하나씩 붙었습니다.
몸체 사각형을 구하려면 회로도 심볼의 회전·반전을 알아야 합니다. 이건 짐작하지 않았습니다. 후보 규칙마다 심볼 핀 위치를 계산해서 회로도 배선 끝점과 몇 개 겹치는지 세었고, 10장 약 4,000핀이 전부 맞는 규칙만 남겼습니다. 중간에 LED 몇 개만 계속 어긋났는데, 반전 필드에 X·Y 둘 다 뒤집는 3 이라는 값이 있었기 때문이었습니다.
위치가 맞는지는 파일 밖 기준으로
보드 그림이 틀리면 엉뚱한 자리에 납땜을 하게 됩니다. 그래서 위치는 우리 코드끼리가 아니라 다른 프로그램이 계산해 둔 값과 대조했습니다.
- PADS: 배선 데이터에 PADS가 기록해 둔 핀 좌표와 12장 4,466핀을 비교해서 오차 0. PADS 좌표는 1단위가 2/3 nm라서 ÷1,500,000 해야 mm가 됩니다. 예전에 이걸 1 nm로 읽어서 보드가 1.5배로 나왔던 적이 있어서 이번엔 처음부터 검증된 렌더러 규칙을 가져다 썼습니다.
- KiCad:
kicad-cli로 내보낸 IPC-D-356(패드 절대 좌표)과 12장 모두 일치. 뒷면 부품은 파일에 좌표가 이미 반전돼 저장된다는 것도 이 대조로 알았습니다.

써 보면서 고친 것
- 작은 칩이 안 눌렸습니다. 0603 저항 가운데를 누르면 두 패드 사이 빈틈이라 아무 일도 안 일어났습니다. 부품마다 보이지 않는 클릭 영역(최소 1.6 mm)을 깔았습니다.
- 같은 부품이 두 묶음으로 갈렸습니다. 100nF가 풋프린트 이름
R-060314개와16084개로 나뉘었습니다. 둘 다 같은 0603(1608) 크기라 같은 릴입니다. 이름에 든 칩 크기 코드를 미터 표기로 통일해서 묶었습니다. - 릴레이 동그라미가 서로 겹쳤습니다. 큰 부품은 동그라미 대신 부품 둘레 사각 테두리로 바꿨습니다.

부품표와 대조했더니 나온 것
도구는 파일에 적힌 대로 보여 줍니다. 그래서 거꾸로, 파일과 부품표가 어긋난 곳이 드러났습니다.

- D22~25: 보드 값
SS36, 회로도 글자1N4148, 부품표LL4148. 풋프린트 이름이1N4148_SMD라서 보드 값이 낡은 쪽입니다. - R139: 보드에는 있는데 부품표에 없습니다.
- Q14: 부품표 메모로는 트랜지스터 자리에 0Ω 저항을 다는데, 파일에는 BSS138로 돼 있습니다.
이런 건 도구가 판단할 수 없어서, 출처별 값을 보여 주고 ⚠ 로 표시하는 데서 멈췄습니다.
결과
- PADS 12장, KiCad 12장으로 시험해서 모두 HTML이 나왔고, 자동 테스트 89개가 통과합니다.
- 본체는 Claude Code로 요구 정리부터 검증까지 순수 작업 약 34분 걸렸습니다(질문에 답하는 시간 제외). 대부분은 코드를 쓰는 시간이 아니라 규칙을 데이터에 대조하는 시간이었습니다.
- 남은 확인 하나: KiCad 회로도에서 반전과 90° 회전이 함께 걸린 심볼은 시험 보드에 하나도 없어서, 그 경우의 처리 순서는 KiCad 소스를 따랐고 데이터로는 확인하지 못했습니다.
배운 건 두 가지입니다. 값은 한 곳에 있지 않다 — 보드 속성, 회로도 속성, 회로도 글자, 부품표가 서로 조금씩 다릅니다. 그리고 규칙은 짐작이 아니라 파일 밖 기준과 대조해서 정한다 — 회로도 핀 약 4,000개, 보드 핀 4,466개를 맞춰 보니 짐작했으면 틀렸을 규칙이 둘 나왔습니다.
댓글
로그인 없이 이름만 적고 남기실 수 있어요. 남긴 댓글은 바로 게시됩니다.
댓글을 불러오는 중…