AI, 클라우드 등 기술요인, 마이데이터(MyData) 등 데이터요인은 개별 고객에 대한 초개인화 분석 및 마케팅을 가능하게 하고 있다.
총 2회에 걸친 기고 중, 본 기고에서는 초개인화 역량체계 및 시스템, 역량체계 구성을 위한 로드맵 등을 공유할 예정이며, 후속기고에서는 초개인화 마케팅 시나리오 및 클라우드 인-데이터베이스(In-Database) 기반 역량체계 구현 방안에 대해 설명해 나가려 한다.
◆WHAT: 초개인화란?
초(超)개인화(Hyper-Personalization)란, 고객 한명 한명 모두에게 선호하는 시간대에 그리고 선호하는 채널로 개인화된 마케팅 메시지를 전달할 수 있는 가장 고도화된 고객 커뮤니케이션 방법이다.
360도 내외부 고객데이터, AI(머신/딥러닝 등), RPA등 자동화기술이 요구되며, 초개인화된 고객경험 제공을 통해 기업은 고객 로얄티 및 만족도 향상, 그리고 신규고객 획득을 통한 매출증대를 실현 할 수 있으며, 전반적인 마케팅 ROI(투자 대비 효용) 역시 향상 시킬 수 있다.
▲ 기존 테크닉(고객 세그멘테이션 등, 왼쪽)과 초개인화 분석 및 마케팅(오른쪽) 차이 |
그렇다면 구체적으로, 고객경험 전반(End-To-End Customer Journey)에 걸쳐 초개인화 고객분석 및 마케팅 역량을 적용한다는 것은 무엇을 의미할까?
은행 고객의 경우 ‘금융상품 리서치 및 비교(research) ‒ 상품가입 및 온보딩(onboarding) ‒ 금융거래(transacting) ‒ 금융상품관리(administering) ‒ 상품관련 질의/이슈해결(Resolving)’ 등의 경험을 하게 된다.
예를 들어 금융거래(transacting)를 하는 고객 한명 한명의 평소 거래패턴(평균이체금액, 이체시간대 등) 정보 기반으로 이상거래(anomaly detection)를 탐지하고, 실시간으로 추가 인증요구 또는 콜센터 등을 통해 고객확인절차를 거치는 서비스 역시 초개인화 서비스라고 할 수 있겠다.
질의/이슈해결(Resolving) 단계에 대해서도, 과거에 특정 웹/앱 경로를 통해서 특정 유형 불만을 제기한 과거 고객 데이터를 분석하여 유사한 경로를 밟고 있으나 아직 불만을 제기하지 않은 고객에게 선제적으로 연락을 취하는 것도 초개인화 고객관계관리라 할 수 있겠다.
전반적으로 B2C 기업의 고객은 유사한 고객경험 단계를 거치게 되는데, 전 단계에 걸처 ‘잠재고객에게 관련된 광고만 제공’, ‘고객별로 개인화된 웹/앱 랜딩페이지 제공’, ‘초개인화된 추천 상품/서비스 제공’, ‘해당 상품/서비스에 대해 초개인화된 가격 및 조건 제공’, ‘AI/자연어처리 기술을 활용한 초개인화된 고객상담챗봇 채널 제공’, ‘개별 고객단위의 옴니채널 경험제공(Hyper-Personalized Omnichannel), ‘실시간 상품/서비스 상태알림’, ‘고객 구매데이터 활용 로얄티 프로그램 운영’ 등을 제공하는 것이 초개인화 고객분석 및 마케팅 서비스 제공의 구체적인 예시(Use Cases)라 할 수 있겠다.
◆WHY: 고객, 그리고 기업에게 초개인화가 중요한 이유
초(超)개인화(Hyper-Personalization)의 개념에 대해 살펴보았으며, 이제 CMO(Chief Marketing Officer) 등 경영진이 던져야 할 질문은 ‘우리 회사가 초개인화 역량을 도입하지 않으면 도태될 것인지?’, ‘개인화에서 초개인화 단계로 진입하는데 소요되는 비용과 초개인화 역량체계 구축에 의한 비즈니스 성과를 고려(ROI)했을 때 초개인화 단계로 진입하는 것이 타당한가?’ 등으로 요약될 것이다.
이 질문들에 대한 방향성 결정을 위해서는 자사·시장·고객 데이터 기반의 깊이 있는 분석이 요구되기에, 이번 글에서는 초개인화 관련 고객설문조사 결과 및 산업별로 측정된 초개인화의 정량적 가치 등을 레퍼런스로 우선 공유 드리고자 한다.
- 글로벌 데이터 전문기업 앱실론(Epsilon)에서 실시한 고객설문결과에 따르면, 80% 고객이 ‘기업에서 초개인화된 경험을 제공한다면 더 많은 상품/서비스를 구매하겠다’라고 응답
- 구글 인사이트(Think With Google)에서 실시한 온라인고객설문결과에 따르면, 69% 고객이 온라인 쇼핑고객이 ‘기업에서 보내는 메시지의 연관성 및 품질이 브랜드인지에 큰 영향을 준다’라고 응답
- 딜로이트(Deloitte)에서 실시한 고객 설문조사에 의하면, 75%의 고객이 기업에서 너무 많은 관련성 없는 프로모션 이메일을 보낸다고 응답했으며, 이에 따라 69%의 고객은 이메일 수신을 중단하거나 스팸처리 한다고 응답
22%의 고객이 ‘만약 초개인화된 서비스나 상품이 오퍼된다면 더 많은 고객데이터(MyData)를 제공할 의사가 있음’으로 응답
- 하버드 비즈니스 리뷰(Harvard Business Review) 분석결과에 의하면, ‘적절하게 실행된 초개인화 마케팅은 마케팅 ROI를 약 8배 가량 향상’ 시킬 수 있음
- 맥킨지 글로벌 인스티튜트(McKinsey Global Institute)의 ‘노트 프롬 더 AI 프론티어 : 인사이트 프럼 헌드레즈 오브 유즈 케이스(Notes from the AI frontier: Insights from hundreds of use cases)’ 보고서에 의하면, 초개인화의 정량적 가치는 리테일의 경우 4500억~8000억 달러(0.45-0.8 trillion), 보험의 경우 2500억~6000억 달러(0.25-0.6 trillion), 통신의 경우 1500억~2000억 달러(0.15-0.2 trillion)에 이르며, 8개 산업의 정량적 효과를 모두 합치면 1조 7000억 ~3조 달러(1.7-3 trillion)에 이름
◆HOW: 초개인화 역량체계 구성요소, 시스템 디자인, 로드맵 등
경영진의 다음 질문은 ‘초개인화 고객분석 및 마케팅 역량체계란 구체적으로 무엇이며, 우리 조직에 어떻게 역량체계를 구현 할 수 있을 것인가?’ 일 것이다.
초개인화를 위한 역량체계는 1)고객 360° 뷰 2)초개인화 분석 AI모델 3)초개인화 아이템 스토어 4)의사결정 엔진 5)초개인화 마케팅 실행 및 고객반응정보 수집 6)초개인화 분석 AI모델 고도화를 위한 피드백 매커니즘 이렇게 6가지로 구성된다.
▲ 초개인화를 위한 역량체계 구성요소 및 흐름 |
위 역량체계 1) ~ 6) 까지 파이프라인은 고객 한명 한명 단위로 운영되며, 2가지 유형의 트리거에 의해 데이터 수집 및 분석이 시작된다.
2가지 유형이란, 상품·서비스·정보 변경 발생 시 해당 정보를 꼭 알아야 하는 고객에게 적시에 전달하는 유형이 첫 번째 이며(예: 특정 지역 은행 영업점 위치 변경 시, 기존 영업점 방문고객의 다음 예상 방문시점 전, 선호채널로 선호하는 시간대에 변경정보 안내), 고객이 온/오프라인 채널에 유입된 경우 추천 상품/서비스/정보, 연관된 광고 등을 실시간으로 분석해 전달하는 유형이 두 번째이다.
▲ What모델 및 아이템스토어 활용사례 |
초개인화 분석 AI모델 중 가장 중요한 모델이라 할 수 있는 What 모델(개별고객 추천 상품/서비스 추출) 및 초개인화 아이템스토어를 잘 활용한 우수사례(Best Practice)로는 페이스북 초개인화 시스템을 들 수 있다.
페이스북의 초개인화시스템은 고객 Query를 인풋으로 해, ‘랭크드 아이템(Ranked Items)’ 등 아웃풋을 도출하며, 초개인화 시스템 내에는 아이템스토어를 활용한 오퍼 후보군 도출(Candidate Generator), 피처 스토어(Feature Store)를 활용한 랭킹모델(Ranking Model), 커스텀 비즈니스 로직(Custom Business Logic 예: 정치와 관련된 내용은 선거기간에 노출하지 않음) 등이 핵심 역량으로 운영된다. (출처: oreillyaicon.com #OReillyAI, 페이스북 프리젠테이션)
‘우리 조직에 어떻게 이러한 초개인화 역량체계를 구현 할 수 있을 것인가?’ 라는 측면에서는 우선 ‘현 조직 성숙도 진단’ 및 ‘ROI관점의 타당성 분석’을 먼저 진행할 것을 제언 드린다.
첫 번째로, 개인화 성숙도 진단은 ▲6가지 역량체계 구성요소를 보유하고 있는지 ▲보유하고 있다면 현재의 성숙도는 어떠한지(예: 고객 360° 뷰 내 분산된 고객 뷰는 존재하지 않는지? 초개인화 아이템스토어에 모든 마케팅캠페인 관련한 오퍼들, 상품/서비스/정보들이 관리되고 있는지? 4가지 초개인화 분석 AI모델의 정확도는 어떠한지? 의사결정 엔진은 자동 생성된 메시지를 confidence-level이 낮은 경우 마케터가 직접 수정하게 지원하는지? 피드백 매커니즘은 학습데이터를 자동으로 생성하는지 ▲역량체계 운영을 위한 조직의 자원과 스킬 셋은 어느 정도 준비돼 있는지? 등을 중심으로 귀사의 성숙도를 객관적으로 측정할 것을 제언 드린다.
두 번째로, ROI관점의 고도화 타당성 분석은 1차적으로 비용(현 성숙도 고려 시, 초개인화 역량체계 구현을 위한 대략의 비용요소 도출) 대비 효용(초개인화 역량체계 도입에 따라 기대되는 대략의 매출 및 고객만족도 상승 등 효과) 산출 후, 2차적으로(효용이 더 클 것으로 예상되는 경우) 전략적 우선순위 결정을 위해 더 상세한 수준의 비용(비용요소 별 연도별 비용규모 산출) 및 효용(고객설문조사, 고객웹/앱 행동로그분석, 마케팅켐페인 고객반응이력 데이터 분석 등의 방법 활용)을 산출할 것을 제언 드린다.
두 가지 분석을 통해 충분히 초개인화 역량체계를 전략적으로 추진하는 것이 타당하다 판단됐다면, 이제는 구체적인 지향점(To-Be Picture) 및 로드맵을 정의할 순서다.
앞서 공유됐던 고객경험 전반에 걸친 초개인화 운용 사례(Use Cases, 은행 및 B2C)를 활용해 기업의 고객·상품·서비스 그리고 경쟁상황을 고려한 ‘To-Be Journey’ 맵을 전사적인 의사결정을 통해 디자인하는 것이 첫번째 단계이며, 두번째 단계는 ‘To-Be Journey’를 고객에게 전달하기 위해 요구되는 비즈니스 역량(예: 프로세스 개선, Human-in-the-loop 등) 및 기술역량(예: 클라우드, AI, Automation 등)을 정의하고 역량 확보방안을 로드맵화하는 것이다.
초개인화 역량체계 확보라는 전략적 목표는 전사 모든 조직(IT, 마케팅, 디지털, 상품개발, 고객관리, 데이터사이언스 등)의 참여 없이는 달성하기 어렵기 때문에 이해관계자 대상 워크샵, 스폰서쉽 확보, 변화관리 방안 정의 등 내부적인 컨센서스를 이루는 과정이 필수적으로 요구된다.
이에 이해관계자 및 스폰서 그룹을 형성하고 첫번째와 두번째를 통해 도출된 전략적 목표와 방향성에 대한 검증 및 상위레벨의 로드맵을 활용해 구체적인 타임라인을 설정하는 것이 세번째 단계이다.
후속 기고에서는 구체적인 초개인화 마케팅 시나리오 및 시나리오의 비즈니스 적용을 위한 클라우드 인-데이터베이스(In-Database) 기반 플랫폼 구현 방안에 대해 논의 드리도록 하겠다.
AI 및 생성형 AI 자동화 살펴보기

현대의 AI 기반 시스템과 현재의 생성형 AI 혁신 분야에서 조직은 보다 효율적인 프로세스를 개발하고 향후 몇 년간 획기적인 개선을 구현할 수 있는 새로운 방법을 찾고 있습니다.
많은 사람들이 인공지능 세대가 직원, 고객, 규정 준수에 어떤 영향을 미칠지 우려하고 있습니다. 이 가이드에서는 인공지능 기술을 자동화에 안전하고 효과적으로 배포하는 방법과 언어 모델 및 기타 생성형 인공 지능 자동화의 기능을 활용하여 비즈니스를 혁신할 수 있는 방법을 살펴봅니다.
AI 자동화란 무엇입니까?
자동화는 로봇이 반복적인 작업을 수행하는 것에서 시작되었으며, 이를 로보틱 프로세스 자동화(RPA)라고도 합니다. 인공 지능(AI)이 발전하면서 자동화의 기능은 엔드투엔드 프로세스, 시스템 연결, 작업 오케스트레이션으로 확장되었습니다. 이러한 RPA와 AI 및 비즈니스 프로세스 관리(BPM)의 연결을 지능형 자동화 (IA)라고 합니다.
RPA | 반복적인 작업 수행 |
AI | 인간의 사고 모방 |
BPM | 워크플로 자동화 |
IA | RPA, AI, BPM 결합 |
엔터프라이즈 AI | 자동화 및 오케스트레이션과 AI를 더욱 긴밀하게 통합합니다. AI에 IA를 더한 것이라고 생각하면 됩니다. |
이제 IA의 다음 진화는 에이전트 AI 및 에이전트 프로세스 자동화와 같은 새로운 잠재적 AI 개념을 통합하는 엔터프라이즈 AI입니다. 'AI 자동화'는 이러한 개념을 포괄하는 일반적인 용어로, AI를 자동화한다는 의미입니다.
AI는 자동화와 같은 의미인가요?
아니요, AI는 자동화와는 다릅니다. AI는 비즈니스 제안서 작성과 같은 작업을 자체적으로 수행할 수 있습니다 . 하지만 AI와 자동화가 함께 작동하면 어느 한 쪽이 단독으로 처리할 수 있는 것보다 훨씬 더 많은 일을 할 수 있습니다. 이러한 팀워크를 통해 인지 자동화를 실현할 수 있습니다.
자동화는 로봇을 배치하여 사람이 설정한 일련의 규칙 기반 지침을 실행함으로써 일상적인 작업에 수반되는 수작업을 줄여줍니다. 개발자가 프로그래밍한 동작을 벗어나는 경우 로봇은 작업을 완료할 수 없습니다.
RPA 및 기타 자동화 기술을 엔터프라이즈 AI 솔루션에 통합함으로써 로봇은 인간이 설정한 큰 윤곽을 바탕으로 목표를 달성하기 위한 경로를 스스로 결정할 수 있습니다. AI는 머신 러닝 기능을 통해 자신의 행동을 학습하여 시간이 지남에 따라 성능을 개선할 수 있습니다.
이러한 조합을 통해 지능형 자동화를 만드는 방법을 간단히 설명하면 다음과 같습니다.
- AI는 ML, 신경망 및 복잡한 알고리즘을 사용하여 정형 및 비정형 데이터를 분석합니다. IA/엔터프라이즈 AI의 인지적 의사 결정 측면입니다.
- BPM은 워크플로를 자동화하고 사람과 시스템을 연결합니다.
- RPA는 양식 작성 및 데이터 추출과 같은 간단한 관리 작업을 완료합니다.
기술로서의 인공 지능(AI)에는 머신 러닝(ML), 자연어 처리(NLP), 컴퓨터 비전 및 딥러닝 기술도 포함될 수 있습니다.
자동화와 AI가 함께 작동하는 사례에는 어떤 것이 있나요?

AI 자동화 기술(지능형 자동화 또는 엔터프라이즈 AI라고도 함)을 통해 조직은 이러한 IA 디지털 워커로 인간 작업자를 보강하여 비즈니스 프로세스를 간소화할 수 있습니다. 이러한 디지털 워커를 AI 워커라고 부르기도 하고, 엔터프라이즈 AI에서는 "엔터프라이즈 에이전트"라고 하기도 합니다. 이를 통해 기술 및 인력 부족 문제를 해결하고 직원들이 지루하고 반복적인 업무에서 벗어나 더 가치 있는 전략적 업무에 집중할 수 있도록 지원합니다.
이에 대한 좋은 예로 가상 비서 또는 AI 기반 챗봇을 들 수 있습니다. 고객 서비스 센터에는 하루 8시간 근무 시간 내에 적절하고 신속하게 응답하기에는 너무 많은 이메일이 쏟아져 들어오는 경우가 많습니다. 하지만 AI 챗봇은 고객 문의에 즉각적으로 답변하며 24시간 내내 작동하여 고객 대기 시간을 줄여줍니다. 챗봇이 고객의 질문에 답변할 수 없는 경우 대화가 사람 상담원에게 연결됩니다. 이렇게 하면 대기 시간과 백로그가 줄어들고 직원들이 더 복잡한 케이스에 집중할 수 있습니다.
실제 사례로 스페인의 소매 은행인 ABANCA가 세대별 AI, 자동화 및 NLP를 결합하여 고객 경험을 개선하고 효율성을 높인 방법을 들 수 있습니다. 디지털 워커는 대량의 수신 이메일을 분석하고 문서 유효성 검사 및 추출과 같은 작업을 수행합니다. 결국 ABANCA는 고객 문의에 60% 더 빠르게 응답하고 120만 시간을 비즈니스에 환원할 수 있었습니다.
AI로 어떻게 더 많은 것을 자동화할 수 있을까요?
자동화와 인공 지능(또는 차세대 인공 지능)을 결합하면 비즈니스 역량을 한 단계 더 발전시킬 수 있습니다.
- 생성형 AI는 텍스트와 이미지를 포함한 시뮬레이션된 인간 지능으로 콘텐츠를 해석하고 제작하여 작업을 보강합니다. 생성형 AI는 자연어 처리를 사용하여 고객 문의에 답변하고 의사 결정을 강화할 수 있습니다. SS&C Blue Prism에서는 기업이 더 복잡한 프로세스를 자동화할 수 있도록 생성형 AI를 통해 지능형 자동화를 확장하고 있습니다.
- 프로세스 검색은 AI를 사용하여 실시간으로 행동을 추적하고 해당 행동을 기반으로 인사이트를 추출하여 병목 현상과 개선 기회를 파악할 수 있습니다. 검색 프로세스가 끝나면 팀이 더 많은 자동화를 개발할 수 있도록 프로세스 맵을 생성합니다.
- 지능형 문서 처리(IDP) 는 데이터 분석 및 처리를 위해 머신 러닝(ML)을 사용합니다. IDP는 송장, 구매 주문서, 신청서 등 정형 및 반정형 문서에서 데이터를 추출하고 유효성을 검사할 수 있습니다. IDP는 생성형 AI를 구현함으로써 프로세스 검증을 넘어 문서의 맥락과 목적을 이해하고 해당 데이터를 어떻게 사용해야 하는지 해석하여 시장 출시 시간을 단축할 수 있습니다.
생성형 AI는 프로세스 검색부터 구축, 지속적인 관리 및 모니터링까지 자동화 개발 수명 주기의 각 단계를 향상시켜 비즈니스를 지원합니다. SS&C Blue Prism은 AWS와 파트너십을 맺고 엔터프라이즈급 생성형 AI를 통합한 안전한 프라이빗 IA 솔루션을 개발했습니다.
AI와 자동화는 어떻게 사용하나요?

AI 자동화는 매우 다양한 기능을 제공합니다. 이를 통해 조직은 효율성을 개선하고 오류를 줄이며 의사 결정 프로세스를 강화할 수 있습니다. 몇 가지 업계의 사용 사례를 살펴보겠습니다.
지능형 자동화의 예로는 어떤 것이 있습니까?
- 고객 서비스: 고객이 문제가 발생하여 즉각적인 해결책을 찾고 있다고 가정해 보겠습니다. AI 기반 솔루션은 고객 불만을 신속하게 해결하거나 미묘한 사안의 경우 서비스 상담원에게 문제를 에스컬레이션하여 고객이 문제를 해결하는 과정을 간소화할 수 있도록 지원합니다.
- 금융 서비스 및 뱅킹: IA는 대출 프로세스를 디지털화하고 고객확인 절차(KYC) 신원 확인 및 자금세탁방지(AML) 보고와 같은 관리 프로세스를 간소화할 수 있습니다. AI 알고리즘은 거래 데이터를 실시간으로 분석하여 비정상적인 패턴과 잠재적인 사기 활동을 감지할 수 있습니다.
- 보험: IA는 증권(보험) 인수, 보험금 청구 처리, 규정 준수, 사기 탐지 등 보험의 여러 일상적인 업무를 간소화할 수 있습니다. 디지털 워커는 여러 출처나 연결되지 않은 출처에서 구조화되지 않은 데이터를 자동으로 수집하고 에이전트들에게 관련 알림을 보내 클레임 관련 의사 결정 프로세스를 가속화할 수 있습니다.
- 제조: 제조업체는 AI 기반 분석을 통해 예기치 않은 다운타임을 줄이고 효율성과 제품 품질을 개선할 수 있습니다. AI는 공급망 데이터를 분석하여 재고 수준과 유통 경로를 최적화할 수 있습니다. IA는 또한 예측 유지 관리를 통해 수율 손실을 유발하는 속도 저하를 식별하는 데 도움이 됩니다.
- 의료: 자동화를 통해 환자는 진료 예약을 하고 의료진은 환자의 의료 기록과 이력을 정리할 수 있습니다. AI는 X-레이와 MRI와 같은 의료 이미지를 분석하여 의사가 문제를 파악하고 환자에게 적절한 치료를 더 빨리 제공할 수 있도록 의료 진단을 지원할 수 있습니다.
차세대 AI는 조직에 제공할 수 있는 것이 많은, 끊임없이 진화하는 분야입니다. 생성형 AI 사용 사례로 자동화 계획을 확장하세요.
AI 자동화의 이점은 무엇입니까?

점점 더 많은 조직이 AI 기반 자동화를 도입하는 이유는 비즈니스상의 이점 때문입니다. AI의 엄청난 처리 능력은 자동화의 속도, 효율성, 확장성을 높여 더 나은 투자 수익률(ROI)을 달성할 수 있도록 도와줍니다.
팀 생산성
AI 자동 어시스턴트는 AI 에이전트와 마찬가지로 콘텐츠 요약부터 중요한 의사 결정 인사이트 제공에 이르기까지 시스템 전반에서 AI 사용 사례를 실행하여 팀의 업무를 강화합니다. AI 시스템은 24시간 연중무휴로 방대한 양의 데이터를 빠른 속도로 처리할 수 있습니다.
고객 경험
자동화된 시스템은 고객 서비스, 제품 또는 다양한 서비스 등 더 높은 품질, 더 안정적이고 일관된 결과물을 제공합니다.
확장성 및 통합
우수한 데이터를 구현하면 보안과 규정 준수를 유지하면서 빠르게 비즈니스를 성장시킬 수 있습니다. 자연어를 사용하여 시스템 전반에서 자동화 요청을 하고 관련 정보에 쉽게 액세스할 수 있도록 개인화된 요약 콘텐츠를 생성할 수 있습니다. 또한 AI 인력을 쉽게 확장하여 인간 인력의 리소스와 역량을 지원할 수 있습니다.
비용 절감
자동화된 시스템은 일관성과 정확성을 개선하고 리소스 할당을 최적화하여 생산성을 높이고 중복 작업 및 재작업과 관련된 비용을 절감할 수 있습니다.
디지털 전환
생성형 AI는 업무의 본질을 바꾸고 사람들이 조직의 자동화 여정에 대해 다르게 생각할 수 있도록 지원합니다. 생성형 AI를 사용하면 기술 전문가가 아닌 개발자도 자연어 프롬프트를 사용하여 모범 사례 지침과 규정에 따라 신속하게 자동화를 만들 수 있습니다.
AI 자동화 소프트웨어는 어떻게 작동하나요?
인공 지능 소프트웨어에는 여러 종류가 있습니다. 자동화 도구를 선택하기 전에 비즈니스 목표가 무엇인지, 자동화하려는 프로세스의 종류가 무엇인지 고려하세요. AI 자동화 소프트웨어의 몇 가지 중요한 측면을 살펴보겠습니다.
기초 모델
기초 모델은 다양한 NLP 및 기타 AI 작업의 기반이 되는 사전 학습된 모델입니다. 이러한 모델은 일반적으로 방대한 양의 텍스트와 데이터를 학습하여 인간과 유사한 언어를 이해하고 생성하는 방법을 학습하고 특정 애플리케이션에 맞게 미세 조정할 수 있습니다.
기초 모델 개발의 예로는 2020년에 OpenAI에서 출시한 생성형 사전 학습 변환기(GPT-3)를 들 수 있습니다.
클라우드 서비스
클라우드 자동화를 통해 조직은 높은 수준의 보안과 거버넌스를 유지하면서 지연이나 전문가의 기술에 의존하지 않고도 업무를 처리할 수 있습니다. 클라우드는 조직이 자동화 프로그램을 클라우드에서 완전히 배포, 지원 및 업그레이드할 수 있도록 총소유비용을 낮추는 것을 목표로 합니다. 많은 클라우드 제공업체는 하이브리드 클라우드 배포 옵션도 제공합니다.
예를 들어, SS&C | Blue Prism® Cloud는 IA를 클라우드와 결합하여 Microsoft Azure 또는 AWS 클라우드에서 제공되는 완전한 호스팅 및 관리형 플랫폼을 제공합니다.
SS&C | Blue Prism® Next Generation은 클라우드 네이티브 IA 솔루션으로, 단일 통합 플랫폼에서 디지털 워커를 배포하여 기업 전반의 관리를 간소화할 수 있는 SS&C | Blue Prism® 엔터프라이즈 AI 플랫폼에서 사용할 수 있는 플랫폼입니다.
책임감 있는 자동화
AI 기반 솔루션, 특히 생성형 AI는 기술 혁신을 주도하고 있습니다. 이러한 기술에 대한 규정이 진화함에 따라 조직은 AI 가이드 레일을 통해 애플리케이션 배포 전에 규정 준수와 데이터 안전을 보장하는 것이 필수적입니다. 다음은 몇 가지 유의해야 할 사항입니다.
- 품질 모델: 데이터를 보호할 수 있는 고품질 엔터프라이즈 언어 학습 모델(LLM)과 통합하세요.
- 휴먼인더루프: AI 기반 자동화에 사람의 감독을 설정하여 결과물이 정확하고 비즈니스 모델에 부합하는지 확인합니다.
- 지속적인 모니터링: 자동화에 대한 감사 추적을 설정하고 사용자 활동을 추적하여 무단 액세스를 방지하고 규정 준수를 보장하세요.
- 매개변수 설정: 여러분과 고객의 데이터를 안전하게 보호하기 위해 적절한 사용자에게만 액세스 권한을 부여하세요.
- AI 거버넌스: AI 거버넌스에는 AI가 학습 및 테스트되는 방식과 수명 주기 전반에 걸쳐 작동하는 방식을 보여주는 AI 모델 문서 및 감사 파이프라인이 포함되어야 합니다. AI 거버넌스는 규제가 심한 산업에서 특히 중요한데, 이는 처벌을 피하고 투명성을 보장하는 데 도움이 되기 때문입니다.
생성형 AI 생존 가이드를 통해 다음 단계로 진화하는 AI에 대비하는 방법을 알아보세요.
주요 교훈
AI 자동화 또는 지능형 자동화는 RPA의 '작업 수행'과 연결된 AI의 인지적 '사고' 기능을 사용하여 비즈니스 프로세스를 간소화합니다. 그리고 이제 AI 비즈니스에 생성형 AI가 등장하면서 자동화의 가능성은 훨씬 더 넓어졌습니다.
AI로 더 많은 것을 자동화할 수 있는 핵심 사항은 다음과 같습니다.
- AI 거버넌스와 AI 학습 모델에 대한 우수한 데이터 보안 및 품질을 보장하세요.
- 비즈니스에서 지능형 자동화와 엔터프라이즈 AI의 사용 사례와 최고의 혜택을 누릴 수 있는 방법을 살펴보세요.
- 배포하기 전에 자동화를 위한 계획을 수립하세요.
데이터 기반 마케팅 전략의 필수, 마케팅 데이터 파이프라인 구축
오늘날 기업의 마케팅 환경은 그 어느 때보다 복잡합니다. 수많은 디지털 채널과 플랫폼에서 생성되는 데이터를 수집/측정하고 분석해 적시에 활용하지 못한다면 경쟁에서 도태될 수 밖에 없습니다.
여기서 중요한 것은, 단순히 데이터를 모으는 것이 아니라 올바른 데이터 파이프라인을 구축하여 데이터를 효율적으로 관리하고 이를 통해 데이터 기반의 마케팅 전략을 실행해야 한다는 것입니다.
이 글에서는 마케팅 데이터파이프라인 개념부터 그 중요성 그리고 실제 기업에서 어떻게 활용할 수 있는지에 대해 다루며 기획자,분석가, 마케터 여러분이 실무에서 겪는 고민과 해결책을 제시할 수 있도록 구체적인 사례와 방법론을 함께 제시해볼 예정입니다.
마케팅 데이터 파이프라인이란?
마케팅 데이터 파이프라인은 다양한 마케팅 채널(웹사이트, 소셜미디어, 광고 플랫폼, CRM등)에서 발생되는 데이터를 효율적으로 수집, 처리, 분석 및 시각화하여 실질적인 인사이트를 도출할 수 있는 일련의 기반이 되는 구조를 말합니다.
데이터는 원천적으로 서로 다른 포맷과 구조로 존재하기 때문에 이를 일관성 있게 가공하여 분석 가능한 형태로 만들어야 합니다. 이 과정을 자동화하고 실시간으로 데이터를 흐르게 하는 것이 바로 마케팅 데이터 파이프라인의 역할입니다.
마케팅 데이터 파이프라인이 필요한 이유
1. 데이터 통합의 필요성
기업은 웹사이트, 소셜미디어, 개인화 마케팅(이메일, SMS등), 광고 플랫폼 등 다양한 채널에서 데이터를 수집해야 하고 다양한 데이터를 일관된 형식으로 통합하여 분석 뷰 차원에서 성과를 파악할 수 있어야 합니다.
2. 실시간 의사결정 지원
자동화된 데이터 파이프라인은 실시간 또는 근실시간으로 데이터를 제공하여 빠른 의사결정을 지원함으로서 마케팅 전략의 효과를 극대화 할 수 있습니다.
3. 시간 절약과 효율성 증가
데이터 수집/가공등의 수작업을 줄이고 자동화된 데이터 흐름을 구축해 시간과 비용을 절감합니다.
마케팅 데이터 파이프라인의 구성 요소
마케팅 데이터 파이프라인은 크게 데이터 수집, 처리, 저장, 분석 및 시각화의 단계로 구성됩니다.
여기서는 각 단계에서 이용될 수 있는 도구와 기술을 살펴보겠습니다.

1. 데이터 수집
가장 먼저 할 일은 다양한 마케팅 플랫폼에서 데이터를 자동으로 수집하게 하는 것입니다.
대상 데이터 소스는 아래와 같은 것이 있습니다.
- 웹사이트 데이터 : Google Analytics, Logger, Adobe Analytics, Naver Analytics등을 통한 방문자 행동, 유입 경로, 전환율 등의 데이터
- 미디어 데이터 : Facebook, Instagram, News, Blog/Café 등의 노출수, 반응도, 참여도, 클릭수 등의 데이터
- 광고 플랫폼 데이터 : Naver Ads , Google Ads, Facebook Ads, Kakao Ads 등의 광고 성과 데이터
- CRM 데이터 : Salesforce 등의 CRM 데이터
2. 데이터 정제 및 변환
수집된 데이터 소스들은 원래 형태 그대로 이용하기에 적합하지 않을 수 있어 클린징/표준화/변환의 과정을 거쳐 데이터 분석 목적에 맞게 변환하는 것이 필수입니다.
해당 과정은 데이터 소스의 유형과 각 기업의 분석 목적에 맞춰 데이터 가공/변환하는 과정이 다양하게 되나 기업의 표준화 작업은 필수로 진행되어야 합니다.
3. 데이터 저장
정제/가공된 데이터는 적절한 빅데이터 환경에 저장되어야 하며 중요한 것은 데이터 저장소의 확장성과 보안 및 분석 유연성/대응성이 있어야 합니다.
- 데이터 웨어하우스 : 대용량의 구조화된 데이터를 저장하고 빠른 쿼리 성능을 제공하는 장점이 있는 저장소입니다.
Amazon Redshift, Google Bigquery, Snowflake등이 해당됩니다. - 데이터 레이크 : 구조화되지 않은 원시 데이터를 저장할 때 주로 사용할 수 있습니다.
Amazone S3, Azure Data Lake등이 해당됩니다.
모두 클라우드 스토리지라는 점에서 확장성, 가용성, 비용, 효율성을 제공하며 이후 AI/ML 서비스 연결성이 훌륭합니다.
4. 데이터 분석 및 시각화
저장된 데이터를 분석하여 유의미한 인사이트를 도출하여 마케팅 전략에 사용할 차례입니다. 분석가와 마케터가 쉽게 데이터를 이해할 수 있도록 대시보드를 만드는 것도 매우 중요합니다.
- 분석 도구 : Python, R, SQL 등을 사용하여 데이터 탐색, 통계 분석, 머신러닝 모델등 고급 분석을 수행할 수 있으며 고객 이탈 예측이나 광고 캠페인 성과 예측등이 가능합니다.
- 시각화 도구 : Tableau, Looker, Power BI 등을 통해 대시보드를 생성하고 주요 KPI를 실시간으로 모니터링 합니다.
마케팅 데이터 파이프라인 구축시 주요 과제
마케팅 데이터 파이프라인 구축 과정에서 다양한 문제를 해결하기 위해 다음과 같은 주요 과제를 고려해야 합니다.
1. 전환 데이터 통합
웹사이트 방문자들에 발생된 이벤트와 CRM(Customer Relationship Management)이나 CDP(Customer Data Platform)를 마케팅 데이터와 연결하는 것은 중요합니다. URL에 고유한 추적 코드를 만들고 각 이벤트와 디지털 광고와 연결하는 작업은 무한히 반복적으로 발생되는 일입니다. 이 반복되는 작업은 전문화된 데이터 처리 능력과 마케팅 환경에 이해가 요구됩니다.
2. 변화하는 API
데이터를 수집해야 하는 플랫폼은 자주 API (애플리케이션 프로그래밍 인터페이스)를 수정하며 데이터를 수집하는 하는 곳은 그에 발맞춰 API를 업데이트 해야 하며 이 작업은 개발자가 꽤 시간을 들여 작업하게 됩니다.
3. 데이터 변환과 정규화
여러 채널에서 수집된 데이터를 하나의 기준으로 맞추는 작업이 필요합니다. 그러나 각 채널마다 데이터를 측정하는 방식이나 사용하는 용어가 다릅니다. 이런 이유로 여러 플랫폼에서 수집한 데이터를 하나의 통일된 방식으로 변환하는 데 시간이 걸리며 자주 업데이트가 필요할 수 있습니다
4. 마케팅 환경 전문 기술
마케팅 데이터를 정규화하거나 분석하는데 필요한 도구들은 많지만 이를 효과적으로 활용하려면 전문화된 기술과 시간이 필요합니다.
마케팅 데이터 파이프라인 구축하기 위한 준비
1. 주요 데이터 소스 식별
마케팅 데이터를 수집하는 모든 장소를 체계적으로 조사하고 목록화합니다. 이를 통해 전체 마케팅 데이터 생태계를 명확하게 파악하고 이후 분석 및 통합 과정에서 중요한 기초 자료로 활용합니다.
목표 : 데이터가 수집되는 모든 출처를 확인하고 문서화
- 웹사이트, 이메일 캠페인, 소셜 미디어, 광고 플랫폼, CRM 등에서 수집되는 데이터 출처 확인
- 데이터 출처별로 수집되는 주요 데이터 포인트(예: 클릭 수, 전환율 등) 명확히 기록
- 각 데이터 출처의 역할과 중요도 파악
2. 기존 보고서 수집
기존 보고서를 통해 현재 수집 중인 데이터 포인트와 제공하는 인사이트를 분석합니다. 이를 통해 수집된 데이터가 어떤 결과를 제공하는지 평가하고 데이터를 파이프라인에 통합할 준비를 합니다.
목표 : 기존 데이터의 활용 현황 파악 및 인사이트 분석
- 모든 관련 부서에서 생성된 최신 마케팅 보고서를 수집
- 보고서에서 제공하는 인사이트와 활용 중인 데이터 포인트를 검토
- 보고서의 데이터 출처와 분석 결과 간의 연결성을 파악
3. 누락된 인사이트 파악
현재 수집된 데이터를 분석한 후 마케팅 노력이 비즈니스에 미치는 영향을 완벽하게 파악하기 위해 누락된 인사이트가 있는지 확인합니다.
목표 : 데이터 및 인사이트의 공백을 식별하고 개선 방안을 마련
- 현재 보고서에서 제공되지 않는 중요한 인사이트나 데이터 포인트가 무엇인지 확인
- 마케팅 성과에 대한 보다 심층적인 분석이 필요한 영역을 식별
- 추가로 수집해야 할 데이터 포인트나 분석 방법 도출
4. 수동/오류 발생 가능성이 높은 프로세스 매핑
보고서가 원시 데이터 소스에서 대시보드로 변환되는 과정에서 수동으로 개입하거나 오류가 발생할 가능성이 있는 부분을 분석합니다. 이를 통해 자동화가 필요한 프로세스를 확인하고 데이터 파이프라인의 효율성을 극대화할 수 있습니다.
목표 : 수동 처리 과정 및 오류 발생 가능성을 최소화하여 프로세스 자동화
- 데이터 수집, 분석, 보고서 작성 과정에서 수동 작업이 이루어지는 단계를 파악
- 수동 프로세스의 효율성과 신뢰성을 평가
- 자동화할 수 있는 부분을 식별하여 오류 발생 가능성을 줄이고 데이터 파이프라인의 안정성을 확보
이 과정을 통해 마케팅 데이터 파이프라인 구축 준비 과정을 체계적으로 관리할 수 있으며 데이터 수집과 분석의 일관성을 확보하여 마케팅 활동의 성과를 더욱 효과적으로 평가할 수 있습니다.
마케팅 데이터를 최대한 활용하려면 마케팅 데이터 파이프라인 솔루션을 활용하는 것이 필수적입니다. 올바른 플랫폼을 사용하면 마케팅 캠페인을 최적화하고 진행 상황을 추적하며 전반적인 마케팅 전략을 개선할 수 있는 정확하고 시의적절한 인사이트를 확보할 수 있습니다.
Bizspring은 모든 데이터 요구 사항을 처리할 수 있는 포괄적인 플랫폼과 기술 서비스를 보유하고 있습니다. 여기에는 수집, 준비, 저장, 분석, 보고 및 예측이 모두 포함됩니다. 비즈니스 도메인 맞춤형 서비스로 완성도 높은 마케팅 데이터 파이프라인을 구축할 수 있습니다.
자동화툴 ‘selenium’을 이용한 크롤러 구현 및 3사 데이터 획득 방법 안내
인터넷 상에서 획득할 수 있는 데이터들은 다양한 경로로 수집이 가능합니다. 방문자 행동 데이터를 획득하여 웹 분석, 광고 성과 분석에 이용하기도 하고, E-커머스 사이트의 경우 자사 제품 데이터를 이용하여 컨텐츠/아이템 추천에 활용하기도 합니다. 방문자 행동과 컨텐츠 데이터를 결합하여 개인화 추천/광고에 이용하기도 하고, 광고 제공자로 부터 API를 이용하여 획득할 수 있는 광고 집행 데이터와 방문자 행동 데이터를 결합하여 마케팅/캠페인에 활용하기도 합니다. (growthplatform.ai).

원천 데이터의 생산 주체가 누구인가에 따라 자사/1사(1st party) 데이터와 3사(3rd party) 데이터로 나누기도 하는데, 본 포스트 에서는 외부의 데이터 – 즉 3사 데이터를 획득하는 방법 중 하나인 크롤링에 대해 알아보고, 자동화 툴 인 selenium을 이용한 크롤러를 만드는 예제를 보여드리려고 합니다.

크롤링, 크롤러는 무엇일까?
크롤링은 웹사이트의 특정 페이지 내용을 읽고, 내용을 추출하여 활용하는 행위를 말합니다. 주로 검색엔진에서 크롤링을 많이 사용하는데, 웹페이지의 URL이 정해지면 해당 웹페이지에 요청(http request)을 보내고, 응답으로 수신되는 HTML을 파싱하여 타이틀, 이미지, 다른 페이지로의 링크(URL), 그리고 가장 중요한 컨텐츠를 추출하여 저장합니다. 검색엔진은 이렇게 추출된 컨텐츠를 인덱싱하고, 키워드(검색어)가 주어질 경우 컨텐츠를 검색하여, 그 결과를 웹페이지 링크와 함께 보여주게 됩니다. 크롤러는 이러한 크롤링 행위를 하는 소프트웨어로, 주어진 URL에 대한 컨텐츠를 획득하고, 필요한 항목을 추출하여 저장하거나 API를 통해 서비스하게 됩니다.
최근의 웹사이트는 반응형(Respensive Web)으로 구성되는 경우가 많습니다. 다수의 상품이 진열되는 쇼핑몰 사이트의 경우, 특히 모바일의 경우 페이지 구조를 빠르게 로딩한 후 컨텐츠(상품 이미지 등)을 비동기식으로 채워넣는 경우를 많이 보셨을 겁니다. 이렇게 구성된 쇼핑몰에서 상품 리스트페이지를 curl 같은 전통적인 방식으로 크롤링 하는 경우 실제 내용을 가져 올 수가 없는 경우가 발생합니다. 최근의 크롤러들은 사람이 하는 행위를 흉내내며 작동하므로 단순한 HTML을 이용하는 것을 넘어서 브라우저 화면의 렌더링되는 객체까지 찾아서 데이터를 획득할 수 있습니다. 물론 이런 기술이 만능은 아니며, 자동화된 기술을 방지하는 기술도 있습니다.

Selenium 소개
Selenium은 웹 브라우저를 이용하는 자동화 프로그램입니다. 사람이 일반적으로 웹 브라우저를 이용하여 할 수 있는 행동들을 코드로 작성하면 selenium이 이 코드를 웹 브라우저에 전달하여 실행시킵니다. 여러 절차를 거쳐야 하는 일련의 행동을 미리 코드로 작성함으로써, 반복되는 작업을 자동화 하는데 많이 사용합니다.

selenium은 java, python등 여러가지 언어를 이용하여 작성할 수 있습니다. 본 포스트의 예제는 수정이나 실행이 편리하도록 python을 이용하여 작성 해 보겠습니다.
1. selenium 설치 (python)python이 설치되어 있다면 아래와 같이 pip를 이용하여 간단하게 설치가 됩니다. 본 예제에서 사용하는 함수를 사용하기 위해 최신 버전이 아닌 3.x 가 필요하며, 아래 명령처럼 selenium의 버전을 명시하여 설치 할 수 있습니다.
$ pip install selenium==3.141
2. webdriver 설치
Selenium으로 웹브라우저를 컨트롤 하기 위해 webdriver를 설치해야 합니다. 코드로 작성된 행동을 webdriver를 통해 브라우저에 전달하여 조작하게 됩니다. 본 포스트의 예제에서는 google chrome 브라우저를 조작하기 위해 chromedriver를 사용합니다. 지원되는 브라우저의 종류나 webdriver를 다운로드 받으려면 아래의 링크를 참조하시기 바랍니다.
웹드라이버는 브라우저의 버전에 맞는 것을 찾아서 설치하여야 합니다. 서버 프로그램으로 작성하여 운영 중에 웹브라우저가 업데이트되면, 웹드라이버가 원활하게 작동하지 않을 수 있습니다. 이런 경우 웹브라우저 버전에 맞는 웹드라이버로 교체해야 합니다.

위와 같이 (크롬)브라우저의 버전을 확인하고 같은 버전의 크롬용 웹드라이버를 찾아 다운로드, 압축을 해제 합니다.

아래는 chrome용 webdriver를 이용하여 웹브라우저를 띄우고 특정 네이버블로그 페이지를 띄우는 코드입니다. 프로그래밍을 처음 시작할때 배우는 ‘Hello world’ 예제 격입니다.
from selenium import webdriver
# chromedriver
# 압축해제한 웹드라이버의 경로와 파일명 지정
driver = webdriver.Chrome('./chromedriver')
# Load Page
# chrome을 띄워 네이버 블로그 페이지를 연다.
driver.get(url='https://blog.naver.com/bizspringcokr/222638819175')
# 현재 URL을 출력
print(driver.current_url)
driver.close()
4. 준비 [2]. headless로 GUI가 아닌 환경에서도 작동할 수 있도록 하기
준비 1과 같이 크롤러를 생성할 경우, 프로그램이 실행 될 때마다 화면에 chrome 브라우저 창을 띄워 작업하게 됩니다. 화면 렌더링등 자원을 소모하고, GUI 환경에서만 작동이 가능하게 되므로 크롤러로 사용하기에 불편함이 많아집니다. 화면을 보면서 일련의 작업을 위한 코드작성이 완료 되었다면, 화면 출력이 없이 작동하도록 headless로 방식을 변경하여 줍니다.
from selenium import webdriver
from selenium.webdriver.ie.options import Options
# chromedriver
options = webdriver.ChromeOptions()
options.add_argument('headless')
options.add_argument('window-size=1920x1080')
options.add_argument("disable-gpu")
driver = webdriver.Chrome('./chromedriver', options=options)
# Load Page
driver.get(url='https://blog.naver.com/bizspringcokr/222638819175')
print(driver.current_url)
driver.close()
예제 1. – selenium을 이용하여 네이버 블로그 게시물의 공감, 댓글 수 가져오기
먼저 예제로 ‘네이버 블로그의 공감, 댓글수’를 선택한 이유는 curl 같은 기존 방식으로는 공감 수를 획득할 수 없고, selenium 방식에서 가능하기 때문입니다.

블로그 화면이 로딩된 후 크롬의 개발자도구를 이용하여 확인 해 보면 area_sympathy class를 가진 <div> 내 <em> 엘리먼트가 공감수 값을, area_comment class를 가진 <div> 내 <em> 엘리먼트가 댓글수 값을 가지고 있는 것이 확인됩니다. 하지만, 아래 이미지와 같이 웹페이지를 호출하여 응답으로 출력된 HTML을 보면 공감수가 비어 있습니다. 웹페이지가 웹브라우저에 로딩 된 후 ajax 스크립트 등 추가적인 작업에 의해 공감수 값이 채워지게 되는 것입니다. 따라서 웹페이지 소스 HTML을 가져와 사용하는 전통적인 크롤러에서는 공감값을 가져올 수 없는 것입니다.

이제 네이버 블로그의 공감수, 댓글수를 가져오는 크롤러를 작성해 보겠습니다.
from selenium import webdriver
from selenium.webdriver.ie.options import Options
# chromedriver
options = webdriver.ChromeOptions()
options.add_argument('headless')
options.add_argument('window-size=1920x1080')
options.add_argument("disable-gpu")
driver = webdriver.Chrome('./chromedriver', options=options)
# Load Page
driver.get(url='https://blog.naver.com/bizspringcokr/222638819175')
# 실제 페이지는 "https://blog.naver.com/PostView.naver?blogId=bizspringcokr&logNo=222638819175&redirect=Dlog&widgetTypeCall=true&directAccess=false"
# iframe으로 호출된다.
driver.switch_to.frame("mainFrame");
# 공감
print("공감")
sympathy_element = driver.find_element_by_css_selector('div.area_sympathy')
em_elements = sympathy_element.find_elements_by_css_selector("em.u_cnt._count")
for i, em in enumerate(em_elements):
print(" L", i, "번째 em:", em.text)
# 댓글
print("댓글")
comment_elements = driver.find_element_by_css_selector('div.area_comment')
em_elements = comment_elements.find_elements_by_css_selector("#floating_bottom_commentCount")
for i, em in enumerate(em_elements):
print(" L",i, "번째 em:", em.text)
driver.close()
12라인까지 브라우저에서 블로그 페이지를 여는 코드는 동일합니다. 블로그 페이지 소스를 살펴보면 iframe으로 컨텐츠를 불러오도록 되어있는데 이는 두개의 창을 연 것과 같습니다. 이에 따라 selenium이 공감수 객체에 접근할 수 있도록 mainFrame id를 가진 iframe을 지정해 줍니다.

그리고 css셀렉터(find_element_by_css_selector)를 이용하여 공감, 댓글이 표시되는 <div> 객체를 찾고, child element 중 <em>을 찾아서 값을 출력 해 봅니다. 예제 코드를 실행 해 보면, 결과는 아래와 같은데, area_sympathy 하위의 두번째 <em>이 공감수를 가지고, area_comment 하위의 첫번째 <em>이 댓글수를 가지고 있는 것이 확인됩니다.
$ python run_nblog.py
공감
L 0 번째 em:
L 1 번째 em: 3
댓글
L 0 번째 em: 2

예제 2. 크롤러 – 크롤링 서비스
네이버 블로그의 공감/댓글 수를 확인하는 코드가 작성되었으니, 이제는 주어지는 네이버 블로그 URL에 따라서 공감/댓글 수 를 출력하는 서비스를 만들어 볼 차례입니다. 웹 서비스를 이용하여 URL을 입력 받고 JSON 형식으로 결과를 출력하도록 합니다. python의 flask를 이용하여 웹 서버를 구축할 수 있습니다. pip를 이용하여 간단하게 설치 합니다.
$ pip install flask
예제 1.에서 만든 코드는 get_sympathy라는 함수로 정의하고, 웹서버에서 /get_sympathy URL로 접근시 매핑되도록 설정합니다.
from selenium import webdriver
from selenium.webdriver.ie.options import Options
import json
from flask import Flask
from flask import request
from datetime import date, datetime
app = Flask(__name__)
# get 공감수, 댓글수
@app.route('/get_sympathy',methods = ['POST','GET'])
def get_sympathy():
sympathy = 0
comment = 0
return_obj = dict([])
now = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
return_obj["date"] = now
try:
# chromedriver
options = webdriver.ChromeOptions()
options.add_argument('headless')
options.add_argument('window-size=1920x1080')
options.add_argument("disable-gpu")
driver = webdriver.Chrome('./chromedriver', options=options)
try:
blog_url = request.args.get('url')
return_obj["blog_url"] = blog_url
except:
blog_url = 'unknown'
# Load Page
driver.get(url=blog_url)
# 실제 페이지는 "https://blog.naver.com/PostView.naver?blogId=bizspringcokr&logNo=222638819175&redirect=Dlog&widgetTypeCall=true&directAccess=false"
# iframe으로 호출된다.
driver.switch_to.frame("mainFrame");
# 공감
#print("공감")
sympathy_element = driver.find_element_by_css_selector('div.area_sympathy')
em_elements = sympathy_element.find_elements_by_css_selector("em.u_cnt._count")
#for i, em in enumerate(em_elements):
# print(i, "번째 em:", em.text)
sympathy = int(em_elements[1].text)
# 댓글
#print("댓글")
comment_elements = driver.find_element_by_css_selector('div.area_comment')
em_elements = comment_elements.find_elements_by_css_selector("#floating_bottom_commentCount")
#for i, em in enumerate(em_elements):
# print(i, "번째 em:", em.text)
comment = int(em_elements[0].text)
finally:
driver.close()
return_obj["sympathy"] = sympathy
return_obj["comment"] = comment
return return_obj
# 웹서비스로
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8080, debug=True)
아래와 같은 명령으로 웹서비스를 올리게 되면 8080 포트를 이용하는 웹서비스가 실행됩니다.

$ python run_nblog_api.py
* Serving Flask app 'run_nblog_api'
* Debug mode: ondeployment. Use a production WSGI server instead.
* Running on all addresses (0.0.0.0)
* Running on http://127.0.0.1:8080
* Running on http://172.16.10.24:8080
Press CTRL+C to quit
* Restarting with stat
* Debugger is active!
* Debugger PIN: 124-883-050
웹브라우저나 REST client, curl 등 http로 접근하여 사용할 수 있는 크롤러가 완성되었습니다.

여기에 더 깊게 들어가서, 크롤링 대상 URL을 저장하는 데이터베이스, URL들을 loop 돌리면서 크롤러를 호출하는 배치잡, 크롤링 결과를 저장하는 부분까지 만들면 저희 제품인 LOGGER for Viral 제품에서 제공하는 블로그/게시물의 댓글/공감 리포팅과 유사한 기능을 구현 할 수 있게 됩니다. 물론, 저희 상용 제품에서는 공개된 네이버의 API를 활용하는 등 작동 방식이 상이합니다.
지금까지 예제를 통해 자동화 프로그램인 selenium을 이용하여 웹브라우저를 컨트롤할 수 있다는 것, selenium을 통한 크롤링, 간단하게 작동하는 크롤러 서비스를 작성 해 보았습니다. 읽어주셔서 감사합니다.
data engineering (데이터 파이프라인 자동화)
데이터 워크 플로우
- 이전에도 언급했었듯이 데이터 파이프라인은 아래와 같은 서비스들을 S3에 모아 Athena같은 서비스로 분석해준 뒤 그 결과를 저장해놓은 일련의 데이터 작업의 흐름을 일컫는다.

데이터 파이프 라인 예시
- 하나의 job이 시작되거나 어떠한 event에 trigger가 됬을때, 또 다른 job으로 연결이 되는 이런 정보들을 DAGs(Directed Acyclic Graphs)라고 부른다.

DAG
ETL
- 보통은 Extract -> Transform -> Load순으로 작업을 해 왔지만, 최근에는 Extract -> Load -> Transform 순으로 작업을 하기도 한다. 데이터 파이프 라인의 연장선이다. 하나의 예시를 들자면, 하루의 정해진 시간에 의한 스케쥴링인 Amazon CloudWatch Event와 Automation Script를 통해서 machine이 시작하면, AWS안에 AWS Step Functions는 각 과정에서 그 다음과정으로의 연결에 대한 여러가지 경우의 수에 대한 룰을 정해놓는 서비스로 쉽게 말하면, 임의의 단계에서 fail이 일어나면 어떤 event를 발생시켜야 하고, success를 하면 어떤 event를 발생시켜야 하는지를 관리할 수 있도록 도와주는 서비스이다. 이런 Step Function안의 ETL Flow state machine이 시작하고, 이후에는 다양한 job들이 작동하게 된다. 이러한 ETL job들의 log를 CloudWatch에 저장을 하고, 아래와 같은 Flow를 갖게된다.

ETL 예시

ETL 예시 - 01
- AWS의 Step function에 관해 조금 더 말하자면, 아래 그림과 같이 사용할 수 있다. start가 되면 job이 submit이 되고, job이 finish될때 까지 기다려 줄 수 있게끔 Wait Seconds를 사용할 수도 있다. 왜냐하면, 예를 들어 Athena는 어느 정도 빅데이터를 처리하는 시스템이기 때문에 MySQL이나 PostgreSQL보다는 느린 부분이 있다. 이런 경우 위와 같이 time sleep을 통해 python script를 잠깐 멈춰두고 그 다음에 해당 시간이 지났을때 그 query에 대한 결과들을 가져올 수 있다. 이후에는 다시 job status를 받고 job이 끝났는지 아닌지에 따라 작업을 진행하는 flow를 볼 수 있다. 이런 service들이 없었을 때는 하나하나 monitoring을 통해서 수동으로 관리를 해야 했다.

AWS step function의 예시
- AWS Glue가 가장 좋은 부분은 이전에는 MySQL 같은 경우에는 만들어 놓은 Schema에 맞춰서 data를 insert하였는데, 이제는 data가 너무나 방대해지고 형식도 다 다른데, 이런 것들을 통합하는는 다 Glue한다는 의미의 서비스라는 점이다. 가장 많이 쓰여지는 부분 중에 하나가 Crawler인데 Crawler를 사용하면 자동으로 해당 data를 Crwaling해서 data가 어떤 형식인지에 대해서 지속적으로 Schema 관리가 들어가는 부분이 있다. 그러므로 data 양도 너무나 많고 column도 너무나 많은데 column이 변하는 경우도 있을 경우에 사용하면 좋다.
- AWS Glue 페이지를 보면 아래 그림과 같이 table과 ETL, Trigger등 다양한 작업을 할 수 있다. 한 가지 예시로 S3에 저장해놓은 python Script를 Jobs 탭에서 바로 수정가능하며, Trigger들도 등록해서 관리 할 수 있다.
AWS Glue
- 해당 job들은 step function이나 Glue를 통해 관리를 하거나, EC2에서 Crontab으로 스케쥴링의 변화를 통해서 관리를 하는 등 다양한 방법으로 관리를 하지만 아래와 같이 서비스들의 지속적인 monitoring을 통해 cost를 효율적으로 사용할 선택과 집중을 해야 할 것이다. 어떤 부분까지 monitoring을 할 것인지에 대해 선택하여 집중하는 것이다.

RDS monitoring 예시

EC2 monitoring 예시
Crontab이란?
- 여러가지 만들어진 data job들을 우리가 작성한 해당 코드를 특정한 시간이나 하루에 한번 일주일에 한번이 됐건 어떠한 스케쥴링 방법을 통해서 지속적으로 작동시키려고 할때 사용한다. Crontab Quick reference
- 이러한 스케쥴링을 하려면 규칙에의한 명령이 존재할 것임을 눈치챘을 것이다. 아래 그림과 같이 모두 ‘*‘이면 계속 1분마다 작동하라는 의미이며, 순서대로 분, 시간, 일, 월, 요일 순으로 지정할 수 있다.

Crontab 규칙
- 한가지 간단한 예로는 아래와 같이 Crontab을 실행하면 매일 오후 6시 30분에 /home/someuser/tmp안의 모든 파일을 제거하라는 job을 스케쥴링할 수 있다.
- 이제 Crontab을 실습해 보기 위해 EC2 서버를 하나 AWS에서 생성해 볼 것이다. 먼저 service 탭에서 EC2를 클릭하여 아래 그림과 같이 EC2 service 페이지로 이동한 후 다시 instance 탭으로 이동한다. Launch instance 버튼을 클릭하면 생성할 instance의 환경을 설정하는 페이지로 이동하게된다.

EC2 instance - 01
- Crontab 실습을 위한 서버이기 때문에 사양이 좋은 것을 고르진 않을 것이다. 필자는 Free tier만 사용가능한 2번째 사양을 고를 것이다. 다만, 실무에서 사용할 경우는 각자의 상황에 맞는 서버의 크기와 성능을 골라서 사용해야 할 것이다.

EC2 instance 생성 - 02
- 필자는 Free Tier만 가능한 t2.micro type을 선택하였다.

EC2 instance 생성 - 03
- Configure instance 탭에서는 개수를 지정하는 등 instance에 대한 설정을 하는 탭인데, 필자는 default값을 사용하기로 생각해서 아무런 설정도 하지않고 넘어갔다.

EC2 instance 생성 - 04
- Add storage 탭은 말 그대로 저장 성능을 설정하는 탭으로 필자는 이부분도 별다른 설정없이 기본값으로 하고 넘어갔다.

EC2 instance 생성 - 05
- tag를 설정하는 탭이며, 필자는 생략하였다.

EC2 instance 생성 - 06
- Configure Security Group 탭은 Security Group의 설정에 관한 탭이며, 새로 만들수도 있고, 이전에 생성되어있는 그룹을 사용해도 무방하다. 허나, 동일한 inbound 규칙을 사용하지 않는다면 새롭게 생성해서 사용하는 것이 좋다. 필자는 새롭게 만들어서 사용할 것이다. 또한, 접근을 ssh로 할 것이므로 아래와 같이 설정한다.

EC2 instance 생성 - 07
- 마지막으로 Review 탭은 이제까지 설정한 모든 사항을 점검하고 마지막으로 접속시 사용할 key pair를 어떤것으로 할지 정해주고 나면 모든 과정이 끝이 난다.

EC2 instance 생성 - 08
- 이제 다시 EC2의 instance 탭을 살펴보면, 새롭게 EC2 서버가 생성된 것을 확인 할 수 있다. 이제 접속을 해볼 것인데, 아래 그림에서 처럼 자신의 pem 파일이 존재하는 path에서 public DNS 서버 주소를 같이 입력하고 접속하면 된다.

EC2 instance 생성 - 09
- 아래와 같이 command를 실행하면 계속진행할 것이냐는 물음이 나올텐데 yes라고 하면 된다. 이는 앞으로 계속해서 접속하기위해 이 DNS를 추가할 것이냐는 물음이다.
- 이제 Crontab을 실행할 script 파일을 정해야 하는데, 필자는 이전에 만들어 두었던 script 파일 중에 top_tracks와 audio feature들에 대한 데이터를 S3에 parquet화하여 저장하게끔 코드를 작성한 파일을 사용할 것이다. 아래와 같이 필자의 pem 파일은 data_engineering이라는 파일 안에 존재한다.
- 위와 같은 구조로 되어있으므로 사용할 spotify_s3_make.py을 생성한 EC2 Server로 옮겨 줄 것이다. scp은 서버로 파일을 copy하는 것이라고 생각하면 된다. 단,아래 명령어는 이미 EC2에 접속한 상태가 아닌 로컬에서 진행하여야한다. 아래와 같이 옮겨진것을 볼 수 있고, EC2 서버로 접속하여 확인가능하다.
- 만일 EC2 서버의 어떤 폴더를 만들어 놓았는데 해당 폴더안으로 이동시키고 싶다면 아래와 같이 하면된다.
- 이제 script를 실행하기에 앞서서 작동할 수 있게끔 먼저 환경을 만들어주어야 할 것이다. 가장 먼저 python3가 설치되어있는지를 확인해 보자.
- 이제 본격적으로 crontab을 실습해 볼 것이다. 보통 crontab은 아래 두 가지를 많이 사용한다. crontab 파일은 vim editor를 사용하는데, 해당 스케쥴을 시작할때 email을 보내주는 기능도 있다. 우선 작동시키고 싶은 파일과 파이썬의 위치를 알고있어야 한다.
- UTC 시간 변경
- 전체적인 수집 프로세스에 대한 설명을 다시 한번 짚고가자면, Unknown Artist가 챗봇 메세지로 들어왔을 경우 AWS Serverless Lamda 서비스를 통해 Spotify API에 Access를 하고 그리고 해당 데이터가 Top Tracks, Artist Table에 가야되는지 또는 S3에 가야되는지를 관리를 하게 될 것이다. 또한, Ad Hoc Data Job을 통해 하루에 한번이라던지, 직접 로컬에서 command line을 통해 데이터를 가져올 수도 있게된다. Lambda가 필요한 이유는 우리가 Unknown Artist가 챗봇 메세지로 들어왔을때 내용을 업데이트를 해야되는데, 보통 사람들이 기대하는 챗봇은 업데이트를 바로 해주어서 원하는 정보를 얻을 수 있게끔 해주어야 하기에 이렇게 바로 업데이트를 할 수 있게끔 Lambda라는 서비스를 통해서 해결 할 수 있다. 이런 Lambda는 마이크로서비스의 개념인데, monolithic 이라는 개념의 반대이다. monolithic은 하나의 서비스를 만들때 크게 프로젝트 단위로 만들어 놓고 관리를 해주는 개념으로써 관리에 있어서 전체 프로세스가 보이기 때문에 컨트롤하기 쉬운 부분이 있다. 이에 반해 마이크로서비스는 세세한 작업하나씩을 단위로 관리를 하는 것이다.

데이터 수집 관련 프로세스
- 챗봇을 Lambda로 구현하는 이유는 Serverless는 하나의 Function이기 때문에 Stateless라고도 하는데 지금 상태가 어떤지 모르겠다는 의미이다. 예를들어, 어떠한 User 어떤 메시지를 보냈다고 가정하면, Lambda Function에는 이전의 어떠한 메시지를 갖고 있었는지를 담고있을 수 없다. 상태가 없는 Function이라고 생각하면 될 것 같다. 그러므로 이런 State를 관리할만한 데이터베이스가 필요할 것이다. 주로 메시지에 특화된 DynamoDB를 사용할 것이다. 또한 Lambda의 경우에는 해당 서비스의 User가 기하급수적으로 늘어났을 때 병렬로 늘어나기 때문에 제한점이 서버로 구현하는것보단 덜하다는 장점도 있다. 서버의 경우에는 메모리나 CPU의 제한된 성능으로 구축된 동일한 서버를 통해 1명에게 서비스하는 것과 백만명에게 서비스하는 것은 완전 다를것이다. 또 한가지 좋은 점은 지속적으로 띄워져 있는 것이 아니라 필요할 때 띄워서 사용한 만큼만 비용을 지불한다는 점이다.

Lambda, Athena - 01
- Crontab을 통하여 Lambda를 호출할 수도 있고, Lambda가 Lambda를 호출할 수도 있다.

Lambda, Athena - 02
- 본격적으로 Lambda Function을 만들 것이다. 먼저 AWS Lambda Function 페이지로 이동하여 아래와 같이 Create Function 버튼을 클릭한다.

Lambda Function 생성 - 01
- 이번 Lambda Function은 이전에 DynamoDB에 top track정보를 DynamoDB에 저장했었는데, Artist가 추가된다면 DynamoDB에도 저장되어야하므로 이 작업을 작성해 볼 것이다. 아래 그림에서와 같이 Author from scratch는 기본적인 예제를 통해 시작하는 부분이고, Use a blueprint는 흔하게 사용되는 경우들을 코드로 제공하는 부분이다. 마지막은 App repository에서 바로 연결해서 사용하는 것이다. 필자는 Scratch로 진행할 것이다. Lambda는 하나의 Functiond이므로 제한점도 있을 것이다.

Lambda Function 생성 - 02 옵션 설정
- 아래 그림과 같이 Function의 이름을 정하고 function의 language를 정한다. 또한 가장 중요한 부분인 Permission부분이 남았는데, 이 부분은 현재 필자가 진행할 Function의 목표는 DynamoDB에 새로운 데이터를 추가하는 것이므로 DynamoDB에 대한 permission을 갖고 있어야 오류가 없을 것이다. 그렇기에 2번째 부분인 Use an exsiting role을 클릭하여 사용해야 하는데, 새롭게 규칙을 추가해서 사용하면 error가 어떻게 발생하는 지를 보기위해 우선 첫번째를 선택하였다. 물론 무조건적으로 있던 규칙을 사용하는 것이 아니라 상황에 맞춰 사용해야한다.

Lambda Function 생성 - 03 옵션 설정
- function을 생성하면 아래 그림과 같이 여러가지 설정 및 작업을 할 수 있는 페이지가 나온다.

Lambda Function 생성 - 04 생성 완료
- 아래 부분으로 내려보면 다음과 같이 Function의 코드를 작성할 수 있는 부분이 존재한다. 이 곳에서 Function을 정의할 것이다. 허나, Edit code inline은 거의 사용하지 못하는 설정이라고 볼 수 있다. 해당 Lambda Function은 Linux 기반의 AMI compute system에 있는데, 함수를 동작할 수 있는 패키지들이 아무런 설치나 설정이 되어있지 않은 상태이기 때문이다. 그래서 zip file을 업로드하거나 S3에서 불러오는 방식을 보통 채택한다. 필자는 S3에서 불러오는 방식을 사용할 것이다.

Lambda Function 생성 - 05 코드 작성
- 위에서 함수에 사용될 변수들을 정의할 수 있다. 예를 들어, Spotify API에 접속하기 위해서는 ID와 Secret Key가 필요했는데 이 부분을 코드에 적기 보다는 보안의 문제로 따로 변수로 처리해 둔 뒤 함수에는 그 값을 받아 사용하는 형식으로 사용된다. 예를 들면 아래 그림에서 환경 변수의 Edit을 클릭하면 변수의 Key와 Value를 입력하여 추가하게끔 되어있는데 추가했다고 가정하면 함수에서는 os.environ.get(key)로 값을 받으면 된다. 또한 Basic settings부분은 Memory(Max : 3GB)와 timeout(Max : 15분)을 설정할 수 있는 부분인데, 가장 간단하고 명료하게 병렬적으로 분산처리를 할 수 있도록 코드를 작성하는 것이 좋다는 Lambda의 특징을 잘 보여주는 부분이다. 여기서 Memory는 크게 해 놓아도 사용한 만큼만 비용을 지불하는 것이므로 상관없다는 것에 유의하자.

Lambda Function 생성 - 06 변수 설정
- 이미 해당 Artist가 존재하는 것은 확인한 상태여서 해당 Artist ID에 대한 top track만 확보하고 싶은 경우라고 가정할 것이다. 그 ID 값을 이 Lambda Function에 보내 줌으로써 다시 한번 Spotify API에 hit을 하여 top track 정보를 가져오고 다시 DynamoDB에 저장하도록 할 것이다.
- 본격적으로 Lambda Function을 만들어 볼 것이다. 우선 새로운 폴더를 만들어준다. 그 안에는 Lambda Function에 관한 것들만 담기 위해서이다. 위에서 언급 한 것처럼 우선 아래 패키지들을 shell script를 통해 실행하기 위해서 requirements.txt를 작성할 것이다. 헌데 AWS에는 기본적으로 boto3가 설치되어져 있고 나머지들은 기본 내장 패키지들이므로 requests만 설치해 주면 될 것 같다.
- requirements.txt
- 위에서 만들어 놓은 requirements.txt안의 패키지를 -t옵션의 target 파일에 저장한다는 의미이다. 헌데 이렇게 home이 아닌 파일에 저장하게 되면 pointer issue 때문에 error가 발생하는데 이는 새롭게 setup.cfg라는 파일안에 아래와 같이 작성한 후에 저장해주면 해결된다. 다시 아래의 명령문을 실행하면 error 없이 libs안에 설치가 될 것이다.
- setup.cfg
- 매번 우리가 AWS CLI를 통해 명령문을 치고 실행할 수 없으므로 shell script로 작성해 준다.
- deploy.sh
또한, 위에서 lambda function을 update할 s3 bucket을 지정했으므로 새롭게 위의 이름으로 생성한다. 이 단계는 먼저 bucket을 만든뒤에 앞의 shell script를 만들어도 무관하다.

Lambda Function을 위한 새로운 S3 bucket 생성
- lambda_function.py
- 위와 같이 파일을 모두 작성했다면 아래와 같은 구조로 만들어져 있을 것이다.
- 이제 top_tracks의 path에서 아래와 같이 shell script를 실행시켜준다.
- Permission 권한을 바꿔주기 위해 다음의 코드를 실행한뒤 다시 shell script를 실행시킨다.
- 위의 코드들을 실행한 뒤 다시 AWS Lambda Function의 페이지로 돌아가 보면 아래와 같이 해당 파일들을 사용할 수 있게 설정이 되어져 있는 것을 확인 할 수 있다. 보통은 아래와 같이 sensitive한 정보들(client_id, client_secret) 같은 정보들은 따로 config.py 파일을 만들어서 모아놓는다. 이런 config.py파일은 해당 관리자만 가지고 있도록 하여 보안에 유지하나, 필자는 혼자 사용하므로 따로 만들지 않았다.

Lambda Function S3에서 불러오기
- 만약 위에서 Function Code내에서는 sensitive한 정보들이 안보이도록 하려면 아래 그림과 같이 environment variable을 추가하고, 코드를 작성하면된다. key값과 value값이 문자라도 기호를 사용하지 않고 넣으면 된다.

environment variable 추가

environment 변수 받는 법
- 이제 Lambda Function을 Test해 볼 차례이다. Test 버튼을 클릭해 준 뒤, event의 artist_id값을 주기 위해 RDS에 접속해서 임의의 ID 하나를 필자는 가져왔다.

Lambda Function Test

Lambda Function Test 데이터 생성
- Test 데이터를 저장하면 아래 그림과 같이 테스트할 파일로 바뀌었다는 것을 확인 할 수 있다. 이제 Test 버튼을 클릭한다. Log를 보니 Error가 발생한 것 같으므로 먼저 확인해 볼 것이다. Log는 AWS CloudWatch 서비스에서 확인할 수 있다.

Lambda Funtion Test 결과 및 error 발생

Cloudwatch 페이지
- 아래 로그 중 빨간색 박스 부분을 살펴보면 해당 role에 대한 permission이 없기 때문에 발생한 error임을 확인 할 수 있다.

로그 중 에러 발생 부분 찾기
- 처음에 Lambda Function을 만들때 말했듯이 permission이 없기 때문에 발생하는 error이므로 excution role을 변경해주기 위해 아래 그림의 빨간색 박스 안의 버튼을 클릭해 준다.

excution rule 변경
- role을 변경하기 위해 IAM 페이지로 이동되며, Attach를 통해 DynamoDB에 access 할 수 있는 권한을 부여할 것이다.

Attach policies - 01

Attach policies - 02
- 새롭게 role이 추가되어 기존의 1개에서 2개로 늘어났으며, DynamoDBFullAccess 권한을 부여받음을 확인할 수 있다.

Attach policies - 02
- 이제 다시 Lambda Function 페이지로 돌아와서 실행시켜 보면 제대로 실행됨을 알 수 있다.

Success Lambda Function
- Lambda는 Event trigger 뿐만 아니라, Crontab과 같이 스케쥴링에 의한 job을 작동시킬수도 있으며, 적용가능한 여러가지 event들이 존재한다.

trigger 추가하기

trigger들의 종류

Scheduling trigger 방법