728x90
24.08.02 C#, DEV
C#
System.Data.SqlClient.SqlConnection.OnError
- ADO.NET의 SqlConnection 클래스에서 발생한 오류를 처리하기 위한 내부 메서드이다.
- 이 메서드는 SQL 서버와의 연결 중 오류가 발생했을 때 호출된다. 특히 OnError 메서드는 데이터베이스 작업 중 발생한 예외(SqlException)를 처리하고, 필요시 연결을 중단하거나 다른 후속 작업을 처리할 수 있도록 하는 역할을 한다.
- 이 메서드는 SqlConnection 클래스의 내부 메서드이므로 직접 호출하거나 오버라이드할 수는 없다. 주로 SqlConnection 객체와 관련된 예외 처리 흐름의 일부로 사용되며, 개발자가 직접적으로 사용하는 경우는 드물다. 예외가 발생했을 때의 로그 또는 스택 트레이스를 통해 이 메서드가 호출되었음을 알 수 있다.
매개변수
- exception
- SqlException 타입의 예외 객체로, SQL 서버와의 상호작용 중에 발생한 오류 정보를 포함한다.
- breakConnection
- Boolean 타입의 값으로, 연결을 중단할지 여부를 나타낸다. true일 경우, 연결이 종료된다.
- wrapCloseInAction
- Action 타입의 델리게이트로, 연결을 닫는 작업을 래핑하는 동작을 지정한다. 이는 예외가 발생한 후 연결을 안전하게 닫기 위한 방법을 제공한다.
사용 맥락
- 이 메서드는 SqlConnection 클래스의 내부 메커니즘의 일부로, 사용자 코드에서 명시적으로 호출되지 않는다. 그러나 이 메서드에 대한 이해는 SQL 서버와의 상호작용 중 발생하는 오류를 처리하는 방법과 해당 오류가 내부적으로 어떻게 처리되는지 이해하는 데 도움이 된다.
- 일반적으로 SqlException이 발생하면, 다음과 같은 작업이 수행된다.
- 예외 생성
- SqlException 객체가 생성된다. 이 객체는 SQL 서버에서 발생한 오류 코드, 오류 메시지, 발생한 위치 등의 정보를 포함한다.
- OnError 호출
- OnError 메서드가 호출되어 예외 처리 로직이 수행된다.
- 연결 종료
- breakConnection이 true로 설정된 경우, 현재 연결이 닫힌다. 이는 연결이 더 이상 유효하지 않거나 안전하지 않다고 판단될 때 사용된다.
- 후속 처리
- wrapCloseInAction에 정의된 후속 작업이 실행될 수 있다. 이는 일반적으로 연결을 안전하게 닫는 작업을 포함한다.
- 예외 생성
예외 처리
- 개발자는 try-catch 블록을 사용하여 SqlConnection 및 관련 ADO.NET 객체와의 상호작용 중 발생할 수 있는 예외를 처리할 수 있다. 예를 들어, 데이터베이스 연결 실패, 쿼리 실행 중 오류, 트랜잭션 오류 등을 다룰 수 있다.
System.Data.SqlClient.SqlException (0x80131904)
- 시간 제한 만료됨 오류
- ‘시간 제한 만료됨’ 문제가 발생하면 다음 오류 메시지 중 하나 이상이 나타난다.
- 시간 제한이 만료되었습니다. 작업이 완료되기 전에 제한 시간이 초과되었거나 서버가 응답하지 않습니다.
- System.Data.SqlClient.SqlException (0x80131904): 연견 시간 제한이 만료되었습니다. 사전 로그인 핸드셰이크 승인을 사용하는 동안 경과된 시간 제한 기간입니다. 이는 사전 로그인 핸드셰이크가 실패했거나 서버가 시간을 거슬러 응답할 수 없기 때문일 수 있습니다.
- 이 서버에 연결하는 동안 소요된 기간: [사전 로그인] 초기화 =23; 핸드셰이크 = 14979;
- System.ComponentModel.Win32Exception (0x80004005): 대기 작업 시간이 초과되었습니다.
- System.Data.SqlClient.SqlException (0x80131904): 시간 제한이 만료되었습니다. 작업이 완료되기 전에 제한 시간이 초과되었거나 서버가 응답하지 않습니다.
- System.ComponentModel.Win32Exception (0x80004005): 대기 작업 시간이 초과되었습니다.
- 연결 시간 제한이 만료되었습니다. 사전 로그인 핸드셰이크 승인을 사용하는 동안 시간 초과 기간이 경과했습니다. 이는 사전 로그인 핸드셰이크가 실패했거나 서버가 시간을 제 시간에 응답할 수 없기 때문일 수 있습니다.
- 이 서버에 연결하는 동안 소요된 기간: [사전 로그인] 초기화 = 21036; 핸드셰이크 = 0; (Microsoft SQL Server, 오류: -2).
- System.InvalidOperationException: 시간 제한이 만료되었습니다. 풀에서 연결을 가져오기 전에 경과된 시간 제한 기간입니다.
- 연결이 올바르게 닫혀 있지 않으면 오류가 발생할 수 있다. 이러한 오류는 풀된 모든 연결이 사용 중이며 최대 풀 크기에 도달했기 때문에 발생한다. 연결 풀 소진 문서에 설명된 단계를 수행하는 경우 이러한 오류를 방지할 수 있다.
시간 제한 만료됨 오류 유형 확인
- 연결 관점에서 다음과 같은 시간 제한 문제가 발생한다.
- 연결 시간 제한(기본적으로 15초)
- 쿼리 또는 명령 시간 제한(기본적으로 30초)
- 기본값은 코드, 연결 문자열 또는 기타 메서드를 통해 설정할 수 있다.
- 문제를 해결하기 전 오류 메시지의 전체 호출 스택을 확인하여 오류 유형을 확인한다.
DEV
오토스케일링(AutoScaling)
- 일반적으로 컴퓨팅 리소스 측면에서 시스템이 자동으로 규모를 조절(scale)하는 기능(ability)이다.
- 오토스케일링 시스템을 사용하면, 리소스가 필요할 때 자동으로 추가되고 변화를 거듭하는 사용자 요구에 맞게 규모를 조절할 수 있다. 오토스케일링 프로세스는 다양하며 메모리 또는 처리 시간과 같은 다른 메트릭을 기반으로 규모를 조절하도록 설정할 수 있다. 관리형 클라우드 서비스에는 일반적으로 오토스케일링 기능이 관계되어 있는데, 이는 대부분의 온프레미스(on-premises) 배포보다 더 많은 옵션과 구현을 제공하기 때문이다.
- 이전에는 인프라와 애플리케이션이 시스템의 최대 사용치(peak usage)를 고려하도록 설계하였다. 이 아키텍처에서는 많은 리소스가 충분히 활용되지 못하고 변화하는 소비자 수요에 탄력적이지 않음이 들어났다. 이러한 비탄력성은 비지니스에 더 큰 비용을 투입하도록, 그리고 큰 비용 투입에도 불구하고 과도한 수요가 발생했을 때 운영 중단으로 인한 비즈니스 손실이 발생하도록 만들었다.
- 클라우드를 활용하고 애플리케이션 및 그 의존성(dependency)을 가상화(virtualization) 및 컨테이너화(containerization)함으로써, 조직은 사용자 요구에 따라 확장 가능한 애플리케이션을 만들어 낼 수 있다.
- 애플리케이션 수요를 모니터링하고 자동으로 규모를 조절하여 최적의 사용자 경험을 제공할 수 있다.
스케일링
- 인스턴스 혹은 컴퓨팅 파워를 늘리는 것을 말한다.
- 대표적인 2가지 방법으로 스케일 업과 스케일 아웃이 있다.
- 스케일 업(Scale-up)
- 만일 인스턴스의 성능을 16배로 늘려야할 상황이 온다면, 말 그대로 16배 큰 인스턴스를 사용함으로서 성능을 올리는 것을 말한다.
- 하지만 성능과 비용이 비례하지 않는다는 단점이 있다.
- 스케일 아웃(Scale-out)
- 규모를 늘리는 것이다.
- 클라우드의 경우 성능을 16배 올리고 싶으면 인스턴스를 16개 더 사용하면 된다. 공간의 제약이나 하드웨어적인 제약이 없다. 그리고 성능과 비용이 비례하다는 특징도 있다.
- 클라우드 환경에서는 Scale-Out을 항상 염두하며 설계를 해야한다.
- 스케일 인(Scale-In)
- Scale-Out으로 늘린 인스턴스를 다시 줄이는 행위이다.
- 오토 스케일링은 바로 Scale-Out을 자동화 하기 위해 나온 서비스이다.
- 애플리케이션을 모니터링하고 용량을 자동으로 조정하는 역할을 하며, 최대한 저렴한 비용으로 안정적이고 예측 가능한 성능을 유지한다.
게임 서버
릴레이(Relay)
- 게임 서버 프로그래밍에서는 아래와 같은 의미로 주로 사용된다.
- 데이터 중계
- 한 지점에서 다른 지점으로 데이터를 전달하는 행위
- 릴레이 서버
- 클라이언트 간 직접 연결이 불가능할 때 중간에서 통신을 중계하는 서버
- 이벤트 전파
- 한 시스템에서 발생한 이벤트를 다른 시스템으로 전달하는 것을 의미
- 네트워크 토폴로지
- 네트워크에서 데이터가 여러 노드를 거쳐 최종 목적지에 도달하는 구조
- 데이터 중계
728x90
'Study > TIL(Today I Learned)' 카테고리의 다른 글
24.08.06 C#, 젠킨스 (0) | 2024.08.06 |
---|---|
24.08.05 C# (0) | 2024.08.05 |
24.08.01 C#, 데이터베이스 샤딩 (0) | 2024.08.01 |
24.07.31 C# (0) | 2024.07.31 |
24.07.30 C#, 배치 파일과 도스 명령어, 게임 서버 (1) | 2024.07.30 |