C# .NET 인터뷰 주제 정리 - 어떻게 진행되었을까?
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
.NET 개발자 및 인터뷰 준비자 (초보자 ~ 중급 이상)
난이도: 중급 ~ 고급 (이론과 실무 모두 포함)
핵심 요약
- 트랜잭션 처리:
SaveChanges()
는 암시적 트랜잭션을 사용하고, 복잡한 작업은BeginTransaction()
또는TransactionScope
로 명시적 트랜잭션 필요 - 비동기 처리:
async Task
사용,await
는 스태트 머신을 통해 비동기 작업 처리,ConfigureAwait(false)
로 원래 컨텍스트 회피 - LINQ & 보안: LINQ로 쿼리 작성,
SqlParameter
사용으로 SQL 인젝션 방지 - 디자인 패턴: Repository/Unit of Work 패턴으로 테스트 가능성이 높은 구조 설계
- .NET 최신 기능: .NET 8 (AOT 컴파일, 성능 개선), .NET 9 (성능 최적화, 툴링 개선)
섹션별 세부 요약
1. 트랜잭션 및 동시성 관리
SaveChanges()
는 암시적 트랜잭션을 통해 변경 사항을 롤백- 복잡한 작업은
BeginTransaction()
으로 명시적 트랜잭션 사용 - 낙관적 동시성 처리:
[Timestamp]
또는.IsRowVersion()
로 충돌 감지 및DbUpdateConcurrencyException
처리
2. 비동기 처리 및 LINQ
async Task
사용으로 예외 처리 및 테스트 가능성 향상await
는 스태트 머신을 통해 비동기 작업 실행,ConfigureAwait(false)
로 스레드 블록 방지- LINQ로 쿼리 작성,
SqlParameter
사용으로 SQL 인젝션 방지
3. 디자인 패턴 및 테스트
- Repository/Unit of Work 패턴으로 테스트 가능성 및 결합도 분리
- DI (의존성 주입) 사용:
AddScoped()
,AddSingleton()
으로 서비스 구성 - Moq, NSubstitute 등 라이브러리로 인터페이스 모킹 및 외부 의존성 시뮬레이션
4. 컬렉션 및 성능 최적화
ConcurrentDictionary
,BlockingCollection
,ImmutableList
등 스레드 안전 컬렉션 사용IEnumerable
vsIQueryable
: 지연 실행 vs 쿼리 변환- .NET 8의 AOT 컴파일과 Blazor 통합 개선
5. 데이터베이스 및 인덱싱
- PK (주키): 유일성 강제, Clustered 인덱스: 물리적 순서 정의
- Non-clustered 인덱스: 빠른 조회를 위한 별도 구조
- SQL Server에서 네스티드 트랜잭션은 실제 독립적이지 않음,
SAVEPOINT
사용 권장
결론
- 트랜잭션 처리 시 암시적/명시적 구분과
TransactionScope
사용 주의 - LINQ + SqlParameter로 SQL 인젝션 방지 및 코드 안정성 확보
- Repository/Unit of Work 패턴과 DI로 테스트 가능하고 유연한 아키텍처 설계
- .NET 8/9의 성능 최적화 기능에 대한 이해와 활용 필수