boto3는 워낙 기능이 방대하다 보니 대부분의 경우에는 gist 등에서 예제를 찾아보게 되는데, boto3.resource
를 사용하는 예제도 있고, boto3.client
를 사용하는 예제도 있었다. 둘을 비교해 보자.
Client
- low-level 인터페이스
- service description에 의해 만들어짐
- botocore 수준의 client를 공개(botocore는 AWS CLI와 boto3의 기초가 되는 라이브러리)
- AWS API와 1:1 매핑됨
- 메소드가 스네이크 케이스로 정의되어 있음
가끔가다 보면 botocore의 API를 찾아봐야 하는 경우가 생길 때도 있다. boto3.client는 AWS API와 1:1 매핑된다는 게 꽤 큰 메리트였던 것 같다.
Resource
- high-level, 객체지향적 인터페이스
- resource description에 의해 만들어짐
- 식별자(identifier)와 속성(attribute)을 사용
- 자원에 대한 조작 위주
'자원에 대한 조작 위주'라는 게 정확히 무슨 의미인지는 잘 모르겠지만, s3.Bcuket
과 같은 구문을 의미하는 것이 아닐까 싶다. 당연하게도, boto3.resource
는 boto3.client
를 wrapping한 high-level 인터페이스지만 boto3.client의 모든 기능을 wrapping하진 않으므로 때때로 boto3.client
나 boto3.resource.meta.client
를 사용하여 작업해야 하는 경우가 생길 수 있다.
로직 수준의 직관성과 코드 수준의 직관성의 차이가 아닐까 싶다. 나는 boto3를 회사에서나 가끔 쓰는 정도였어서, 어떤 게 더 나았다거나 하는 주관적인 입장도 사실은 없다. 사용량 기준으로는 boto3.client가 더 많았던 것 같고, boto3를 써야 하는 작업이 있다면 boto3.client로 먼저 방법을 찾아보지 않을까 싶다. 그것보다 boto3는 네이밍 컨벤션이 참 특이한 것 같다.
'Python 계열 > boto3' 카테고리의 다른 글
boto3가 자격 증명 정보를 얻어내는 구조 (0) | 2019.02.12 |
---|---|
S3에서 객체의 용량을 알아내기 (0) | 2019.02.12 |