지난 포스팅에서는 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에 대해서 알아보도록 하겠습니다.
'Entity Framework' 카테고리의 다른 글
Entity Framework를 활용한 CRUD 작업 (0) | 2025.01.15 |
---|---|
LINQ로 간편하게 데이터 조회하기 (0) | 2025.01.15 |
Entity Framework 시작하기 - 설치 및 설정 (0) | 2025.01.13 |
ORM의 동작 방식과 Entity Framework 간단 소개 (0) | 2025.01.10 |
ORM이란 무엇인가? (0) | 2025.01.09 |