Entity Framework

ORM이란 무엇인가?

zorimo 2025. 1. 9. 23:04

 

먼저 Entity Framework라는 것을 설명하기 전에 SQL이 무엇인지, ORM이 무엇인지부터 알아야 합니다.

 

SQL은 데이터베이스라는 데이터 집합에서 사용자가 원하는 데이터를 생성(Create), 조회(Read), 수정(Update), 삭제(Delete)하는 데 주로 사용됩니다. 데이터를 다루는 데 있어 필수적인 기술이며 대부분의 개발자가 SQL에 익숙합니다.

그러나 직접 SQL을 작성하는 작업은 반복적이고 비효율적일 수 있습니다.

 

이러한 반복 작업을 줄이고 객체 지향 프로그래밍 언어와 데이터베이스 간의 간극을 줄이기 위해

ORM(Object-Relational Mapping)이라는 기술이 사용됩니다.

 

ORM객체 지향 프로그래밍 언어에서 데이터베이스를 다루는 코드를 작성할 수 있도록 도와주는 기법으로

SQL 대신 간결하고 직관적인 코드로 데이터 작업을 수행할 수 있는 장점이 있습니다.

 

 

1.1 ORM의 정의

 

ORM(Object-Relational Mapping)은 데이터베이스 테이블과 객체(Object)를 연결(Mapping)하여,

데이터를 객체로 다루도록 도와주는 기술입니다.

 

즉, SQL을 사용하지 않고도 코드로 데이터를 삽입, 조회, 수정, 삭제할 수 있게 해줍니다.

 

ORM에서는 데이터베이스의 각 테이블이 프로그래밍 언어의 클래스(Class)로 매핑되고,

테이블의 열(Column)은 클래스의 속성(Property), 행(Row)은 객체로 표현됩니다.

 

예: 데이터베이스 테이블과 클래스 매핑

 

데이터베이스 테이블

Id
Name
Price
1
Laptop
1200

 

프로그래밍 클래스

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
}
 

매핑된 객체

var product = new Product { Id = 1, Name = "Laptop", Price = 1200 };
 

1.2 그렇다면 ORM은 SQL을 대체하는가?

 

아닙니다. ORM은 SQL을 완전히 대체하는 것이 아니라 오히려 SQL을 간접적으로 사용하면서 객체 지향 프로그래밍 모델에서 더 효율적으로 데이터를 다룰 수 있도록 지원합니다. SQL에 익숙한 개발자라도 ORM을 사용하면 다음과 같은 이점이 있습니다.

 

1. 반복 작업 감소

CRUD(Create, Read, Update, Delete) 작업에서 반복적으로 작성해야 하는 SQL 코드를 ORM이 자동으로 생성해줍니다.

이를 통해 SQL 작성에 드는 시간과 유지보수 부담이 줄어듭니다.

 

SQL 방식

INSERT INTO Products (Name, Price) VALUES ('Laptop', 1200);
INSERT INTO Products (Name, Price) VALUES ('Tablet', 800);
 

ORM 방식

context.Products.Add(new Product { Name = "Laptop", Price = 1200 });
context.Products.Add(new Product { Name = "Tablet", Price = 800 });
context.SaveChanges();
 

2. 객체 지향 코드와 일관성

ORM은 데이터베이스의 테이블을 클래스와 매핑하여, 데이터를 객체로 다룰 수 있게 합니다.

이를 통해 데이터 조작이 프로그래밍 언어의 자연스러운 문법과 일치하게 되어, 코드의 가독성과 유지보수성이 향상됩니다.

 

SQL 방식

SELECT Id, Name, Price FROM Products WHERE Price > 1000;
 

ORM 방식

var expensiveProducts = context.Products.Where(p => p.Price > 1000).ToList();
foreach (var product in expensiveProducts)
{
    Console.WriteLine($"{product.Name}: ${product.Price}");
}

3. 생산성 향상

ORM을 사용하면 단순한 작업은 ORM으로 처리하고, 복잡한 쿼리는 SQL로 작성하여 사용하는 조합이 가능합니다.

이렇게 하면 개발 속도와 생산성을 높이면서 SQL의 세부적인 제어도 활용할 수 있습니다.

 

SQL 방식

SELECT Category, COUNT(*) AS ProductCount
FROM Products
GROUP BY Category
HAVING COUNT(*) > 10;
 

ORM과 SQL 조합

var result = context.Products
                    .FromSqlRaw("SELECT Category, COUNT(*) AS ProductCount FROM Products GROUP BY Category HAVING COUNT(*) > 10")
                    .ToList();
foreach (var group in result)
{
    Console.WriteLine($"Category: {group.Category}, Count: {group.ProductCount}");
}

위에서 살펴 본 것처럼, ORM은 SQL을 완전히 대체하려는 것이 아니라

SQL과 객체 지향 프로그래밍의 장점을 결합하여 더 생산적이고 유지보수하기 쉬운 개발 환경을 제공합니다.

 

이것은 SQL만 사용하는 접근법보다 더 효율적이며 객체 지향 언어와의 일관성을 확보하는 데 ORM이 중요한 역할을 합니다.

 

저는 이렇게 ORM이 무엇인지 그리고 왜 중요한지에 대해 간단히 설명드렸습니다.

 

다음 포스팅에서는 ORM의 동작 방식과 원리를 간단히 살펴본 뒤,

이를 활용한 대표적인 ORM 기술인 Entity Framework에 대해 구체적으로 알아보겠습니다.