게임 웹서버 만들기

프로젝트 생성, Postman으로 테스트하기 - 게임 웹서버 만들기 2

소수결게임 2025. 11. 30. 16:49

오늘은 Visual Studio를 통해 프로젝트를 생성하고

도커 내에서 프로젝트를 실행 후

Postman으로 테스트를 해보도록 하겠습니다.

 


[Visual Studio Installer에서 워크로드 확인]

 

Visual Studio Installer를 실행한 후

ASP.NET 및 웹개발  워크로드가 설치되어 있는지 확인합니다.

 

Visual Studio Installer를 실행하고

해당 Visual Studio버전에서 수정을 클릭합니다.

 

 

항목 중 ASP.NET 및 웹개발이 체크되어있지 않을 경우 설치해주세요.

 


[프로젝트 생성]

Visual Studio를 실행시켜 새 프로젝트 만들기를 클릭합니다.

 

Restful Api로 만들 예정이므로, ASP.NET Core 웹 API템플릿을 선택합니다.

 - 운영 툴(UI포함)과 함께 구성할 예정이라면 다른 템플릿을 선택하셔도 됩니다.

 - 이 포스트는 Restful API 중심 구성을 기준으로 작성됩니다.

 

프로젝트 위치는 Docker 마운트되는 로컬 폴더로 하였습니다.

 

 

● 프레임워크 : 10버전

 - 최신지원이며, 장기 지원이 가능하므로 선택하였습니다.

● 컨테이너 지원 사용

 - 체크 시 docker용 DockerFile과 설정이 자동 생성됩니다.

 - 하지만 이 포스터에서는 직접 작성한 docker compose.yml로 환경을 구성할 예정이므로 체크를 해제하였습니다.

● OpenApi지원 사용

 - Swagger가 포함됩니다.

 - API메서드를 자동으로 문서화 해주므로 유용합니다.

● 최상위문 사용 안함

 - Main함수를 사용하지 않습니다.

● 컨트롤러 사용

 - MVC아키텍쳐로 API를 구성합니다.

 - ApiController 및 라우팅 속성이 포함된 Controller파일이 자동으로 생성됩니다.

 

 

프로젝트가 생성되었습니다.

 


[DEV용 HTTPS 인증서 발급]

개발(DEV)환경에서는 HTTP으로 테스트가 가능하지만,

실제 운영 환경에서는 HTTPS 인증서를 발급받아야 하므로

DEV환경에서도 HTTPS 인증서를 발급받아 적용해보겠습니다.

 

 

우선 윈도우에서 PowerShell을 실행한 후

개발 인증서를 생성하고 시스템에 신뢰하도록 등록합니다.

dotnet dev-certs https --trust

이 명령은 로컬 개발용 HTTPS 인증서를 생성하고, Windows에 신뢰할 수 있는 인증서로 등록합니다.

 

 

이를 Docker에서 사용해야 하므로  인증서를 따로 내보냅니다.

dotnet dev-certs https -ep $env:USERPROFILE\.aspnet\https\aspnetcert.pfx -p [패스워드]

 

해당 위치에 파일이 생성되었습니다.

 

docker-compose.yml파일에 인증서를 볼륨으로 연결해줍니다.

:ro : 읽기전용으로 마운트

 


[PORT 설정]

Windows 환경에서 Docker 내부의 API를 테스트하기위해 PORT를 설정해줍니다.

 

우선 소스코드 내에서의 설정을 진행합니다.

launchSettings.json 파일에서 기본적인 포트를 설정하므로 이 곳을 수정해줍니다.

저의 경우는 아래의 위치에 있습니다.

D:\Projects\portfolio\WebServerPortfolio\PPProject\PPProject\Properties\launchSettings.json

 

●  IP주소를 0.0.0.0으로 변경합니다.

 - localhost의 경우 Docker 외부에서 접속할 수 없습니다.

●  포트를 변경합니다.

 - 저는 기본포트인 HTTP(80) HTTPS(443)으로 변경하였습니다.

launchsettings.json파일
{
  "$schema": "https://json.schemastore.org/launchsettings.json",
  "profiles": {
    "http": {
      "applicationUrl": "http://0.0.0.0:80"
    },
    "https": {
      "applicationUrl": "https://0.0.0.0:443;http://0.0.0.0:80",
    }
  }
}

 

 

 

 

Docker는 컨테이너 내부 포트와 외부 포트가 직접 연결되는것이 아니므로 포트 바인딩이 필요합니다.

 

Windows에서 이미 사용중인 기본포트(80, 443)과 충돌하지 않도록 다음과 같이 매핑하였습니다.

  WINDOWS DOCKER
HTTP 80 5000
HTTPS 443 5001

 

dopcker-compose.yml 파일
ports:
      - "5000:80"
      - "5001:443"

 

 


[Docker, Dotnet 실행]

docker compose up --build

docker-compose.yml을 기준으로 컨테이너를 빌드하고 실행합니다.

--build : Dockerfile이나 설정이 변경되었을 경우 최신상태로 다시 빌드함

 

docker exec -it [컨테이너명] bash

 

 

컨테이너가 실행 중인 상태에서, 내부에 접속하려면 위와 같은 명령어를 사용합니다.

 

프로젝트를 실행시키기 위하여 docker내부의 .csproj 파일이 있는 프로젝트 루트 디렉터리로 이동합니다.

 

저의 경우 다음 경로입니다.

/projects/WebServerPortfolio/PPProject/PPProject

 

 

dotnet run

 

해당 디렉토리로 이동한 후, 위 명령어로 프로젝트를 실행합니다.

 

 

 


[Curl을 이용한 테스트]

Curl을 이용하여 간단한 테스틀을 진행하겠습니다.

 

프로젝트를 생성하면 기본 API로 GetWeatherForecast를 제공합니다.

 

GET / WeatherForecast

 

 

PowerShell을 실행시킨 후,

 curl http://localhost:5000/weatherforecast

으로 API에 요청을 합니다.

 

요청이 성공하면, 다음과 같이 JSON형태의 응답을 확인할 수 있습니다.

 


[PostMan을 이용한 테스트]

PostMan을 사용하면 Rest API를 GUI환경에서 쉽게 테스트를 할 수 있습니다.

 

아래 링크에 접속하여 Postman을 다운로드 합니다.

https://www.postman.com/downloads/

 

 

본인의 Windows환경에 맞는 설치 파일을 선택하여 다운로드 하고, 설치를 진행합니다.

 

 

설치가 완료되었습니다.

 

 

 

이번에는 기본 APi인 

GET / WeatherForecast

를 테스트 해보겠습니다.

 

Postman에서 요청타입을 GET으로 설정합니다.

주소창에 아래의 URL을 입력합니다.

http://localhost:5000/WeatherForecast

[SEND] 버튼을 클릭합니다.

 

 

 

JSON형태의 응답이 도착한 것을 확인할 수 있습니다.

 


 

이하 코드 전문

 

-.docker-compose.yml

services:
  app:
    container_name: pp-dotnet
    image: mcr.microsoft.com/dotnet/sdk:10.0
    volumes:
      - D:/Projects/portfolio:/projects 
      - ${USERPROFILE}/.aspnet/https:/https:ro
    working_dir:  /projects
    networks:
      - pp-net
    stdin_open: true
    tty: true   
    command: bash 
    ports:
      - "5000:80"
      - "5001:443"
    environment:
      - ASPNETCORE_Kestrel__Certificates__Default__Password=qwer1234
      - ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetcert.pfx

  db:
    container_name: pp-mysql
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: qwer1234
      MYSQL_DATABASE: ppdb
    ports:
      - "3306:3306"
    networks:
      - pp-net

  redis:
    container_name: pp-redis
    image: redis:alpine
    ports:
      - "6379:6379"
    networks:
      - pp-net

networks:
  pp-net:

 

-.launchSettings.json

 

{
  "$schema": "https://json.schemastore.org/launchsettings.json",
  "profiles": {
    "http": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "launchBrowser": false,
      "applicationUrl": "http://0.0.0.0:80",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "https": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "launchBrowser": false,
      "applicationUrl": "https://0.0.0.0:443;http://0.0.0.0:80",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}