프로그래밍 일기 — .NET을 만나다

배우는 자(Learner Of Life)
13 min readDec 29, 2023

--

C#과 .NET의 세계로 뛰어들다

C# & .NET과 친해져야한다.(1)

드디어 개발자로써 취업했다. 정확히 말하자면, SCM(Supply Chain Managment)솔루션을 만드는 곳에 들어가게 되었다. 일반적인 웹 개발하고는 다른 영역이다. 이 곳에서는 웹 기술처럼 최신 프레임워크나 도구를 쓰는 것보다는, 현장의 비즈니스 로직을 이해하고 그것을 적용하는 능력이 더 중요한 분야라 할 수 있다.

물론 웹 개발에 취업을 하면 좋겠지만, 알고리즘, 컴퓨터 공학, 인터뷰 등등 준비할 것이 상대적으로 매우 많은 영역이었고, 따라서 입문 장벽이 높았다. 나는 더 이상 시간을 지체하면서 취업을 위한 시간을 쓸 수 없었다. 바로 일을 해야할 상황이 되었고, 현실적으로 내가 30대 중반의 나이에 현실적으로 긴 준비기간을 갖지 않고 취업할 수 있는 곳도 같이 고려하게 되었다. 그래서 상대적으로 보수적이면서도 연령대가 높은 응용 소프트웨어를 개발하는 곳도 같이 고려하여 지원을 하게되었다. 그러던 중 이곳에서 나를 가장 좋게 보았고, 감사하게도 이 회사는 내게 기회를 주기로 했다.

물론 그렇다고해서 이 분야가 만만하다는 말은 절대 아니다. 모든 분야는 나름대로 어려운 문제가 산적해 있다고 생각한다. 이 분야는 비즈니스 로직을 제대로 이해하고 그 것을 적용해야하는 분야에 더 가깝다. 최신 기술을 알고 응용하는 능력은 그 이후의 문제다. 어쨌든 어떠한 비즈니스 로직을 이해하고 그것을 내가 직접 적용할 수 있는 특권을 누릴 수 있음에 감사하게 생각한다. 그런면에서 웹 백엔드 개발자와 공통 분모가 있다고 생각하고 그 점에 만족한다.

어쨌든 특정한 로직을 구현하는 개발자로써 개발에 필요한 기술을 이해하는 것은 필수다. 내가 앞으로 할 일은 C#을 주로 사용한다고 한다. 그렇다면 해당 언어와 그 언어에서 가장 널리 활용되는 프레임워크에 대한 이해가 가장 먼저라고 판단했다. 마치 Python과 Flask/Django/FastAPI, 그리고 Java와 Spring의 관계처럼 말이다. 먼저 이번 글에서는 C#을 다루기전 해당 언어에서 가장 널리 활용되는 프레임워크인 .NET Core에 대해 알아보려고 한다.

.NET Core 알기

.NET Core란 Microsoft에서 제공하는 가장 최신 버전의 .NET 프레임워크로써, 무료로 사용가능하고, 오픈소스이며 다양한 목적을 위한 프로그래밍에 활용될 수 있는 플랫폼이다. Windows, MacOS, Linux와 모두 호환되며 특유의 가볍고 빠른 특징 덕분에 모바일, 데스크탑, 온라인, 클라우드, IoT, 머신러닝, 마이크로서비스, 게임 등등 다양한 형태의 어플리케이션에 활용될 수 있다. 기존 .NET 프레임워크에 비해 경량성과 속도, 모듈화와 크로스 플랫폼을 염두해두고 처음부터 만들어졌다.

현재 Microsoft가 개발한 .NET Core는 .NET Foundation이라는 비영리 오픈소스 기관에서 관리한다. MIT 라이센스가 적용되며, .NET Core는 C#와 C++로 작성되었다.

.NET 프레임워크는 오직 .NET을 활용해 만들어진 Windows 어플리케이션에만 적용되지만, .NET Core는 대표적인 3개의 OS에서 모두 활용될 수 있다는 차이점이 있다.

.NET CORE의 특징

  • 오픈소스 및 크로스 플랫폼 프레임워크로써, .NET 프레임워크의 부분 중 하나다.
  • 윈도우, MacOS, Linux에서 활용 가능하다.
  • Microsoft가 2016년에 .NET 프레임워크의 후속작으로 개발했다.
  • .NET Core는 모듈화(modular), 경량화(lightweight), 빠른처리(fast)를 위해 처음부터 다시 만들어졌다.
  • .NET Core앱을 실행하기위한 코어 기능들을 지원한다.
  • 많은 API와 프레임워크를 지원하며, 특히 ASP.NET Core는 웹 어플리케이션을 개발하는데 있어 매우 강력하다.

.NET Core를 사용하는 이유?

  • 크로스 플랫폼이므로 모든 플랫폼에서 실행가능한 어플리케이션을 만들 수 있다.
  • 경량화되었고 가벼워 성능이 좋다.
  • .NET Core는 클라우드와 쉽게 연동이 가능하다.
  • 비동기 프로그래밍(asynchronous programming) 및 VSCode와 같은 경량화된 에디터를 포함한 최신화된 개발 도구 및 기술들을 지원한다.

.NET Core의 릴리즈 히스토리

  • .NET Core 6은 내년 11월 12일 지원이 종료된다(11/12/2024)
  • .NET Core 7는 내년 5월 14일 지원이 종료된다(05/14/2024)
  • .NET Core 1.0 ~ 3.1은 2022년 부로 모두 지원 종료되었다.
  • .NET 5 역시 2022년 부로 모두 지원 종료되었다.

팁: 일반적인 각 프레임워크 버전의 지원 기간은 출시일 이후 18개월 정도이다.

.NET Core와 .NET 프레임워크의 차이

.NET Core

  • 오픈 소스이며 Windows, MacOS, Linux에서 모두 활용 가능
  • 데스크탑 어플리케이션 만을 지원한다(ASP.NET은 웹 어플도 지원)
  • 높은 성능과 확장성을 지원한다.
  • Code Access Security와 같은 보안 장치를 지원하지 않는다.
  • WCF(Windows Communication Foundation)을 지원하지 않으며, 항상 REST API를 만들어야한다.

.NET 프레임워크

  • 일부 컴포넌트가 오픈소스다.
  • Windows에만 활용 가능
  • 데스크탑과 웹 어플을 모두 지원한다.
  • .NET Core보다 성능이 상대적으로 나쁘다.
  • Code Access Security와 같은 보안 장치를 지원한다.
  • WCF(Windows Communication Foundation)활용시 매우 좋은 솔루션이다. WCF는 RESTful한 서비스를 지원한다.

.NET Core 플랫폼 아키텍쳐 구성

  • CLI: 개발 및 배포를 위한 커맨드라인 도구
  • Roslyn: C# 및 Visual Basic을 위한 언어 컴파일러
  • CoreFX: 프레임워크 라이브러리 모음
  • CoreCLR: A JIT(Just-in-Time) 기반 CLR(Command Language Runtime)

.NET Core 언어 컴파일러

  • .NET Core에 포함된 컴파일러들은 언어를 변환하는 역할을 한다. C#/F#/Visual Basic과 같은 언어들을 중간어(Intermediate Language) 코드로 변환한다.
  • IL은 .NET 런타임에서 실행 가능한 저수준(low-level)언어이다.
  • Roslyn 언어 컴파일러는 C#및 Visual Basic에 활용된다.
  • #F 컴파일러(fsc.exe)는 F# 코드를 컴파일하기 위해 활용된다.

.NET Core CLR

  • .NET Core에서 활용되는 .NET 런타임 (즉, 실행 엔진)
  • .NET Core 어플리케이션의 컴파일 및 실행을 담당
  • Garbage Collection, JIT 컴파일 및 실행 관리 기능 등을 제공
  • 성능이 뛰어나고 최신 하드웨어에 최적화 되어있다
  • 모듈화되었으며 경량화되었고, 기존 .NET 프레임워크에 비해 더 적은 리소스를 사용한다

.NET CoreFX

  • .NET Core 어플리케이션을 위한 기본적인 기능을 제공하는 라이브러리들의 모음이다.
  • I/O, 네트워킹, Collections 관련 기능등 다양한 라이브러리를 제공한다.
  • 개발자가 어플리케이션을 위한 라이브러리를 골라 사용할 수 있도록 모듈화되어 있다.(모듈화의 장점)

.NET Core 환경 설정(VSCode) 및 실행방법

Terminal에서 dotnet new --list 를 입력하면, 해당 컴퓨터에 설치된 .NET Core에서 지원하는 명령어들을 볼 수 있다.

로컬에 설치된 .NET Core에서 지원하는 커맨드의 리스트를 볼 수 있다.

다음으로 dotnet new console -n coreConsoleProject 를 입력하면 새로운 .NET Core 프로젝트를 생성할 수 있다.

새로운 .NET Core 프로젝트 폴더(coreConsoleProject)가 생성된 것을 볼 수 있다.

프로젝트를 VSCode상에서 실행하려면 code . 를 입력하면된다. 현재 나는 VSCode로 프로젝트를 연 상황이고, 별도의 실행할 파일이 아직 없는 상태이므로 지금은 입력해도 소용이 없을 것이다.

프로젝트를 빌드할 때는 dotnet build 명령어를 사용한다. 빌드하고자하는 프로젝트 경로에 들어가 해당 커맨드를 입력하면 bin 폴더가 생성되는 것을 볼 수 있다. 또한 프로그램 실행에 필요한 파일들이 자동적으로 생성되는 것을 볼 수 있다.

빌드 후 프로젝트에 bin폴더 및 여하 다른 실행에 필요한 파일들이 생성된다.

프로그램을 실행하는 커맨드는 dotnet run 이다. 일단 기본 프로그램은 Hello World! 를 출력하도록 구성되어 있다.

기본 상태에서 실행하면 Hello World!가 터미널 상에서 출력되는 것을 볼 수 있다.

C# intelliSense

Visual Studio Code에서 작업시 자동으로 코드를 완성시켜주는 Smart Code Completion extension으로 일반적으로 에디터에 내재되어있다.

intelliSense는 VSCode에서 코드 작성시에 자동으로 코드를 완성시켜주는 도구다.

.NET CLI

  • 새로운 크로스 플랫폼 도구다.
  • CLI는 .NET 어플리케이션을 생성하고, 패키지를 복구하며, 빌드 및 게시하기 위해 활용할 수 있다.
  • 패키지의 설치를 지원한다.
  • 다양한 커맨드를 지원하여 .NET Core 프로젝트의 생성, 빌드 및 실행을 지원한다.
  • 의존성 관리 및 패키지에 대한 추가, 삭제, 업데이트가 가능하다.
  • 쉽게 자동화가 가능하며 배포 파이프라인에 통합 및 빌드할 수 있다.
  • .NET SDK에 포함된 도구이다.

.NET의 커맨드 구조:dotnet<command> <argument> <option>

  • 모든 커맨드는 dotnet 이라는 driver로 시작한다.
  • driver는 특정 커맨드를 실행하는 역할이다.
  • dotnet driver 입력 후에는 동사(어떠한 일을 수행할 것인지)를 넣어 특정 작업을 수행하도록 하는 개념이다.
  • 각 커맨드에는 인자(argument)및 옵션(options)이 따라온다.

대표 커맨드

  • dotnet -help : 제공되는 모든 커맨드의 리스트를 본다.
  • dotnet new : .NET 프로젝트 초기화
  • dotnet build : .NET 프로젝트 빌드
  • dotnet run : .NET 프로젝트 실행
  • dotnet test : 프로젝트내 정의된 test runner로 단위 테스트 실행
  • dotnet clean : 빌드 아웃풋 지우기
  • dotnet restore : .NET 프로젝트내 정의된 의존성 복구
  • dotnet publish : 배포를 위해 .NET 프로젝트 게시(런타임 포함)
  • dotnet pack : NuGet 패키지생성
  • dotnet migrate : .json 프로젝트를 msbuild 기반 프로젝트로 이동
  • dotnet sln : 솔루션(SLN) 파일 수정

수정 커맨드

  • add : 프로젝트에 아이템 추가
  • remove : 프로젝트에 아이템 제거
  • list : 프로젝트의 아이템 리스트화

심화 커맨드

  • nuget : 추가적인 NuGet 커맨드 제공(3rd party 패키지 설치 도구)
  • msbuild : Microsoft 빌드 엔진 실행 (MSBuild)
  • vstest : Microsoft Test Execution Command Line Tool 실행

만약 웹 프로젝트를 생성하고 싶다면 dotnet new web --name={생성할 프로젝트 이름} 커맨드를 사용할 수 있다.

web project를 생성하면 위와 같은 파일들이 생성된다.

이후 dotnet build 를 통해 빌드한 후 dotnet run 을 입력하면 프로젝트를 실행할 수 있다.

웹 프로젝트 빌드 후 실행하면 로컬호스트 서버가 동작되는 것을 볼 수 있다.

이후 지정된 포트번호와 함께 로컬호스트 주소를 브라우져상에서 입력하면 프로그램이 실행된 결과물을 볼 수 있다.

웹 프로젝트의 경우 브라우져상에서 프로그램의 실행을 확인할 수 있다.

일반적인 .NET Core 콘솔 어플리케이션 개발 및 실행

거의 모든 .NET Core 콘솔 프로젝트는 아래와 같은 방식으로 생성하고 실행한다.

  1. dotnet new console -n coreConsoleApplication 을 입력해 콘솔 어플리케이션을 생성할 수 있다. 만약 특정 경로에 생성하고 싶다면 뒤에 -o {생성할 경로} 옵션 값을 입력해주면된다.
  2. 이후 프로젝트 실행은 dotnet build 를 통해 빌드하고, dotnet run 을 통해 실행한다. 빌드 과정에서 에러나 경고가 없는지 확인하게된다.

일반적으로 프로그램의 내용은 program.cs 파일에 코딩된다. 보통 여기에 작성한 내용을 빌드 후 실행한다고 보면 되는 것이다.

Program.cs파일에 프로그램의 내용이 쓰여진다.

주의 — 기억할 내용:

  • .NET Core 플랫폼은 데스크탑 어플리케이션을 개발할 수 있는 크로스 플랫폼이며, 따라서 여러 OS를 지원한다(Windows, MacOS, Linux)

참고 자료

앞으로 .NET Core를 학습하는데 있어 그때 그때 필요한 내용을 찾을 수 있어야하는데, 이를 위한 참고 자료를 링크하면 좋을 것 같다. 아무래도 주로 Microsoft에서 제공하는 공식 문서를 참고하는 것이 좋을 것이다.

참조:

(1) https://media.licdn.com/dms/image/D4D12AQGRHI-Lb_sWeQ/article-cover_image-shrink_600_2000/0/1684936949564?e=2147483647&v=beta&t=Mc7K-hziS2Uv0hL2Pe1o56QMNJrCpFEtw_LbRuF2Jvs

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

배우는 자(Learner Of Life)
배우는 자(Learner Of Life)

Written by 배우는 자(Learner Of Life)

배움은 죽을 때까지 끝이 없다. 어쩌면 그게 우리가 살아있다는 증거일지도 모른다. 배움을 멈추는 순간, 혹은 배움의 기회가 더 이상 존재하지 않는 순간, 우리의 삶은 어쩌면 거기서 끝나는 것은 아닐까? 나는 배운다 그러므로 나는 존재한다. 배울 수 있음에, 그래서 살아 있음에 감사한다.

No responses yet

Write a response