오늘은 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"
}
}
}
}
'게임 웹서버 만들기' 카테고리의 다른 글
| 게스트 로그인, Dapper, IDGen, 서비스팩토리 - 게임 웹서버 만들기 6 (0) | 2025.12.07 |
|---|---|
| MySql 연결하기 - 게임 웹서버 만들기 5 (0) | 2025.12.07 |
| 패킷 파라미터 유효성 검증 추가 - 게임 웹서버 만들기 4 (0) | 2025.12.03 |
| Api 응답 양식 결정 - 게임 웹서버 만들기 3 (0) | 2025.12.02 |
| Docker세팅하기 - 게임 웹서버 만들기 1 (0) | 2025.11.29 |