C# Backend Server 관련 지식

break 없는 while loop·2025년 1월 2일
post-thumbnail

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

  • LINQ를 사용하여 데이터를 쿼리하는 코드 간결화.
    var results = dbContext.Users
                           .Where(u => u.Age > 18)
                           .OrderBy(u => u.Name)
                           .ToList();
  • Entity Framework (EF Core)
    • ORM으로 데이터베이스와의 상호작용을 단순화
    • Code-First 및 Database-First 개발 방식 지원

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의 장단점

장점

  • Non-blocking: 비동기 호출 중에도 스레드가 다른 작업을 수행할 수 있어 CPU 효율성이 향상됩니다.
  • 코드 가독성: 기존 콜백(callback) 방식보다 가독성이 뛰어납니다.
    // 비동기 호출 예제
    public async Task<string> GetDataAsync()
    {
        using (var client = new HttpClient())
        {
            return await client.GetStringAsync("https://example.com");
        }
    }
  • 데드락 방지: 적절히 사용하면 데드락을 방지하고 더 많은 동시 요청을 처리할 수 있음

단점

  • 복잡성 증가: 호출 체인 전체가 비동기로 설계되어야 할 수 있음
  • 디버깅 어려움: 비동기 코드는 디버깅이 복잡할 수 있음
  • 컨텍스트 전환 비용: await로 인해 실행 컨텍스트 전환이 발생, 과도한 사용 시 성능 저하 가능
profile
프로그래밍 지식 아카이브용

0개의 댓글