1 of 6
🧭 PlanningRust는 모르지만 접속은 하고 싶어
SUMMARY
NAT 뒤의 공장과 회사 PC에 접속하기 위해 P2P 연결 도구를 직접 만들기로 했다. 익숙하지 않은 Rust로 코딩 에이전트와 협업하면서도, 설계 의도와 결정 이유를 문서로 남겨 내부 구조를 이해하고 통제할 수 있는지 확인하고 싶었다.
요즘은 개발자들 사이에서 코딩 에이전트를 실무에 자주 쓴다는 이야기가 꽤 자연스럽게 돈다. 예전에는 "AI가 코드를 조금 도와준다" 정도였다면, 이제는 아예 작업 단위를 맡기고, 리뷰하고, 다시 고치게 하면서 개발 속도를 끌어올린다는 이야기도 흔하다.
그런데 나는 한동안 그 흐름에 잘 올라타지 못했다. 생성형 AI를 쓰지 않았다는 뜻은 아니다. 오히려 자주 써봤다. 문제는 내가 기대한 방식으로 오래 함께 가기가 어려웠다는 점이었다.
AI는 작은 함수나 익숙한 boilerplate를 만들 때에는 꽤 그럴듯했다. 하지만 조금만 구조가 길어지면 자주 이상한 방향으로 샜다. 에러를 고치는 듯하다가 다른 곳을 망가뜨리거나, 내가 선호하지 않는 추상화를 갑자기 끼워 넣거나, 지금 필요한 단순한 구현 대신 지나치게 일반적인 구조를 만들곤 했다. 무엇보다 불편했던 것은 내가 코드를 읽었을 때 "이 시스템이 지금 어떤 모양으로 자라고 있는지" 감각을 잃기 쉽다는 점이었다.
그래서 나는 코딩 에이전트가 유행한다는 이야기를 들으면서도, 마음 한쪽에서는 계속 의심하고 있었다. 정말 복잡한 프로젝트를 맡길 수 있을까. 내가 잘 모르는 언어에서도 괜찮을까. 에이전트가 만든 코드를 다시 내가 이해할 수 있을까.
그 의심이 조금씩 바뀌기 시작한 것은 최근이었다. 모델이 좋아진 것도 있고, 작업 방식에 대한 내 감각도 달라졌다. 에이전트에게 그냥 "이거 만들어줘"라고 던지는 대신, 설계 의도와 경계, 현재 상태, 결정 이유를 계속 남겨두면 훨씬 안정적으로 협업할 수 있겠다는 느낌이 들었다. 코드만 결과물이 아니라, 코드가 왜 그런 모양이 되었는지를 설명하는 문서와 다이어그램까지 같이 유지하면 내가 모르는 영역도 따라갈 수 있을 것 같았다.
마침 해결하고 싶은 문제가 하나 있었다. 업무상 SSH로 여러 공장과 회사의 PC에 접속해야 할 일이 있었다. 문제는 그 PC들이 대부분 NAT 뒤에 있다는 점이었다. 네트워크 환경은 제각각이고, 포트 포워딩을 마음대로 열 수도 없고, 매번 현장에 가서 무언가를 확인하는 것도 번거로웠다.
물론 현실적인 답은 이미 있다. Tailscale 같은 서비스를 쓰면 많은 문제가 깔끔하게 해결된다. 하지만 이번에는 다른 서비스에 의존하고 싶지 않았다. 누군가가 잘 만들어 둔 네트워크를 빌려 쓰는 대신, 내가 통제할 수 있는 작은 연결 계층을 직접 만들어보고 싶었다. 접속해야 하는 대상과 경로, 실패했을 때의 fallback, 어떤 정보가 어디에 남는지까지 내 손 안에 두고 싶었다.
그렇게 MeSSH의 아이디어가 생겼다. 목표는 단순했다. 서로 다른 네트워크 뒤에 있는 PC들이 직접 닿기 어렵더라도, PeerID 같은 안정적인 정체성만 알고 있으면 어떻게든 상대를 찾아 연결할 수 있게 만들고 싶었다.
문제는 이를 구현하기 위해 필요한 퍼즐 조각들이 제대로 배워본 적 없는 Rust로 작성돼있다는 것이었다. 네트워크 프로그래밍, 비동기 런타임, 소유권, 에러 모델까지 생각하면 Rust를 사용하는 건 처음부터 쉬운 선택은 아니었다. 하지만 동시에 그래서 이 프로젝트가 코딩 에이전트를 시험하기에 좋다고 느꼈다. 내가 언어를 완전히 장악하지 못한 상태에서도, 시스템의 내부 구조를 놓치지 않는 방식으로 작업할 수 있는지 확인해보고 싶었다.
다르게 말하면 MeSSH는 P2P 네트워크 프로젝트이기도 하지만, 동시에 "나는 AI와 낯선 언어로 어디까지 구현할 수 있는가"를 확인하는 프로젝트이기도 하다. 예전의 나는 AI가 만든 구조를 믿지 못했다. 이번에는 그 불신을 그냥 참는 대신, 불신을 다룰 수 있는 작업 구조를 먼저 만들기로 했다.
그래서 이 프로젝트의 첫 질문은 네트워크보다 조금 앞에 있다. 코딩 에이전트가 정말 좋아졌다면, 나는 이제 어떤 방식으로 일해야 할까. 그리고 그 방식은 내가 아직 모르는 Rust 코드베이스 안에서도, 내가 납득할 수 있는 구조를 끝까지 유지하게 해줄 수 있을까.
Outcomes
- ▸NAT 뒤의 PC에 PeerID로 접속할 수 있는 P2P 연결 도구를 만들기로 결정
- ▸낯선 언어인 Rust로 코딩 에이전트와 협업하되, 설계 의도와 결정 이유를 문서로 유지하기로 함





