Vercel이 드디어 포트 번호를 없앴습니다 (Portless)

BBetter Stack
컴퓨터/소프트웨어AI/미래기술

Transcript

00:00:00이것은 Agent Browser, JSON Render, Skills를 만든
00:00:05Vercel Labs 팀이 제작한 CLI 도구인 Portless입니다. localhost 포트 번호를 고정된 이름으로 바꿔주죠.
00:00:10덕분에 사람이나 AI 에이전트가 항상 올바른 위치로 접속할 수 있고 포트 충돌도 방지할 수 있습니다.
00:00:15하지만 내부적으로 어떻게 작동하는지, 시스템을 망가뜨리지는 않을지 궁금하시죠?
00:00:20구독 버튼을 누르시고, 바로 시작해 보겠습니다.
00:00:21간단한 예시를 통해 Portless 사용법을 살펴보겠습니다.
00:00:26현재 3001번 포트에서 프로젝트 하나가 실행 중입니다.
00:00:30이걸 백그라운드에서 실행 중이라는 사실을 완전히 잊어버린 채로,
00:00:33비슷한 포트를 사용하는 다른 프로젝트를 실행하려고 한다면,
00:00:37주소가 이미 사용 중이라는 오류가 발생하게 됩니다.
00:00:40Portless는 바로 이런 문제를 해결하기 위해 설계되었습니다.
00:00:44여러 탭에서 서로 다른 프로젝트를 위해 여러 에이전트를 실행하고 있는데,
00:00:48이런 문제가 발생한다고 상상해 보세요.
00:00:50물론 에이전트가 직접 해결할 수도 있겠지만, 애초에 이런 일이 생기지 않도록
00:00:55항상 사용 가능한 포트가 준비되어 있다면 훨씬 더 좋겠죠.
00:00:58이제 Portless를 설치하고 Portless 프록시를 실행한 상태에서,
00:01:01portless 명령어 뒤에 원하는 호스트 이름(여기서는 xdlapi)을 입력합니다.
00:01:06호스트 이름은 무엇이든 자유롭게 정할 수 있습니다.
00:01:08그다음 실행할 명령어인 'bun run devapi'를 입력합니다.
00:01:12엔터를 치면 4000번대 범위에서 비어 있는 랜덤 포트 번호를 찾아냅니다.
00:01:16이 범위는 다른 프로그램이 사용할 가능성이 낮기 때문이죠.
00:01:20그리고 .localhost:1355를 통해 지정한 호스트 이름으로 앱을 노출해 줍니다.
00:01:25기본 포트는 Portless를 의미하는 1355입니다. 이해되시죠?
00:01:30여기를 클릭해 보면 앱이 잘 작동하는 것을 볼 수 있습니다.
00:01:34다른 앱에서도 똑같은 작업을 수행해 보면,
00:01:37이번에도 다른 빈 포트를 찾아내어 호스트 이름을 사용합니다.
00:01:40하지만 마지막에 붙는 이 포트 번호는 항상 동일하게 유지됩니다.
00:01:42사실 원한다면 이 번호도 변경할 수 있습니다.
00:01:44포트를 80으로 설정하면 콜론과 숫자 자체를 생략할 수 있습니다.
00:01:49sudo를 사용해 Portless 프록시를 80번 포트에서 시작하고,
00:01:53마찬가지로 sudo를 써서 Portless 프로세스를 실행하면,
00:01:55서브도메인과 .localhost만으로 접속할 수 있게 됩니다.
00:01:59게다가 80번 포트를 사용하면서 HTTPS 지원까지
00:02:03동시에 받을 수 있는 HTTPS 플래그도 제공합니다.
00:02:08하지만 Vite를 사용한다면 port 키에 포트 변수를 설정하고,
00:02:13host 역시 이 값으로 설정해야 합니다.
00:02:15그 이유는 영상 뒷부분에서 자세히 설명해 드릴게요.
00:02:17이외에도 Portless에는 다양한 옵션이 있습니다.
00:02:21디버깅을 위해 프록시를 포그라운드에서 실행하거나,
00:02:25디버깅이나 비상용으로 프록시 없이 명령어를 실행할 수도 있습니다.
00:02:30그런데 왜 매번 랜덤 포트 번호를 사용하는 걸까요?
00:02:33그리고 프록시는 왜 필요한 걸까요?
00:02:35어떻게 작동하는지 알아보겠습니다.
00:02:36두 가지 과정을 살펴보겠습니다.
00:02:39터미널에서 메인 Portless 명령어를 실행할 때 어떤 일이 일어나는지,
00:02:42그리고 브라우저가 Portless URL에 접속할 때 어떤 일이 생기는지 말이죠.
00:02:46여기서 'portless myapp bun start'라는
00:02:49명령어를 실행한다고 가정해 봅시다.
00:02:52먼저 호스트 이름과 실행할 명령어를 추출합니다.
00:02:56그다음 프록시가 실행 중인지 확인합니다.
00:02:59실행 중이 아니라면 프록시를 시작하죠.
00:03:01주의할 점은 프록시가 실행될 포트를 직접 설정할 수 있다는 것입니다.
00:03:06기본값은 1355입니다.
00:03:08만약 포트 번호를 1024 미만으로 설정하면,
00:03:12실행하기 전에 확인을 요청하게 됩니다.
00:03:15그 이상의 번호라면 자동으로 실행됩니다.
00:03:19다음으로 4000번에서 4999번 사이의 빈 포트를 찾습니다.
00:03:25검색 속도를 높이기 위해 포트를 무작위로 찾습니다.
00:03:29순차적으로 찾게 되면 실행 중인 프로세스가 많을 경우,
00:03:33포트를 하나씩 대조하느라 시간이 오래 걸릴 수 있기 때문입니다.
00:03:35포트를 찾으면 해당 상세 정보를 root store JSON 파일에 기록합니다.
00:03:40그런 다음 해당 포트에서 명령어를 실행하고 PORT 환경 변수에 해당 번호를 추가합니다.
00:03:47대부분의 자바스크립트 애플리케이션은 이 변수에 접근할 수 있죠.
00:03:50이제 이 부분에 집중해 보겠습니다.
00:03:52브라우저에서 portless URL(예: myapp)에 접속할 때,
00:03:56기본 포트를 사용한다면 1355번 포트가 됩니다.
00:04:00그다음 DNS 확인을 거쳐 프록시에 TCP 연결을 생성합니다.
00:04:06프록시는 호스트 이름(myapp)을 추출하고,
00:04:09그 이름을 사용해 root JSON 파일에서 해당 앱의 포트를 조회합니다.
00:04:15정확한 포트 번호를 확인하면 실제 앱으로 요청을 전달하고,
00:04:21앱은 프록시로 응답을 보낸 뒤 다시 브라우저로 전달됩니다.
00:04:26브라우저는 처음에 요청했던 1355번 포트로부터
00:04:30응답이 오기를 기다리기 때문입니다.
00:04:35이 방식은 웹소켓에서도 마법처럼 잘 작동합니다.
00:04:38주말 프로젝트 결과물 치고는 매우 인상적이죠.
00:04:40하지만 Next.js가 아닌 Vite 같은 프로젝트에서 Portless를 쓰면 문제가 생길 수 있습니다.
00:04:47우선, 고정된 번호가 아닌 PORT 변수에 할당된 랜덤 포트를 사용하기 때문에,
00:04:52앱이 해당 포트에서 실행될 수 있도록 설정해야
00:04:56프록시가 트래픽을 어디로 보낼지 알 수 있습니다.
00:05:00Vite나 유사한 번들러의 경우, 이 host 키와 값을 추가해야 할 수도 있습니다.
00:05:06알 수 없는 출처의 요청을 거부하는 보안 검사를 비활성화하기 위해서죠.
00:05:10허용된 호스트 키를 여러 값으로 시도해 봤지만 잘 안 되더군요.
00:05:16이 해결책이 다소 극단적으로 보일 수도 있지만,
00:05:19로컬에서 실행하는 것이라면 크게 걱정할 필요는 없습니다.
00:05:22Vercel Labs의 다른 프로젝트들처럼 Portless도 계속 업데이트될 예정이므로,
00:05:26이런 문제점들은 향후에 개선될 것입니다.
00:05:30윈도우 지원 같은 기능들도 포함해서 말이죠.
00:05:32Vercel Labs 이야기가 나와서 말인데, Agent Browser를 아직 안 써보셨다면 꼭 해보세요.
00:05:36에이전트가 브라우저와 상호작용할 수 있는 가장 좋은 방법입니다.
00:05:39다음 영상에서 자세히 알아보실 수 있습니다.

Key Takeaway

Portless는 복잡한 로컬 개발 환경에서 발생하는 포트 충돌 문제를 해결하고, 가독성 높은 호스트 이름을 통해 서비스 접근성을 극대화하는 혁신적인 프록시 도구입니다.

Highlights

Vercel Labs에서 개발한 Portless는 localhost의 포트 번호를 고정된 호스트 이름으로 변환해주는 CLI 도구입니다.

포트 충돌 문제를 해결하여 개발자나 AI 에이전트가 항상 일관된 주소로 로컬 서비스에 접속할 수 있게 합니다.

기본적으로 1355번 포트를 사용하지만, 설정을 통해 80번 포트나 HTTPS 지원까지 가능하게 구성할 수 있습니다.

내부적으로는 4000~4999번 사이의 랜덤 포트를 앱에 할당하고 이를 프록시를 통해 호스트 이름과 매핑하는 방식을 취합니다.

Vite와 같은 도구 사용 시 보안 검사로 인한 접속 문제를 해결하기 위해 특정 호스트 설정이 필요할 수 있습니다.

Timeline

Portless 소개 및 도입 배경

Vercel Labs 팀이 제작한 새로운 CLI 도구인 Portless의 기본 개념과 목적을 소개합니다. 기존의 localhost 환경에서 빈번하게 발생하는 포트 충돌 문제와 주소가 이미 사용 중이라는 오류를 어떻게 해결하는지 설명합니다. 특히 AI 에이전트가 로컬 환경에서 작업을 수행할 때 고정된 위치를 찾지 못하는 문제를 방지하는 데 효과적입니다. 개발자가 포트 번호를 일일이 기억하거나 관리할 필요 없이 고정된 이름을 사용할 수 있다는 점이 핵심입니다. 이 섹션은 Portless가 왜 현대적인 개발 워크플로우에 필요한지를 강조하며 시작합니다.

Portless 설치 및 기본 사용법

Portless를 실제로 설치하고 명령어를 통해 로컬 프로젝트를 실행하는 구체적인 방법을 시연합니다. 사용자는 'portless' 명령어 뒤에 원하는 호스트 이름과 실행할 스크립트를 입력하여 간편하게 앱을 노출할 수 있습니다. 시스템은 4000번대 범위에서 비어 있는 랜덤 포트를 자동으로 찾아 할당하며, 이는 다른 프로그램과의 충돌 가능성을 최소화합니다. 결과적으로 앱은 '.localhost:1355'와 같은 형식을 통해 지정한 이름으로 접속 가능해집니다. 여러 프로젝트를 동시에 실행하더라도 각각 독립적인 호스트 이름을 가질 수 있다는 장점을 보여줍니다.

고급 설정: 80번 포트와 HTTPS 지원

기본 포트인 1355번 외에 포트 번호 자체를 생략할 수 있는 고급 설정 방법을 다룹니다. sudo 권한을 사용하여 Portless 프록시를 80번 포트에서 실행하면 콜론과 숫자 없이 서브도메인만으로 접속이 가능해집니다. 또한 보안이 필요한 환경을 위해 HTTPS 플래그를 제공하여 로컬에서도 안전한 연결을 테스트할 수 있도록 지원합니다. 디버깅을 위한 포그라운드 실행 옵션이나 프록시 없이 명령어를 실행하는 예외 케이스 처리 방법도 함께 언급됩니다. 이 과정은 로컬 개발 환경을 실제 프로덕션 도메인과 유사하게 구성하려는 사용자에게 매우 유용합니다.

내부 작동 원리와 기술적 메커니즘

Portless가 내부적으로 어떻게 명령어를 처리하고 트래픽을 전달하는지 상세한 기술 구조를 설명합니다. 명령어 실행 시 호스트 이름을 추출하고 root store JSON 파일에 할당된 랜덤 포트 정보를 기록하는 과정을 거칩니다. 브라우저가 URL에 접속하면 프록시가 이 JSON 파일을 조회하여 실제 앱이 실행 중인 포트로 요청을 전달하는 방식입니다. 이러한 구조 덕분에 HTTP 요청뿐만 아니라 웹소켓 연결도 매끄럽게 작동하는 마법 같은 경험을 제공합니다. 검색 속도를 높이기 위해 포트를 무작위로 탐색하는 세부적인 최적화 기법도 설명에 포함되어 있습니다.

주의 사항 및 향후 발전 방향

Vite와 같은 특정 번들러를 사용할 때 발생할 수 있는 호스트 보안 검사 문제와 그에 따른 해결책을 제시합니다. 앱이 랜덤 포트를 인식하도록 환경 변수를 설정하고, 외부 요청 거부 설정을 조정해야 하는 구체적인 팁을 공유합니다. 현재는 초기 단계이지만 향후 윈도우 OS 지원 확대와 지속적인 기능 업데이트가 예정되어 있음을 밝힙니다. Vercel Labs의 다른 프로젝트인 Agent Browser와의 연계 가능성도 언급하며 영상이 마무리됩니다. 개발자는 이러한 제약 사항을 이해함으로써 자신의 프로젝트에 Portless를 더 효과적으로 도입할 수 있습니다.

Community Posts

View all posts