저도공부를하긴한답니다?

기존 SP를 ef core또는 Smart SQL 로 이식하는 이식성

쟉트 2025. 3. 6. 13:31
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 ProcedureEF 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