개요
포트 바인딩 원칙은 애플리케이션이 외부 요청을 받을 수 있도록 스스로 네트워크 포트를 열고, 그 포트를 통해 서비스를 제공해야 한다는 뜻입니다. 실제 운영에서는 이 포트 앞에 IIS, Nginx, 로드밸런서, 리버스 프록시가 놓일 수 있습니다.
HandStack의 ack는 기본적으로 지정된 포트에서 ASP.NET Core 호스트로 실행됩니다. 외부 사용자는 이 포트에 직접 접근할 수도 있고, IIS나 프록시를 통해 간접 접근할 수도 있습니다.
HandStack 포트 구성
HandStack 포트 구성에서 확인할 항목은 다음과 같습니다.
ack가 바인딩하는 내부 포트- IIS 또는 프록시가 외부에 공개하는 포트
- SSL 종료 위치
X-Forwarded-Host,X-Forwarded-For,X-Forwarded-Proto전달 여부- 방화벽에서 허용할 포트
- 여러 HandStack 인스턴스를 함께 운영할 때의 포트 충돌
외부 주소와 내부 포트가 다를 때는 프록시 헤더가 중요합니다. 애플리케이션이 원래 요청의 호스트, 프로토콜, 클라이언트 IP를 알아야 로그인, 리다이렉트, 로그, 접근 제어가 올바르게 동작합니다.
포트와 모듈
모듈은 보통 ack 프로세스 안에서 함께 제공되므로 모듈마다 별도 포트를 열 필요는 없습니다. 다만 보조 호스트나 외부 서비스, 개발용 도구는 별도 포트를 사용할 수 있습니다.
포트는 코드에 고정하지 말고 설정과 실행 인자로 관리합니다.
ack --port=<내부 포트>
마치며
포트 바인딩은 단순히 "몇 번 포트를 쓰는가"의 문제가 아닙니다. HandStack 운영에서는 내부 실행 포트, 외부 공개 주소, SSL, 프록시 헤더, 방화벽이 하나의 연결 경로로 맞아야 합니다.