GS리테일 Tech 블로그

고객 생활의 가치를 향상시키는 사람들의 이야기

Culture

개발자는 개발을 하고 싶다! ( 파이썬을 활용한 추출 업무 자동화. Feat. AWS )

wsx1 2022. 6. 21. 11:49

[ 그림 1 ] 출처 : ElectricCube :: 나는 누구? 여긴 어디? (tistory.com)

■ 배경

재택근무 중에 중요 업무가 아닌 side 업무로 야근을 해본 적이 있는가? 1759 분 다급한 현업의 전화를 받아 본 적 있는가? “매니저님! 오늘 당첨자 모바일 쿠폰 나가야 하거든요. 조건에 해당하는 전화번호(300) 빨리 좀 주세요!“

 

21 12월 필자의 담당 도메인에 접수된 추출 요청은 108 건으로 1월 대비 5배가량 증가했다.

 

[ 표1 ] 21년 데이터 추출 요청 접수 건수

오랜 기간 온라인 커머스의 경쟁이 심화되어 왔고 신규 비즈니스 론칭과 빈번한 행사는 지속적으로 증가되어 필요한 데이터 양도 늘어만 갔다. 또한 데이터 추출을 위한 프로세스는 법적인 이유 또는 관리의 목적으로  점점 복잡해졌다.

 

[ 그림2 ] 데이터 추출 절차

Ideation

가장 먼저 효율화가 필요한 것은 역시 수작업을 줄이는 일이다. ( 개발자에게 java 함수는 한국어고, excel 함수는 외국어 정도… ) 접수 받은 Excel datadatabase 연동을 해서 원하는 정보를 가공하면 간단하게 끝날 것 같았다. 하지만 두 가지 고민이 생겼다. 먼저 요청자가 올린 조건과  Excel을 어떻게 system에 전달할까? 그리고 외부 시스템에 있는 보안 데이터 매핑은 어떻게 할까? 복잡한 접수 시스템을 만들 정도로 시간도 없고, 그런 개발은 배보다 배꼽이 커지는 일이다. 우리는 우리 접수 시스템인 Jira의 API를 사용하기로 했다. 물론 Jira에 접수되는 데이터 추출 요청 건을 분석하고 CASE 별로 정리해서 사용자 UI를 변경했다. 돌이켜 보면 기존의 승인 절차를 유지하는 가장 좋은 방법이었다.또한 다른 연동 이슈도 이미 만들어진 API를 적극 활용하기로 했다.

[ 그림3 ] 자동추출 시스템 컨셉

Development

1. Jira와 추출 자동화 시스템의 연동 ( 요청 Jira 번호 수집)

먼저 Jira에서 원하는 TASK의 정보를 가지고 오기 위해 요청 건을 구분할 수 있는 Jira 요청번호가 필요했고 그 Jira번호와 정보를 얻는 방법으로 우리는 Jira Server에서 제공하는 Open Rest API를 활용했다.

[ 그림4 ] Jira API

Jira에서 조건에 부합하는 요건 발생 시 AWS SQS에 Jira 번호(key)를 전달하도록 만들었다. 최초에 python 자동화 application에 API를 만들어 제공하려고 했지만, 데이터 정합성, AWS 기능 활용을 통한 코드 축소 등의 이유로 SQS 사용 했고 생각보다 간단하게 ( api 생성을 위한 코드 없이) 적용할 수 있어 만족스러웠다. SQS 전송 가능 데이터의 크기는 256kb로 Jira key 값 전송 정도는 가능하고 100만 건까지는 무료라 우리가 필요한 요건에 적합했다. 게다가 간편하게 개발할 수 있는 SDK를 제공해줘서 편리하게 사용할 수 있었다. (Python 모듈 boto3)

## SQS의 data 수신
sqs = boto3.resource("sqs", region_name="ap-northeast-2")
queue = sqs.get_queue_by_name(QueueName="grit-ies-prd-queue")
while True:
    for message in queue.receive_messages():
        if smtc.start(json.loads(message.body)) == True:
            message.delete()

Jira에서 추출 자동화 시스템으로 데이터를 전달하는 시점은 모든 승인 절차가 완료된 후 IT 담당자가 Jira 에서 변경 담당자를 추출자동화 시스템으로 지정하는 순간으로 정의 했다. 즉 개발자가 추출해야 하는 건은 기존처럼 변경담당자를 개발자로 지정하고, 자동으로 추출이 가능한 건은 시스템을 지정을 하면 바로 시스템과 연동되어 자동 추출이 되도록 구현했다.

 

[ 그림5 ] 추출자동화시스템으로 요청 전달

 

2. 요구사항 정형화

SQS의 데이터 전달 용량의 한계로 Jira의 모든 요청정보를 전송할 수 없어 SQS에 담긴 Jira번호를 Python Application에서 읽어와 Jira Open Rest API를 호출하여 데이터 가공 후 추출 쿼리를 수행하도록 구현했고 특정 요건의 경우 Legacy system의 API 호출을 통해 추가 정보를 얻어와 기존 정보와 매핑하여 Excel 파일을 생성하는 방식으로 처리했다. 하지만 여기서 요청자의 요구사항을 정형화하지 않으면 Application에서 요구사항을 읽어올 때 명확한 조건을 인지하기 어려워 우리는 정형화된 Jira Form을 제공한다.

오픈 이후 실제로 추출 시스템을 사용을 하면서 정형화된 Form과 안내사항이 있음에도 잘못된 요청 경로,첨부파일 미 지정 등 시행착오가 있었고 사용자들로부터 개별적으로 많은 문의사항이 있었다. 그 결과 추출 시스템을 오픈했음에도 추출 업무시간은 예상만큼 줄지 않았고 우리는 이 문제를 해결하기 위한 고민이 필요했다.

사용자에게 안내 강화를 위해 Jiracomment API를 통해 댓글에 추출 요청 안내달아 의사소통 방식을 자동화했다. Jira에 답글이 자동으로 생성되는 순간 요청자에게 메일이 발송되고 요청자는 수신받은 메일을 통해 안내사항을 상기시킬 수 있어 개발자가 안내하는 일을 줄였다. 운영 3주 후 사용자들도 새로운 방식에 익숙해졌고 90% 이상의 건이 자동으로 추출되어 추출 업무에 개발자 투입 시간이 대폭 감소했다.

 

## comment 등록
def write_comment(issue_id_or_key, json_data) -> string:
    try:
        url = f"{BASE_URL}/rest/api/latest/issue/{issue_id_or_key}/comment"
        response = requests.post(url, utils.convert_str_to_json(json_data), headers=headers)

 

 회고

고단하고 단순한 업무의 자동화는 공수절감, 빠른 현업요청에 대한 피드백 뿐만 아니라 개발자가 더 의미있는 것에 시간을 사용할 수있는 기회를 제공하여 동료들의 만족도가 높아졌다. 또한 업무에 활요되는 시스템들이 활용가능한 API를 보유 하고 있어 빠르게 목적에 맞는 시스템을 구축 할 수 있었다. 

- 기존 API를 통한 빠른 개발

- 개발자 만족도 향상

- 자동화를 통한 공수 절감

 

[ 그림6 ] 로이터 연합뉴스

Special thanks. 전체 구조 설계에 도움 주신 김승언 매니저님. Jira 연동에 도움 주신 김성훈 매니저님 감사합니다.


조순기 Mike | 뉴테크본부 > BO Product부문 > 고객 Product팀

고객, SR domain 담당

댕댕이를 좋아함

강호일 Mason | 뉴테크본부 > BO Product부문 > 고객 Product팀

고객, SR domain 담당

산을 좋아함