반응형
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())
'프로그래밍 > C#' 카테고리의 다른 글
C# 업 캐스팅(Upcasting)에 대해서 알아보자 (0) | 2025.05.19 |
---|---|
C# 얕은 복사, 깊은 복사에 대해서 알아보자 (0) | 2025.05.19 |
UseForwardedHeaders를 이용해서 클라이언트 실제 IP 얻기 (0) | 2025.05.19 |
C# Serilog에서 Sub-Logger를 이용해서 별도의 하위 로거 설정하기 (0) | 2025.05.16 |
비동기 메서드의 형식을 맞추기 위해서 필요한 Task.CompletedTask (0) | 2025.05.15 |
댓글