본문 바로가기
프로그래밍/C#

C# EF Core 사용시 DB 상태를 간단하게 체크하는 방법

by bantomak 2025. 5. 19.
반응형

Database.CanConnectAsync()

  • DB 연결만 확인
  • 간단하게 구현이 가능
  • EF Core 내부 방식 사용
  • 반환값 > true or false
  • 단순 연결 시도로 아주 빠른 성능
  • 실패 시 false 반환 (예외 없음)
  • 권한 확인 안 됨

ExecuteSqlRawAsync("SELECT 1")

  • DB 연결 + 쿼리 수행 가능 여부
  • 쿼리 작성 필요
  • SQL 문법에 의존
  • 반환값 > 영향받은 행 수 (int 값)
  • SQL 실행을 포함하기 때문에 약간 무거움
  • 예외 발생 가능 (try/catch 필요)
  • 권한 확인 가능 (SELECT, INSERT 권한 확인 가)

CanConnectAsync()가 더 적합한 경우

  • 단순히 DB 연결이 가능한가? 만 확인하고 싶을 때
  • 앱 시작 시 헬스 체크 또는 초기 상태 점검용
  • 운영 중에 주기적 연결 테스트할 때 (ex. BackgroundService)
if (await context.Database.CanConnectAsync())
{
    Console.WriteLine("연결 성공");
}
else
{
    Console.WriteLine("연결 실패");
}

ExecuteSqlRawAsync("SELECT 1")가 더 적합한 경우

  • 연결뿐만 아니라 쿼리가 제대로 수행되는지도 확인하고 싶을 때
  • DB에 대한 권한, 테이블 접근 여부, 리턴값 등까지 확인하고 싶을 때
  • 특정 DB 정책 상 CanConnect()가 제한되는 경우
try
{
    var result = await context.Database.ExecuteSqlRawAsync("SELECT 1");
    Console.WriteLine("연결 및 쿼리 성공");
}
catch (Exception ex)
{
    Console.WriteLine($"실패: {ex.Message}");
}

정리하자면

  • 단순 연결 확인 > CanConnectAsync()
  • DB가 살아있고 쿼리도 정상 작동해야 하는지 확인 > ExecuteSqlRawAsync("SELECT 1")
  • 운영 중 헬스 체크 > CanConnectAsync() + AddDbContextHealthCheck()
  • 권한 문제나 스키마 접근 확인도 필요 > SELECT 쿼리 방식 (또는 context.MyTable.FirstAsync())

댓글