2026년 상위 40개 .Net 면접 질문과 답변

.Net 면접을 준비하려면 직면하게 될 상황에 대한 명확한 이해가 필요하며, 핵심 개념을 이해하는 것이 필수적입니다. 두 번째 문장에 ".Net 면접 질문"을 포함해야 즉각적인 관련성을 확립할 수 있기 때문입니다.
.Net 인터뷰를 통해 업계 동향, 실무 적용 사례, 그리고 심도 있는 기술 경험을 바탕으로 탄탄한 경력 기회를 확보할 수 있습니다. 도메인 전문 지식, 루트 레벨 경험, 그리고 뛰어난 분석 능력을 갖춘 전문가들은 신입 및 경력 지원자 모두 기본, 고급, 중급, 시니어, 그리고 면접을 통해 기술 역량을 강화하는 데 도움이 되는 핵심 질문과 답변을 통해 많은 도움을 받을 수 있습니다. 자세히보기 ...
👉 무료 PDF 다운로드: .Net 면접 질문 및 답변
1) .NET Framework란 무엇이고 주요 구성 요소는 무엇입니까?
.NET Framework는 다음에서 개발한 소프트웨어 개발 플랫폼입니다. Microsoft 애플리케이션 빌드, 배포 및 실행을 위한 제어된 환경을 제공합니다. C#, VB.NET, F# 등 여러 언어를 지원합니다. 이 프레임워크는 공통 언어 런타임(CLR)을 통해 언어 간 상호 운용성과 메모리 관리를 보장합니다.
주요 구성 요소 :
| 구성 요소 | 기술설명 |
|---|---|
| CLR(공용 언어 런타임) | 메모리, 보안, 코드 실행을 관리합니다. |
| FCL(프레임워크 클래스 라이브러리) | 재사용 가능한 클래스, 인터페이스, 값 유형의 방대한 컬렉션입니다. |
| ASP.NET | 동적 웹 애플리케이션 개발이 가능합니다. |
| ADO.NET | 다양한 데이터 소스에서 데이터 액세스를 제공합니다. |
예: AC# 애플리케이션은 관리되는 환경을 통해 ADO.NET을 사용하여 SQL Server 데이터베이스에 연결하여 안전성과 확장성을 보장합니다.
2) .NET Framework, .NET Core, .NET 5/6/7의 차이점을 설명하세요.
Microsoft .NET을 크로스 플랫폼 개발을 지원하는 통합 플랫폼으로 발전시켰습니다.
. NET 프레임 워크 is Windows-만, 동안 .NET 코어 오픈 소스이며 크로스 플랫폼입니다. .NET 5 앞으로 Microsoft 이들을 하나의 통합 런타임으로 병합했습니다.
| 특색 | . NET 프레임 워크 | .NET 코어 | .NET 5/6/7+ |
|---|---|---|---|
| 플랫폼 지원 | Windows 만 | 교차 플랫폼 | 교차 플랫폼 |
| 오픈 소스 | 아니 | 가능 | 가능 |
| 성능 | 보통 | 높음 | 매우 높음 |
| 전개 | 시스템 전체 | 독립형 | 유연성 |
| 사용 예 | 레거시 엔터프라이즈 앱 | 클라우드 및 마이크로서비스 | 최신 멀티 플랫폼 앱 |
3) 공용 언어 런타임(CLR)은 코드 실행을 어떻게 관리합니까?
CLR은 .NET 애플리케이션의 실행 엔진 역할을 합니다. JIT(Just-In-Time) 컴파일을 통해 중간 언어(IL) 코드를 네이티브 기계어 코드로 변환합니다. 또한 가비지 컬렉션을 사용하여 자동 메모리 관리 기능을 제공합니다.
CLR의 주요 기능:
- 메모리 관리 – 메모리를 자동으로 할당하고 할당을 해제합니다.
- 보안 관리 – 코드 액세스 보안과 역할 기반 보안을 확인합니다.
- 예외 처리 – 런타임 오류가 올바르게 포착되고 관리되도록 보장합니다.
- 스레드 관리 – 멀티스레드 코드의 효율적인 실행을 제공합니다.
예: .NET 프로그램이 실행되면 CLR은 필요에 따라 IL 코드를 네이티브 코드로 컴파일하여 최적의 실행을 보장합니다.
4) .NET의 JIT 컴파일러에는 어떤 유형이 있나요?
CLR은 세 가지 유형의 JIT(Just-In-Time) 컴파일러를 제공합니다.
| 타입 | 기술설명 | 적용 사례 |
|---|---|---|
| Pre-JIT(NGen) | 배포 시점에 전체 코드를 한 번에 컴파일합니다. | 시작 시간이 단축됩니다. |
| 이코노-JIT | 런타임에 호출되는 메서드만 컴파일하고 나중에 삭제합니다. | 메모리가 제한된 환경. |
| 정상 JIT | 실행 중에 메서드별로 코드를 컴파일합니다. | 표준 실행 모델. |
각 JIT 접근 방식은 다음 사이의 균형을 유지합니다. 성능 및 자원 사용 배포 컨텍스트를 기반으로 합니다.
5) .NET의 어셈블리란 무엇이고 네임스페이스와 어떻게 다릅니까?
An 어셈블리 .NET 애플리케이션의 가장 작은 배포 가능 단위로, 컴파일된 코드, 메타데이터 및 리소스를 포함합니다. 네임 스페이스반면에, 는 코드 구성에 사용되는 클래스의 논리적 그룹입니다.
| 비교 | Assembly | 네임 스페이스 |
|---|---|---|
| 자연 | 물리적 파일(DLL/EXE) | 논리적 그룹화 |
| 목적 | 배포 및 버전 관리 | 코드 구성 |
| 포함 | 메타데이터, 매니페스트, MSIL | 클래스, 인터페이스 |
| 예시 | System.Data.dll |
System.Data.SqlClient |
예: System.Data.dll 어셈블리에는 다음과 같은 여러 네임스페이스가 포함될 수 있습니다. System.Data 및 System.Data.SqlClient.
6) .NET에서 값 유형과 참조 유형의 차이점은 무엇입니까?
.NET에서, 값 유형 데이터를 직접 저장하는 동안 참조 유형 데이터의 메모리 주소에 대한 참조를 저장합니다.
| 베이스 | 값 유형 | 참조 유형 |
|---|---|---|
| 스토리지 | 스택 | 더미 |
| 예시 유형 | int, float, bool, 구조체 | 클래스, 배열, 문자열 |
| 복사하기 | 실제 값을 복사합니다 | 참조를 복사합니다 |
| Null 허용 | 아니 | 가능 |
예:
int a = 5; int b = a; → 둘 다 별도의 사본을 보관합니다.
ClassObj x = new ClassObj(); ClassObj y = x; → 둘 다 같은 객체를 가리킵니다.
7) .NET에서 가비지 컬렉션은 어떻게 작동합니까?
.NET의 가비지 컬렉션(GC)은 사용되지 않는 객체를 회수하여 메모리를 자동으로 관리합니다. 세대 성능을 최적화합니다.
세대별 GC:
- 0세대: 수명이 짧은 객체(예: 임시 변수).
- 1세대: Gen 0에서 승격된 중수명 객체입니다.
- 2세대: 장수 객체(예: 정적 데이터).
이점:
- 메모리 누수를 방지합니다.
- 애플리케이션 성능이 향상됩니다.
- 개발자의 메모리 처리를 간소화합니다.
예: 객체가 더 이상 참조되지 않으면 GC는 해당 객체를 힙에서 제거하여 재사용을 위해 메모리를 확보합니다.
8) 대의원이란 무엇이고 이벤트와 어떻게 다릅니까?
A 위임하다 는 메서드에 대한 참조를 나타내는 유형입니다. event 대리자를 통해 클래스 간 통신을 가능하게 하는 메커니즘입니다.
| 아래 | 대리자 | 이벤트 |
|---|---|---|
| 정의 | 메서드를 가리키는 객체 | 알림 메커니즘 |
| 기도 | 직접 전화 가능 | 구독자를 통해 호출됨 |
| 예시 | Action<int> myDelegate; |
event EventHandler myEvent; |
예:
public delegate void Notify(); public event Notify OnProcessCompleted;
여기 OnProcessCompleted 는 다음을 기반으로 하는 이벤트입니다. Notify 대리자.
9) .NET Core를 사용하는 것의 주요 장점과 단점은 무엇입니까?
| 장점 | 단점 |
|---|---|
| 크로스 플랫폼 지원 | 초보자를 위한 가파른 학습 곡선 |
| 오픈 소스 및 커뮤니티 중심 | 레거시 프레임워크에 대한 제한된 지원 |
| Kestrel 서버로 고성능 구현 | 이전 프로젝트의 마이그레이션 과제 |
| 내장된 종속성 주입 | 일부 API는 아직 발전 중입니다. |
예: .NET Core는 Linux 및 Linux 기반 Docker 컨테이너에서 실행되는 마이크로서비스를 구축하는 데 이상적입니다. Windows 서버.
10) ASP.NET 페이지의 수명 주기를 설명하세요.
ASP.NET 페이지 수명 주기는 페이지가 초기화, 처리 및 렌더링되는 방식을 정의합니다. 각 단계는 개발자가 사용자 지정 로직을 실행하기 위해 처리할 수 있는 이벤트를 제공합니다.
| 단계 | 기술설명 |
|---|---|
| 페이지 요청 | 사용자가 처음으로 페이지를 요청합니다. |
| 스타트 | 요청이 포스트백인지 여부를 결정합니다. |
| 초기화 | 모든 컨트롤이 초기화됩니다. |
| 하중 | 페이지 데이터와 컨트롤이 로드되었습니다. |
| 포스트백 이벤트 처리 | 컨트롤에 의해 트리거되는 이벤트를 처리합니다. |
| 표현 | 페이지가 HTML로 렌더링됩니다. |
| 부리다 | 응답을 보낸 후 정리 단계입니다. |
예: 개발자들은 종종 다음을 사용합니다. Page_Load or Page_Init 컨트롤을 초기화하거나 데이터 바인딩을 설정하는 이벤트입니다.
11) Entity Framework(EF)란 무엇이고, 어떻게 데이터베이스 작업을 단순화합니까?
엔터티 프레임워크(EF)는 Microsoft의 객체 관계 매퍼(ORM) 개발자가 .NET 객체를 사용하여 데이터베이스와 상호 작용할 수 있도록 함으로써 대부분의 데이터 액세스 코드가 필요 없게 합니다. SQL 생성, 데이터 매핑 및 관계 관리가 자동으로 처리됩니다.
주요 특징:
- 지원 LINQ-to-Entities 검색어.
- 제공 자동 변경 추적 및 게으른 로딩.
- 제공 코드 우선, 데이터베이스 우선및 모델 우선 구혼.
예:
using (var context = new AppDbContext())
{
var employees = context.Employees.Where(e => e.Salary > 50000).ToList();
}
여기에서 EF는 LINQ 쿼리를 SQL로 변환하고 결과를 검색하여 매핑합니다. Employee 객체를 자동으로.
12) Entity Framework에서 코드 우선, 데이터베이스 우선, 모델 우선 접근 방식의 차이점을 설명하세요.
| 접근 | 기술설명 | 적용 사례 |
|---|---|---|
| 코드 우선 | 클래스를 정의하고 EF가 데이터베이스를 생성하도록 합니다. | 그린필드 프로젝트. |
| 데이터베이스 우선 | 먼저 데이터베이스를 생성하면 EF가 엔터티 클래스를 생성합니다. | 기존 데이터베이스. |
| 모델 우선 | 엔터티를 시각적으로 디자인하고, EF는 DB와 클래스를 모두 생성합니다. | 다이어그램 기반 디자인. |
예: Code-First 접근 방식에서 개발자는 다음과 같은 C# 클래스를 생성합니다. Customer 및 Order, EF는 SQL Server에서 해당 테이블을 자동으로 빌드합니다.
13) LINQ란 무엇이고 .NET 개발에 있어서 어떤 장점이 있나요?
언어 통합 쿼리(LINQ) C# 또는 VB.NET 내에서 일관된 구문을 사용하여 다양한 소스(객체, XML, 데이터베이스)에서 데이터를 쿼리할 수 있습니다.
그것은 향상 가독성, 유형 안전성및 컴파일 타임 검사.
LINQ의 장점:
- 다양한 데이터 소스에 대한 통합 구문.
- 코드 복잡성을 줄입니다.
- IntelliSense와 컴파일 타임 검증을 제공합니다.
- 성능 최적화를 위해 지연 실행을 지원합니다.
예:
var highSalaries = employees.Where(e => e.Salary > 70000)
.OrderBy(e => e.Name)
.ToList();
14) .NET에서 IEnumerable, ICollection, IQueryable의 차이점은 무엇입니까?
| 인터페이스 | 실행 유형 | 적용 사례 | 주요 차이점 |
|---|---|---|---|
| IEnumerable | 메모리 내 반복 | 지역 컬렉션 | 클라이언트 측에서 실행합니다. |
| 아이컬렉션 | 메모리 내에서 추가/제거 지원 | 컬렉션 수정 | 컬렉션 관리로 IEnumerable을 확장합니다. |
| 쿼리 가능 | 지연된 실행(원격) | LINQ to SQL/EF | 데이터베이스 수준에서 실행됩니다. |
예: 사용 IQueryable Entity Framework에서는 데이터베이스 측 필터링을 사용할 수 있으며 이는 다음을 사용하는 것보다 훨씬 효율적입니다. IEnumerable 메모리에.
15) 비동기 프로그래밍이란 무엇이고, async와 await는 .NET에서 어떻게 작동합니까?
.NET의 비동기 프로그래밍을 사용하면 메인 스레드를 차단하지 않고 여러 작업을 실행할 수 있으므로 웹 및 데스크톱 애플리케이션의 응답성이 향상됩니다.
키 Concepts:
async메서드를 비동기로 표시합니다.await대기 중인 작업이 완료될 때까지 메서드 실행을 일시 중단합니다.- 스레드 기아와 UI 정지를 방지합니다.
예:
public async Task<int> GetDataAsync()
{
var data = await httpClient.GetStringAsync("https://api.example.com");
return data.Length;
}
이점 : I/O 작업이 백그라운드에서 실행되는 동안에도 메인 스레드는 다른 작업을 처리할 수 있습니다.
16) 종속성 주입(DI)이란 무엇이고 .NET Core에서 왜 중요한가요?
DI(Dependency Injection)는 다음을 가능하게 하는 디자인 패턴입니다. 느슨한 결합 내부적으로 종속성을 생성하는 대신 클래스 간에 종속성을 주입합니다.
장점:
- 테스트 가능성을 향상시킵니다.
- Promo모듈형 디자인.
- 구성 관리를 간소화합니다.
예:
public class OrderService
{
private readonly IEmailService _emailService;
public OrderService(IEmailService emailService)
{
_emailService = emailService;
}
}
.NET Core에서는 DI가 프레임워크에 내장되어 있습니다. IServiceCollection 에 사용되는 용기 Startup.cs.
17) .NET 애플리케이션에서 예외를 효과적으로 처리하려면 어떻게 해야 합니까?
예외 처리는 애플리케이션 충돌 없이 런타임 오류가 적절하게 관리되도록 보장합니다. 주요 메커니즘은 다음과 같습니다. try-catch-finally 블록.
예:
try
{
int result = 10 / divisor;
}
catch (DivideByZeroException ex)
{
Console.WriteLine("Cannot divide by zero.");
}
finally
{
Console.WriteLine("Operation completed.");
}
모범 사례:
- 항상 구체적인 예외를 먼저 포착하세요.
-
finally정리 논리를 위해 - 빈 catch 블록을 피하세요.
- ASP.NET Core에서 전역 예외 처리 사용(
UseExceptionHandler()미들웨어).
18) .NET 애플리케이션의 주요 보안 관행은 무엇입니까?
보안 .NET에서는 인증, 권한 부여, 데이터 암호화, 입력 검증을 포함한 여러 계층이 포함됩니다.
주요 사례:
- ASP.NET ID 인증 및 역할 관리를 위해.
- 사용 HTTPS(SSL/TLS) 데이터 암호화를 위해.
- 신청 데이터 검증 및 매개변수화된 쿼리 SQL 주입을 방지하려면.
- 데이터 보호 API 쿠키와 토큰을 보호하기 위해.
- 구현 JWT(JSON 웹 토큰) API의 무상태 인증을 위해.
예: JWT 기반 인증은 일반적으로 마이크로서비스에서 세션 상태를 유지하지 않고 사용자 신원을 확인하는 데 사용됩니다.
19) C#에서 추상 클래스와 인터페이스의 차이점을 설명하세요.
| 특색 | 추상 클래스 | 인터페이스 |
|---|---|---|
| 실시 | 메서드 구현을 포함할 수 있습니다 | 선언만 가능(C# 8에서는 기본값 허용) |
| 다중 상속 | 지원되지 않음 | 지원 |
| 생성자 | 생성자를 가질 수 있습니다 | 생성자를 가질 수 없습니다 |
| 적용 사례 | 공유 코드가 있는 기본 클래스 | 여러 개의 관련 없는 클래스에 대한 계약 |
예:
abstract class Animal { public abstract void Speak(); }
interface IPet { void Play(); }
A Dog 클래스는 상속할 수 있습니다 Animal 구현하다 IPet 동시에.
20) .NET에서 일반적으로 사용되는 디자인 패턴은 무엇이며, 그 이점은 무엇입니까?
디자인 패턴은 반복되는 소프트웨어 설계 문제에 대한 검증된 해결책입니다. 디자인 패턴은 유지 관리성, 확장성 및 가독성.
| 패턴 유형 | 예시 | 기술설명 |
|---|---|---|
| 창조 | 싱글턴, 팩토리 | 객체 생성을 관리합니다. |
| 구조 | 어댑터, 데코레이터 | 클래스나 객체를 결합합니다. |
| 행동의 | 관찰자, 전략 | 객체 통신을 정의합니다. |
예: .NET Core에서는 싱글 톤 패턴 공유 서비스(예: 로깅)에 등록하여 사용하는 경우가 많습니다. AddSingleton() 종속성 주입에서.
21) .NET MAUI란 무엇이며 어떻게 다릅니까? Xamarin?
.NET MAUI(멀티 플랫폼 앱 UI) 의 진화입니다 Xamarin.Forms. 개발자가 빌드할 수 있습니다. 크로스 플랫폼 애플리케이션 을 통한 Android, IOS, macOS및 Windows 단일 공유 코드베이스에서.
| 특색 | Xamarin.양식 | .NET 마우이 |
|---|---|---|
| 프레임워크 기반 | .NET 프레임워크/모노 | 통합 .NET 6+ |
| 아키텍처 | 플랫폼별 프로젝트 | 단일 프로젝트 구조 |
| 성능 | 보통 | .NET 런타임으로 개선됨 |
| 핫 리로드 | 제한된 | 전체 핫 리로드 지원 |
예: 하나의 .NET MAUI 프로젝트에는 다음과 같은 폴더 아래에 플랫폼별 코드가 포함될 수 있습니다. Platforms/Android or Platforms/iOS플랫폼 간에 공통 UI 구성 요소를 공유합니다.
이점 : 플랫폼 간 개발을 간소화하고 유지관리성을 향상시킵니다.
22) Blazor란 무엇이고, 다양한 호스팅 모델은 무엇입니까?
블레이저 C# 대신 C#을 사용하여 대화형 웹 UI를 구축하기 위한 프레임워크입니다. Java스크립트. .NET을 이용한 풀스택 웹 개발을 가능하게 합니다.
| 호스팅 모델 | 기술설명 | 실행 위치 |
|---|---|---|
| 블레이저 서버 | 서버에서 실행되며 UI 업데이트를 전송합니다. SignalR | 서버 |
| 블레이저 웹Assembly | 웹을 사용하여 브라우저에서 클라이언트 측을 실행합니다.Assembly | Browser |
| 블레이저 하이브리드(MAUI) | 웹 UI와 기본 데스크톱/모바일 앱을 결합합니다. | 로컬 앱 |
예: Blazor Server 애플리케이션은 안전하고 중앙화된 제어가 필요한 엔터프라이즈 대시보드에 적합한 반면 Blazor Web은Assembly 오프라인 지원 애플리케이션에 적합합니다.
23) .NET의 마이크로서비스란 무엇이며 모놀리식 아키텍처에 비해 어떤 장점을 제공합니까?
마이크로서비스 아키텍처는 애플리케이션을 다음과 같이 분해합니다. 독립적이고 배포 가능한 서비스각각 특정 사업 역량을 처리합니다.
| 아래 | 단단히 짜여 하나로 되어 있는 | 마이크로 서비스 |
|---|---|---|
| 전개 | 단품 | 독립 서비스 |
| 확장성 | 전체 앱 확장 | 서비스별 규모 |
| 기술 스택 | 고정 | 다국어 지원 |
| 오류 격리 | 높음 | 높음 |
장점:
- 독립적인 배포 및 확장.
- 오류 격리가 더 쉽고 복구도 더 빠릅니다.
- CI/CD 파이프라인과 DevOps 관행을 지원합니다.
예: .NET 기반 전자상거래 시스템은 분리될 수 있습니다. OrderService, InventoryService및 PaymentService 개별 REST 또는 gRPC 서비스로.
24) gRPC는 REST API에 비해 .NET 마이크로서비스의 통신을 어떻게 개선합니까?
gRPC(Google 원격 프로시저 호출) 고성능 통신 프레임워크입니다. 프로토콜 Buffers (프로토버프) 메시지 직렬화를 위해.
| 특색 | REST API | gRPC |
|---|---|---|
| 형성 | JSON | 바이너리(protobuf) |
| 속도 | JSON 파싱으로 인해 더 느림 | 훨씬 더 빨리 |
| 의사 소통 | HTTP 1.1 | HTTP/2(양방향) |
| 계약 | 오픈API | .proto 파일 |
| 적용 사례 | 웹앱 | 내부 서비스 커뮤니케이션 |
예: .NET에서 gRPC 서비스는 다음을 사용하여 정의됩니다. .proto 파일로 변환하여 C# 코드로 컴파일하면 마이크로서비스와 IoT에 적합한 더 빠르고 컴팩트한 메시징을 제공합니다.
25) .NET 애플리케이션에서 성능을 최적화하기 위한 모범 사례는 무엇입니까?
성능 튜닝은 시니어 개발자에게 중요한 기술입니다. 최적화는 코드 효율성, 메모리 관리, 데이터베이스 상호작용에 중점을 두어야 합니다.
모범 사례:
- 비동기 프로그래밍 사용 (
async/await) 차단을 방지합니다. - 자주 사용되는 데이터 캐시 MemoryCache 또는 Redis를 사용합니다.
- 할당을 최소화하세요 사용
Span<T>또는 대용량 데이터를 풀링합니다. - 프로필 코드 dotTrace나 PerfView와 같은 도구를 사용합니다.
- EF 쿼리 최적화 과
AsNoTracking()읽기 전용 데이터의 경우.
예:
var users = context.Users.AsNoTracking().ToList();
이렇게 하면 추적 오버헤드가 방지되어 대규모 결과 집합의 성능이 향상됩니다.
26) .NET Core에서 사용할 수 있는 캐싱 기술은 무엇입니까?
캐싱은 재사용을 위해 데이터를 일시적으로 저장하여 성능을 향상시킵니다.
| 캐시 유형 | 기술설명 | 사용 예 |
|---|---|---|
| 메모리 내 캐시 | 서버 메모리에 데이터를 저장합니다. | IMemoryCache |
| 분산 캐시 | 서버 간 공유 캐시. | IDistributedCache, 레디스 |
| 응답 캐싱 | HTTP 응답을 캐시합니다. | ResponseCache 속성 |
| 출력 캐싱 | 전체 렌더링된 출력을 재사용합니다. | ASP.NET Core 미들웨어 |
예:
_cache.Set("EmployeeList", employeeData, TimeSpan.FromMinutes(30));
분산 캐싱의 경우, Redis는 종종 부하 분산 환경에 사용됩니다.
27) .NET Core 애플리케이션에서 로깅과 모니터링을 어떻게 구현하나요?
로깅은 문제를 추적하고 시스템 상태를 모니터링하는 데 필수적입니다. .NET Core는 타사 공급자와 통합할 수 있는 기본 제공 로깅 추상화를 제공합니다.
기법:
- ILogger 구조화된 로깅을 위한 인터페이스.
- 통합 세릴로그, N로그및 애플리케이션 인사이트.
- 다음과 같은 중앙 시스템에 로그를 저장합니다. ELK(엘라스틱 스택).
예:
public class UserController
{
private readonly ILogger<UserController> _logger;
public UserController(ILogger<UserController> logger)
{
_logger = logger;
}
}
모니터링 도구:
- Azure 애플리케이션 인사이트
- 프로메테우스 + 그라파나
- 뉴 렐릭 / 데이터독
28) .NET 애플리케이션에 사용할 수 있는 주요 배포 옵션은 무엇입니까?
.NET 애플리케이션은 여러 가지 유연한 방법을 사용하여 배포할 수 있습니다.
| 배포 유형 | 기술설명 | 적용 사례 |
|---|---|---|
| 프레임워크 종속 배포(FDD) | 호스트에 .NET 런타임이 설치되어 있어야 합니다. | 공유 서버. |
| 자체 포함 배포(SCD) | 패키지에 .NET 런타임이 포함되어 있습니다. | 격리된 클라우드 앱. |
| 고정 컨테이너 | 종속성이 있는 패키지 앱입니다. | 마이크로서비스 및 CI/CD. |
| Azure 앱 서비스 | 웹 앱을 위한 클라우드 기반 호스팅. | 확장 가능한 SaaS 앱. |
예: .NET 8 웹 API를 Docker 컨테이너로 배포하면 이식성과 CI/CD 자동화가 향상됩니다.
29) 어떻게 Azure 클라우드 개발을 위해 .NET 애플리케이션과 통합할 수 있나요?
Azure 클라우드 기반 애플리케이션을 빌드, 배포, 관리하기 위해 .NET과의 최고 수준의 통합을 제공합니다.
키 Azure .NET 서비스:
- Azure 앱 서비스 – 웹 애플리케이션을 호스팅합니다.
- Azure 기능 – 백그라운드 작업을 위한 서버리스 컴퓨팅.
- Azure SQL 데이터베이스 – 완전 관리형 관계형 데이터베이스.
- Azure 서비스 버스 – 분산 시스템을 위한 메시지 큐잉.
- Azure 키 Vault – 비밀과 자격 증명을 보호합니다.
예: .NET 마이크로서비스는 다음을 사용할 수 있습니다. Azure 키 Vault 배포 중에 데이터베이스 연결 문자열을 안전하게 저장하려면 Azure DevOps CI/CD 파이프라인.
30) .NET에서 일반적으로 사용되는 테스트 프레임워크는 무엇이며, 서로 어떻게 다릅니까?
테스트를 통해 애플리케이션의 안정성과 유지관리성이 보장됩니다. .NET은 여러 테스트 프레임워크를 지원합니다.
| 뼈대 | 기술설명 | 주요 특징 |
|---|---|---|
| 엑스유닛 | 최신 오픈소스 테스트 도구입니다. | 병렬 테스트 실행. |
| N 단위 | 성숙되어 기업에서 널리 사용됨. | 속성 기반 테스트. |
| MST테스트 | Microsoft의 기본 테스트 프레임워크입니다. | Visual Studio와 통합. |
예:
[Fact]
public void Add_ReturnsSum()
{
Assert.Equal(4, Calculator.Add(2, 2));
}
모범 사례:
- 조롱(Moq) 종속성에 대해서.
- 유지하다 높은 테스트 범위 CI/CD 통합을 통해.
- 포함 통합 테스트 API 검증을 위해.
31) .NET 8에 도입된 주요 새로운 기능은 무엇입니까?
.NET 8에서는 다음을 소개합니다. 성능 최적화, 네이티브 AOT, 그리고 개선된 클라우드 네이티브 기능. 계속됩니다 Microsoft통합된 크로스 플랫폼 생태계를 구축하는 것이 목표입니다.
주요 사항 :
- 네이티브 AOT(사전 컴파일): 시작 시간과 메모리 사용량이 줄어듭니다.
- ASP.NET Core 개선 사항: 더 빠른 라우팅과 향상된 HTTP/3 지원.
- 블레이저 유나이티드: 서버 측과 웹을 결합합니다Assembly 하이브리드 앱을 위한 모델.
- 성능 향상: EF Core 및 LINQ 작업이 20~30% 더 빨라졌습니다.
- 확장된 MAUI 지원: 크로스 플랫폼 UI를 위한 툴링이 개선되었습니다.
예: 네이티브 AOT를 사용하면 마이크로서비스와 컨테이너화된 배포에 적합한 작고 독립적인 실행 파일을 만들 수 있습니다.
32) .NET의 AOT(Ahead-of-Time) 컴파일이란 무엇이고, 언제 사용해야 합니까?
AOT 컴파일 런타임 전에 .NET 중간 언어(IL)를 네이티브 코드로 사전 컴파일하여 시작 성능을 개선하고 JIT 컴파일러에 대한 종속성을 줄입니다.
| 타입 | 기술설명 | 최상의 사용 사례 |
|---|---|---|
| JIT(적시) | 런타임에 IL을 컴파일합니다. | 데스크톱 또는 서버 앱. |
| AOT(사전예비) | 런타임 전에 IL을 컴파일합니다. | 마이크로서비스, IoT, 저지연 시스템. |
장점:
- 시작 시간이 더 빨라졌습니다.
- 메모리 사용량이 더 작습니다.
- 더 나은 컨테이너 성능.
예:
dotnet publish -r linux-x64 -p:PublishAot=true
이 명령은 Linux용 네이티브 AOT 컴파일 바이너리를 생성합니다.
33) .NET 개발자는 어떻게 AI 또는 ML 기능을 애플리케이션에 통합할 수 있나요?
.NET에서 AI 통합은 다음을 사용하여 달성할 수 있습니다. ML.NET, Azure 인지 서비스또는 외부 라이브러리.
구혼:
- ML.NET: .NET에서 직접 머신 러닝 모델을 구축하고 학습시킵니다.
- Azure 인지 서비스: 시각, 음성, 언어에 대해 사전 훈련된 API를 사용합니다.
- ONNX 런타임: 에서 훈련된 모델을 실행합니다. Python.NET 앱 내의 /TensorFlow.
- OpenAI API 통합: REST를 통해 생성적 AI(예: GPT 모델)에 안전하게 액세스합니다.
예시(ML.NET):
var mlContext = new MLContext();
var model = mlContext.Model.Load("model.zip", out _);
사용 사례 : 기업 시스템에서 사용자 이탈 예측, 이상 감지 또는 지능형 추천을 제공합니다.
34) .NET 8에서 REST API와 최소 API의 주요 차이점은 무엇입니까?
최소 API 최소한의 보일러플레이트 코드로 HTTP API를 구축하는 가벼운 방법을 제공합니다.
| 특색 | REST API(컨트롤러 기반) | 최소 API |
|---|---|---|
| Structure | 컨트롤러 및 라우팅 사용 | 인라인 경로 정의 |
| 설정 | 속성과 미들웨어가 필요합니다 | 더 빠르고 더 간단하게 |
| 성능 | 보통 | 약간 더 빠름(오버헤드 감소) |
| 적용 사례 | 복잡한 엔터프라이즈 API | 마이크로서비스 또는 소규모 API |
예:
app.MapGet("/hello", () => "Hello, World!");
최소 API는 단순성과 성능 면에서 마이크로서비스와 서버리스 애플리케이션에 이상적입니다.
35) .NET 애플리케이션의 보안 코딩의 주요 원칙은 무엇입니까?
보안은 개발 단계부터 강화되어야 합니다. .NET은 안전한 코딩을 위한 기본 제공 메커니즘과 모범 사례를 제공합니다.
핵심 원칙:
- 모든 입력 검증: 주입 공격을 방지합니다.
- 매개변수화된 쿼리 사용: SQL 주입을 피하세요.
- 민감한 데이터 암호화:
System.Security.Cryptography. - 비밀을 안전하게 보관하세요: Azure 키 Vault 또는 사용자 비밀.
- 인증 및 권한 부여 적용: 구현
ASP.NET Identity또는 JWT 토큰. - HTTPS 및 CORS 정책을 사용하세요. 데이터 유출 및 무단 접근을 방지하세요.
예:
using (var cmd = new SqlCommand("SELECT * FROM Users WHERE Id = @id", conn))
{
cmd.Parameters.AddWithValue("@id", userId);
}
36) 프로파일링 및 진단 도구를 사용하여 .NET 성능을 최적화하려면 어떻게 해야 합니까?
프로파일링은 CPU, 메모리 또는 I/O의 성능 병목 현상을 식별하는 데 도움이 됩니다.
인기 있는 도구:
| 수단 | 목적 |
|---|---|
| dotTrace / dotMemory | 프로파일링 및 메모리 누수 감지 |
| 성능 보기 | 저수준 성능 분석 |
| dotnet-trace | 명령줄 추적 |
| 애플리케이션 인사이트 | 생산에서의 실시간 원격 측정 |
접근:
- 성능 카운터를 사용하여 병목 현상을 파악합니다.
- 프로파일 코드 경로와 메모리 할당.
- LINQ 쿼리를 최적화하고 개체 생성을 줄입니다.
예: dotnet-counters monitor CPU 및 GC 활동과 같은 실시간 지표를 추적합니다.
37) .NET 애플리케이션을 위한 효과적인 DevOps 관행에는 어떤 것이 있습니까?
DevOps 통합 자동화와 협업을 통해 더 빠른 배송과 더 나은 품질을 보장합니다.
주요 사례:
- CI/CD 파이프라인: GitHub Actions를 사용하거나 Azure 자동화된 빌드 및 배포를 위한 DevOps.
- 코드형 인프라(IaC): ARM 템플릿, Terraform 또는 Bicep을 사용하여 배포합니다.
- 자동화된 테스트: CI 워크플로에 xUnit/NUnit을 통합합니다.
- 컨테이너화: Docker 이미지와 Kubernetes(AKS)를 사용합니다.
- 모니터링 : Application Insights를 통한 지속적인 원격 측정.
예: CI/CD 파이프라인 Azure DevOps는 .NET API를 빌드, 테스트 및 배포할 수 있습니다. Azure Git 커밋 시 App Service가 자동으로 실행됩니다.
38) .NET 기반 분산 시스템에서 확장성과 내결함성을 어떻게 보장합니까?
확장성과 내결함성은 분산형 설계 원칙과 복원력 있는 패턴을 사용하여 달성할 수 있습니다.
전략 :
- 수평적 확장: 로드 밸런서 뒤에 여러 인스턴스를 배포합니다.
- 회로 차단기 패턴: Polly 라이브러리를 사용하여 일시적인 오류를 처리합니다.
- 캐싱 및 큐잉: Redis를 사용하세요 Azure 비동기 처리를 위한 서비스 버스.
- 데이터베이스 샤딩: 대규모 데이터 세트를 배포합니다.
- 상태 점검:
AddHealthChecks().NET Core의 미들웨어.
예(회로 차단기):
Policy.Handle<HttpRequestException>()
.CircuitBreaker(3, TimeSpan.FromMinutes(1));
39) 컨테이너화는 최신 .NET 배포에서 어떤 역할을 합니까?
컨테이너화는 주로 다음을 통해 이루어집니다. 도커, 애플리케이션과 해당 종속성을 분리하여 환경 전반에서 일관성을 보장합니다.
이점:
- 예측 가능한 배포(모든 호스트에서 작동)
- Kubernetes(AKS)를 사용한 간소화된 확장.
- 가상 머신보다 가볍고 빠릅니다.
- CI/CD 워크플로와 쉽게 통합됩니다.
예시(Dockerfile):
FROM mcr.microsoft.com/dotnet/aspnet:8.0 WORKDIR /app COPY . . ENTRYPOINT ["dotnet", "MyApp.dll"]
사용 사례 : Kubernetes에 .NET 마이크로서비스 클러스터를 배포하면 확장성과 오류 격리가 향상됩니다.
40) 수백만 명의 사용자를 위한 확장 가능한 .NET 시스템을 어떻게 설계하시겠습니까?
.NET에서 시스템을 설계하려면 성능, 가용성, 유지관리성을 결합한 구조적 통찰력이 필요합니다.
키 Archi구조적 결정:
- 마이크로서비스를 사용하세요: 각 서비스는 독립적으로 배포 가능합니다.
- CQRS + 이벤트 소싱 도입: 읽기/쓰기 모델을 분리합니다.
- 비동기 메시징: Azure 서비스 버스 또는 카프카.
- API 게이트웨이: 교통과 보안을 관리합니다.
- 캐싱 계층: 고속 액세스를 위해서는 Redis 또는 MemoryCache를 사용합니다.
- 데이터베이스 확장성: Azure Cosmos DB 또는 분할된 SQL.
- 자동 확장: 구성을 통해 Azure 앱 서비스 또는 AKS.
예시 설계 흐름:
사용자 → API 게이트웨이 → 로드 밸런서 → 마이크로서비스(.NET 8 API) → 데이터베이스 + Redis 캐시 → Application Insights를 통한 원격 측정.
🔍 실제 시나리오와 전략적 대응을 포함한 최고의 .NET 면접 질문
아래에는 .NET 면접에서 자주 묻는 현실적인 질문 10개와 전략적 설명, 그리고 예시 답변이 포함되어 있습니다. 지식 기반, 행동 기반, 상황 기반 질문이 다양하게 포함되어 있습니다.
필수 구문은 각각 한 번씩 사용되었습니다.
1) .NET Framework, .NET Core, .NET 6/7/8의 차이점을 설명해 주시겠습니까?
후보자에게 기대하는 것: .NET 생태계의 발전, 플랫폼 간 기능 및 장기 지원에 대해 알아봅니다.
예시 답변: “.NET Framework는 원래 Windows-전용 프레임워크인 .NET Core는 크로스 플랫폼 기능과 더 나은 성능을 도입했습니다. .NET 6 이상에서는 성능, 클라우드 준비성, 개발 속도 측면에서 상당한 개선을 통해 단일의 현대적인 크로스 플랫폼 SDK로 생태계를 통합했습니다."
2) .NET에서 종속성 주입을 어떻게 구현하나요? 그리고 그것이 유용한 이유는 무엇인가요?
후보자에게 기대하는 것: 분리, 유지 관리, 테스트 가능성에 대한 이해.
예시 답변: “.NET의 종속성 주입은 일반적으로 내장 컨테이너를 통해 구현됩니다. Microsoft.Extensions.DependencyInjection 네임스페이스. 긴밀한 결합을 줄이고, 테스트 용이성을 향상시키며, 런타임에 종속성을 해결할 수 있도록 하여 수명 주기 관리를 간소화합니다.
3) 당신이 참여했던 도전적인 .NET 프로젝트에 대해 설명하고, 그 프로젝트의 성공에 어떻게 기여했는지 설명하세요.
후보자에게 기대하는 것: 현실 세계에 기여하고, 문제를 해결하고, 소유권을 갖습니다.
예시 답변: "이전에는 데이터 액세스 계층을 재설계하고 응답 시간을 단축하기 위해 캐싱을 도입하여 레거시 .NET 애플리케이션을 최적화하는 업무를 담당했습니다. 이를 통해 성능이 30% 이상 향상되었고 사용자 경험도 크게 향상되었습니다."
4) .NET 애플리케이션의 성능과 확장성을 어떻게 보장하나요?
후보자에게 기대하는 것: 프로파일링 도구, 아키텍처 패턴, 코딩 모범 사례 활용.
예시 답변: "dotTrace 및 Application Insights와 같은 프로파일링 도구를 사용하여 성능을 모니터링하고, 필요한 경우 비동기 프로그래밍을 적용하고, 캐싱을 구현하고, 필요한 경우 마이크로서비스와 같은 확장 가능한 아키텍처 패턴을 사용합니다."
5) .NET에서 async/await와 멀티스레딩의 차이점을 설명하세요.
후보자에게 기대하는 것: 동시성 모델에 대한 이해.
예시 답변: "Async와 await는 작업 기반 비동기 패턴을 활용하여 비차단 작업을 가능하게 하는 반면, 멀티스레딩은 병렬로 실행되는 별도의 스레드를 생성합니다. 비동기 프로그래밍은 I/O 중심 작업에 이상적이며, 멀티스레딩은 CPU 중심 작업에 유용합니다."
6) 새로운 .NET 기술을 빨리 배워야 했던 경험이 있다면 말씀해 주세요. 어떻게 접근하셨나요?
후보자에게 기대하는 것: 적응력과 지속적인 학습.
예시 답변: “이전 직장에서는 고객 프로젝트를 위해 Blazor를 빠르게 배워야 했습니다. 저는 공식적인 Microsoft 문서화 작업을 하고, 작은 샌드박스 프로젝트를 연습하고, 팀원들과 협업하여 정해진 시간 내에 양질의 결과물을 제공했습니다."
7) ASP.NET Core에서 RESTful API를 어떻게 설계하시겠습니까? 어떤 핵심 원칙을 따르시나요?
후보자에게 기대하는 것: HTTP 메서드, 라우팅, 버전 관리 및 모범 사례에 대한 지식이 있습니다.
예시 답변: "저는 적절한 리소스 명명, 상태 비저장, HTTP 동사의 올바른 사용과 같은 REST 원칙을 따릅니다. 또한 모델 검증, 적절한 상태 코드, 버전 관리, 그리고 JWT와 같은 인증 메커니즘도 구현합니다."
8) 여러 .NET 프로젝트를 동시에 작업할 때 촉박한 마감일을 어떻게 처리하시나요?
후보자에게 기대하는 것: 우선순위, 조직, 의사소통.
예시 답변: "이전 직장에서는 작업을 관리 가능한 구성 요소로 나누고, 중요한 기능의 우선순위를 정하고, 이해관계자와 지속적으로 소통하여 현실적인 기대치를 설정함으로써 촉박한 마감일을 처리했습니다."
9) .NET 애플리케이션의 코드 품질을 어떻게 유지하시나요?
후보자에게 기대하는 것: 테스트, 리뷰, 도구에 대한 지식이 필요합니다.
예시 답변: "xUnit을 활용한 단위 테스트, 코드 검토, 정적 코드 분석, 그리고 SOLID 원칙 준수를 통해 코드 품질을 유지하고 있습니다. 이러한 단계를 통해 장기적인 유지 관리성과 안정성을 확보할 수 있습니다."
10) 프로덕션 .NET API가 간헐적으로 500개의 오류를 반환한다고 가정해 보겠습니다. 이 문제를 어떻게 진단하시겠습니까?
후보자에게 기대하는 것: 체계적인 디버깅, 도구 활용, 압박 속에서도 침착함.
예시 답변: "제가 이전에 맡았던 역할은 로그를 검토하고, 종속성 상태를 확인하고, Application Insights나 유사한 도구를 사용하여 장애를 추적하는 일이었습니다. 그런 다음 문제가 데이터베이스 관련인지, 구성 관련인지, 아니면 코드 관련인지 구분하고, 복제 및 검증 후 필요한 수정 사항을 배포했습니다."
