닫기
AWS Batch 시작하기

AWS Batch 시작하기

spike
August 4, 2020
TECH

구글이나 페이스북 등의 매체를 통해 쇼핑몰 광고를 할 경우 해당 매체에 쇼핑몰 상품 목록의 정해진 양식을 넘겨 주어야 효율적인 광고를 할 수 있습니다. 그 양식을 보통 카탈로그 피드(Catalog Feed)라고 부릅니다. 상품 정보, 즉 카탈로그의 양식은 각 쇼핑몰마다 다르기 때문에 광고 매체가 원하는 양식으로 변경을 해주어야 합니다.

단순 배치성 작업이기 때문에 처음에는 AWS Lambda를 떠올렸습니다. 그러나 각 쇼핑몰의 상품의 갯수가 많은 경우 작업이 끝나지 않았는데 람다가 꺼질 수 있기 때문에 다른 서비스를 찾아야 했습니다. 더욱이 상품이 많은 쇼핑몰의 피드 용량이 1~2 GB 정도 되게 때문에 람다에서는 작업할 수가 없었습니다. 그러다 발견한 서비스가 바로 AWS Batch입니다.

Batch vs Lambda

본격적으로 AWS Batch를 시작하기에 앞서 람다와 간단하게 비교를 해보겠습니다. 사실 람다와 배치는 서로의 성격이 상이하기 때문에 직접 비교하는 것은 좋진 않지만, 현재 제가 있는 TAG 팀이 처한 상황을 고려해서 간략히 비교하겠습니다. 기준은 추가 리소스 요청 없음, 서울 리전입니다.

Batch 항목들을 보면, “조절가능”과 “무제한”으로 명시한 것은 Batch가 EC2 위에서 동작하기 때문입니다. AWS Batch는 단순 배치성 작업이지만 대기열(Queue) 지원, 작업(Job) 동시 실행 등이 가능하고 무엇보다 추가 요금이 없습니다. 배치 작업을 하기 위해 EC2 인스턴스가 생기는데 해당 인스턴스에 대한 요금만 내면 됩니다. 일반 EC2 인스턴스 뿐만 아니라 최근 추가된 EC2 SPOT 인스턴스로 비용을 더 절감할 수 있는 장점이 있습니다.

사실 AWS Batch는 EC2와 ECS의 wrapper 서비스입니다. AWS Batch를 시작하면 ECS에 클러스터가 생기고 작업 정의 항목에 Batch에서 생성한 작업정의가 보입니다. 그리고 실제로 작업이 작동하고 있을때 EC2에서 인스턴스를 직접 확인할 수도 있습니다.

만약 람다가 스토리지 용량을 GB 단위로 제공하고 제한시간이 더 컸다면 저희 팀 역시 익숙한 람다를 사용했을 것입니다.

AWS Batch 구성요소

AWS Batch의 구성요소는 작업을 구동할 서버의 자원을 설정하는 컴퓨팅 환경(Computing Environment), 제출한 작업이 대기하는 작업 대기열(Job Queue), 실제 작업할 소스가 담긴 작업 정의(Job Definition), 작업 정의를 실제로 실행하는 작업(Job)으로 이루어져 있습니다.

컴퓨팅 환경

컴퓨팅 환경은 작업을 실행하는 데 사용되는 관리형 또는 비관리형 컴퓨팅 리소스 세트입니다.

작업 대기열

최대 3개의 컴퓨팅 환경 위에서 작동하는 평범한 큐입니다. 자세한 설명은 없으나 실제 작동할 때나 이 유튜브 영상을 보면 비동기 큐임을 짐작할 수 있습니다.

작업 정의

작업 정의는 실제 실행할 코드, 정확히는 그 코드를 포함하는 도커 이미지를 정의합니다. 저희는 이미지를 ECR에 저장했지만 사설 레지스트리나 docker hub를 이용해도 무방합니다.

공식 문서와 한국 블로그를 보면 도커 이미지 뿐만 아니라 쉘 스크립트, 루비, 파이썬 등 리눅스에서 실행 가능한 작업을 제출할 수 있다고 되어있지만, 실제로는 도커 이미지만 지원합니다. AWS 포럼에도 문서를 읽고 저와 같은 의문을 가진 사람이 질문을 했고, 이에 대한 답변이 있습니다. 답변을 보면 ECR을 이용하기 때문이라고 하는데 실제로 컴퓨팅 환경을 생성하면 앞서 얘기했듯이 ECR 클러스터가 생성되는 것을 확인할 수 있습니다. 문서는 항상 업데이트가 느린가 봅니다.

작업

위에서 정의한 작업 정의를 실제로 구동합니다. 여러가지 환경변수를 제공하며 어레이 작업과 종속성이라는 간단하지만 강력한 배치 도구를 제공합니다.

CloudFormation으로 생성하기

저는 인프라조차도 코드로 관리하는 것을 좋아합니다. AWS 콘솔은 편하긴 하지만, 코드로 관리하지 않으면 나중에 관리하기가 힘들어집니다 그래서 CloudFormation을 좋아하는데 Batch 역시 지원합니다. 참조와 예제를 참고하면 손쉽게 작성할 수 있습니다. 물론 테라폼을 사용해도 좋습니다.

우리는 이렇게 했습니다.

저희 TAG 팀에서는 간략하게 아래와 같은 구조로 진행하기로 했습니다. 실제 회의 때 보드에 간략히 그린 구조입니다.

CloudWatch Event가 정해진 시간마다 매일 람다를 호출합니다. 람다는 상품 정보를 모으고 DB에 쓰기를 하는 작업을 트리거하고, 해당 작업에 종속성을 갖는 두 개의 작업(피드 생성, 이미지 처리)이 순차적으로 실행됩니다. 각 매체는 작업이 생성한 트리거를 정해진 시간에 읽습니다.

아래는 작업 대기열과 컴퓨팅 환경을 생성한 결과물입니다. LeverCatatlogJobQueue가 저희가 생성한 대기열입니다.

각 작업은 docker 이미지로 정의했습니다. 대략적인 구조는 아래와 같습니다.

jobs
├── README.md
├── collect_catalog/
├── generate_feed/
├── image_processing
│   ├── Dockerfile
│   ├── README.md
│   ├── requirements.txt
│   └── src
│       ├── __init__.py
│       └── main.py
└── template.yaml

이게 전부입니다. jobs 디렉토리의 하위 디렉토리들은 작업 정의이자 docker 이미지입니다. 생성한 이미지를 ECR에 푸쉬합니다. 다른 프로젝트의 이미지와 구분을 짓기 위해서 접두사로 catalog를 붙였습니다.

작업을 트리거 하는 람다 코드는 대략적으로 아래와 같습니다.

import boto3
batch_client = boto3.client("batch")
shop_id = 1234  # db에서 수집할 쇼핑몰 id
# 카탈로그 정보 쓰기 작업 제출
response = batch_client.submit_job(
    jobName=f"collect-catalog-shop_{shop_id}",
    jobQueue="catalog-job-queue",
    jobDefinition="collect-catalog",
    containerOverrides={"command": [f"{shop_id}"]},
)
job_id = response.get("jobId")
# job_id에 종속성을 갖는 피드 생성 작업 제출
batch_client.submit_job(
    jobName=f"feed-shop_{shop_id}-job_{job_id}",
    jobQueue="catalog-job-queue",
    jobDefinition="generate-feed",
    dependsOn=[{"jobId": job_id}],
    containerOverrides={"command": [f"{shop_id}"]},
)
# job_id에 종속성을 갖는 이미지 처리 작업 제출
batch_client.submit_job(
    jobName=f"image-shop_{shop_id}-job_{job_id}",
    jobQueue="catalog-job-queue",
    jobDefinition="image-processing",
    dependsOn=[{"jobId": job_id}],
    containerOverrides={"command": [f"{shop_id}"]},
)

정말 별거 없습니다. 작업 정의를 위해 dockerfile을 생성하고, 해당 작업 정의를 이용해 실제 작업을 작업 대기열에 제출하면 끝납니다. dependsOn 파라미터에 작업 아이디를 넘겨주어 순차적으로 실행됨을 보장만 하면 됩니다. 물론, CloudWatch Event를 이용하여 정해진 시간마다 cronjob을 설정하면 진짜 끝입니다.

직접 대기열을 이용할 경우 제일 아래에 배치 작업 대기열을 위에서 생성한 LeverCatatlogJobQueue를 선택하면 됩니다. 저희는 람다를 이용하여 트리거 하기로 했으므로 Lambda 함수를 선택했습니다.

결론

별다른 수고 없이 컴퓨팅 환경 생성 -> 작업 대기열 생성 -> 작업 정의(dockerfile 및 실제 코드) -> 작업 제출만 하여 배치 작업을 완료했습니다. 이 외에도 어레이 작업을 이용하여 순차 또는 병렬 작업을 다양하게 실행 할 수도 있습니다. 단순한 배치성 작업을 해야 하는데, 디스크/메모리 용량과 실행시간이 많이 필요할 경우 AWS Batch를 이용하는 방법을 추천합니다.

닫기

개인정보 처리방침

<매드업>은 개인정보보호법에 따라 이용자의 개인정보 보호 및 권익을 보호하고 개인정보와 관련한 이용자의 고충을 원활하게 처리할 수 있도록 다음과 같은 처리방침을 두고 있습니다.

<매드업>은 회사는 개인정보처리방침을 개정하는 경우 웹사이트 공지사항(또는 개별공지)을 통하여 공지할 것입니다.

○ 본 방침은 2020년 1월 15일부터 시행됩니다.

개인정보의 처리 목적 <매드업>은 개인정보를 다음의 목적을 위해 처리합니다. 처리한 개인정보는 다음의 목적 이외의 용도로는 사용되지 않으며 이용 목적이 변경될 시에는 사전동의를 구할 예정입니다.

가. 홈페이지 회원가입 및 관리 회원 가입의사 확인, 회원제 서비스 제공에 따른 본인 식별·인증, 회원자격 유지·관리, 제한적 본인확인제 시행에 따른 본인확인, 서비스 부정이용 방지, 만14세 미만 아동 개인정보 수집 시 법정대리인 동의 여부 확인, 각종 고지·통지, 고충처리, 분쟁 조정을 위한 기록 보존 등을 목적으로 개인정보를 처리합니다.

나. 민원사무 처리 민원인의 신원 확인, 민원사항 확인, 사실조사를 위한 연락·통지, 처리결과 통보 등을 목적으로 개인정보를 처리합니다.

다. 재화 또는 서비스 제공 물품배송, 서비스 제공, 청구서 발송, 콘텐츠 제공, 맞춤 서비스 제공, 본인인증, 연령인증, 요금결제·정산 등을 목적으로 개인정보를 처리합니다.

라. 마케팅 및 광고에의 활용 신규 서비스(제품) 개발 및 맞춤 서비스 제공, 이벤트 및 광고성 정보 제공 및 참여기회 제공 , 인구통계학적 특성에 따른 서비스 제공 및 광고 게재 , 서비스의 유효성 확인, 접속빈도 파악 또는 회원의 서비스 이용에 대한 통계 등을 목적으로 개인정보를 처리합니다.

 

 

개인정보 파일 현황

가. 개인정보 파일명 : 개인정보 처리방침

개인정보 항목 : 이메일, 휴대전화번호, 비밀번호, 이름, 업체명, 제목, 광고 예산, 내용, 사업자 등록 번호, 신용카드정보, 은행계좌정보, 예금주, 생년월일, 서비스 이용 기록, 접속 로그, 쿠키, 접속 IP 정보, 결제기록

수집방법 : 홈페이지, 계약서

보유근거 : 홈페이지 회원정보 수집 등에 관한 기록

보유기간 : 5년

관련법령 : 대금결제 및 재화 등의 공급에 관한 기록 : 5년

개인정보의 처리 및 보유 기간 ① <매드업>은 법령에 따른 개인정보 보유·이용기간 또는 정보주체로부터 개인정보를 수집 시에 동의 받은 개인정보 보유,이용기간 내에서 개인정보를 처리,보유합니다. ② 각각의 개인정보 처리 및 보유 기간은 다음과 같습니다.

 

가. <홈페이지 회원가입 및 관리> <홈페이지 회원가입 및 관리>와 관련한 개인정보는 수집.이용에 관한 동의일로부터<5년>까지 위 이용목적을 위하여 보유.이용됩니다.

보유근거 : 홈페이지 회원정보 수집 등에 관한 기록

관련법령 : 대금결제 및 재화 등의 공급에 관한 기록 : 5년

예외사유 :

 

나. <재화 또는 서비스 제공> <재화 또는 서비스 제공>와 관련한 개인정보는 수집.이용에 관한 동의일로부터<5년>까지 위 이용목적을 위하여 보유.이용됩니다.

보유근거 : 계약 또는 청약철회 등에 관한 기록

관련법령 : 계약 또는 청약철회 등에 관한 기록 : 5년

예외사유 :

 

다. <마케팅 및 광고에의 활용> <마케팅 및 광고에의 활용>와 관련한 개인정보는 수집.이용에 관한 동의일로부터<3년>까지 위 이용목적을 위하여 보유.이용됩니다.

보유근거 : 전자상거래등에서의 소비자보호에 관한 법률

관련법령 : 소비자의 불만 또는 분쟁처리에 관한 기록 : 3년

예외사유 :

 

 

정보 주체와 법정대리인의 권리·의무 및 그 행사방법 이용자는 개인정보주체로써 다음과 같은 권리를 행사할 수 있습니다.

① 정보주체는 매드업에 대해 언제든지 개인정보 열람,정정,삭제,처리 정지 요구 등의 권리를 행사할 수 있습니다.

② 제1항에 따른 권리 행사는 매드업에 대해 개인정보 보호법 시행령 제41조제1항에 따라 서면, 전자우편, 모사전송(FAX) 등을 통하여 하실 수 있으며 매드업은 이에 대해 지체 없이 조치하겠습니다.

③ 제1항에 따른 권리 행사는 정보주체의 법정대리인이나 위임을 받은 자 등 대리인을 통하여 하실 수 있습니다. 이 경우 개인정보 보호법 시행규칙 별지 제11호 서식에 따른 위임장을 제출하셔야 합니다.

④ 개인정보 열람 및 처리 정지 요구는 개인정보보호법 제35조 제5항, 제37조 제2항에 의하여 정보주체의 권리가 제한 될 수 있습니다.

⑤ 개인정보의 정정 및 삭제 요구는 다른 법령에서 그 개인정보가 수집 대상으로 명시되어 있는 경우에는 그 삭제를 요구할 수 없습니다.

⑥ 매드업은 정보주체 권리에 따른 열람의 요구, 정정·삭제의 요구, 처리 정지의 요구 시 열람 등 요구를 한 자가 본인이거나 정당한 대리인인지를 확인합니다.

 

 

처리하는 개인정보의 항목 작성

① <매드업>은 다음의 개인정보 항목을 처리하고 있습니다.

 

가. <홈페이지 문의 및 관리>

필수항목 : 업체명, 이메일, 제목, 연락처, 광고 예산, 내용, 휴대전화번호, 비밀번호, 이름, 서비스 이용 기록, 접속 로그, 쿠키, 접속 IP 정보

선택항목 : 프로필 사진

 

나. <재화 또는 서비스 제공>

필수항목 : 업체명, 이메일, 제목, 연락처, 광고 예산, 내용, 비밀번호, 이름, 회사명, 사업자 등록 번호, 신용카드정보, 은행계좌정보, 예금주, 생년월일, 서비스 이용 기록, 접속 로그, 쿠키, 접속 IP 정보, 결제기록

선택항목 :

 

다. <마케팅 및 광고에의 활용>

필수항목 : 업체명, 이메일, 제목, 연락처, 광고 예산, 내용, 휴대전화번호, 이름, 서비스 이용 기록, 접속 로그, 쿠키, 접속 IP 정보

선택항목 :

 

개인정보의 파기<매드업>은 원칙적으로 개인정보 처리 목적이 달성된 경우에는 지체없이 해당 개인정보를 파기합니다. 파기의 절차, 기한 및 방법은 다음과 같습니다.

 

 

파기절차

이용자가 입력한 정보는 목적 달성 후 별도의 DB에 옮겨져(종이의 경우 별도의 서류) 내부 방침 및 기타 관련 법령에 따라 일정기간 저장된 후 혹은 즉시 파기됩니다. 이 때, DB로 옮겨진 개인정보는 법률에 의한 경우가 아니고서는 다른 목적으로 이용되지 않습니다.

 

파기기한

이용자의 개인정보는 개인정보의 보유기간이 경과된 경우에는 보유기간의 종료일로부터 5일 이내에, 개인정보의 처리 목적 달성, 해당 서비스의 폐지, 사업의 종료 등 그 개인정보가 불필요하게 되었을 때에는 개인정보의 처리가 불필요한 것으로 인정되는 날로부터 5일 이내에 그 개인정보를 파기합니다.

파기방법

전자적 파일 형태의 정보는 기록을 재생할 수 없는 기술적 방법을 사용합니다. 종이에 출력된 개인정보는 분쇄기로 분쇄하거나 소각을 통하여 파기합니다.

 

개인정보 자동 수집 장치의 설치•운영 및 거부에 관한 사항

① 매드업은 개별적인 맞춤서비스를 제공하기 위해 이용 정보를 저장하고 수시로 불러오는 ‘쿠키(cookie)’를 사용합니다.

② 쿠키는 웹사이트를 운영하는데 이용되는 서버(http)가 이용자의 컴퓨터 브라우저에게 보내는 소량의 정보이며 이용자들의 PC 컴퓨터 내의 하드디스크에 저장되기도 합니다.

가. 쿠키의 사용 목적 : 이용자가 방문한 각 서비스와 웹 사이트들에 대한 방문 및 이용형태, 인기 검색어, 보안접속 여부, 등을 파악하여 이용자에게 최적화된 정보 제공을 위해 사용됩니다.

나. 쿠키의 설치•운영 및 거부 : 웹브라우저 상단의 도구>인터넷 옵션>개인정보 메뉴의 옵션 설정을 통해 쿠키 저장을 거부 할 수 있습니다.

다. 쿠키 저장을 거부할 경우 맞춤형 서비스 이용에 어려움이 발생할 수 있습니다.

 

 

개인정보 보호책임자 작성

① 매드업은 개인정보 처리에 관한 업무를 총괄해서 책임지고, 개인정보 처리와 관련한 정보주체의 불만처리 및 피해구제 등을 위하여 아래와 같이 개인정보 보호책임자를 지정하고 있습니다.

 

▶ 개인정보 보호책임자

성명 : 강남석

직책 : CFO

직급 : CFO

연락처 : 02-1522-1060, contact@madup.com

※ 개인정보 보호 담당부서로 연결됩니다.

 

▶ 개인정보 보호 담당부서

부서명 : General Affairs Team

담당자 : 민상준

연락처 : 02-1522-1060, contact@madup.com

 

② 정보 주체께서는 매드업의 서비스(또는 사업)을 이용하시면서 발생한 모든 개인정보 보호 관련 문의, 불만처리, 피해구제 등에 관한 사항을 개인정보 보호책임자 및 담당부서로 문의하실 수 있습니다. 매드업은 정보주체의 문의에 대해 지체 없이 답변 및 처리해드릴 것입니다.

 

 

개인정보 처리방침 변경

① 이 개인정보처리방침은 시행일로부터 적용되며, 법령 및 방침에 따른 변경 내용의 추가, 삭제 및 정정이 있는 경우에는 변경사항의 시행 7일 전부터 공지사항을 통하여 고지할 것입니다.

 

 

개인정보의 안전성 확보 조치 <매드업>은 개인정보보호법 제29조에 따라 다음과 같이 안전성 확보에 필요한 기술적/관리적 및 물리적 조치를 하고 있습니다.

가. 정기적인 자체 감사 실시 개인정보 취급 관련 안정성 확보를 위해 정기적(분기 1회)으로 자체 감사를 실시하고 있습니다.

나. 개인정보 취급 직원의 최소화 및 교육 개인정보를 취급하는 직원을 지정하고 담당자에 한정시켜 최소화 하여 개인정보를 관리하는 대책을 시행하고 있습니다.

다. 내부관리계획의 수립 및 시행 개인정보의 안전한 처리를 위하여 내부관리계획을 수립하고 시행하고 있습니다.

라. 해킹 등에 대비한 기술적 대책 <매드업>은 해킹이나 컴퓨터 바이러스 등에 의한 개인정보 유출 및 훼손을 막기 위하여 보안프로그램을 설치하고 주기적인 갱신·점검을 하며 외부로부터 접근이 통제된 구역에 시스템을 설치하고 기술적/물리적으로 감시 및 차단하고 있습니다.

마. 개인정보의 암호화 이용자의 개인정보는 비밀번호는 암호화 되어 저장 및 관리되고 있어, 본인만이 알 수 있으며 중요한 데이터는 파일 및 전송 데이터를 암호화 하거나 파일 잠금 기능을 사용하는 등의 별도 보안기능을 사용하고 있습니다.

바. 접속 기록의 보관 및 위변조 방지 개인정보처리시스템에 접속한 기록을 최소 6개월 이상 보관, 관리하고 있으며, 접속 기록이 위변조 및 도난, 분실되지 않도록 보안기능 사용하고 있습니다.

사. 개인정보에 대한 접근 제한 개인정보를 처리하는 데이터베이스시스템에 대한 접근 권한의 부여,변경,말소를 통하여 개인정보에 대한 접근통제를 위하여 필요한 조치를 하고 있으며 침입차단시스템을 이용하여 외부로부터의 무단 접근을 통제하고 있습니다.

아. 문서 보안을 위한 잠금 장치 사용 개인정보가 포함된 서류, 보조저장매체 등을 잠금 장치가 있는 안전한 장소에 보관하고 있습니다.

자. 비인가자에 대한 출입 통제 개인정보를 보관하고 있는 물리적 보관 장소를 별도로 두고 이에 대해 출입통제 절차를 수립, 운영하고 있습니다.