SDK를 쓰는 이유와 aws boto3

1 minute read

이번에는 콘솔을 통해 클라우드 자원을 관리할 수 있음에도 SDK를 통해 코드로 하는 이유를 정리해봅니다. 마우스 클릭 몇 번으로 제어가 가능한데, 왜 코드로 관리할 수 있도록 지원하는 걸까요?

먼저 SDK는 뭘까요? Software development kit 입니다. 개발자가 바닥부터 개발할 필요가 없이 개발에 필요한 기능을 API 등으로 사용할 수 있도록 구현해놓은 도구라고 이해했습니다. SDK에는 API, 라이브러리 뿐 아니라 컴파일러, 디버깅 도구, 런타임 등이 포함됩니다.

그래서 SDK를 왜 써야 하나요? 저는 관리의 용이성 때문이라고 생각합니다. 코드는 재활용도 할 수 있고, 리뷰도 할 수 있고, 테스트도 할 수 있으니까요. 매뉴얼하게 콘솔에서 클릭으로 작업을 하다보면 예기치 않은 오류(오입력으로 인한 오류, a.k.a. fat finger)가 있을 수 있고, 작업 기록을 관리하기 편하게 남기기도 어렵습니다. 코드로 관리하면 이런 문제가 많이 해결됩니다. 우리가 평소 개발하는 것처럼 코드를 작성하고, (테스트 코드도 작성하고), 코드에 대한 리뷰를 하고, 실행을 하면 됩니다. SDK처럼 인프라 관리도 코드로 관리하는 이유가 비슷할 겁니다. 클라우드 컴퓨팅 환경이 잘 갖춰진 덕에 이제는 인프라도 코드로 관리할 수 있게 되었고, 그래서 infrastructure as code (IaC)라는 용어도 나왔죠. IaC로 얻을 수 있는 긍정적인 효과는 위와 비슷합니다.

그리고 AWS에서는 각 서비스를 코드로 관리할 수 있도록 다양한 언어의 sdk를 지원하고 있습니다. 21년 12월 기준으로는 Python, Java, JavaScript, Go, C++, .NET, Node.js, PHP, Ruby를 지원하고 있습니다.

저는 최근에는 주로 python을 사용하다보니 boto3를 사용할 일이 많습니다. 다음은 s3를 조작하는 예시인데, 아주 간단합니다.

import boto3

# Let's use Amazon S3
s3 = boto3.resource('s3')

# Print out bucket names
for bucket in s3.buckets.all():
    print(bucket.name)

# Upload a new file
data = open('test.jpg', 'rb')
s3.Bucket('my-bucket').put_object(Key='test.jpg', Body=data)
  • s3 객체 리소스를 변수에 담아서 s3 안에 있는 모든 버켓을 불러왔습니다.
  • 그리고 my-bucket에 이미지 파일을 업로드 했습니다.

boto3 configuration을 보시면 boto3를 사용하기 위한 인증 정보를 셋업하실 수 있습니다. 기본적으로 실행되는 로컬의 default credential을 사용합니다.

이처럼 아주 간단한 코드로 s3 콘솔에 접속해서, 몇 번의 클릭으로 진행해야하는 일을 했습니다. 물론 클릭으로 할 수 있는 일이죠. 그런데 파일이 한개가 아니라 수백, 수천개라면 어떨까요? 이번에는 파일명도 다르게, 경로도 다르다면? 할 수는 있지만 지루하고 귀찮고 실수하기 쉬운 일이 될 것 같습니다. 재미도 없구요. 그럴 때는 sdk를 사용하면 매우 좋습니다.

끝.

Tags: ,

Updated:

Leave a comment