Errno 모듈

Errno 모듈 (Errno)

운영체제는 보통 에러를 정수로 보고하는데요, Ruby의 예외 객체는 Exception의 서브클래스예요. Errno 모듈은 이런 운영체제 에러를 Ruby 클래스로 매핑하기 위해 동적으로 만들어져요. 에러 번호 하나마다 SystemCallError의 서브클래스가 하나씩 생성되고, 그 클래스는 Errno 모듈 안에서 만들어지기 때문에 이름이 Errno::로 시작해요.

Errno:: 클래스들의 이름은 Ruby가 실행되는 환경에 따라 달라져요. 일반적인 Unix나 Windows 플랫폼에서는 Errno::EACCES, Errno::EAGAIN, Errno::EINTR 같은 클래스들이 존재해요.

특정 에러에 대응하는 정수 운영체제 에러 번호는 클래스 상수 Errno::error::Errno로 얻을 수 있어요.

Errno::EACCES::Errno   #=> 13
Errno::EAGAIN::Errno   #=> 11
Errno::EINTR::Errno    #=> 4

사용 중인 플랫폼의 운영체제 에러 전체 목록은 Errno의 상수들로 확인할 수 있어요.

Errno.constants   #=> :E2BIG, :EACCES, :EADDRINUSE, :EADDRNOTAVAIL, ...

출처: Ruby 3.3 API

본문

Errno 모듈은 운영체제가 OS 에러 번호를 보낼 때, 그 번호에 해당하는 SystemCallError 서브클래스를 런타임에 만들어 대응해 두는 역할이에요. 예를 들어 파일 접근 권한 문제가 생기면 Errno::EACCES가, 자원이 잠깐 안 될 때는 Errno::EAGAIN이 발생하죠.

각 서브클래스는 자기만의 ::Errno 상수를 가지고 있어서, 에러를 처리하거나 디버깅할 때 정수 번호까지 함께 확인할 수 있어요.

begin
  File.open("/nonexistent")
rescue Errno::ENOENT => e
  puts e.class   #=> Errno::ENOENT
  puts Errno::ENOENT::Errno   #=> 2
end

플랫폼마다 지원하는 에러 종류가 달라지므로, 특정 Errno:: 클래스에 의존하는 코드를 짤 때는 실행 환경을 함께 고려해야 해요.