03. 액티브리소스
액티브리소스
액티브리소스는 REST 기반 시스템을 구현하는데 클라이언트 측을 담당하는 층(layer)이다. 액티브리소스를 사용하면 원격 서비스에 대한 프록시처럼 동작하는 객체를 만들수 있고, 이 객체를 통해 REST 서비스를 사용할 수 있다.
사용자명으로 이메일 사용하기
일부 서비스는 이메일을 사용자명으로 사용하기도 한다. 그런 경우 액티브리소스를 사용할 때 아래와 같은 URL이 만들어졌다.
- http://ernesto.jimenez@negonation.com:pass@tractis.com
불행히도 이 URL은 문제를 일으켰다. 왜냐하면 @가 두개있고, 인터프리터가 이 값을 해석할 수 없기 때문이다. 이런 이유로 액티브리소스를 조금 확장해, 인증에 이메일을 쉽게 사용할 수 있는 방법을 제공한다. 이제는 아래처럼 쓸 수 있다.
- class Person < ActiveResource::Base
self.site = "http://tractis.com"
self.user = "ernesto.jimenez@negonation.com"
self.password = "pass"
end
clone 메서드
이제 한번 만든 리소스를 복제(clone)할 수 있다.
- ryan = Person.find(1)
not_ryan = ryan.clone
not_ryan.new? # => true
이 때 원 객체가 가진 클래스 속성은 전혀 복사하지 않고, 오직 리소스 속성으로 지정된 값만이 복사된다는 사실을 기억할 필요가 있다.
- ryan = Person.find(1)
ryan.address = StreetAddress.find(1, :person_id => ryan.id)
ryan.hash = {:not => "an ARes instance"}
not_ryan = ryan.clone
not_ryan.new? # => true
not_ryan.address # => NoMethodError
not_ryan.hash # => {:not => "an ARes instance"}
타임아웃
액티브리소스는 REST API에 접근하기 위해 HTTP를 사용한다. 이 때문에 응답이 느린 서버 또는 접속이 되지 않는 서버의 경우는 문제를 일으킬 수 있다. 어떤 경우에는 액티브리소스 호출시 타임아웃이 발생할 수도 있다. 이제 timout 프로퍼티를 사용해 만기 시간(expire time)을 직접 제어할 수 있다.
- class Person < ActiveResource::Base
self.site = "http://api.people.com:3000/"
self.timeout = 5 # waits 5 seconds before expire
end
위 예제에서는 5초가 지나면 타임아웃되도록 설정했다. 빨리 실패할 수 있고, 문제가 번저 서버 전체가 먹통이 되는 일을 막기 위해서라도 타이아웃은 낮은 값으로 설정하는 것을 추천한다.
내부적으로 액티브리소스는 HTTP 요청을 만들기 위해 Net::HTTP 라이브러리를 사용하고, 설정을 공유한다. timeout 프로퍼티에 값을 설정하면 같은 값이 Net::HTTP 객체 인스턴스의 read_timeout으로 정의된다.
기본값은 60초이다.
History
Last edited on 06/18/2008 08:10 by 이진석
Comments (0)