Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

(시리즈 글이 3개 있습니다.)
개발 환경 구성: 703. Visual Studio - launchSettings.json을 이용한 HTTP/HTTPS 포트 바인딩
; https://www.sysnet.pe.kr/2/0/13539

VS.NET IDE: 188. launchSettings.json의 useSSL 옵션
; https://www.sysnet.pe.kr/2/0/13541

닷넷: 2212. ASP.NET Core - 우선순위에 따른 HTTP/HTTPS 호스트:포트 바인딩 방법
; https://www.sysnet.pe.kr/2/0/13545




Visual Studio - launchSettings.json을 이용한 HTTP/HTTPS 포트 바인딩

Visual Studio에서 웹 애플리케이션을 하나 생성하면 기본적으로 "Properties" 디렉터리 하위에 다음과 같은 내용을 담은 launchSettings.json 파일이 생성됩니다.

{
  "$schema": "http://json.schemastore.org/launchsettings.json",
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:52046",
      "sslPort": 44308
    }
  },
  "profiles": {
    "http": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "launchBrowser": true,
      "applicationUrl": "http://localhost:5153",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "https": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "launchBrowser": true,
      "applicationUrl": "https://localhost:5025;http://localhost:5024",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}

위의 파일에는 "profiles" 하위에 "http", "https", "IIS Express" 3개의 항목이 보이는데요, 비주얼 스튜디오는 이 내용을 읽어 툴바에 다음과 같이 사용자가 선택할 수 있도록 합니다.

launchsettings_json_1.png

위의 경우에는 "https" 항목이 선택돼 있기 때문에 이 상태에서 F5 키를 눌러 디버깅을 진입하면 HTTP 5024, HTTPS 5025 포트로 대기하는 웹 애플리케이션이 뜨게 됩니다.

게다가 소스 코드에 UseHttpsRedirection 호출이 있다면,

// Program.cs

app.UseHttpsRedirection();

HTTP 5024로 방문해도 금방 브라우저는 HTTPS 5025로 재접속합니다.




비주얼 스튜디오의 이 같은 동작을 "dotnet run"도 그대로 모방합니다. 위에서 예제로 생성한 프로젝트의 경로가
"c:\temp\WebApplication1\WebApplication3"라고 가정하면, 즉 WebApplication3.csproj가 있는 디렉터리에서 dotnet run을 하게 되면,

C:\temp\WebApplication1\WebApplication3> dotnet run
Building...
info: Microsoft.Hosting.Lifetime[14]
      Now listening on: http://localhost:5153
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
      Content root path: C:\temp\WebApplication1\WebApplication3

기본적으로는 launchSettings.json의 "http" 프로파일을 선택해서 실행하기 때문에 해당 설정의 applicationUrl에 따라, 저렇게 HTTP 5153 포트로 바인딩을 하게 됩니다. 물론, 이 프로파일을 바꿔 실행하는 것도 가능합니다. 예를 들어, https로 바꾸고 싶다면 -lp 옵션을 줘 실행하면 됩니다.

C:\temp\WebApplication1\WebApplication3> dotnet run -lp https
Building...
info: Microsoft.Hosting.Lifetime[14]
      Now listening on: https://localhost:5025
info: Microsoft.Hosting.Lifetime[14]
      Now listening on: http://localhost:5024
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
      Content root path: C:\temp\WebApplication1\WebApplication3

위의 결과도 역시 launchSettings.json의 "https"에 설정한 "applicationUrl" 옵션이 적용된 결과입니다.




"dotnet run"에는 "launchSettings.json" 파일을 무시하는 옵션도 있습니다. 이 옵션을 사용해 실행하면,

C:\temp\WebApplication1\WebApplication3> dotnet run --no-launch-profile

info: Microsoft.Hosting.Lifetime[14]
      Now listening on: http://localhost:5000
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Production
info: Microsoft.Hosting.Lifetime[0]
      Content root path: C:\temp\WebApplication1\WebApplication3

단일하게 HTTP 5000으로 대기하는 바인딩만 열게 됩니다. 그러니까, 아무런 프로파일 세팅도 적용되지 않았을 때의 Kestrel 기본 설정이 HTTP 5000으로 대기하도록 코딩돼 있는 것입니다. 바로 이것이, 개발할 때와 배포했을 때의 포트가 달라지는 이유입니다.




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 1/27/2024]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 76  77  78  79  80  81  82  83  84  [85]  86  87  88  89  90  ...
NoWriterDateCnt.TitleFile(s)
11806정성태1/29/201919463디버깅 기술: 122. windbg - 덤프 파일로부터 PID와 환경 변수 등의 정보를 구하는 방법
11805정성태1/28/201921519.NET Framework: 806. C# - int []와 object []의 차이로 이해하는 제네릭의 필요성 [4]파일 다운로드1
11804정성태1/24/201919404Windows: 155. diskpart - remove letter 이후 재부팅 시 다시 드라이브 문자가 할당되는 경우
11803정성태1/10/201918304디버깅 기술: 121. windbg - 닷넷 Finalizer 스레드가 멈춰있는 현상
11802정성태1/7/201920040.NET Framework: 805. 두 개의 윈도우를 각각 실행하는 방법(Windows Forms, WPF)파일 다운로드1
11801정성태1/1/201921403개발 환경 구성: 427. Netsh의 네트워크 모니터링 기능 [3]
11800정성태12/28/201820444오류 유형: 509. WCF 호출 오류 메시지 - System.ServiceModel.CommunicationException: Internal Server Error
11799정성태12/19/201822148.NET Framework: 804. WPF(또는 WinForm)에서 UWP UI 구성 요소 사용하는 방법 [3]파일 다운로드1
11798정성태12/19/201821004개발 환경 구성: 426. vcpkg - "Building vcpkg.exe failed. Please ensure you have installed Visual Studio with the Desktop C++ workload and the Windows SDK for Desktop C++"
11797정성태12/19/201817021개발 환경 구성: 425. vcpkg - CMake Error: Problem with archive_write_header(): Can't create '' 빌드 오류
11796정성태12/19/201817221개발 환경 구성: 424. vcpkg - "File does not have expected hash" 오류를 무시하는 방법
11795정성태12/19/201820553Windows: 154. PowerShell - Zone 별로 DNS 레코드 유형 정보 조회 [1]
11794정성태12/16/201816636오류 유형: 508. Get-AzureWebsite : Request to a downlevel service failed.
11793정성태12/16/201819221개발 환경 구성: 423. NuGet 패키지 제작 - Native와 Managed DLL을 분리하는 방법 [1]
11792정성태12/11/201819004Graphics: 34. .NET으로 구현하는 OpenGL (11) - Per-Pixel Lighting파일 다운로드1
11791정성태12/11/201819034VS.NET IDE: 130. C/C++ 프로젝트의 시작 프로그램으로 .NET Core EXE를 지정하는 경우 닷넷 디버깅이 안 되는 문제 [1]
11790정성태12/11/201817535오류 유형: 507. Could not save daemon configuration to C:\ProgramData\Docker\config\daemon.json: Access to the path 'C:\ProgramData\Docker\config' is denied.
11789정성태12/10/201831127Windows: 153. C# - USB 장치의 연결 및 해제 알림을 위한 WM_DEVICECHANGE 메시지 처리 [2]파일 다운로드2
11788정성태12/4/201817394오류 유형: 506. SqlClient - Value was either too large or too small for an Int32.Couldn't store <2151292191> in ... Column
11787정성태11/29/201821534Graphics: 33. .NET으로 구현하는 OpenGL (9), (10) - OBJ File Format, Loading 3D Models파일 다운로드1
11786정성태11/29/201818465오류 유형: 505. OpenGL.NET 예제 실행 시 "Managed Debugging Assistant 'CallbackOnCollectedDelegate'" 예외 발생
11785정성태11/21/201820846디버깅 기술: 120. windbg 분석 사례 - ODP.NET 사용 시 Finalizer에서 System.AccessViolationException 예외 발생으로 인한 비정상 종료
11784정성태11/18/201820072Graphics: 32. .NET으로 구현하는 OpenGL (7), (8) - Matrices and Uniform Variables, Model, View & Projection Matrices파일 다운로드1
11783정성태11/18/201818208오류 유형: 504. 윈도우 환경에서 docker가 설치된 컴퓨터 간의 ping IP 주소 풀이 오류
11782정성태11/18/201817380Windows: 152. 윈도우 10에서 사라진 "Adapters and Bindings" 네트워크 우선순위 조정 기능 - 두 번째 이야기
11781정성태11/17/201820732개발 환경 구성: 422. SFML.NET 라이브러리 설정 방법 [1]파일 다운로드1
... 76  77  78  79  80  81  82  83  84  [85]  86  87  88  89  90  ...