Ruby

루비, 파이썬 및 C 클라이언트에서 런타임 오류 처리하기

모든 앱은 결국 예기치 않게 발생하는 런타임 오류라는 예외를 처리해야 하며 앱은 오류를 처리하고 복구하는 방법을 알고 있어야 합니다. 오류 처리가 최종 사용자에게 투명하면 좋겠지만, 최소한 좋은 오류 처리는 문제를 해결하고 사용자에게 다음에 수행할 작업에 대한 충분한 정보를 제공한 후 프로그램을 정상적으로 종료할 수 있어야 합니다. 사용자 지정 앱을 작성하는 데 많은 노력을 기울였다면 런타임 오류로 인해 모든 것을 망칠 이유가 없겠죠? 이 블로그에서는 libCouchbase 파생 클라이언트(Ruby, PHP, Python, C/C++)에서 다양한 반환 코드의 의미와 앱에서 반환 코드가 발생했을 때 수행해야 하는 작업에 대해 설명합니다..

카우치베이스 클라이언트는 다음과 같습니다. 스마트. 즉, 다음과 같습니다. 클러스터 토폴로지 인식 - 노드가 실패하면 클라이언트는 이를 인식합니다. 클러스터에 새 노드가 추가되면 클라이언트도 이 새 노드를 인식합니다. 멤캐시드 클라이언트에 비해 스마트 클라이언트는 요청을 올바른 Couchbase 서버로 자동 라우팅하여 장애 발생 시 더 나은 성능과 가용성을 제공합니다. 스마트 클라이언트는 다음에서 파생됩니다. libcouchbase (루비, 파이썬, 펄, node.js 및 PHP) 또는 Java 및 .NET과 같은 모국어로 작성되었습니다. 이 블로그에서는 libcouchbase 클라이언트에서 반환되는 오류 코드를 다룹니다.

애플리케이션은 스마트 클라이언트 API를 사용하여 Couchbase에 요청을 보냅니다. 카우치베이스는 4 포트 - 11210(직접 포트), 11211(프록시 포트), 8091(관리자 콘솔), 8092(카우치베이스 보기). 연결되면 클라이언트는 동일한 연결로 서버에 요청 스트림을 보낼 수 있습니다. 요청 메시지에는 일반적으로 24바이트의 멤캐시된 바이너리 헤더와 선택 사항인 페이로드가 포함됩니다. 페이로드의 길이는 헤더에 지정됩니다. 문서 변경은 먼저 객체 관리 캐시로 이동한 다음 비동기적으로 복제 및 유지됩니다. Couchbase는 문서가 개체 관리형 캐시에 추가되는 즉시 성공(0) 또는 실패(0이 아닌 오류 코드)를 반환합니다. 반환 코드는 API 호출의 전반적인 성공 또는 실패를 나타냅니다.

애플리케이션에서 오류 코드를 확인하여 요청을 다시 시도하거나 사용자 오류를 던질 때를 파악하는 것은 좋은 프로그래밍 관행입니다. 아래 표에는 Couchbase의 오류 코드가 나열되어 있으며 나열된 오류가 발생할 경우 클라이언트가 수행해야 할 작업이 제시되어 있습니다:

libCouchbase에서 파생된 클라이언트를 사용하는 경우 다음과 같은 루비, 파이썬, 펄, node.js 및 PHP에서 표시될 수 있는 오류 코드는 다음과 같습니다:

오류 코드 수신

무슨 뜻인가요?

클라이언트는 어떻게 해야 하나요?

LCB_SUCCESS 작업 성공 아무것도 하지 않습니다. 카우치베이스가 클라이언트 요청을 성공적으로 실행했습니다.
LCB_AUTH_ERROR 인증에 실패했습니다. 잘못된 사용자 이름 또는 비밀번호를 제공했습니다. 제공된 사용자 아이디와 비밀번호를 확인합니다. 고객은 올바른 사용자 아이디와 비밀번호로 다시 시도해야 합니다.
LCB_DELTA_BADVAL

 

요청된 인수를 사용하여 작업을 실행할 수 없습니다. 인자와 인자에 대해 실행되는 연산을 확인합니다.

예를 들어 incr을 사용하여 숫자가 아닌 값을 증가시키거나 숫자가 아닌 값만큼 증가시키기

LCB_E2BIG 서버가 개체가 너무 크다고 보고했습니다. Couchbase의 최대 키 크기는 250바이트입니다. Couchbase의 최대 문서 크기는 20Mb입니다.

 

클라이언트는 이 제한 범위 내의 크기를 가진 오브젝트를 다시 시도하고 사용해야 합니다.

LCB_EBUSY 서버가 너무 바빠서 지금 요청을 처리할 수 없습니다. 앱 코드에서 백오프를 사용하고 잠시 후 작업을 다시 시도하세요.
LCB_EINTERNAL 라이브러리 내부에 내부 오류가 있습니다. 연결 컨텍스트를 삭제하고 새 컨텍스트를 만듭니다.
LCB_EINVAL 잘못된 인수가 지정되었습니다. 올바른 인수를 전달했는지 확인하세요.
LCB_ENOMEM 서버의 메모리가 부족합니다. 메모리에 있는 문서가 아직 디스크로 플러시되지 않은 경우 메모리 압박 중에 이 문제가 발생할 수 있습니다. 잠시 후 백오프하고 다시 시도하세요.
LCB_RANGE 지정한 범위가 잘못되었습니다. 적절한 범위를 지정했는지 확인하세요.
LCB_ETMPFAIL 서버가 작업을 수행하려고 했지만 일시적인 제약 조건으로 인해 실패했습니다. 잠시 후 다시 시도하세요.
LCB_KEY_EXIST 키가 이미 존재합니다(다른 CAS 값 포함). 카우치베이스의 키는 고유합니다. 다른 키를 사용해 보세요.
LCB_KEY_ENOENT 키가 존재하지 않습니다. 키를 찾을 수 없습니다. 다른 키를 찾아보세요.
lcb_network_error 네트워크 관련 문제가 발생했습니다. 네트워크 문제를 해결하고 다시 시도하세요.
lcb_not_my_vbucket 이 요청을 받은 서버는 더 이상 이 오브젝트에 대한 책임이 없습니다. 이는 클러스터 토폴로지 변경 또는 리밸런싱 중에 발생합니다. 클라이언트는 서버에서 새 클러스터 맵을 자동으로 가져와서 후속 요청을 보낼 위치를 학습합니다.

 

라이브러리 카우치베이스에서이 오류는 사용자에게 실제로 노출되지 않습니다. 라이브러리는 올바른 서버에 다시 연결할 수 있도록 자동으로 관리합니다.

 

잠시 후 작업을 다시 시도하세요.

LCB_NOT_STORED 개체가 서버에 저장되지 않았습니다. 앱 코드에서 백오프를 사용하고 잠시 후 작업을 다시 시도하세요.
LCB_NOT_지원됨 서버가 요청된 명령을 지원하지 않습니다. 서버로 전송된 요청을 확인합니다.
LCB_UNKNOWN_COMMAND 서버는 명령이 무엇인지 알지 못합니다. 서버로 전송된 요청을 확인합니다.
LCB_UNKNOWN_HOST 서버가 요청된 호스트 이름을 확인하지 못했습니다. 지정된 호스트 이름을 확인합니다.
LCB_프로토콜_오류 서버에서 수신한 데이터 스트림에 문제가 있습니다. 결과 세트는 폐기하고 사용하지 않아야 합니다. 클라이언트가 작업을 다시 시도해야 합니다.
LCB_ETIMEOUT 서버 작업이 시간 초과되었습니다. 클러스터의 서버에 장애가 발생했지만 Couchbase가 아직 이 장애를 감지하지 못한 경우 이 문제가 발생할 수 있습니다.

클라이언트는 잠시 후 다시 시도해야 합니다.

lcb_connect_error 클라이언트가 요청된 서버에 연결하지 못했습니다. 클라이언트는 잠시 후 다시 시도해야 합니다.
LCB_BUCKET_ENOINT 요청한 버킷이 존재하지 않습니다. 서버에 버킷이 있는지 확인한 후 다시 시도하세요.
LCB_CLIENT_ENOMEM 클라이언트의 메모리가 부족합니다. 클라이언트 측에서 연결 컨텍스트가 제대로 해제되지 않은 경우 이 문제가 발생할 수 있습니다. 현재 연결 컨텍스트를 삭제하고 다시 시도하세요.
LCB_CLIENT_ETMPFAIL 클라이언트에서 일시적인 오류가 발생했습니다. 잠시 후 애플리케이션이 다시 시도할 수 있습니다.
LCB_SERVER_BUG 예기치 않은 서버 프로토콜 사용으로 인해 예기치 않은 결과가 발생했습니다. 결과 세트는 사용하지 말고 폐기해야 합니다.

 

개발자는 문제를 재현하기 위해 자신의 단계를 기록하고 버그 제출.

LCB_INVALID_HOST_FORMAT 부트스트랩 호스트 목록에 유효하지 않거나 지원되지 않는 형식이 사용되었습니다. 사용된 호스트 이름 형식을 확인하고 수정한 후 다시 시도하세요.
LCB_INVALID_CHAR URL의 경로 구성 요소에 잘못된 문자가 사용되었습니다. URL 경로가 올바르게 인코딩되었는지 확인합니다.

아래 코드 스니펫 예시에서 볼 수 있듯이, 애플리케이션은 Couchbase에서 오류 코드를 수신한 후 이 코드를 문자열로 변환할 수 있습니다.

        #포함 <libcouchbase/카우치베이스.h>

        …
        fprintf(stdout, "LCB_SUCCESS의 텍스트 문자열은: %sn,
        lcb_error(NULL, LCB_SUCCESS));
        …

아무리 자신감이 있어도 발생할 수 있는 모든 문제를 예측할 수는 없습니다. 오류를 확인하는 메커니즘이 없으면 Couchbase가 제대로 작동하지 않는다고 생각할 수 있습니다. 오류가 발생하는 이유를 알 수 있도록 앱에서 오류 코드를 확인해야 합니다. 

Couchbase에서 앱을 잘 만들어 보세요!

이 문서 공유하기
받은 편지함에서 카우치베이스 블로그 업데이트 받기
이 필드는 필수 입력 사항입니다.

작성자

게시자 돈 핀토, 수석 제품 관리자, Couchbase

돈 핀토는 Couchbase의 수석 제품 관리자로 현재 Couchbase Server의 기능을 발전시키는 데 주력하고 있습니다. 데이터 기술에 대한 열정이 대단한 그는 과거에 기술 블로그와 백서 등 Couchbase Server에 관한 여러 기사를 저술한 바 있습니다. Couchbase에 입사하기 전에는 IBM에서 수년간 근무하며 DB2 정보 관리 그룹에서 소프트웨어 개발자의 역할을 수행했고, 가장 최근에는 Microsoft의 SQL Server 팀에서 프로그램 관리자로 근무했습니다. Don은 캐나다 토론토 대학교에서 컴퓨터 공학 석사 학위와 컴퓨터 공학 학사 학위를 받았습니다.

댓글 하나

  1. [...] 이전 블로그 글에서는 루비, 파이썬, C 및 C++와 같은 libCouchbase 클라이언트에서 발생하는 오류에 대해 살펴봤습니다. 이 블로그 [...]

댓글 남기기

카우치베이스 카펠라를 시작할 준비가 되셨나요?

구축 시작

개발자 포털에서 NoSQL을 살펴보고, 리소스를 찾아보고, 튜토리얼을 시작하세요.

카펠라 무료 사용

클릭 몇 번으로 Couchbase를 직접 체험해 보세요. Capella DBaaS는 가장 쉽고 빠르게 시작할 수 있는 방법입니다.

연락하기

카우치베이스 제품에 대해 자세히 알고 싶으신가요? 저희가 도와드리겠습니다.