1. C#

C#은 서버 개발을 안정적으로 할 수 있도록 설계된 언어이다.
문법은 명확하고 타입 시스템이 명확해서 코드의 의도가 분명하게 드러난다.
Java를 경험한 사람들은 같은 객체 지향 언어로써 쉽게 배울 수 있다고 한다.
구조와 사고 방식이 익숙하기 때문이다.
C#의 특징
- 정적 타입
- 객체 지향 언어
- 컴파일 언어
- 런타임 기반 실행
Class 설계와 Inteface 기반 추상화, GC 등 Java와 닮은 구석이 많은 객체지향 언어이다.
현대적인 C#의 강점은 비동기 처리에 있다.
async와 await 문법은 비동기 흐름을 읽기 쉬운 형태로 유지해 준다.
콜백 지옥이나 복잡한 스레드 제어 없이도 I/O 중심 서버 코드를 자연스럽게 작성할 수 있다.
혹자는 C#과 ASP.NET은 너무 레거시하다고 느낄 수 있지만,
서버 환경에 잘 맞는 언어이며, 게임 회사, 대기업 내부 시스템 등 안정적인 서버 개발을 위해 많이 쓰인다.
2. .NET과 ASP.NET
Java를 오랫동안 해온 나로써, Java와 비유하여 이해하였다.
.NET

런타임 + 표준 라이브러리 묶음이다.
Java와 비교하면 'JVM + 표준 API 세트'와 같은 느낌이다.
즉, Java는 JVM 위에서 실행되지만, C#은 .NET 플랫폼 위에서 동작한다.
이 환경은 메모리 관리, 스레드 처리, 표준 라이브러리를 포괄적으로 제공한다.
우리는 비즈니스 로직 개발에만 집중하고, .NET 런타임은 실행과 자원 관리를 대신해준다.
ASP.NET

.NET 위에서 돌아가는 웹 프레임워크이다.
웹 요청을 처리하는 역할을 한다.
Java와 비교하면 'Spring'과 같은 프레임워크이다.
우리도 Spring 자체를 사용하지 않고, SpringBoot를 Spring과 동일 시 취급하여 부르기도 한다.
.NET 생태계서도, ASP.NET 자체보다 ASP.NET CORE가 표준 프레임워크가 되었다.
ASP.NET CORE

현대화된 ASP.NET 버전이라고 생각하면 편하다.
Java와 비교하면, 'SpringBoot'와 같은 현대화된 웹 프레임워크 + 실행환경 이라고 생각하면 편하다.
또 C#은 프레임워크의 결합도가 높다.
C#은 ASP.NET Core와 함께 쓰일 때 진짜 진가를 발휘한다.
웹 요청 처리, 의존성 주입, 설정 관리가 하나의 흐름으로 이어진다.
프로젝트 구조가 비교적 일관되게 유지되어 팀 단위 개발과 유지 보수에 유리하다.
ASP.NET MVC
웹 애플리케이션의 특성에 맞추어 역학별로 나눈 Architecture 패턴이다.
-> Model + Controller + View
우리는 이미 Spring MVC를 SpringBoot에서 추가하여 사용했다.
implementation 'org.springframework.boot:spring-boot-starter-web'
ASP.NET CORE에서도 MVC를 적용하여 사용한다.
builder.Services.AddControllersWithViews();
// or
builder.Services.AddControllers();