23장. ASP.NET Core 8.0 MVC 시작하기
본 강의에서는 다양한 플랫폼에서 작동하며, 오픈 소스로 제공되어 지속적으로 발전하고 있는 ASP.NET Core에 대해 다루게 됩니다. ASP.NET Core 8.0 개발 환경을 설정한 후, .NET Core 응용 프로그램의 생성과 실행 방법을 살펴보고, ASP.NET Core 8.0을 활용하여 보다 빠른 웹 응용 프로그램을 개발하는 과정을 진행해보겠습니다.
NOTE
본 강의는 박용준 강사의 ASP.NET Core 8.0 시작하기 강좌를 선수 학습으로 둡니다. 그래서 이번 장의 주요 내용은 중복된 내용일 수 있습니다.
23.1. ASP.NET Core 요약
23.1.1. ASP.NET의 구분
ASP.NET 4.8 on .NET Framework 4.8
- Windows 전용
- Web Forms, MVC 5, Web API 2.2, SignalR 지원
ASP.NET Core 8.0 on .NET 8.0
- 크로스 플랫폼 지원: Windows, Linux, macOS
- MVC, Blazor 등의 기술 지원
- 오픈 소스 프로젝트: ASP.NET GitHub 페이지
- Bower, NPM, Gulp, Grunt 등의 프론트엔드 리소스 관리
- SPA(Single Page Application) 개발 지원: Blazor, Angular, React, Vue
- Azure, Azure DevOps 통합 지원
- 빠른 성능
- Visual Studio, Visual Studio Code를 통한 개발 환경 지원
23.1.2. ASP.NET Core 설정
- .NET SDK 8.0 + Visual Studio Code
- Visual Studio 2022
23.1.3. ASP.NET Core 새 프로젝트 시작하기
- Visual Studio Code + .NET CLI 사용:
dotnet new console
,dotnet new mvc
명령어 실행 후dotnet run
으로 실행 - Visual Studio 사용: 파일 -> 새로 만들기 -> 프로젝트 -> Empty, MVC, Blazor(SPA) 중 선택
23.2. 크로스 플랫폼을 위한 ASP.NET Core
ASP.NET Core는 Windows, Linux, OS X에서 작동하는 크로스 플랫폼을 지원하는 최신 웹 응용 프로그램 개발을 위한 오픈 소스 웹 프레임워크입니다. 기존의 ASP.NET(웹폼)과는 달리 완전히 새로운 플랫폼으로 재구성되었습니다.
ASP.NET Core는 .NET 기반으로 실행되며, ASP.NET Core 8.0은 ASP.NET의 크로스 플랫폼 지원 버전으로, Classic ASP -> ASP.NET -> ASP.NET Core로 진화해온 최신 버전입니다.
기존에 배운 One ASP.NET(Web Forms, MVC, Web API) 즉, ASP.NET 4.X와는 다른, ASP.NET Core 8.0은 최신 웹 앱 개발을 위한 오픈 소스, 크로스 플랫폼 프레임워크입니다. 이를 통해 Windows, Linux, macOS에서 실행되는 웹 앱을 개발할 수 있으며, ASP.NET Core 8.0의 공식 문서를 통해 다양한 정보를 얻을 수 있습니다.
그림: 초기 버전의 ASP.NET Core 공식 문서 사이트
NOTE
처음 ASP.NET Core 1.0을 만들 당시에는 흔히 Docs로 불리는 설명서를 만들기 위한 또 다른 환경이 부족했습니다. 그래서 위 그림처럼 가장 초기 버전의 docs를 만들고 운영했습니다. 이것이 버전이 업데이트되어 docfx 이름의 새로운 설명서 제작을 위한 프레임워크가 만들어졌습니다. 현재는 docfx의 확장 버전을 사용하여 마이크로소프트의 모든 제품에 대한 설명서 사이트를 Microsoft Learn(이전 이름은 Microsoft Learn)이름으로 운영해 나가고 있습니다. 현재 보고 계시는 이 페이지도 VisualAcademy Docs 주제로, docfx의 기술을 사용하여 만들어나가고 있습니다.
23.2.1. ASP.NET Core 한 줄 정의
ASP.NET Core는 ASP.NET 이름으로 만들어진 오픈 소스이며 크로스 플랫폼을 지원하는 .NET을 사용하는 클라우드 기반 웹 응용 프로그램을 만들 수 있는 프레임워크입니다.
- ASP.NET Core 소개 및 다운로드
- ASP.NET Core 문서
- 샘플 및 소스 코드
23.2.2. ASP.NET Core 초간단 소개
- 현대적인 웹 응용 프로그램을 제작하기 위한 프레임워크
- 오픈소스: https://www.github.com/aspnet
- 크로스플랫폼
- Windows, Mac, Linux
23.3. ASP.NET Core 특징
ASP.NET Core의 특징은 다음과 같습니다.
- 오픈 소스 – 깃허브(GitHub)에 소스가 공개되어 있습니다. – https://github.com/aspnet/
- 크로스 플랫폼
- 윈도, 리눅스, OS X에서 실행됩니다.
- 최신 웹 기술 도입
- Bower, NPM, Gulp 등의 웹 커뮤니티 기술이 포함되었습니다.
- .NET Core에서의 Bower, Gulp, Grunt 기술은 현재는 많이 도태되었습니다.
- Blazor, Angular, React 등의 SPA 템플릿이 포함되었습니다.
- Vue는 초반(1.1)에 포함되었다가 커뮤니티로 이관되었습니다.
- Bower, NPM, Gulp 등의 웹 커뮤니티 기술이 포함되었습니다.
- 클라우드 친화적
- 애저(Azure)에 쉽게 배포할 수 있습니다.
- 빠름
- 모듈 단위로 필요한 기능만 사용가능하기에 실행 속도가 빠릅니다.
- 2016년 9월 26일 Microsoft Ignite 행사에서 Node.js보다 8배 빠르고 Go보다 3배 빠르다고 발표하였습니다.
- 2020년 벤치마크 테스트에서는 주요 웹 개발 기술중에서 넘사벽으로 가장 빨랐습니다.
- 모듈 단위로 필요한 기능만 사용가능하기에 실행 속도가 빠릅니다.
- 하나의 웹 스택(Web Stack)
- 하나의 웹 프로젝트에 MVC(UI)와 Web API가 통합되었습니다.
- 자체 개발 웹 서버 제공
- 윈도 환경에서 IIS 웹 서버 사용 및 셀프호스트 웹 서버를 기본으로 제공합니다.
- 모든 도구 사용 가능
- 반드시 Visual Studio를 사용할 필요 없이 원하는 에디터로 개발할 수 있습니다.
- 하지만, 학습자 입장에서는 일단은 Visual Studio 2022 우선 사용을 권장합니다.
- 크로스 플랫폼 환경에서는 Visual Studio Code와 .NET CLI를 사용하면 됩니다.
- 반드시 Visual Studio를 사용할 필요 없이 원하는 에디터로 개발할 수 있습니다.
- 의존성 주입(Dependency Injection) 기본 내장
- 의존성 주입 컨테이너(DI Container)를 기본으로 제공합니다. 이 부분은 어려운 주제이니 뒤에서 설명합니다.
23.4. 다시 살펴보는 ASP.NET 역사
ASP.NET의 역사를 다시 살펴보면 다음 리스트와 같습니다. 1996년 처음으로 ASP(클래식ASP)가 발표된 이후 28년이 지난 2023년 ASP.NET Core 8.0까지 마이크로소프트의 웹 개발 기술이 발전해왔습니다.
- 1996 - ASP
- 1998 - 박용준 강사는 이 때에 처음으로 Windows NT, ASP, SQL Server
- 2002 - ASP.NET
- 2008 - ASP.NET MVC
- 2010 - ASP.NET Web Pages
- 2012 - ASP.NET Web API, SignalR
- 2016 - ASP.NET Core 1.0
- 2016년 6월 27일
- 2017 - ASP.NET Core 2.0
- 2017년 8월 14일
- 2018 - ASP.NET Core 2.1
- 2019 – ASP.NET Core 6.0
- 2020 - .NET 5
23.4.1 닷넷 코어 버전
다음 경로를 통해서 닷넷코어의 버전 리스트를 볼 수 있습니다. https://dotnet.microsoft.com/download/dotnet-core
23.5. 통합된 프레임워크인 ASP.NET Core MVC
ASP.NET Core의 MVC는 기존 ASP.NET의 기술인 Web Pages, Web API, MVC가 하나의 프레임워크로 묶여서 관리되는 프레임워크입니다. 이전 버전에서는 MVC와 Web API가 서로 다른 클래스인 Controller와 ApiController를 상속 받아서 생성됩니다. ASP.NET Core의 MVC에서는 새롭게 작성된 Controller 클래스로부터 상속되어 MVC와 Web API가 하나의 클래스로 이루어질 수 있습니다. 내부적으로는 System.Web을 사용하지 않고 새롭게 구현된 ASP.NET Core 패키지를 사용해서 구현됩니다. 그림에서 보는 것처럼 Web Pages 기술로 시작된 Razor 뷰 엔진과 HTML Helpers 기술은 MVC로 그대로 들어왔고, MVC와 Web API로 나누어 함께 사용되던 기술도 역시 MVC로 통합되었기에 앞으로는 MVC만으로 표현하면 됩니다. 자세한 내용은 Visual Studio를 사용해서 ASP.NET Core 6.0 프로젝트를 만들고 내용을 추가한 후 실행해보는 실습을 통해서 계속 설명합니다. 그림 23 2 ASP.NET Core MVC 프로젝트의 구성 요소
23.5.1. ASP.NET Core의 향상된 기술(기존 MVC 대비)
ASP.NET Core의 주요 특징은 다음과 같습니다. 가볍게 읽고 넘어가면 됩니다.
- MVC와 Web API 통합
- 의존성 주입(Dependency Injection) 기본 내장
- 모듈화된 HTTP 요청 파이프라인
- NuGet 기반
- 클라우드 친화적
- IIS 또는 셀프 호스트 제공
- 오픈소스
- 크로스 플랫폼
23.5.2. ASP.NET Core MVC
MVC는 Model, View, Controller의 앞자를 따서 만들어진 단어입니다. MVC는 코드를 모듈화 및 테스트 가능하게 만드는 디자인 패턴입니다.
23.6. .NET Core와 .NET Framework 그리고 모던 .NET
23.6.1 .NET Core
.NET Core는 사이즈가 작아진 형태의 .NET Framework입니다. 모든 기능을 제공하는 .NET Framework에 비해서 필요한 부분만 핵심으로 제공하여 사이즈를 간소화하고 이를 손쉽게 윈도 운영체제 이외의 다른 운영체제에 올려서 서비스할 수 있도록 하는 구조입니다. .NET Core에서 제공하지 않는 기능은 NuGet 등을 통해 모듈 단위로 내려 받는 구조로 계속 업데이트되고 있습니다.
23.6.2 .NET Framework
.NET Framework는 모든 기능을 포함하고 있는 .NET Framework의 최신 버전을 의미합니다. 만약 윈도 운영체제에서만 사용 가능한 앱을 개발하고자 할 때는 .NET Framework를 사용하면 됩니다. ASP.NET 웹 폼과 MVC의 기본은 .NET Framework 기반으로 돌아갑니다. 초기 ASP.NET Core도 .NET Framework를 기준으로 작성이 가능했었습니다. 윈도 운영체제에서 실행한다면 기존 ASP.NET 버전에서 사용하던 기술들과 API를 큰 변경 없이 그대로 사용할 수 있습니다.
23.6.3 모던 .NET == .NET 5
2020년 하반기에는 .NET Framwork를 넘어서 .NET Core와 .NET Standard가 합쳐진 .NET 5.0이 발표될 예정입니다.
23.7 ASP.NET Core 6.0 개발 환경 구축
23.7.1 ASP.NET Core 6.0 개발 환경 구축
Visual Studio 2019의 최신 버전을 설치하면 기본적으로 ASP.NET 4.8과 ASP.NET Core 6.0의 모든 기능을 사용할 수 있습니다. 이번 강의부터 시작하는 ASP.NET Core 6.0은 Visual Studio Code에 추가적으로 .NET Core SDK 3.0을 설치해야 합니다.
그림 23 3 ASP.NET Core 6.0 개발 환경 구축
23.7.1.1 <참고> 업데이트된 버전의 Visual Studio
ASP.NET Core 6.0이 정식 발표된 2019년 9월 23일 시점에서는 Visual Studio를 설치하고 .NET Core SDK 3.1을 설치하면 ASP.NET Core 6.0 개발 환경이 구축됩니다.
23.7.1.2 <참고> 업데이트된 버전의 Visual Studio
ASP.NET Core 2.1이 정식 발표된 2018년 5월 30일 시점에서는 Visual Studio 2017에 .NET Core SDK 2.1을 설치하면 ASP.NET Core 2.1 개발 환경이 구축됩니다. 하지만 Visual Studio 2017의 버전이 더 높은 버전으로 업데이트되면 따로 SDK를 설치할 필요 없이 바로 가능할 수도 있습니다. 최신 버전의 ASP.NET Core 개발 환경 구축은 다음 링크를 참고하기 바랍니다.
23.7.2 Visual Studio를 위한 .NET Core SDK 다운로드 및 설치
윈도 환경이라면 Visual Studio 2019의 최신 버전을 내려받아 설치한 후 다음 경로에서 Visual Studio를 위한 최신 .NET Core SDK을 찾아서 설치합니다. 자세한 내용은 다음 실습에서 살펴보겠습니다.
그림 23 4 https://dot.net 사이트에서 .NET Core SDK 다운로드하기
23.7.3 DotNet CLI
ASP.NET Core는 ASP.NET과 달리 크로스 플랫폼에서 개발할 수 있습니다. 그래서 Visual Studio가 설치되지 않는 OS X와 리눅스 환경에서는 크로스 플랫폼 도구인 dotnet CLI(Command Line Interface)를 사용하여 ASP.NET Core 프로젝트를 생성하여 개발할 수 있습니다. dotnet CLI도 다음 경로에서 제공받을 수 있습니다. dotnet CLI 설치 및 사용은 다음 실습에서 자세히 살펴볼 예정입니다. 닷넷 CLI는 닷넷코어 SDK 설치에 포함되어 있습니다.
.NET 버전 확인 명령어 실행하기
.NET 환경에서 개발을 진행하며 현재 시스템에 설치된 .NET의 버전이나 설정을 확인하는 것은 매우 중요합니다. 여기서는 몇 가지 유용한 명령어들을 소개하겠습니다. 간단히 읽고 살펴보고 넘어가거나 다음 단계로 넘어가도 좋습니다.
dotnet --version
이 명령어는 명령 프롬프트(터미널)에서 실행하여 현재 설치된 .NET Core의 가장 최신 버전을 확인할 수 있습니다. 명령어 사용 예시는 다음과 같습니다.
C:\Users\VisualAcademy>dotnet --version
8.0.200-preview.23624.5
dotnet --info
dotnet --info
명령어는 설치된 .NET SDK의 상세 정보를 제공합니다. 이 정보에는 버전, 설치 경로, 런타임 환경 등이 포함됩니다.
C:\Users\VisualAcademy>dotnet --info
.NET SDK:
Version: 8.0.200-preview.23624.5
...
where dotnet
(Windows) / which dotnet
(Linux)
닷넷이 시스템에 어디에 설치되어 있는지 확인하려면 where dotnet
(Windows) 또는 which dotnet
(Linux) 명령어를 사용합니다. 이 명령어는 닷넷 실행 파일의 경로를 표시합니다.
C:\Users\VisualAcademy>where dotnet
C:\Program Files\dotnet\dotnet.exe
dotnet --list-sdks
이 명령어는 현재 컴퓨터에 설치된 모든 .NET SDK 버전들을 나열합니다. 다양한 버전의 SDK를 관리할 때 유용하게 사용됩니다.
C:\Users\VisualAcademy>dotnet --list-sdks
1.1.10 [C:\Program Files\dotnet\sdk]
1.1.11 [C:\Program Files\dotnet\sdk]
1.1.12 [C:\Program Files\dotnet\sdk]
...
6.0.321 [C:\Program Files\dotnet\sdk]
8.0.101 [C:\Program Files\dotnet\sdk]
8.0.200-preview.23624.5 [C:\Program Files\dotnet\sdk]
이렇게 다양한 명령어들을 통해 .NET 환경을 더 효과적으로 관리하고 활용할 수 있습니다.
23.8 [실습] ASP.NET Core 6.0 개발 환경 구축
23.8.1 소개
1장에서 Visual Studio를 설치했습니다. ASP.NET Core 6.0 개발 환경을 추가로 구축하기 위한 절차를 알아보겠습니다.
참고 이번 실습과 관련해서 " Visual Studio 2019 설치 - ASP.NET과 Core를 다루는 기술 책과 강의를 위한"라는 제목의 동영상 강좌로도 마련하였으니 참고하기 바랍니다. https://youtu.be/P8UKfggZcx0
23.8.2 따라하기 1: .NET Core SDK 다운로드 및 설치
(1) 웹 브라우저를 열고 다음 사이트에 접속하면 그림과 같은 사이트로 이동합니다. <.NET Core 3.1> 다운로드 링크를 클릭합니다.
그림 23 5.NET Core 3.1 다운로드
[그림] http://dot.net 사이트로 접속 후 다운로드 링크 클릭
[그림] .NET Core 링크 클릭
(2) <.NET Core 3.1 SDK> 링크를 클릭하여 설치 파일을 내려받아 설치합니다. 그림 23 6.NET Core 3.1 SDK 다운로드
[그림] Visual Studio 2019 + .NET Core SDK 3.1 다운로드 및 설치
23.8.3 따라하기 2: .NET Core SDK for Windows 다운로드 및 설치
(1) ASP.NET Core 개발 환경은 윈도 환경에서라면 <따라하기 1>을 진행한 상태로 충분합니다. 하지만 크로스 플랫폼 환경에서는 따로 명령줄 도구인 dotnet 명령어를 사용하여 개발과 빌드, 실행할 수 있습니다. 이번에는 .NET Core를 설치하여 크로스 플랫폼 환경에서의 개발환경을 구축해보겠습니다. 크로스 플랫폼 환경에서는 Visual Studio가 설치되지 않으므로 개발 도구로 Visual Studio Code를 사용합니다. Visual Studio Code는 다음 그림의 링크를 클릭한 후 다운로드 파일을 내려받아 설치할 수 있습니다. 내려받은 설치 파일을 클릭하면 간단히 설치됩니다. 그림 23 7 Visual Studio Code 다운로드
(2) Visual Studio Code 도구가 준비되었으면 .NET Core 다운로드 사이트에서 <.NET Core SDK for Windows> 링크를 클릭한 후 <.NET Core> 설치합니다. 그림 23 8.NET Core SDK 다운로드 링크
(3) 크로스 플랫폼 환경이라면 <.NET Core SDK>를 각각의 운영체제 버전에 맞게 내려받아 NET Core를 설치합니다. .NET Core가 설치된 내용을 확인하기 위해서는 명령 프롬프트를 실행한 후 dotnet --info 명령어를 입력하면 다음과 같이 관련 정보가 출력됩니다. 그림 23 9 dotnet 명령어를 사용한 정보 확인
[그림] dotnet 명령어를 사용한 정보 확인
23.8.4 마무리
간단한 실습으로 ASP.NET Core 개발 환경이 구축됩니다. Visual Studio를 사용하면 가장 좋은 환경이 될 것입니다. 또한, Visual Studio Code 에디터를 사용하고 dotnet 명령어와 함께 개발해도 전혀 지장이 없습니다. 이 책에서는 좀 더 편한 환경인 Visual Studio에서 ASP.NET Core를 개발하는 것을 기본으로 합니다.
23.9 ASP.NET Core와 기존 ASP.NET 기술의 관계
이 책을 통해서 지금까지 살펴본 내용들은 그림의 왼쪽 영역인 전체 버전의 .NET Framework를 사용하고 웹 폼, MVC, Web API, SignalR 등의 기술을 사용하는 영역이었습니다. 이번 강의부터 다룰 내용은 그림의 가운데 영역과 오른쪽 영역인 순수 ASP.NET Core 영역입니다. 가장 이상적인 ASP.NET Core는 경량화된 .NET Framework인 .NET Core를 사용하면서 크로스 플랫폼을 지원하는 오른쪽 영역을 의미합니다. 전체 버전의 .NET 프레임워크 기능을 사용해야 한다면 가운데 영역으로 ASP.NET Core를 사용했었지만 지금은 지원하지 않습니다. 그림 23 10 ASP.NET Core와 기존 ASP.NET 기술과의 관계
23.10 ASP.NET Core 프로젝트의 구조
ASP.NET Core 프로젝트는 기존 One ASP.NET으로 불리는 ASP.NET 프로젝트와는 사뭇 구조가 다릅니다. 다음과 같이 폴더 및 파일이 사용됩니다. 각각의 파일에 대한 내용은 앞으로 자세히 다루므로 소개된 내용은 간단히 읽고 넘어갑니다.
- global.json: 솔루션 기반 설정 파일입니다. 프로젝트 간의 참조 정보를 가진다. src 폴더와 test 등의 폴더를 구분 짓습니다.
- src 폴더: ASP.NET Core 프로젝트 소스가 위치합니다.
- wwwroot 폴더: 웹 앱을 위한 정적 파일이 위치합니다. 아무런 변환 없이 클라이언트에게 보내줄 HTML, CSS, JavaScript 및 Image 등이 위치하는 곳입니다.
- project.json: 프로젝트 설정 정보가 들어 있습니다. 프로젝트에서 필요한 외부 도구를 NuGet 패키지를 통해서 가져오면 해당 정보가 project.json 파일에 기록되며 Visual Studio를 사용하면 직접 json 파일을 인텔리센스의 도움을 받아 손쉽게 설정할 수 있습니다. project.json 파일에서 직접 특정 패키지를 프로젝트에 추가할 수 있습니다.
- Startup.cs: ASP.NET Core 앱에서 시작 시 사용할 코드가 위치합니다.
그림 23 11 ASP.NET Core 프로젝트
.NET CLI 사용 안내
.NET Core SDK를 설치한 후, 개발자들은 dotnet CLI (Command Line Interface)를 통해 다양한 작업을 수행할 수 있습니다. 이 CLI는 크로스 플랫폼 환경에서 .NET Core 애플리케이션을 생성, 빌드 및 실행하는 데 필요한 강력한 도구입니다. 여기에는 여러 기본 명령어들이 포함되어 있습니다.
기본 dotnet CLI 명령어
dotnet new
: 새로운 .NET Core 콘솔 응용 프로그램 프로젝트를 생성합니다.- 예:
dotnet new console
- 콘솔 애플리케이션 프로젝트 생성 dotnet new web
: 웹 애플리케이션 프로젝트를 생성합니다.
- 예:
dotnet restore
: NuGet 패키지의 참조를 복원합니다. 이 명령은 프로젝트의 종속성을 해결하고 필요한 모든 패키지를 다운로드합니다.- 예:
dotnet restore -v Information
- 복원 과정 중 추가 정보(예: NuGet 피드 정보)를 표시합니다.
- 예:
dotnet build
: 소스 코드를 컴파일하여 실행 가능한 애플리케이션 또는 라이브러리를 빌드합니다.dotnet run
: 코드를 컴파일하고 실행합니다. 이 명령은 내부적으로dotnet build
를 호출하여 빌드를 수행한 후 실행합니다.dotnet [app.dll]
: 빌드된 실행 파일을 직접 실행합니다. 이는 프로젝트 디렉토리 내에서dotnet run
명령의 결과로 생성된 DLL 파일을 실행합니다.
추가적인 핵심 dotnet 명령어
dotnet publish
: 애플리케이션을 배포하기 위해 필요한 모든 파일을 포함하여 배포 가능한 형태로 컴파일합니다.dotnet pack
: 코드를 NuGet 패키지 형태로 패키징합니다. 이 명령은 라이브러리 개발자에게 유용하며, NuGet 패키지를 생성하여 공유하거나 배포할 수 있게 합니다.
이러한 명령어들은 .NET Core 개발 과정에서 핵심적인 역할을 하며, 개발자들이 더 빠르고 효율적으로 작업을 수행할 수 있도록 돕습니다.
23.12 [실습] DotNet CLI를 사용하여 .NET Core 앱 생성 및 빌드 그리고 실행
23.12.1 소개
.NET Core SDK(https://www.microsoft.com/net/core)가 설치되었다면, DotNet CLI(Command Line Interface)인 dotnet 명령어를 통해서 .NET Core 콘솔 또는 웹 응용 프로그램을 만들 수 있습니다. 이번 실습에서는 dotnet 명령어를 통해서 .NET Core 콘솔 응용 프로그램을 만들고 빌드하고 실행해봅니다.
23.12.2 따라하기
(1) [Windows] + [R] 키를 눌러 실행 창을 연 후 cmd 명령어를 입력하여 명령 프롬프트를 실행합니다. iOS와 리눅스에서는 그에 맞는 콘솔 창을 열어 사용합니다. 그림 23 12 명령 프롬프트 실행
(2) 명령 프롬프트에서 C 드라이브 루트로 이동한 후 dotnet 명령어를 실행합니다. 그림과 같이 dotnet CLI 사용법을 보여줍니다. 그림 23 13 dotnet CLI
(3) dotnet --help와 dotnet --info 옵션을 사용하여 dotnet 명령어에 대한 주요 정보 및 사용법을 확인합니다. 그림 23 14 dotnet CLI 정보 확인
(4) 모든 .NET Core 기반 프로그램은 콘솔 응용 프로그램을 시작으로 ASP.NET Core로 확장됩니다. .NET Core 콘솔 응용 프로그램을 만들어보겠습니다. ASP.NET 폴더에 DotNetCore란 이름의 폴더를 생성하고 해당 폴더로 이동합니다. 그림 23 15 폴더 생성
(5) dir 명령어로 DotNetCore 폴더에 아무런 폴더 및 파일이 없는 것을 확인한 후 dotnet new 명령어로 현재 폴더(DotNetCore)를 .NET Core 응용 프로그램 폴더로 생성합니다. dotnet new 명령어를 실행하면 현재 폴더에 Program.cs 파일과 project.json 파일이 생성됩니다. Program.cs 파일은 C#의 엔트리 포인트인 Main 메서드가 있고, project.json 파일은 현재 프로젝트 및 참조에 대한 정보를 담고 있습니다. 그림 23 16 dotnet new 명령어로 콘솔 응용 프로그램 생성
(6) 기본 생성된 파일의 내용을 보기 위해서 Visual Studio Code를 실행합니다. 현재 폴더에서 code . 명령어를 실행하면 현재 폴더가 Visual Studio Code로 열린다. 그림 23 17 Visual Studio Code 실행
23.12.2.1 참고: 코드 닷(code .)과 컨트롤 백틱([Ctrl+`])
명령 프롬프트에서 code . 명령어를 요청하면 현재 폴더(.)에서 Visual Studio Code(VSCode)를 실행합니다. Visual Studio Code 실행 후 Ctrl +로 화면 확대 및 Ctrl -로 화면 축소를 할 수 있습니다. VSCode에서 Ctrl + `(백틱) 단축키를 사용하면 내장된 명령 프롬프트인 터미널 창이 코드 에디터 하단에서 실행됩니다.
(7) dotnet new 명령어에 의해서 기본 생성된 Program.cs 파일의 내용이다(project.lock.json 파일은 Visual Studio Code에서 미리 실행해주는 dotnet restore 명령에 의해 자동으로 생성될 수 있습니다). 그림 23 18 기본 생성된 콘솔 응용 프로그램
(8) 마찬가지로 project.json 파일의 내용입니다. 최근 닷넷코어에서는 사용되지 않습니다. 그림 23 19 기본 생성된 project.json 파일
(9) Console.WriteLine() 코드의 내용을 수정하고 저장합니다. 그림 23 20 Visual Studio Code에서 코드 변경
(10) 콘솔로 돌아와서 dotnet restore 명령어를 실행합니다. 현재 응용 프로그램과 관련된 패키지(어셈블리)를 내려받아서 사용할 수 있도록 해줍니다. 그림 23 21 dotnet restore 명령어 실행
(11) 최종적으로 현재 프로젝트를 실행하려면 dotnet run 명령어를 실행합니다. 콘솔 화면에 “Hello World! - .NET Core” 메시지가 출력됩니다. 그림 23 22 dotnet run 명령어로 프로젝트 실행
(12) dotnet run 명령어를 실행한 후 프로젝트 폴더의 내용입니다. bin, obj 폴더가 생성되었습니다. 그림 23 23 컴파일된 프로젝트
(13) bin/debug/netcoreapp1.0 폴더로 이동하면 프로젝트명.dll 파일이 생성된 것을 확인할 수 있습니다. 그림 23 24 DLL 파일 생성 확인
(14) dotnet DotNetCore.dll 명령어를 실행하여 직접 DLL 파일로부터 콘솔 앱을 실행할 수 있습니다. 그림 23 25 DLL 파일 직접 실행
23.12.3 마무리
.NET Core의 크로스 플랫폼 명령줄 도구인 dotnet 명령어를 사용하면 프로젝트 생성(dotnet new), 참조 가져오기(dotnet restore), 프로젝트 실행(dotnet run)의 기능을 사용할 수 있습니다. 이 명령어는 ASP.NET Core에서도 그대로 사용합니다.
23.12.3.1 <참고> where 명령어로 특정 명령어의 위치 찾기
C:\Users\redpl>where dotnet C:\Program Files\dotnet\dotnet.exe
C:\Users\redpl>where code C:\Program Files (x86)\Microsoft VS Code\bin\code C:\Program Files (x86)\Microsoft VS Code\bin\code.cmd
23.13 ASP.NET Core의 새로운 특징
23.13.1 OWIN과 Katana => Kestrel
ASP.NET이 처음 세상에 나왔을 때는 IIS 웹 서버 위에서만 가동되었습니다. IIS는 윈도 운영체제에 종속된 기술이다 보니 다른 서버로 이동이 어려웠습니다. 그러다가 IIS Express를 거쳐 OWIN에 대한 구현체인 Katana를 통해서 다른 서버에서 호스팅할 수 있는 구조로 변경되었습니다. 현재 ASP.NET Core은 Kestrel이라는 이름의 호스팅 환경을 통해서 OS X, 리눅스에서 서비스할 수 있게 되었습니다.
23.13.1.1 <참고> Kestrel
Microsoft.AspNetCore.Server.Kestrel 패키지를 ASP.NET Core 프로젝트에 추가하면 크로스플랫폼을 지원하는 ASP.NET Core를 위한 경량화된 웹서버가 설치가 됩니다. 그림 23 26Kestrel
[그림] 출처 -> https://www.youtube.com/watch?v=7dJBmV_psW0&t=46s
23.13.2 동적 컴파일
기존 ASP.NET은 소스 변경 후 반드시 빌드(컴파일) 과정을 거쳐야만 변경된 소스가 웹 앱에 적용되었습니다. 그러나 ASP.NET Core에는 동적 컴파일 기능을 추가되어 웹 앱 소스를 변경하고 저장만 하면 웹 앱을 통해서 변경된 내용이 바로 적용되어서 실행됩니다. 이러한 방식 때문에 Visual Studio가 아닌 Visual Studio Code와 같은 일반 에디터로도 편집하고 명령줄 도구를 사용하여 웹 앱을 실행할 수 있습니다.
23.13.3 의존성 주입(Dependency Injection) 포함
ASP.NET Core는 기본으로 내장된 DI(Dependency Injection)를 제공합니다. 더 이상 ASP.NET MVC 5.0 등의 이전 버전에서 많이 사용되던 외부 도구인 Ninject 또는 AutoFac 등에 의존하지 않아도 되고, 외부 DI 컨테이터를 계속해서 사용할 수도 있습니다. 의존성 주입을 사용하려면 Startup.cs 파일의 ConfigureService 메서드에 다음과 같은 스타일의 메서드를 통해서 특정 인터페이스(클래스)에 대한 클래스의 인스턴스를 생성해야 합니다.
- services.AddTransient<IService, Service>();
- services.AddScoped<IService, Service>();
- services.AddSingleton<IService, Service>();
23.13.4 참고: Bower, Gulp, Grunt 통합
Visual Studio는 유명한 커뮤니티 기반 웹 개발 도구인 Gulp, Bower 등을 포함합니다. Bower는 NuGet과 비슷한데, NuGet이 서버 측 패키지를 포함시킨다면 Bower는 클라이언트 측 패키지인 CSS, JavaScript 라이브러리를 웹 앱에 포함시킵니다. Gulp와 Grunt는 태스크 러너라고 부르는데 JavaScript 코드 등에 대한 코드 축소 및 합치기 등 빌드 자동화(Build Automation) 기능을 제공합니다.
23.14 [실습] ASP.NET Core에서 제공하는 빈 템플릿을 사용하여 웹 사이트 만들고 실행하기
23.14.1 소개
Visual Studio를 사용하여 ASP.NET Core 6.0 프로젝트 생성 시 선택할 수 있는 옵션 중에서 비어 있음(Empty) 템플릿을 사용하여 하나의 웹 프로젝트를 만들고, 바로 웹 브라우저로 실행해보는 간단한 실습을 진행해보겠습니다.
23.14.2 따라하기
(1) .NET Core가 설치된 Visual Studio를 실행하고 ASP.NET 웹 응용 프로그램을 다음과 같이 생성합니다. 이 프로젝트는 실습 진행 후 삭제해도 됩니다. 이름 위치 ASP.NET 템플릿 선택 AspNetCoreHelloWorld C:\ASP.NET ASP.NET Core 6.0 템플릿- 비어 있음(Empty)
Visual Studio 2019에서 ASP.NET Core 6.0 웹 프로젝트는 <Visual C# > 웹 > ASP.NET Core Web Application (.NET Core)> 항목을 선택하고, 프로젝트 이름과 위치 등을 입력하여 생성하면 됩니다. 그림 23 27 ASP.NET Core 웹 응용프로그램 프로젝트 생성
ASP.NET Core 템플릿에서 비어 있음(Empty) 템플릿을 선택하여 프로젝트를 생성합니다. 그림 23 28 ASP.NET Core 템플릿 선택
(2) 기본값으로 생성된 ASP.NET Core 비어 있음 템플릿 프로젝트의 모습은 다음과 같습니다. 그림 23 29 ASP.NET Core 6.0 Empty 프로젝트의 전체 모습
(3) Startup.cs 파일은 프로젝트의 시작 설정에 대한 정보를 다룹니다. 코드를 보면 다음과 같습니다. 간단히 설명하면 모든 요청이 현재 프로젝트에 들어오더라도 무조건 응답으로 “Hello World!”를 출력하는 프로젝트다. 또한, app.Run() 코드 부분을 여러 번 호출해도 딱 한 번만 호출되는 형태입니다. 중간에 파이프라인을 타면서 서로 다른 새로운 기능을 부여하는 것을 ASP.NET Core에서는 미들웨어(Middleware)라고 합니다. 이미 내장된 많은 미들웨어를 제공하여 기능을 확장해 나갈 수 있고, 미들웨어 자체도 따로 구현해서 사용할 수 있습니다.
코드: Startup.cs
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
namespace AspNetCoreHelloWorld
{
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env,
ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.Run(async (context) =>
{
await context.Response.WriteAsync("Hello World!");
});
}
}
}
위 코드 중 UseDeveloperExceptionPage() 메서드 호출은 뒤에서 자세히 다룹니다.
Startupcs 파일은 다음 2개의 핵심 메서드를 제공합니다.
- ConfigureServices() : 서비스(DI) 등록 영역
- Configure() : 웹 요청에 따른 어떤 처리를 할 것인지(미들웨어를 사용할지) 결정
(4) project.json 파일의 소스 코드는 다음과 같습니다. ASP.NET Core 프로젝트의 주요 서버 측 컴포넌트들에 대한 설정 정보를 담고 있습니다. 최신 버전에서는 제공하지 않기에 지금은 참고용으로 그냥 살펴보면 됩니다.
코드: Project.json
{
"dependencies": {
"Microsoft.NETCore.App": {
"version": "1.0.0",
"type": "platform"
},
"Microsoft.AspNetCore.Diagnostics": "1.0.0",
"Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
"Microsoft.AspNetCore.Server.Kestrel": "1.0.0",
"Microsoft.Extensions.Logging.Console": "1.0.0"
},
"tools": {
"Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final"
},
"frameworks": {
"netcoreapp1.0": {
"imports": [
"dotnet5.6",
"portable-net45+win8"
]
}
},
"buildOptions": {
"emitEntryPoint": true,
"preserveCompilationContext": true
},
"runtimeOptions": {
"configProperties": {
"System.GC.Server": true
}
},
"publishOptions": {
"include": [
"wwwroot",
"web.config"
]
},
"scripts": {
"postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
}
}
(5) 생성된 프로젝트를 실행해봅니다. Ctrl+F5를 클릭하여 웹 브라우저로 실행하면 그림과 같이 화면에 “Hello World!”가 출력됩니다. 그림 23 30 ASP.NET Core 6.0 Empty 프로젝트 웹 브라우저 실행 결과
(6) /Foo/Bar, /Id=1234 형식으로 아무리 URL 값을 전달한다 해도 현재 프로젝트는 모든 요청에 대한 응답으로 문자열만 출력하는 가장 기초적인 웹 프로젝트의 단계를 보여줍니다. 그림 23 31 ASP.NET Core 프로젝트 웹 브라우저 실행 후 경로 및 매개변수 전달
app.Run(async (context) =>
{
// 한글 출력
context.Response.Headers["Content-Type"] = "text/html; charset=utf-8";
await context.Response.WriteAsync("안녕하세요.", System.Text.Encoding.UTF8);
});
app.UseEndpoints(endpoints =>
{
endpoints.MapGet("/", async context =>
{
//await context.Response.WriteAsync("Hello World!");
// 한글 출력
context.Response.Headers["Content-Type"] = "text/html; charset=utf-8";
await context.Response.WriteAsync("안녕하세요.", System.Text.Encoding.UTF8);
});
});
지금까지 ASP.NET Core의 MVC 관련 구성요소는 아무 것도 사용하지 않고 웹 페이지에 “Hello World”만 출력해보는 예제를 만들었습니다. 앞으로 진행되는 이론과 실습 내용을 통해서 주요 내용을 계속 학습해 나갑니다. 참고로 Startup.cs 파일에 다음과 같이 app.Run() 메서드를 두 번 작성한 후 실행해도 “Hello World”는 하나만 실행됩니다. <코드> app.Run(async (context) => { await context.Response.WriteAsync("Hello World! [1]"); });
app.Run(async (context) => { await context.Response.WriteAsync("Hello World! [2]"); }); </코드>
만약 파이프라인 개념으로 하나의 미들웨어(다음 코드의 첫 번째)를 실행하고, 다음으로 제어권을 넘기려면 어떻게 해야 할까요? 다음과 같이 next 대리자를 추가해서 호출해주면 코드 실행 시 “Hello World”가 두 개 실행될 것입니다. <코드> app.Use(async (context, next) => { await context.Response.WriteAsync("Hello World! [1]"); await next(); });
app.Run(async (context) => { await context.Response.WriteAsync("Hello World! [2]"); }); </코드>
23.14.3 마무리 <완>
이번 실습의 목적은 단순히 ASP.NET Core 6.0의 Empty 프로젝트를 만들고, 어떠한 파일들이 생성되는지 확인하고, 바로 실행시켜서 “Hello World!”를 출력해 보는 정도였습니다. 실제 무엇인가 페이지를 추가하면서 ASP.NET Core의 제대로 기능을 구현하는 내용은 Empty 프로젝트가 아닌 웹 응용프로그램(Web Application) 프로젝트를 기준으로 진행하도록 하겠습니다.
23.15 Shared 폴더와 _(언더스코어)로 시작하는 파일들
ASP.NET Core 프로젝트의 기본 프로젝트 템플릿으로 생성된 프로젝트에는 Shared 폴더와 _(언더스코어) 문자로 시작하는 파일들이 있습니다. 이러한 파일들에 대한 요약 설명을 진행합니다. 가볍게 읽고 넘어가세요.
23.15.1 Shared 폴더
ASP.NET Core에서 Shared 폴더는 프로젝트 내의 여러 영역(MVC, Razor, Component)에서 공통으로 사용되는 UI 요소를 보관해 놓는 특정 목적의 폴더입니다. ASP.NET Core의 라우팅에 의해 특정 URL을 요청하면 일반적으로 해당 URL과 매핑되는 폴더에 가서 먼저 UI 요소를 찾습니다. 만약, 찾고자하는 UI 요소가 없을 때에는 추가로 Shared 폴더에 가서 물어봅니다. 그러고도 원하는 UI 요소를 찾을 수 없으면 404 Not Found를 반환합니다. 참고로, ASP.NET Core 이전의 MVC5까지는 더 많은 단계의 폴더를 탐색했지만, 성능을 위해서 Views 또는 라우팅이 지정된 Pages 폴더와 Shared 폴더에서만 찾는 걸로 변경이 되었습니다. 또한, Shared 폴더는 독립된 페이지가 와도 됩니다. Error.cshtml 페이지가 그런 식으로 사용됩니다.
23.15.2 _(언더스코어)로 시작하는 파일들
언더스코어 문자로 시작하는 파일들은 다른 페이지에 공유되어 사용되는 부분(Partial) 페이지를 의미합니다. 반드시 언더스코어를 사용할 필요는 없지만, 관행상 그렇게 사용합니다. 닷넷을 공부하다보면 주입(Injection)이란 단어를 많이 들어보실겁니다. 주입, 다른 말로 주사기를 의미하기에 모든 파일명(또는 변수명) 앞에 _를 붙이면 뾰족한 형태가 되기에, 어딘가에 주입(찔러서)되어 사용되는 페이지 또는 개체로 표시합니다. 모든 뷰 관련 페이지 또는 컴포넌트에서 공통으로 사용될 레이아웃은 _Layout 파일이 그 역할을 한다고 보면 됩니다.
23.15.3 _ViewImport와 _ViewStart 파일
_ViewImport와 _ViewStart 파일을 좀 더 독특한 목적으로 만들어진건데요. _ViewImport 파일은 모든 뷰 관련 폴더의 루트에 둘 수 있습니다. 최상위 루트에 두면 해당 파일에 지정된 using 구문을 모든 페이지에서 생략해서 사용할 수 있구요. 하위 폴더에서 두면 최상위 폴더의 _ViewImport를 상속하여 해당 폴더에서만 추가적인 using 구문들을 추가해서 사용할 수 있습니다. _ViewStart 파일도 최상위와 서브 폴더에 맞게 추가해서 하위 폴더별로 서로 다른 레이아웃을 적용하기 편하게 해줍니다. 그럴리는 없겠지만, 하위 폴더에 1000개의 뷰 또는 컴포넌트가 있는데, 해당 하위 폴더의 레이아웃만 새로운것으로 변경한다했을 때 _ViewStart 파일 하나만 넣어두고 레이아웃만 딱 지정하면 모두 끝나는 형태입니다.
[실습] ASP.NET Core에서 제공하는 Web Application 템플릿(MVC)을 사용하여 웹 사이트 만들고 실행하기
소개
Visual Studio를 사용하여 ASP.NET Core 9.0 프로젝트 생성 시 선택할 수 있는 옵션 중에서 웹 응용 프로그램(Web Application) MVC 템플릿을 사용하여 하나의 웹 프로젝트를 만들고, 바로 웹 브라우저로 실행해보는 간단한 실습을 진행해보겠습니다. 이 실습을 통해 기본적인 ASP.NET Core 프로젝트 생성 및 실행 과정을 이해하고, 프로젝트 구조와 구성 요소를 확인할 수 있습니다.
따라하기
프로젝트 생성
Visual Studio를 실행하고 다음과 같은 설정으로 ASP.NET Core Web Application 프로젝트를 생성합니다. 실습 후 프로젝트는 삭제해도 되지만, 메인 강의 소스인 DotNetNote 프로젝트를 사용할 수도 있습니다.
이름 | 위치 | ASP.NET 템플릿 선택 |
---|---|---|
AspNetCoreWebApplication | C:\ASP.NET | ASP.NET Core 9.0 템플릿 - 웹 응용 프로그램 MVC |
템플릿 선택 화면에서 웹 응용 프로그램(Web Application) MVC를 선택합니다.
인증 변경 버튼을 클릭하여 인증 옵션에서 인증 안 함을 선택합니다. 참고로, DotNetNote 프로젝트와 같이 개별 계정을 포함한 인증을 설정해도 됩니다.
설정 완료 후 확인 버튼을 클릭하여 프로젝트를 생성합니다. 반드시 MVC 템플릿을 포함해야 합니다.
기본 프로젝트 실행
생성된 Web Application 프로젝트는 아래와 같은 구조로 되어 있습니다.
기본 생성된 템플릿을 Ctrl + F5로 실행하면 부트스트랩 기반의 반응형 레이아웃이 적용된 기본 웹 페이지가 표시됩니다.
페이지 추가
Controllers/HomeController.cs 파일을 열고 아래와 같이
Chat
메서드를 추가합니다. 컨트롤러의 메서드는 액션 메서드라 부르며, 웹 요청을 처리하는 역할을 합니다.코드: Controllers/HomeController.cs
using Microsoft.AspNetCore.Mvc; namespace AspNetCoreWebApplication.Controllers { public class HomeController : Controller { public IActionResult Index() { return View(); } public IActionResult Chat() { return View(); } public IActionResult About() { ViewData["Message"] = "Your application description page."; return View(); } public IActionResult Contact() { ViewData["Message"] = "Your contact page."; return View(); } public IActionResult Error() { return View(); } } }
Views/Home 폴더에서 Chat.cshtml 파일을 생성하고 아래 내용을 작성합니다.
코드: Chat.cshtml
<h1>Chat</h1>
Views/Shared/_Layout.cshtml 파일을 열어 상단 메뉴에 Chat 링크를 추가합니다.
코드: _Layout.cshtml 메뉴 부분
<div class="navbar-collapse collapse"> <ul class="nav navbar-nav"> <li><a asp-area="" asp-controller="Home" asp-action="Index">Home</a></li> <li><a asp-area="" asp-controller="Home" asp-action="Chat">Chat</a></li> <li><a asp-area="" asp-controller="Home" asp-action="About">About</a></li> <li><a asp-area="" asp-controller="Home" asp-action="Contact">Contact</a></li> </ul> </div>
ASP.NET Core에서 **태그 헬퍼(Tag Helper)**를 사용하여 메뉴를 구성합니다. 기존 ASP.NET MVC에서 사용하는
a
태그와 달리asp-controller
와asp-action
특성을 활용하여 링크를 생성합니다. 실행 시 해당 컨트롤러와 액션 메서드로 이동하는 동작을 정의합니다.태그 헬퍼 예시:
<a asp-controller="Home" asp-action="Index" asp-route-id="1234">/Home/Index/1234</a>
위 코드의 결과:
<a href="/Home/Index/1234">/Home/Index/1234</a>
태그 헬퍼는
asp-route-*
형식을 통해 동적으로 매개변수를 전달할 수도 있습니다.프로젝트를 실행한 후
/Home/Chat
경로를 직접 요청하거나 상단 메뉴의 Chat 링크를 선택하면 Chat 페이지가 정상적으로 표시됩니다.
마무리
ASP.NET Core 9.0 Empty 프로젝트 템플릿과 달리 Web Application(MVC) 프로젝트 템플릿은 기본적인 웹 사이트 구조를 갖춘 상태에서 시작할 수 있는 점이 장점입니다. 이번 실습에서는 컨트롤러에 액션 메서드를 추가하고, 이에 해당하는 뷰 페이지를 생성하며, 레이아웃에 새로운 메뉴를 등록하여 기본적인 웹 사이트 제작 단계를 익혔습니다.
DotNetNote 이름으로 ASP.NET Core 9.0 MVC 프로젝트 생성 및 .NET Aspire 오케스트레이션 통합
소개
ASP.NET Core 9.0 MVC 프로젝트를 생성할 때, .NET Aspire 오케스트레이션을 통합하는 옵션을 선택하면 기본 MVC 프로젝트 외에도 DotNetNote.Web, DotNetNote.AppHost, DotNetNote.ServiceDefaults와 같은 프로젝트가 자동으로 생성됩니다. 이 구성은 멀티 프로젝트 구조로, 웹 프런트엔드, 애플리케이션 호스트, 기본 서비스 설정을 분리하여 확장성과 유지보수성을 높이는 데 목적이 있습니다.
따라하기
1. 프로젝트 생성
Visual Studio를 실행하고 새 프로젝트 생성을 선택합니다.
프로젝트 템플릿 선택 화면에서 ASP.NET Core Web Application (Model-View-Controller)를 선택합니다.
프로젝트 이름을
DotNetNote
로 설정하고, 위치를 원하는 경로로 지정한 후 다음을 클릭합니다.이름 위치 DotNetNote.Web C:\Projects 추가 정보 구성 화면에서:
- 대상 프레임워크를
.NET 9.0
으로 선택합니다. - .NET Aspire 오케스트레이션 통합 체크박스를 활성화합니다.
- 대상 프레임워크를
확인을 클릭하여 프로젝트 생성을 시작합니다.
2. 생성된 프로젝트 구조
체크박스를 활성화하면, 다음과 같은 멀티 프로젝트 구조가 생성됩니다:
DotNetNote.Web
- 웹 프런트엔드 프로젝트로, 컨트롤러, 뷰, 정적 파일 등을 포함합니다.
- 주요 역할: 사용자 요청 처리 및 UI 렌더링.
DotNetNote.AppHost
- 애플리케이션 호스트 프로젝트로, 서비스 초기화 및 구성을 담당합니다.
- 주요 역할: 중간 계층에서 비즈니스 로직 및 서비스 오케스트레이션.
DotNetNote.ServiceDefaults
- 기본 서비스 정의를 포함하는 라이브러리 프로젝트입니다.
- 주요 역할: 공통 서비스와 기본값 제공.
각 프로젝트 구성 및 역할
다음 프로젝트들은 .NET 9.0 버전으로 업그레이드되면서, 코드가 변경되었으니, 프로젝트 템플릿으로 만들어진 소스 코드를 참고하면 되는데요. 지금은 MVC 프로젝트만 살펴보시면 됩니다.
DotNetNote.Web
이 프로젝트는 사용자 요청을 처리하는 웹 프런트엔드입니다.
컨트롤러 추가
Controllers
폴더에 기본 컨트롤러가 포함됩니다. 새로운 컨트롤러를 추가하려면 다음을 참고하세요:코드: HomeController.cs
using Microsoft.AspNetCore.Mvc; namespace DotNetNote.Web.Controllers { public class HomeController : Controller { public IActionResult Index() { return View(); } } }
뷰 페이지 추가
Views/Home/Index.cshtml
파일을 생성하여 기본 페이지를 설정합니다.코드: Index.cshtml
<h1>Welcome to DotNetNote!</h1>
DotNetNote.AppHost
이 프로젝트는 서비스 등록 및 의존성 주입(DI)을 담당합니다.
Program.cs 파일에는 서비스 초기화 코드가 포함됩니다.
코드: Program.cs
var builder = WebApplication.CreateBuilder(args); // 서비스 구성 builder.Services.AddControllersWithViews(); builder.Services.AddDefaultServices(); // ServiceDefaults 연결 var app = builder.Build(); // 미들웨어 구성 app.UseStaticFiles(); app.UseRouting(); app.MapDefaultControllerRoute(); app.Run();
ServiceDefaults와 연결된 구성은
AddDefaultServices
확장을 통해 정의됩니다.
DotNetNote.ServiceDefaults
이 프로젝트는 공통 서비스와 기본값을 정의합니다.
ServiceExtensions.cs 파일에는 기본 서비스 등록 메서드가 포함됩니다.
코드: ServiceExtensions.cs
namespace DotNetNote.ServiceDefaults { public static class ServiceExtensions { public static IServiceCollection AddDefaultServices(this IServiceCollection services) { // 기본 서비스 등록 services.AddTransient<IGreetingService, GreetingService>(); return services; } } public interface IGreetingService { string GetGreeting(); } public class GreetingService : IGreetingService { public string GetGreeting() => "Hello from ServiceDefaults!"; } }
실행 및 확인
DotNetNote.Web을 시작 프로젝트로 설정합니다.
프로젝트를 실행하면 기본 웹 페이지가 표시됩니다.
/api/greeting 경로를 추가하여
IGreetingService
를 호출하면 다음과 같은 결과를 확인할 수 있습니다:출력 결과
Hello from ServiceDefaults!
마무리
이 가이드는 ASP.NET Core 9.0 MVC 프로젝트 생성 시 .NET Aspire 오케스트레이션 통합 옵션을 활성화하여 DotNetNote.Web, DotNetNote.AppHost, DotNetNote.ServiceDefaults의 3개 프로젝트 구조를 생성하고 설정하는 방법을 다뤘습니다. 이 멀티 프로젝트 구성은 확장성과 유지보수성을 높이는 데 유용하며, ASP.NET Core 애플리케이션 개발에 강력한 기반을 제공합니다.
23.17 ASP.NET 3.0 새로운 특징
23.17.1 프로젝트 시스템과 도구
23.17.1.1 Microsoft.AspNetCore.All 메타 패키지
하나의 패키지에 기본적으로 필요한 모든 NuGet 패키지가 포함되어 기본 제공됩니다.
- ASP.NET Core 패키지
- Entity Framework Core 패키지
- 기타 위 2개 관련 외부 패키지
23.17.2 코드
- WebHostBuilder
- Configuration
- Logging
- Razor Pages
- Identity & Authentication
- Kestrel
23.18 Data 폴더
ASP.NET Core 프로젝트 생성할 때 개별 사용자 인증을 선택 후 프로젝트를 생성하면 Data 폴더가 추가로 생성됩니다. 이 폴더는 인증 사용자에 대한 정보를 관리하는 EF Core의 정보가 들어옵니다.
23.19 [동영상 강의] ASP.NET Core 6.0 프로젝트 생성 및 소스 변경 후 웹 브라우저로 테스트
ASP.NET Core 6.0 MVC 프로젝트를 Visual Studio 2019와 dotnet CLI를 사용하여 만든 후 웹 브라우저로 테스트 및 소스 변경 후 새로고침 방식으로 변경된 내용을 확인하면서 개발하는 방법에 대한 내용을 데모로 진행합니다.
23.20 [동영상 강의] ASP.NET Core 6.0 첫 번째 응용 프로그램 만들기(VideoApp) 1/13
23.20.1 VideoApp 소개
VideoApp 이름의 ASP.NET Core 6.0 MVC를 사용한 첫 번째 응용 프로그램을 여러 장에 걸쳐서 만들어 보도록 하겠습니다. 완성된 데모는 다음 경로를 통해서 살펴볼 수 있습니다. (단, 경로는 언제든 변경될 수 있습니다.) http://www.dotnetnote/VideoApp/
23.20.2 동영상 강의 리스트 제공 앱 만들기 목적
박용준 강사가 제공하는 유료 또는 무료 동영상 강의 리스트를 제공받아서 검색 등을 통해서 필요한 강좌의 유튜브 또는 데브렉과 같은 제공 사이트의 URL을 제공받고자 합니다.
23.20.3 VideoApp 구조
VideoApp은 다음과 같은 구조를 가집니다.
- VideoApp 응용 프로그램
- VideoApp 데이터베이스
- Videos 테이블
- Id
- Title
- Content
- PostDate
- Videos 테이블
- VideoApp 데이터베이스
23.20.4 VideoApp 개발 환경 구축
VidoeApp을 개발하기 위한 최소한의 개발 환경은 아래 내용이 적용되어 있어야 합니다.
- Visual Studio 2019
- .NET Core SDK 3.1
23.21 23_01_SponsorApp_ASP.NET Core 5.0 학습을 위한 Visual Studio 다운로드 및 설치
23.22 장 요약
ASP.NET Core 6.0 프로젝트를 만들고 실행 후 기본 제공 템플릿 소스를 살펴보고 간단히 이해하면 23장은 완료가 됩니다.