.NET CLI로 ASP.NET Core MVC Controller와 View 생성하기
ASP.NET Core MVC 프로젝트에서는 Visual Studio의 Add Controller, Add View 기능을 사용하지 않고도 .NET CLI만으로 Controller와 View 파일을 생성할 수 있습니다.
이때 사용하는 대표적인 도구가 dotnet aspnet-codegenerator입니다.
dotnet aspnet-codegenerator는 ASP.NET Core의 scaffolding engine을 실행하는 명령줄 도구입니다. Controller, View, Razor Page 등을 터미널에서 생성할 때 사용할 수 있습니다. Visual Studio Code나 명령 프롬프트 환경에서 ASP.NET Core MVC 관련 파일을 빠르게 만들 때 유용합니다.
예제 목표
이번 글에서는 다음 두 파일을 .NET CLI 명령으로 생성해 보겠습니다.
Controllers\VendorsController.cs
Views\Vendors\Index.cshtml
예제 프로젝트 경로는 다음과 같습니다. 제 강의 소스인 DotNetNote 프로젝트를 기준으로 진행합니다.
C:\dotnet10\DotNetNote\DotNetNote\DotNetNote
1. 프로젝트 폴더로 이동하기
먼저 명령 프롬프트 또는 터미널을 열고 프로젝트 폴더로 이동합니다.
본인이 작업하고자 하는 ASP.NET Core MVC 프로젝트의 루트 폴더로 이동하면 됩니다.
cd /d C:\dotnet10\DotNetNote\DotNetNote\DotNetNote
여기서 /d 옵션은 현재 드라이브가 다른 경우에도 지정한 드라이브와 경로로 함께 이동하기 위해 사용합니다.
예를 들어 현재 위치가 C:\Windows\System32이거나 다른 드라이브에 있더라도 /d 옵션을 사용하면 한 번에 원하는 프로젝트 경로로 이동할 수 있습니다.
현재 폴더가 올바른지 확인하려면 다음 명령을 실행합니다.
cd
다음과 같이 프로젝트 경로가 출력되면 정상입니다.
C:\dotnet10\DotNetNote\DotNetNote\DotNetNote
또한 현재 위치에 .csproj 파일이 있는지도 확인합니다.
dir *.csproj
ASP.NET Core MVC 프로젝트의 루트 폴더에서 명령을 실행해야 Controller와 View가 올바른 위치에 생성됩니다.
2. ASP.NET Core 코드 생성기 설치하기
dotnet aspnet-codegenerator 명령을 사용하려면 먼저 전역 도구를 설치해야 합니다.
dotnet tool install -g dotnet-aspnet-codegenerator
이미 설치되어 있다면 다음 명령으로 업데이트할 수 있습니다.
dotnet tool update -g dotnet-aspnet-codegenerator
그리고 현재 프로젝트에는 scaffolding에 필요한 패키지를 추가합니다.
dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design
이 패키지는 ASP.NET Core MVC Controller와 View를 생성할 때 필요한 design-time code generation 기능을 제공합니다.
3. VendorsController 생성하기
다음 명령으로 Controllers 폴더 아래에 VendorsController.cs 파일을 생성합니다.
dotnet aspnet-codegenerator controller -name VendorsController -outDir Controllers
생성 결과는 다음과 같습니다.
Controllers\VendorsController.cs
생성된 컨트롤러는 보통 다음과 비슷한 형태입니다.
using Microsoft.AspNetCore.Mvc;
namespace DotNetNote.Controllers
{
public class VendorsController : Controller
{
public IActionResult Index()
{
return View();
}
}
}
만약 namespace가 현재 프로젝트 구조와 다르게 생성되었다면 기존 Controller들의 namespace에 맞게 수정하면 됩니다.
예를 들어 프로젝트의 기존 Controller namespace가 DotNetNote.Controllers라면 위와 같이 맞추면 됩니다.
4. Index.cshtml View 생성하기
Controller 생성 후 Index.cshtml View 파일도 생성합니다.
dotnet aspnet-codegenerator view Index Empty -outDir Views\Vendors
생성 결과는 다음과 같습니다.
Views\Vendors\Index.cshtml
생성된 View는 비어 있거나 최소 구조만 포함할 수 있습니다.
필요하다면 다음과 같이 간단히 수정합니다.
@{
ViewData["Title"] = "Vendors";
}
<h1>Vendors</h1>
<p>Vendor list page.</p>
이제 VendorsController의 Index 액션은 기본 MVC 규칙에 따라 Views\Vendors\Index.cshtml 파일을 찾아 화면에 표시합니다.
5. 전체 명령 모음
처음부터 한 번에 정리하면 다음과 같습니다.
cd /d C:\dotnet10\DotNetNote\DotNetNote\DotNetNote
dotnet tool install -g dotnet-aspnet-codegenerator
dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design
dotnet aspnet-codegenerator controller -name VendorsController -outDir Controllers
dotnet aspnet-codegenerator view Index Empty -outDir Views\Vendors
이미 dotnet-aspnet-codegenerator가 설치되어 있다면 다음 명령은 생략해도 됩니다.
dotnet tool install -g dotnet-aspnet-codegenerator
설치된 도구를 최신 버전으로 업데이트하려면 다음 명령을 사용합니다.
dotnet tool update -g dotnet-aspnet-codegenerator
6. 실행 확인하기
파일 생성이 끝났다면 프로젝트를 실행합니다.
dotnet run
애플리케이션이 실행되면 브라우저에서 다음 URL을 확인합니다.
https://localhost:{port}/Vendors
또는 다음 주소로도 접근할 수 있습니다.
https://localhost:{port}/Vendors/Index
여기서 {port} 부분은 dotnet run 실행 시 출력되는 실제 포트 번호로 바꾸면 됩니다.
7. 자주 발생하는 문제
dotnet aspnet-codegenerator 명령을 찾을 수 없는 경우
전역 도구가 설치되지 않았거나, 설치 후 터미널이 PATH를 아직 반영하지 못한 경우일 수 있습니다.
다음 명령으로 설치 여부를 확인합니다.
dotnet tool list -g
목록에 dotnet-aspnet-codegenerator가 없다면 다시 설치합니다.
dotnet tool install -g dotnet-aspnet-codegenerator
설치 후에도 명령이 인식되지 않으면 명령 프롬프트나 터미널을 닫았다가 다시 열어 실행합니다.
.csproj 파일이 없다는 오류가 나는 경우
현재 위치가 프로젝트 루트가 아닐 가능성이 큽니다.
다음 명령으로 현재 위치를 확인합니다.
cd
그리고 .csproj 파일이 있는지 확인합니다.
dir *.csproj
.csproj 파일이 있는 폴더로 이동한 뒤 다시 명령을 실행해야 합니다.
View는 생성되었지만 /Vendors 접속 시 오류가 나는 경우
VendorsController에 Index 액션이 있는지 확인합니다.
public IActionResult Index()
{
return View();
}
그리고 View 파일이 다음 경로에 있는지도 확인합니다.
Views\Vendors\Index.cshtml
ASP.NET Core MVC는 기본 규칙에 따라 VendorsController.Index() 액션에서 Views\Vendors\Index.cshtml 파일을 찾습니다.
8. CRUD 전체를 생성하고 싶을 때
단순히 Controller와 View 하나만 만드는 것이 아니라 Entity Framework Core 모델 기반 CRUD 화면까지 생성하고 싶다면 모델과 DbContext를 지정합니다.
예시는 다음과 같습니다.
dotnet aspnet-codegenerator controller ^
-name VendorsController ^
-m Vendor ^
-dc ApplicationDbContext ^
-outDir Controllers ^
--useDefaultLayout ^
--referenceScriptLibraries
위 명령은 Vendor 모델과 ApplicationDbContext를 기반으로 Controller와 CRUD View를 생성합니다.
실제 프로젝트에서는 Vendor, ApplicationDbContext 이름을 본인의 프로젝트에 있는 모델명과 DbContext명에 맞게 바꾸어야 합니다.
예를 들어 DbContext 이름이 DotNetNoteContext라면 -dc DotNetNoteContext처럼 지정하면 됩니다.
마무리
간단한 MVC Controller와 View를 만들 때는 다음 두 명령을 기억하면 됩니다.
dotnet aspnet-codegenerator controller -name VendorsController -outDir Controllers
dotnet aspnet-codegenerator view Index Empty -outDir Views\Vendors
이 방식은 Visual Studio UI를 사용하지 않고도 터미널에서 ASP.NET Core MVC의 기본 Controller와 View 파일을 빠르게 생성할 수 있어, 반복적인 페이지 생성 작업을 자동화할 때 유용합니다.
다만 반드시 이 명령을 사용해야 하는 것은 아닙니다. 참고용 명령으로 알아두면 좋고, 상황에 따라 Visual Studio 또는 Visual Studio Code에서 직접 Controller와 View 파일을 만들어도 됩니다.
저도 웬만하면 Visual Studio 또는 Visual Studio Code에서 바로 컨트롤러와 뷰 페이지를 만드는 편입니다. 하지만 강의나 문서화, 반복 작업 자동화가 필요할 때는 이런 CLI 방식도 꽤 유용합니다.
글 읽어주셔서 감사합니다.