728x90
📌 기존 Stored Procedure를 EF Core 또는 SmartSQL(Dapper)로 이식하는 이식성 비교
기존 Stored Procedure(SP) 를 EF Core 또는 SmartSQL(Dapper)로 이식하려면, 쿼리 구조, 파라미터 처리 방식, 트랜잭션 관리, 성능 최적화, 유지보수성 등을 고려해야 해.
아래에서 이식성을 중심으로 두 방식을 비교해볼게.
1️⃣ EF Core vs SmartSQL(Dapper) 이식성 비교
비교 항목 | EF Core (ORM 방식) | SmartSQL (Dapper, Mapper 방식) |
---|---|---|
1. 기존 Stored Procedure 활용 여부 | ✅ FromSqlRaw() 로 직접 실행 가능 |
✅ ExecuteAsync() 로 직접 실행 가능 |
2. 기존 SQL 쿼리 재사용 가능성 | ❌ ORM 방식으로 변환해야 하는 경우가 많음 | ✅ 기존 SQL을 거의 그대로 사용 가능 |
3. 트랜잭션 관리 | ✅ DbContext.Transaction 사용 가능 |
✅ ADO.NET의 TransactionScope 활용 가능 |
4. 복잡한 다중 테이블 조인 변환 | ❌ LINQ로 변환 시 복잡할 수 있음 | ✅ SQL 그대로 유지 가능 |
5. 성능 최적화 및 튜닝 | ❌ SQL 튜닝이 어려울 수 있음 | ✅ 직접 튜닝 가능 |
6. 유지보수 편의성 | ✅ ORM 기반으로 코드 유지보수가 쉬움 | ❌ SQL을 직접 다뤄야 하므로 다소 번거로울 수 있음 |
💡 요약:
- EF Core: ORM 방식이므로 Stored Procedure를 LINQ로 변환해야 하는 경우가 많고, 이식성이 떨어질 수 있음.
- SmartSQL(Dapper): 기존 Stored Procedure SQL을 거의 그대로 유지할 수 있어 이식성이 높음.
2️⃣ Stored Procedure 변환 예제 비교 (EF Core vs SmartSQL)
아래 예제는 MSSQL의 Stored Procedure를 EF Core와 SmartSQL(Dapper)로 변환하는 과정을 보여줄게.
🔹 기존 Stored Procedure (MSSQL)
CREATE PROCEDURE GetUserOrders
@UserId INT
AS
BEGIN
SELECT o.Id, o.OrderDate, o.TotalAmount
FROM Orders o
WHERE o.UserId = @UserId
END
3️⃣ EF Core로 변환하는 경우
✅ FromSqlRaw()
를 이용한 직접 실행 방식
public async Task<List<Order>> GetUserOrders(int userId)
{
return await _context.Orders
.FromSqlRaw("EXEC GetUserOrders @UserId = {0}", userId)
.ToListAsync();
}
✔ 기존 Stored Procedure를 그대로 사용 가능
❌ 하지만, LINQ를 활용한 변환이 필요한 경우가 많음
✅ LINQ로 변환하는 경우 (완전 이식)
public async Task<List<Order>> GetUserOrders(int userId)
{
return await _context.Orders
.Where(o => o.UserId == userId)
.ToListAsync();
}
✔ LINQ 스타일로 변환하면 유지보수성이 높아짐
❌ 하지만 SQL 최적화를 직접 하기 어려움
4️⃣ SmartSQL(Dapper)로 변환하는 경우
public async Task<IEnumerable<Order>> GetUserOrders(int userId)
{
using (var connection = new SqlConnection(_connectionString))
{
return await connection.QueryAsync<Order>(
"EXEC GetUserOrders @UserId",
new { UserId = userId }
);
}
}
✔ 기존 Stored Procedure를 거의 그대로 유지할 수 있음
✔ ADO.NET 기반으로 성능 최적화 가능
❌ SQL을 직접 다뤄야 하므로 유지보수가 번거로울 수 있음
5️⃣ EF Core vs SmartSQL(Dapper) 이식성 결론
✅ EF Core가 유리한 경우:
- Stored Procedure를 완전히 제거하고, ORM 방식으로 재설계할 경우
- 유지보수성이 중요하고, 향후 LINQ 기반 개발을 고려하는 경우
✅ SmartSQL(Dapper)이 유리한 경우:
- Stored Procedure를 거의 그대로 유지하면서 코드로 옮기고 싶을 경우
- SQL 튜닝이 중요하고, 성능을 직접 관리하고 싶을 경우
📌 결론:
- EF Core는 Stored Procedure를 완전히 ORM 기반으로 변환할 때 적합
- SmartSQL(Dapper)은 기존 SQL을 유지하면서 코드에 이식하는 데 더 적합
💡 프로젝트 특성상 SmartSQL(Dapper)이 더 적절해 보이지만, EF Core도 단순한 CRUD 작업에는 병행해서 사용 가능!
혹시 더 궁금한 점 있어? 😊
'저도공부를하긴한답니다?' 카테고리의 다른 글
깃티 젠킨스 비교 (0) | 2025.03.06 |
---|---|
EF Core 변경 추적 기능 (0) | 2025.03.06 |
markdown 으로 씨아이씨디툴 비교 (0) | 2025.03.06 |
SP -> EF, SP -> Dapper 이식성 (0) | 2025.03.05 |
ef - dapper 비교 (0) | 2025.03.05 |