.NET 소개
.NET 의 정의와 작동 방법을 이해하며 웹 기반 .NET 환경에서 소규모 앱을 빌드하는 방법을 알아봅니다.
.NET 및 해당 에코 시스템에 대해 알아봅니다.
시스템의 기술적 측면뿐만 아니라 소프트웨어를 빌드하는데 각 부분이 가지는 역할을 알아봅니다.
에코 시스템 전체 및 사용할 수 있는 리소스에 대해 알아봅니다.
.NET을 사용하여 다양한 소프트웨어 개발 요구를 충족하는 방법을 알아봅니다.
지원되는 웹 기반 편집기로 .NET 의 각 부분이 어떻게 함께 작동하여 .NET 애플리케이션을 만드는지 확인해봅니다.
.NET 및 해당 "에코시스템"(개발 환경의 다중 패싯 영역과 이 환경을 둘러싼 커뮤니티)를 학습
애플리케이션을 빌드하는데 .NET을 사용하는 것이 적합한 경우를 선택할 수 있음
.NET 의 정의와 작동 방법을 이해
.NET 컴파일러는 소스코드를 중간언어 또는 IL 이라는 특수 언어로 변환하는 프로그램이다
이렇게 저장된 어셈블리 파일은 "중간" 형식으로 컴파일링하면 동일한 코드 베이스로 사용할 수 있다.
모든 소프트웨어는 레이어로 빌드되는데 가장 낮은 수준부터 순서대로 간단히 정리를 하면 다음과 같다.
'하드웨어와 직접 통신하는 소프트웨어로 데이터 흐름 제어 (마더보드,프로세서, 메모리, 하드)'
'운영체제를 통해 지침을 제공할 수 있는 소프트웨어'
'애플리케이션 개발을 위한 수단을 제공하는 .NET과 같은 소프트웨어'
'애플리케이션 프레임워크와 기능 라이브러리'
[tip] Visual Studio 를 설치하면.NET SDK가 설치되며 포괄적인 라이브러리 및 프레임워크 세트
(기본 클래스 라이브러리 라고 함)가 사전 설치된다.
이러한 라이브러리는 빌드하려는 플랫폼 또는 앱 모델과 관계없이 사용할 수 있다.
다른 라이브러리의 경우 NuGet 같은 패키지 관리자를 사용하거나 속성에 추가하여 따로 관리를 하는 방법도 있다.
주요 앱 모델이란?
앱모델 | 프레임워크 | 참고 |
웹 | ASP .NET Core | 서버 개발을 위한 프레임 워크 |
웹 | ASP .NET Core MVC | 웹 페이지 또는 웹 API 개발을 위한 프레임 워크 |
웹 | ASP .NET Core 페이지 | 서버에서 생성된 HTML을 빌드하기 위한 프레임워크 |
웹 클라이언트 | Blazor | ASP .NET Core의 일부 서버쪽 코드를 실행하기 위한 통신 수단으로 소켓을 활용하여 DOM을 조작하거나 컴파일된 c#을 브라우저에서 실행하기 위한 WebAssembly 구현으로 활용 및 조작 |
데스크톱 | WinForms | Windows 스타일 애플리케이션을 빌드하기 위한 프레임워크 |
데스크톱 | WPF | 풍부한 애니메이션 라이브러리를 사용하여 더욱 동적인 데스크톱 애플리케이션을 빌드하기 위한 프레임 워크(페이드, 글라이드 등 여러 효과) |
모바일 | Xamarin | .NET 개발자가 iOS 및 Android 디바이스용 앱을 빌드할 수 있음 |
[tip]
코드 라이브러리 : 특정 용도의 기능을 단일 어셈블리로 캡술화
.NET은 타사 및 오픈 소스 게임 개발 환경과 Unity 같은 엔진을 지원
PowerShell : 시스템 관리자와 DevOps 엔지니어가
.NET 기능에 액세스하는 스크립트를 작성하여 조직의 컴퓨팅 환경을 관리할 수 있는 도구
.NET GitHub 링크 : https://github.com/dotnet
.NET은 매년 11월에 새 버전이 출시된다
.NET용 Azure SDK 를 사용하여 Azure 리소스를 프로비저닝하고 관리할 수 있다.
Azure App Service 및 Azure Functions를 통해 .NET 언어로 빌드된 애플리케이션을 호스트할 수 있다.
ML.NET(무료)은 기계 학습 라이브러리로서, 모델 기반 Machine Learning분석 및 예측 기능을 지원한다.
Raspberry Pi 및 Hummingboard 같은 보드로 작업하는데 사용할 수 있는 라이브러리를 지원한다.
Visual Studio 나 .NET CLI 클라우드의 디버깅 기능을 통해 논리 버그를 찾을 수 있다.
C# 사용하여 .NET 애플리케이션 빌드를 위한 사전 준비
/*비주얼 스튜디오만 설치하면 기본 프레임워크는 설치가 된다.*/
VisualStudio (https://visualstudio.microsoft.com/ko/vs/)
/*커맨드라인 개발 스타일을 원하면 아래 링크 두곳에서 다운로드를 받아 사용하면 된다"*/
.NET Core SDK 의 로컬 설치 (https://dotnet.microsoft.com/download)
VisualStudioCode (https://code.visualstudio.com/)
[tip] C#으로 다음과 같은 애플리케이션을 빌드할 수 있다
데이터를 캡쳐, 분석, 처리하는 비지니스 애플리케이션
웹 브라우저에서 액세스할 수 있는 동적 웹 애플리케이션
2D 및 3D 게임
금융 및 공학용 애플리케이션
클라우드 기반 애플리케이션
모바일 애플리케이션
[tip] 코드 작성 방법을 배우는 가장 좋은 방법은 최대한 많은 코드를 '작성'하고
작은 기본 개념 학습부터 시작해서, 지속적인 연습과 탐색으로 학습을 확장해야 합니다.
두 가지 방법으로 텍스트 콘솔에 메시지 출력 (콘솔에 리터럴 문자열 데이터를 표시하는 두 가지 방법)
// 큰 따옴표를 사용하여 리터럴 문자열을 만듭니다.
Console.Write("");
Consoel.WriteLine("");
Exam)
Console.Write("Hello1");
Console.Write("Hello2");
Consoel.WriteLine("Hello3");
Consoel.WriteLine("Hello4");
Out)
Hello1Hello2Hello3
Hello4
오류 진단 (자주 하는 실수)
대문자로 시작하지 않고 소문자 사용
마침표 대신 쉼표 사용
따옴표 누락
명령 끝에 세미콜론 누락
.NET 프로젝트 만들기 및 종속성 사용
.NET 프로젝트 초기화
.NET 프로젝트에 패키지 추가 및 프로젝트에서 패키지 제거
패키지 종속성 관리 및 예측 가능한 방식으로 업데이트
[tip]
.NET에는 파일 관리, HTTP, 파일 압축 등 모든 것을 처리하는 많은 핵심 라이브러리가 함께 제공
패키지는 관련 기능을 활용할 수 있도록 애플리케이션에 추가할 수 있는 하나 이상의 라이브러리로 구성
타사 라이브러리는 패키지로 간주하며 리포지토리에 저장할 수 있음
패키지가 필요한지 결정
더 나은 코드 : 자주 사용하는 기능의 경우 표준 패턴으로 구현된 라이브러리를 사용을 권함.
이유는 고려해야 하는 예외가 많고 직접 작성할 경우 이런 예외가 발생할 확률이 높음
시간을 절약 : 대부분의 항목을 직접 빌드 가능하지만 결과가 비슷하게 나온다면 시간 낭비
유지 관리 : 유지 관리에는 새 기능 추가 및 버그 수정이 포함되는데 이것을 고려해야 함
패키지 평가
크기 : 큰 메모리 공간을 사용하거나 대역폭이 제한되거나 다른 하드웨어 제한이 있는 경우를 고려해야 함
라이선스 : 부여된 라이선스가 상업적, 개인적, 교육용 등 의도한 용도를 충족하는지 확인해야 함
활성 유지 관리 : 오랫동안 업데이트되지 않거나 더이상 사용되지 않는 경우 문제가 될 수 있음
패키지를 설치하는 방법
[Nuget 링크]
https://nuget.org
[커맨드 라인 설치 명령]
dotnet add package <패키지 디펜던시 이름>
[설치된 패키지 확인]
dotnet list package
[전이적 패키지를 확인] (패키지 종속성을 함께 나열해 준다)
dotnet list package --include-transitive
[종속성 제거]
dotnet remove <패키지 디펜던시 이름>
[dotnet 명령어로 지원되는 기능]
종속성 관리 (설치, 제거 및 패키지 설치 후 정리, 업데이트 등등)
프로그램 실행 (테스트 실행, 코드 빌드, 마이그레이션 명령 등등)
패키지 작성 및 게시 (압축된 패키지를 만들고 패키지를 레지스트리에 푸시 등등)
헬프 명령 (dotnet --help)
dotnet 도구를 사용하여 NuGet 패키지 설치
[샘플 .NET 프로젝트 만들기]
1. Visual Studio Code 에서 파일>폴더 열기 후 원하는 위치에 DotNetDependencies 폴더 생성
2. Visual Studio Code 에서 보기>터미널 후 차례대로 입력 ("" 따옴표는 제외)
3. "dotnet new consle" // 테스트용 프로젝트 생성
4. "dotnet run" // 프로젝트 빌드
5. Visual Studio Code 의 Explorer 에서 Program.cs 파일을 찾아 처음으로 열면 나오는 "확장: C#"을 설치
6. Program.cs 파일을 열고 다시 터미널에 차례대로 입력(""따옴표 제외)
7. "dotnet add package Humanizer --version 2.7.9" // Humanizer 라이브러리 설치
8. Visual Studio Code 의 Explorer 에서 DotNetDependencies.csproj 파일을 열고 ItemGroup 섹션 찾기
다음과 같이 표시되면 설치 완료
<ItemGroup>
<PackageReference Include="Humanizer" Version="2.7.9 />
</ItemGroup>
[활용 예시]
Program.cs 파일을 열고 아래 코드 붙여넣은 후 터미널에서 "dotnet run" 입력
using System;
using Humanizer;
namespace DotNetDependencies
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Quantities:");
HumanizeQuantities();
Console.WriteLine("\nDate/Time Manipulation:");
HumanizeDates();
}
static void HumanizeQuantities()
{
Console.WriteLine("case".ToQuantity(0));
Console.WriteLine("case".ToQuantity(1));
Console.WriteLine("case".ToQuantity(5));
}
static void HumanizeDates()
{
Console.WriteLine(DateTime.UtcNow.AddHours(-24).Humanize());
Console.WriteLine(DateTime.UtcNow.AddHours(-2).Humanize());
Console.WriteLine(TimeSpan.FromDays(1).Humanize());
Console.WriteLine(TimeSpan.FromDays(16).Humanize());
}
}
}
.NET 프로젝트에서 종속성 업데이트 관리
라이브러리 업데이트하기 전 고려해야 할 사항
업데이트 유형 : 버그 수정, 새 기능 추가, 코드 손상 등의 유형을 고려해야 함
원하는 유형의 업데이트만 가져오도록 .NET 프로젝트를 구성할 수 있음
보안 문제 : 시간 경과에 따라 취약성이 탐지되면 문제가 발생하므로 확인해야 함
유의적 버전 (산업 표준) 사용
유형 | 역할 | 참고 |
주 버전 | 출시 버전, 기준이 되는 버전 | 1.0.0에서 2.0.0으로 변경 |
부 버전 | 새 기능 추가, 기존 코드 손상에 주의 | 1.1.1에서 1.2.0으로 변경 |
패치 버전 | 버그 수정시에만 가능 | 1.0.1에서 1.0.2로 변경 |
버전 범위를 지정하는데 사용되는 표기법
Notation | 적용된 규칙 | Description |
1.0 | x>=1.0 | 최소 버전(포함) |
(1.0,) | x>1.0 | 최소 버전(제외) |
[1.0] | x==1.0 | 정확한 버전 일치 |
(,1.0] | x<=1.0 | 최대 버전(포함) |
(,1.0) | x<1.0 | 최대 버전(제외) |
[1.0,2.0] | 1.0<=x<=2.0 | 정확한 범위(포함) |
(1.0,2.0) | 1.0<x<2.0 | 정확한 범위(제외) |
[1.0,2.0] | 1.0<=x<2.0 | 초소 포함 및 최대 제외 혼합 버전 |
(1.0) | 사용안함 | 사용안함 |
주/부/패치 버전에 구성할 수 있는 예시
<!-- Accepts any version 6.1 and above. -->
<PackageReference Include="ExamplePackage" Version="6.1" />
<!-- Accepts any 6.x.y version. -->
<PackageReference Include="ExamplePackage" Version="6.*" />
<PackageReference Include="ExamplePackage" Version="[6,7)" />
<!-- Accepts any version above, but not including 4.1.3. Could be
used to guarantee a dependency with a specific bug fix. -->
<PackageReference Include="ExamplePackage" Version="(4.1.3,)" />
<!-- Accepts any version up below 5.x, which might be used to prevent pulling in a later
version of a dependency that changed its interface. However, this form is not
recommended because it can be difficult to determine the lowest version. -->
<PackageReference Include="ExamplePackage" Version="(,5.0)" />
<!-- Accepts any 1.x or 2.x version, but not 0.x or 3.x and higher. -->
<PackageReference Include="ExamplePackage" Version="[1,3)" />
<!-- Accepts 1.3.2 up to 1.4.x, but not 1.5 and higher. -->
<PackageReference Include="ExamplePackage" Version="[1.3.2,1.5)" />
오래된 패키지 찾기 및 업데이트
[패키지 나열하는 명령어]
dotnet list package --outdataed
Requested 지정한 버전 또는 버전 범위
Resolved 지정된 버전과 일치하는 실제 버전
Latest NuGet에서 업데이트용으로 사용 가능한 최신 버전
[패키지 업데이트 명령]
아래 명령을 실행 (원하는 업데이트 방식을 선택해서 한줄만 수행하면 된다)
dotnet add package <패키지이름> // 최신 버전으로 업데이트 시도
dotnet add package <패키지이름> --version *.*.* //--version=<버전 번호/range> 로 버전 지정 가능
dotnet add package <패키지이름> --prerelease // 시험판 패키지 설치
지금까지 .NET CLI를 사용하여 로컬에 종속성을 설치, 업데이트하는 방법을 알아봤습니다.
추가 리소스
[공식 NuGet 문서 링크] https://docs.microsoft.com/ko-kr/nuget/
[공식 .NET CLI 문서 링크] https://docs.microsoft.com/ko-kr/dotnet/core/tools/
[공식 NuGet 링크] https://www.nuget.org/
'공방 > 학습 일지' 카테고리의 다른 글
[ Python ] 을 시작해보자 (0) | 2020.11.20 |
---|---|
[ .NET ] File 및 Directory 작업 활용2 (0) | 2020.11.16 |
[ .NET ] File 및 Directory 작업 활용1 (0) | 2020.11.15 |
[ .NET ] File 및 Directory 작업 (0) | 2020.11.14 |
[ .NET ] 앱 디버깅 (0) | 2020.11.12 |