C# Backend Server Engineer 면접전형 대비
1. .NET 생태계 및 C# 기본기
.NET Core/ASP.NET Core의 구조 및 장점
- ASP.NET Core는 크로스 플랫폼을 지원하며, Windows뿐만 아니라 Linux, macOS에서도 실행 가능.
- Modular Architecture: 필요한 패키지만 로드하여 경량화된 애플리케이션 생성 가능.
- Kestrel Web Server: 자체 경량 웹 서버로 높은 성능 제공.
- Dependency Injection(DI): .NET Core는 DI 컨테이너를 기본적으로 지원.
- Middleware: 요청-응답 파이프라인을 커스터마이징할 수 있음.
비동기 프로그래밍
- async/await 키워드를 사용하여 비동기 작업 처리.
- Task vs Thread
Task: 비동기 프로그래밍에서 쓰이며, 경량화된 실행 스레드를 제공.
Thread: 운영 체제 수준의 스레드이며, 생성 비용이 더 높음.
- 비동기 I/O 처리의 중요성: 대규모 동시 요청 처리 성능 향상.
LINQ와 Entity Framework
JSON 직렬화/역직렬화
- System.Text.Json: 성능 최적화, .NET Core 기본 제공
- Newtonsoft.Json: 커스터마이징 및 복잡한 JSON 처리에 유리
2. Backend 서버 설계와 아키텍처
Layered Architecture
- Controller Layer: HTTP 요청을 처리하고 서비스 계층 호출
- Service Layer: 비즈니스 로직 구현
- Repository Layer: 데이터베이스와의 상호작용 담당
Controller -> Service -> Repository -> Database
Domain-Driven Design (DDD)
- Entity: 고유 식별자가 있는 도메인 객체
- Value Object: 고유 식별자가 없는 객체, 불변성 유지
- Aggregate: 도메인 객체의 집합, 일관성을 유지하는 단위
- Repository: Aggregate Root를 저장하고 검색하는 데 사용
CQRS (Command Query Responsibility Segregation)
- Command: 데이터 변경 작업 (예: Insert, Update, Delete)
- Query: 데이터 조회 작업
- 읽기와 쓰기 로직을 분리하여 성능 최적화
3. 성능 최적화
Garbage Collector(GC) 이해
- .NET GC는 세대를 기반으로 객체를 관리 (Gen 0, Gen 1, Gen 2)
- 객체의 생명 주기에 따라 GC가 실행되므로 불필요한 객체 생성 최소화 필요
멀티 쓰레딩과 병렬 처리
- Parallel.ForEach: 데이터 병렬 처리를 간편하게 구현
- PLINQ: LINQ를 병렬로 실행하여 성능 향상
프로파일링 도구
- dotTrace 또는 Visual Studio Profiler를 사용하여 애플리케이션 병목 현상 식별
4. 데이터베이스 및 ORM
RDBMS 경험
- SQL Server, PostgreSQL과 같은 데이터베이스를 다루는 경험
- SQL 쿼리 최적화:
- 인덱스: 쿼리 성능 향상을 위한 적절한 인덱스 설계
- 실행 계획 분석
ORM 사용
- Dapper: 경량 ORM으로 높은 성능 제공
5. 비동기 프로그래밍에서 async/await의 장단점
장점
단점
- 복잡성 증가: 호출 체인 전체가 비동기로 설계되어야 할 수 있음
- 디버깅 어려움: 비동기 코드는 디버깅이 복잡할 수 있음
- 컨텍스트 전환 비용:
await로 인해 실행 컨텍스트 전환이 발생, 과도한 사용 시 성능 저하 가능