-
50 EF Core Interview Questions (1~25).NET/Database 2025. 3. 11. 11:22
Linked In에서 본 50가지 Entity Framework Core에 질문 입니다.
LinkedIn**전체 질문에 대한 한글 번역, 그리고 제 답안 입니다.
AI 제네레이트 하지 말고 답변해 보라고 했지만, 저도 모르던 부분이 있었고,
제가 알지 못했던 부분은 AI의 1차 답안을 가지고, 실제 테스트 해보거나 검색하여 정보를 추가적으로 확인했습니다.1. EF는 LINQ를 SQL 명령으로 어떻게 변환하나요?
답안보기(클릭)
표현식 트리(Expression Tree) 생성: LINQ 쿼리는 표현식 트리로 변환됩니다. 표현식 트리는 쿼리의 구조와 내용을 표현하는 데이터 구조로, 쿼리의 각 부분(예: Where, Select, Join 등)이 노드로 표현됩니다. 쿼리 변환 및 최적화: EF Core는 이 표현식 트리를 분석하여 해당 데이터베이스에 맞는 SQL 쿼리로 변환합니다. 이 과정에서 쿼리의 최적화도 수행되어 효율적인 SQL 문이 생성됩니다. 생성된 SQL문은 쿼리실행 프로시저의 매개변수로 전달되어 실행됩니다.2. DI에서 DbContext의 기본 수명 주기는 무엇인가요?
답안보기(클릭)
닷넷에서 요청단위인 Scoped 생명주기를 가지고 있습니다.3. 싱글톤 서비스에서 Scoped DbContext를 어떻게 사용할 수 있나요?
답안보기(클릭)
위에서 설명했듯이 DbContext 자체는 Scoped 생명주기를 갖고있기 때문에 생성이후 프로세스가 유지되는 동안 한개의 인스턴스로 사용되는 싱글턴에서는 DbContext를 직접 사용 할 수 없고, IDbContextFactory.CreateDbContext() 를 사용해서 싱글턴 서비스에서 메서드를 사용할때마다 생성하고 닫아야합니다. 4. EF에서 풀링(Pooling)은 어떻게 작동하나요?
답안보기(클릭)
DbContextPool을 사용하면 컨텍스트 사용을 완료하더라도 연결을 유지했다가 다시 사용하는 방식으로 동작합니다. DbContextPool 사용시 주의해야하는 점은 내부에서 캐시처리가 되므로 변경된 데이터가 나오지 않도록 신경써야 합니다.5. Pooled DbContext를 생성하는 두 가지 방법은 무엇인가요?
답안보기(클릭)
services.AddDbContextPool() br> services.AddPooledDbContextFactory () DbContextFactory도 내부적으로 DbContextPool을 사용하여 풀링 합니다. 6. 언제 DbContextFactory를 사용해야 하나요?
답안보기(클릭)
백그라운드 서비스를 사용할때 IHostedService 는 기본적으로 싱글턴으로 유지되는데 DbContext는 Scoped 이므로 싱글턴 인스턴스에서 DbContext를 부르는 경우 문제가 될수 있으므로 DbContextFactory를 사용하여 생성하는게 좋습니다. 그외에도 멀티스레드, 병렬처리와 같은 작업에서 DbContext객체는 스레드세이프하지 않기 때문에 DbContextFactory를 사용해서 각각의 인스턴스를 생성해서 사용해야합니다.7. 생성된 EF 마이그레이션을 어떻게 수정할 수 있나요?
답안보기(클릭)
dotnet ef migrations add '마이그레이션태그' 하게되면 마이그레이션시 실행될 코드가 마이그레이션 디렉토리에 생성됩니다. 해당 코드에는 마이그레이션 sql쿼리문도 포함되어있는데, 해당 쿼리문을 수정하면 됩니다. 아에 마이그레이션 내용을 날리고싶다면 dotnet ef migrations remove 명령어를 쓰면됩니다. 이미 db까지 적용되었다면 dotnet ef database update '다운그레이드하고자하는마이그레이션버전명' 으로 마이그레이션 된 버전을 이동할 수 있습니다.8. 운영 데이터베이스에서 마이그레이션을 어떻게 실행하나요?
답안보기(클릭)
migrations add 까지 완료된 내용을 직접 실행보다 스크립트로 생성하는 dotnet ef migrations script -o migration.sql 명령어가 있습니다. 이걸로 스크립트를 생성해서 해당 스크립트를 직접 확인하고 업데이트 하는 것이 좋습니다. ef tool update로 적용되는 것으로만 믿기 어려울 수 있고, 실제 Live Database 에서 문제되는 상황이 발생되면 치명적일 수 있기 때문에 검토후 적용하는 과정이 필요합니다.9. EF에서 초기 데이터를 데이터베이스에 시드(Seed)하는 방법은 무엇인가요?
답안보기(클릭)
DbContext OnModelCreating에서 HasData()를 사용하여 엔터티 초기 데이터 생성 할 수 있습니다.10. EF 9에서 데이터 시딩(Seeding)은 어떻게 변경되었나요?
답안보기(클릭)
OnModelCreating이 아닌 AddDbContext에서 처리가 가능해졌습니다. .UseSeeding을 사용해서 필요한 데이터가 없는경우 추가할수 있습니다.11. EF를 사용하여 데이터베이스를 생성하는 방법은 무엇인가요?
답안보기(클릭)
context.Database.EnsureCreated() 또는 dotnet ef database update 사용12. EF Core에서 여러 데이터베이스에 대한 마이그레이션을 생성할 수 있나요?
답안보기(클릭)
DbContext는 단일 DB에 대해서만 처리하도록 되어있습니다. 별도의 DbContext를 사용하고, 마이그레이션시에는 DbContext를 명확히 지정하여 마이그레이션을 진행하도록 하면됩니다.13. EF Core 인터셉터(Interceptor)는 무엇을 위해 사용되나요?
답안보기(클릭)
성능 모니터링 혹은 보안정책 적용을 위해서 사용 할 수 있습니다. 소프트 삭제와 같은 전역적 우회를 하는 방법에도 적용할 수 있습니다.14. EF에서 소프트 삭제(Soft Delete)를 구현하는 방법은 무엇인가요?
답안보기(클릭)
SaveChanges, saveChangesAsync를 오버라이드하는 방법, 인터셉트를 사용해서 실제 delete가 아닌 isdeleted 컬럼에 true 값을 주는 방법.15. EF에서 여러 개의 새 엔터티를 생성하는 방법은 무엇인가요?
답안보기(클릭)
context.Users.AddRange([...,...,...,]); context.Set().AddRange([...,...,...,]) 16. EF에서 기존 엔터티를 업데이트하는 방법은 무엇인가요?
답안보기(클릭)
기존 엔터티를 불러와서 수정후 savechanges 하는 방법 (엔터티 수정 시마다 셀렉문이 추가 발생 문제 있음) ,17. EF에서 기존 엔터티를 삭제하는 방법은 무엇인가요?
답안보기(클릭)
기존 엔터티를 불러와서 db.entity.Remove(entityinstance); savechanges(); 하는 방법 (엔터티 삭제 시마다 셀렉문이 추가 발생 문제 있음) ,18. 기존 엔터티를 데이터베이스에서 조회하지 않고 업데이트하는 방법은 무엇인가요?
답안보기(클릭)
await context.Users .Where(u => u.Id == 1) .ExecuteUpdateAsync(s => s.SetProperty(u => u.Name, "Updated Name"));19. 기존 엔터티를 데이터베이스에서 조회하지 않고 삭제하는 방법은 무엇인가요?
답안보기(클릭)
await context.Users .Where(u => u.Id == 1) .ExecuteDeleteAsync();20. BatchUpdate 및 BatchDelete를 사용할 때 발생할 수 있는 문제점은 무엇인가요?
답안보기(클릭)
배치 실행될때 트랜잭션 처리를 하지 않으면 일부만 업데이트 일부만 델리트 될수 있습니다.21. EF에서 수동으로 데이터베이스 트랜잭션을 생성하는 방법은 무엇인가요?
답안보기(클릭)
using var transaction = context.Database.BeginTransaction(); try { // 작업 수행 context.SaveChanges(); transaction.Commit(); } catch { transaction.Rollback(); }22. 트랜잭션의 격리 수준(Isolation Level)에는 어떤 것들이 있나요?
답안보기(클릭)
- Read Uncommitted: 다른 트랜잭션의 변경을 읽을 수 있음
- Read Committed: 커밋된 데이터만 읽음
- Repeatable Read: 동일한 데이터를 반복 조회할 때 일관성 유지
- Serializable: 트랜잭션 간 충돌 방지
단 DBMS 마다 적용 가능 한 것이 다릅니다.23. DbUpdateConcurrencyException은 언제 발생하나요?
답안보기(클릭)
트랜잭션 처리가 되어있는 경우, 혹은 낙관적 동시성 처리가 되어있는 경우 동일한 레코드를 여러 사용자가 수정하면 발생합니다.24. EF에서 낙관적 잠금(Optimistic Locking)을 구현하는 방법은 무엇인가요?
답안보기(클릭)
TiemStamp 애트리뷰트(버전관리컬럼), ConcurrencyCheck (특정컬럼 이전값 비교) 애트리뷰트 적용하면 동시 접근시 해당 컬럼이 다를 경우 익셉션이 발생합니다.25. EF에서 커스텀 SQL 명령을 실행하는 방법은 무엇인가요?
답안보기(클릭)
var user = new SqlParameter("user", "johndoe");
context.Database.ExecuteSql($"SELECT * FROM Products WHERE ProductName = {user}");
sql 인젝션 방지를 위해서 ExecuteSqlRaw 와 같은 날쿼리 실행방식보다 위와같이 SqlParameter를 사용하는 것을 권장함.'.NET > Database' 카테고리의 다른 글
EF Core 테이블 상속 매핑 (TPH) (0) 2025.03.10 EF Core 테이블 상속 매핑(TPC) (0) 2025.03.10 EF Core 테이블 상속 매핑 (TPT) (0) 2025.02.17 EF Core - (부록) Project Setup (0) 2025.02.03 EF Core - Code First (0) 2025.01.11