푸터 콘텐츠로 바로가기
Iron Academy Logo
C# 애플리케이션
C# 애플리케이션

다른 카테고리

C# SQL 연결 튜토리얼: Dapper + SQL Server 데이터베이스 설명

Tim Corey
1h 15m 23s

Tim Corey의 "C# 앱 처음부터 끝까지" 시리즈의 10번째 수업에서 팀은 Dapper를 사용하여 C# 응용 프로그램을 SQL Server 데이터베이스에 연결하는 방법을 설명합니다. 이전 수업에서는 앱이 SQL과의 대화를 가장하는 가짜 데이터 액세스 계층을 사용했습니다. 이번 비디오에서 팀은 해당 자리표시자 코드를 실제 SQL 연결 로직으로 교체하고, 깨끗하고 확장 가능하며 유지보수가 쉬운 방법으로 실제 데이터베이스 연결을 설정하는 방법을 보여줍니다.

이 기사는 팀이 다루는 주요 개념을 분해하여 설명하며, C# SQL 연결이나 SQL Server에 익숙하지 않아도 그 내용을 이해할 수 있도록 합니다.

프로젝트 설정 및 정리

팀은 솔루션 구조를 검토하고 이전 수업에서 수행한 변경 사항을 확인하면서 시작합니다. Program.cs에서 그는 SQL Server 및 텍스트 파일 데이터베이스에 연결하는 코드를 추가하고, 스타트업 양식을 "Create Prize" 양식으로 변경하여 즉시 데이터베이스 연결을 테스트할 수 있도록 설명합니다.

그는 두 개의 폴더를 생성하여 프로젝트 구조를 정리합니다:

  • 모델

  • 데이터액세스

그는 이것이 소스 코드 기능에 영향을 미치지 않지만, 조직에 도움이 됩니다. 프로젝트에 나중에 돌아올 때, 깔끔한 구조와 일관된 이름은 유지보수 및 확장을 훨씬 쉽게 만듭니다.

왜 Dapper인가?

팀은 SQL 연결을 위해 Dapper를 ORM(객체 관계 매핑)으로 사용할 것임을 설명합니다. Dapper는 원시 SQL 명령어와 Entity Framework 같은 상위 레벨 ORM 사이에 위치합니다.

팀은 Dapper가 다음과 같은 이유로 선호됩니다:

  • 거의 원시 ADO.NET만큼 빠름

  • Entity Framework보다 단순함

  • 불필요한 복잡성과 무거운 보일러플레이트 코드를 피함

그는 Entity Framework가 특히 작은 애플리케이션에 대해 느리고 무거울 수 있음을 언급합니다. 자신의 프로젝트에서 Dapper는 성능과 단순함 사이의 적절한 균형을 제공합니다.

Dapper 설치

팀은 Visual Studio에서 NuGet 패키지 관리자 통해 Dapper를 설치하는 방법을 보여줍니다. 설치 후 Dapper는 프로젝트 참조에 나타나며, SQL 연결 코드는 깨끗하고 읽기 쉽게 됩니다.

연결 문자열 추가

Dapper를 사용하려면 연결 문자열이 필요합니다. 팀은 그것을 UI 프로젝트의 app.config 파일에 추가합니다. 라이브러리 프로젝트가 아니라, 라이브러리가 DLL이며 독립적인 구성을 가지지 않기 때문입니다.

연결 문자열에는 다음이 포함됩니다:

  • 데이터 소스 (서버 이름 또는 기계 도메인 이름)

  • 초기 카탈로그 (데이터베이스 이름)

  • 통합 보안 (Windows 인증)

  • 연결 시간 제한

  • 사용자 ID 및 비밀번호 (Windows 인증을 사용하지 않는 경우)

팀의 예제에서는 Windows 인증을 의미하는 신뢰 인증을 사용합니다:

Data Source=SQL2016;Initial Catalog=Tournaments;Integrated Security=True;

그는 이 파일에 SQL Server 사용자 자격 증명을 저장하는 것을 방지한다고 강조합니다.

GlobalConfig: 연결 문자열 가져오기

연결 문자열을 검색하기 위해 팀은 GlobalConfig에 메서드를 추가합니다:

public static string GetConnectionString(string name)
{
    return ConfigurationManager.ConnectionStrings[name].ConnectionString;
}

이 메서드는 구성 파일에서 연결 문자열을 가져와 반환합니다. 팀은 또한 필수 System.Configuration 참조를 추가합니다.

SQL 연결 생성

팀은 자리표시자 코드를 제거하고 실제 SqlConnection을 생성합니다:

using (IDbConnection connection = new SqlConnection(
    GlobalConfig.GetConnectionString("tournaments")))
{
    // 여기에 SQL 로직
}

그는 IDbConnection 인터페이스를 사용하여 데이터베이스 유형(SQL 또는 텍스트 파일)을 코어 코드를 변경하지 않고 교체할 수 있도록 합니다.

using 블록은 코드가 블록을 나가면 연결이 자동으로 닫히도록 보장해줍니다. 이는 데이터베이스 서버의 연결 풀을 고갈시키거나 오류를 유발할 수 있는 열린 연결을 방지해줍니다.

저장 프로시저 생성

C# 안에 원시 SQL을 작성하는 대신, 팀은 저장 프로시저를 사용합니다. 이 방법은 SQL 로직을 데이터베이스에 보관하고 SQL 주입 같은 위험을 줄입니다.

그는 다음 이름의 저장 프로시저를 만듭니다:

dbo.SP_Prizes_Insert

이 프로시저는 상 테이블과 일치하는 매개변수를 받습니다:

  • @PlaceNumber

  • @PlaceName

  • @PrizeAmount

  • @PrizePercentage

  • @ID (출력)

출력 매개변수는 다음을 사용하여 새로 생성된 ID를 반환합니다:

SELECT @ID = SCOPE_IDENTITY()

이 방법은 새로운 레코드 ID가 C# 앱으로 반환되도록 합니다.

Dapper의 동적 매개변수

C#으로 돌아와서 팀은 Dapper의 DynamicParameters를 사용하여 저장 프로시저에 매개변수를 보냅니다:

var p = new DynamicParameters();
p.Add("@PlaceNumber", model.PlaceNumber);
p.Add("@PlaceName", model.PlaceName);
p.Add("@PrizeAmount", model.PrizeAmount);
p.Add("@PrizePercentage", model.PrizePercentage);
p.Add("@ID", 0, dbType: DbType.Int32, direction: ParameterDirection.Output);

ID는 출력으로 표시되며, Dapper는 매개변수 매핑을 처리합니다.

저장 프로시저 실행

그는 저장 프로시저를 실행합니다:

connection.Execute("dbo.SP_Prizes_Insert", p, commandType: CommandType.StoredProcedure);

Execute는 insert를 수행하며 SELECT 문처럼 행을 반환하지 않습니다.

실행 후 ID를 코드에서 검색합니다:

model.ID = p.Get<int>("@ID");
return model;

테스트 및 결과

팀은 응용 프로그램을 실행하고 양식을 작성한 후 Create Prize를 클릭합니다. 데이터는 SQL Server 데이터베이스에 성공적으로 삽입됩니다. 그는 둘 다 테스트합니다:

  • 상 금액

  • 상 퍼센트

둘 다 작동하여 데이터베이스 연결 및 저장 프로시저가 올바르게 작동하는 것을 증명합니다.

디자인 문제: 다중 데이터 커넥터 (1:01:50)

팀은 시퀄 및 텍스트 파일 커넥터를 동시에 사용하면 ID가 일관되지 않는 디자인 문제를 강조합니다.

따라서 그는 하나의 커넥터만 한 번에 실행되도록 디자인을 변경합니다. 그는 열거형을 추가합니다:

DatabaseType
{
    SQL,
    TextFile
}

이것은 앱이 항상 일관된 데이터베이스 유형을 사용하도록 보장하며, 다른 출처의 데이터가 서로 섞이는 것을 방지합니다.

결론

팀 코리의 수업 10은 Dapper를 사용하여 C# 응용 프로그램을 SQL Server에 연결하는 현실적인 접근법을 보여줍니다. 그는 다음을 다룹니다:

  • 연결 문자열 추가하기

  • SqlConnection 사용하기

  • 안전하게 연결을 열고 닫기

  • 저장 프로시저 사용하기

  • SQL 주입 방지

  • 다중 데이터 소스에 대한 적절한 아키텍처

C#을 SQL Server 데이터베이스에 연결하기 위한 깨끗하고 빠르고 유지 가능한 방법을 원하신다면, 이 수업은 완벽한 가이드입니다.

Hero Worlddot related to C# SQL 연결 튜토리얼: Dapper + SQL Server 데이터베이스 설명
Hero Affiliate related to C# SQL 연결 튜토리얼: Dapper + SQL Server 데이터베이스 설명

사랑하는 것을 공유하여 더 많은 수익을 얻으세요

당신은 .NET, C#, Java, Python, 또는 Node.js를 다루는 개발자를 위한 콘텐츠를 만드나요? 당신의 전문성을 추가 수입으로 전환하세요!

아이언 서포트 팀

저희는 주 5일, 24시간 온라인으로 운영합니다.
채팅
이메일
전화해