Entity Framework

Entity Framework의 구성 요소

zorimo 2025. 1. 12. 00:09

 

지난 포스팅에서는 ORM의 동작 방식과 Entity Framework(EF)가 데이터베이스 작업을 단순화하는 원리를 살펴보았습니다.

이번 글에서는 Entity Framework의 핵심 구성 요소인 DbContext, Entity, LINQ의 역할과 개념을 알아보겠습니다.

 

이 세 가지를 이해하면 Entity Framework의 전반적인 구조를 파악하고,

데이터를 효율적으로 다루는 방법에 한 걸음 더 다가갈 수 있습니다.


1. Entity Framework의 구성 요소

 

Entity Framework는 데이터베이스 작업을 단순화하기 위해 설계된 도구입니다.

그리고 EF의 구조는 세 가지 주요 구성요소가 있습니다.

 

데이터베이스와 애플리케이션 간의 연결, 상호작용을 관리하는 DbContext,

데이터베이스 테이블의 구조를 정의하는 클래스인 Entity,

데이터를 쉽게 조회하고 조작할 수 있는 쿼리 도구인 LINQ.


2. DbContext: 데이터베이스와의 연결 및 상호작용 관리

 

DbContext는 Entity Framework에서 가장 중요한 구성 요소 중 하나로, 데이터베이스와의 모든 상호작용을 관리하는 중심 객체입니다.

이를 통해 데이터를 조회하거나 추가하는 작업을 효율적으로 처리할 수 있습니다.

 

DbContext는 다음과 같은 세 가지 주요 역할을 수행합니다.

 

1. 데이터베이스 연결 생성 및 유지

- 데이터베이스와 애플리케이션 간의 연결을 관리.

 

2. SQL 쿼리 생성 및 실행

- 객체 지향 코드를 SQL 쿼리로 변환하고 실행.

 

3. Entity와 데이터베이스 간의 매핑 관리

- 데이터베이스 테이블과 Entity 클래스를 연결.

 

위 처럼 나열해두면 어려울 수 있으니 비유를 하자면 DbContext는 데이터베이스와 대화하는 통역사라 생각하시면 됩니다.

 

예를 들어,

개발자가 데이터를 조회하거나 추가하는 작업을 요청하면 DbContext는 이를 데이터베이스 언어(SQL)로 번역해 처리하고

결과를 다시 프로그래밍 언어에서 사용할 수 있는 객체 형태로 반환합니다.

 

DbContext의 예제를 간단하게 만든다면 아래처럼 정의할 수 있습니다.

public class AppDbContext : DbContext
{
    public DbSet<Product> Products { get; set; }
}
 

AppDbContext는 DbContext를 상속받아 사용자가 사용하는 이름으로 정의된 클래스입니다.

즉, 원하는 이름으로 변경이 가능하며 DbContext 역할을 수행하는 사용자 커스텀 DbContext라고 볼 수 있죠.

 

DbSet<Product>는 데이터베이스의 Product테이블과 연결된 작업 공간이며,

이를 통해서 Product 테이블의 데이터를 조회하거나 삽입할 수 있습니다.

 


2-1. DbSet

그럼 DbSet은 뭘까요? DbSet은 Entity Framework에서 데이터베이스 테이블을 나타내는 컬렉션입니다.

이를 사용하여 데이터를 조회하거나 삽입, 삭제, 업데이트하는 작업을 수행할 수 있습니다.

 

주요 역할은 특정 테이블에 대한 작업담당하고, 데이터를 메모리에 로드하거나 저장합니다.

그럼 위에 만들어진 DbSet<Product> Products라는건 어떤 의미를 가지느냐?

 

데이터베이스의 Product 테이블을 연결하고 해당 테이블을 Products라는 이름으로 사용하겠다는 뜻입니다.

여기에서 Products는 개발자가 이해하기 쉽게 붙이 이름이고 AppDbContext처럼 자유롭게 변경 가능합니다.


2-2. get; set;

{get; set;}C#에서 속성(Property)을 정의하는 문법으로, 데이터를 읽고 쓰는 동작을 제공합니다.

Entity Framework에서는 데이터를 다룰 때 필수적으로 사용됩니다.

 

get은 속성값을 읽는 메서드로 예를 들어, Products의 데이터를 가져올 때 사용됩니다.

var products = context.Products.ToList();
 

위 코드에서 get을 통해 데이터베이스의 데이터를 읽어옵니다.

 

set은 속성값을 설정하는 메서드로 새로운 데이터를 추가할 때 사용됩니다.

var product = new Product { Name = "Laptop", Price = 1200 };
context.Products.Add(product);
 

위 코드에서 set을 통해 Products에 새로운 데이터를 추가합니다.


2-3. 그럼 public DbSet<Product> Products {get; set;} 란?

 

데이터베이스의 Product 테이블을 Products라는 이름으로 사용하며,

데이터를 읽거나 수정할 수 있는 작업공간을 만들겠다고 선언한 것이 되겠습니다.


3. Entity: 데이터의 구조를 정의

 

Entity는 데이터베이스 테이블과 매핑되는 클래스입니다.

각 클래스는 하나의 테이블을 클래스의 속성은 테이블의 열을 나타냅니다.

 

비유를 하자면 엔티티는 데이터베이스 테이블의 설계도라고 생각하시면 됩니다.

테이블의 구조가 변경이 되면 Entity도 그것을 반영해야겠죠?

 

예: Entity 정의

public class Product
{
    public int Id { get; set; } // 테이블의 열
    public string Name { get; set; }
    public decimal Price { get; set; }
}
 

Product 클래스는 데이터베이스의 실제 Product 테이블과 매핑됩니다.


4. LINQ: 객체 지향적 데이터 조회

 

LINQ(Language Integrated Query)객체 지향 언어의 문법으로 데이터를 조회하고 조작할 수 있도록 도와주는 도구입니다.

SQL을 직접 작성하지 않고, 객체 지향 언어의 문법으로 데이터를 다룰 수 있게 해줍니다.

 

비유를 하자면 LINQ는 데이터베이스와 대화하는 일상 언어라고 생각하시면 됩니다.

우리가 컴퓨터 언어 대신 일상 언어를 통해 대화하듯, LINQ를 사용하면 SQL 없이도 원하는 데이터를 손쉽게 얻을 수 있습니다.

 

예: LINQ를 사용한 데이터 조회

var expensiveProducts = context.Products
                               .Where(p => p.Price > 1000)
                               .ToList();
 

위 LINQ 코드는 가격이 1000 이상인 데이터를 조회하라는 코드입니다. 이 코드가 변환된 SQL은 아래와 같습니다.

SELECT * FROM Products WHERE Price > 1000;
 

이번 글에서는 Entity Framework의 주요 구성 요소와 그 역할에 대해 알아보았습니다.

요약하자면,

구성 요소
역할
비유
DbContext
데이터베이스 연결 및 관리
통역사
Entity
데이터 구조 정의
설계도
LINQ
객체 지향적 데이터 조회 및 조작
일상 언어

이렇게 요약할 수가 있겠습니다.

이 세 요소는 EF의 핵심으로 데이터베이스 작업을 단순화하고 효율적으로 관리할 수 있게합니다.

 

다음 포스팅에서는 Entity Framework 설치와 설정에 대해서 설명한 뒤 본격적으로 EF에 대해서 알아보도록 하겠습니다.