|
웹 자동화 도구인 Selenium과 이미지 텍스트 인식 기술 OCR을 결합하여 스마트 디스플레이 시스템을 효율적으로 제어하는 혁신적인 프로젝트를 소개합니다. 이 기술 조합을 통해 자동으로 화면을 인식하고 조작하게 된 과정을 설명하며, Docker와 클라우드 서비스를 활용해 대규모 시스템 마이그레이션을 자동화한 방법을 살펴봅니다. |
들어가며
수천 대의 디지털 디스플레이를 하루 만에 새로운 시스템으로 마이그레이션할 수 있다면 어떨까요? 최근 저희는 이 도전적인 과제를 Selenium과 OCR 기술을 결합해 해결하고자 했습니다. 초기 프로토타입 개발 후 대규모 확장성 문제에 직면했는데 Docker 컨테이너화와 클라우드 서비스 통합으로 문제를 극복했습니다. 이 글에서는 수천 대의 디스플레이를 효율적으로 처리하기 위한 기술적 접근과 그 과정에서 마주한 도전들을 공유합니다.
프로젝트 개요
저희는 삼성의 기존 디지털 사이니지 관리 시스템인 MagicInfo에서 새로운 클라우드 기반 CMS 시스템인 VXT로의 대규모 마이그레이션 작업을 자동화하는 프로젝트를 수행했습니다. 기존에는 MagicInfo에서 VXT로의 마이그레이션이 비교적 간단한 API 호출만으로 가능했습니다. 그러나 Tizen 6.5 버전부터는 사용자 동의(Terms and Conditions)가 필수적으로 요구되면서 상황이 복잡해졌습니다. 이는 대규모 마이그레이션 작업에 큰 장애물로 작용했죠.
기존 마이그레이션 과정
먼저, 기존에는 어떤 방식으로 마이그레이션이 이루어졌는지 살펴보겠습니다.
- MagicInfo에 접속
- 로그인
- 마이그레이션할 기기 선택
- 원격 제어 모드로 접속
- 리모컨 또는 화면 클릭으로 수십 번 메뉴를 눌러 마이그레이션 단계 진행
- 기기가 여러 대일 경우 3~5단계 반복
마이그레이션할 기기가 한 대라면 길어야 5분 정도밖에 소요되지 않습니다. 하지만 몇 천대라면 어떨까요? 여러 대를 한 번에 원격 제어하는 기능이 MagicInfo에 있지만 극단적으로 한 대씩 10,000대를 마이그레이션한다고 가정해봅시다. 50,000분이 걸립니다. 시간으로 환산하면 833시간, 날짜로 환산하면 34일에 달하죠.
실제로 이러한 작업을 위해 여러 인력이 투입되었고 일주일가량 소요되었다고 합니다. 자동화가 절실했죠. 이 과제를 해결하기 위해 저희 팀은 Selenium과 OCR 기술을 혁신적으로 결합한 자동화 솔루션을 개발하기로 결정했습니다. 이 프로젝트는 대규모 마이그레이션 과정을 효율적으로 자동화하여 시간과 인력 비용을 크게 절감하는 것을 목표로 했습니다.
Selenium
Selenium : 강력한 브라우저 자동화 도구
Selenium은 웹 브라우저를 자동으로 제어하는 강력한 소프트웨어 라이브러리입니다. 이 도구를 사용하면 실제 사용자가 웹사이트를 이용하는 것과 같은 방식으로 프로그래밍을 통해 다양한 동작을 수행할 수 있습니다.
주요 기능
- 클릭, 입력, 스크롤 등 사용자 동작 시뮬레이션
- 반복적인 웹 작업 자동화
- 웹사이트 테스트 자동화
본 프로젝트에서는 Selenium을 핵심 자동화 도구로 활용했습니다. 먼저, MagicInfo 웹 인터페이스에 자동으로 로그인하는 데 사용했고요. 보안을 위해 필요한 OTP 입력 과정도 Selenium을 통해 자동화했습니다. 여담이지만, 이 과정에서 OTP 생성을 위한 전용 라이브러리의 존재를 알게 되어 활용하였습니다. 로그인 후에는 원격 제어 인터페이스에 접근하여 다양한 조작을 수행했습니다. 예를 들어, 특정 버튼 클릭, 메뉴 선택 등의 작업을 Selenium을 이용해 프로그래밍적으로 수행했죠. 이를 통해 수동으로 처리해야 했던 복잡하고 반복적인 과정을 효율적으로 자동화할 수 있었습니다.
OCR
OCR : 이미지 속 텍스트 인식의 마법
OCR(Optical Character Recognition)은 이미지 속 텍스트를 컴퓨터가 읽을 수 있는 문자로 변환하는 기술입니다. 이 프로젝트에서는 디스플레이 화면을 캡처한 후 그 화면에 있는 텍스트를 인식하는 데 OCR을 사용했습니다.
OCR vs 이미지 인식
초기에는 이미지 자체를 인식하는 방법과 이미지 내 텍스트를 인식하는 방법을 모두 시도했습니다. 그러나 테스트 결과, 이미지 인식의 정확도가 상대적으로 낮아 텍스트 인식 방식을 채택하게 되었습니다.
OCR 라이브러리 비교
여러 OCR 라이브러리를 검토하며 이 프로젝트에 적합하다고 판단되는 라이브러리들을 테스트해보았습니다. 아래 표는 이미지들에 각 라이브러리를 사용했을 때 소요된 시간과 텍스트 인식 결과를 나타낸 것입니다.
이 프로젝트에서는 다양한 언어를 지원해야 하며 정확도가 무엇보다 중요했기에 최종적으로 PaddleOCR 라이브러리를 사용하기로 결정했습니다.
단일 기기에서 수천 대로
단일 기기에서 수천 대로 : 컨테이너화와 클라우드 서비스를 통한 스케일링
Selenium과 OCR을 결합한 초기 프로토타입을 성공적으로 개발한 후 새로운 과제에 직면했습니다. 바로 ‘단일 기기에서 작동하는 이 솔루션을 어떻게 수천 대의 디스플레이에 동시에 적용할 수 있을까?’하는 것이었습니다.
확장성 문제
- 리소스 제약: 단일 머신에서 여러 브라우저 인스턴스를 동시에 실행하는 것은 CPU와 메모리 측면에서 한계가 있었습니다.
- 병렬 처리의 필요성: 대규모 마이그레이션을 효율적으로 수행하기 위해서는 여러 디스플레이를 동시에 처리할 수 있어야 했습니다.
- 환경 일관성: 다양한 실행 환경에서 동일한 결과를 보장하는 것이 중요했습니다. 이러한 과제를 해결하기 위해 Docker 컨테이너화 기술과 클라우드 서비스를 활용하기로 결정했습니다.
Docker를 활용한 배포와 확장
프로젝트의 확장성과 안정성을 높이기 위해 Docker를 활용했습니다. Docker 사용으로 환경에 관계없이 일관된 실행이 가능해졌고, 배포와 스케일링이 간편해졌으며, 의존성 관리도 용이해졌습니다. 이러한 이점을 바탕으로 프로젝트의 효율성과 신뢰성이 크게 향상되었습니다.
Dockerfile 예시
위와 같이 Dockerfile을 사용하여 이미지를 빌드하고 Amazon ECR(Elastic Container Registry)에 푸시한 후 Amazon ECS(Elastic Container Service) 태스크를 동적으로 생성하여 여러 인스턴스를 동시에 실행할 수 있었습니다.
Docker 이미지 빌드 및 배포
Docker 이미지를 빌드하고 ECR(Elastic Container Registry)에 푸시하는 과정은 크게 네 단계로 구성되었습니다. ECR 로그인으로 시작해 Docker 이미지 빌드와 이미지 태깅을 거쳐 ECR에 이미지를 푸시하게 됩니다. 이 모든 단계를 효율적으로 수행하기 위해 아래와 같은 셸 스크립트(build_and_push.sh)를 작성하여 전체 프로세스를 자동화했습니다. 이로써, 개별 명령어를 수동으로 실행할 필요 없이 스크립트 실행 한 번으로 전체 과정을 완료할 수 있었습니다.
build_and_push.sh
ECS를 통한 동적 확장
ECS(Elastic Container Service)를 활용해 워크로드에 따라 동적으로 태스크를 생성하고 관리했습니다. 그 결과, 수백 대의 디스플레이를 동시에 처리할 수 있는 확장성을 확보했습니다.
- ECS 클러스터 생성
- 태스크 정의 구성(CPU, 메모리, 컨테이너 설정 등)
- 태스크 실행 및 관리
이러한 Docker와 AWS 서비스의 조합으로 프로젝트 요구사항인 대규모 병렬 처리와 빠른 확장성을 효과적으로 달성할 수 있었습니다.
결론
Selenium과 OCR을 결합한 초기 프로토타입을 Docker를 통해 컨테이너화하고 클라우드 서비스와 통합함으로써 대규모 디스플레이 마이그레이션 작업을 효율적으로 수행할 수 있었습니다. 이 확장 가능한 자동화 솔루션은 수동 작업에 비해 직접 투입되는 인력을 크게 줄여 시간 및 비용 절감을 가능하게 해주었습니다. 또한 대규모 병렬 처리 능력을 갖춘 이 시스템 덕분에 다수의 디스플레이를 하루 만에 마이그레이션해야 하는 도전적인 목표를 달성할 수 있게 되었습니다. 향후에는 이 기술과 인프라를 바탕으로 더욱 다양한 자동화 시나리오에 솔루션을 적용할 계획이며, 지속적인 최적화를 통해 성능을 더욱 개선해 나갈 것입니다.
|
|
