Serverless 이미지 인식 시스템 만들기 - 분석 서비스 구축
앞서 구축한 비동기식 서비스(이미지 인식 시스템 분석 서비스) 배포는 크롤러 서비스와 유사한 방식으로 SQS(Simple Queue Service) 큐 메시지에 의해 분석에 사용 가능한 이미지가 트리거 되어 아마존 레코그니션(rekognition) 서비스와 연결한다. 레이블(이름표) 집합에는 이미지로부터 AI(모델)가 인식한 물체를 표현하는 단어와 그에 대한 신뢰도(1~100 가장 신뢰)이며 분석 서비스가 반환된 데이터를 처리하여 워드 클라우드 생성기에 공급할 수 있는 단어 수의 집합(각 이미지들의 공통 스레드)을 만들어 시각적으로 확인이 가능하다.
반면, 동기 서비스의 배포 로직은 프런트 엔드단에서 API를 호출하여, API가 S3로부터 데이터 및 URL을 읽어서 각 S3 버킷과 작업 큐에 크롤링한 값들을 떨군다. 그다음에 API가 SQS에 메시지를 포스팅하여 '비'동기 프로세스를 트리거한다.
2. 동기식 서비스 배포
- UI 서비스와 프런트엔드로 구성됨.
1) UI 서비스의 세 가지 진입점(세 개의 *람다 함수)
url/list: 분석을 위해 제출된 모든 URL을 나열함 → 아래 urlParser 상수(변하지 않는 값)에 URL 파싱을 위한 url 노드 모듈 로딩 및 저장
image/list: 특정 URL에 대해 분석된 모든 이미지 나열함
url/analyze: 분석을 위해 URL을 제출함
*람다(Lamda) : 작은 프로그램을 실행하는 구조(일괄처리)이며, 미리 등록해 두면 언제든 실행 가능. AWS Lamda는 데이터나 요청에 대한 실시간 처리나 백엔드 처리를 자동으로 실행하는 구조임. 전용 서버를 구축하거나 따로 관리하지 않아도 필요한 이벤트가 자동으로 실행됨. 서버에 상주하는 프로그램과는 다르게 프로그램 실행 시에만 요금이 부과됨.
위의 handler.js 파일의 내부에서는 AWS SDK를 가지고 서비스에 필요한 객체, S3 및 SQS를 위에 마킹한 과정대로 생성한다.
1) listUrls 람다 함수
HTTP GET 메서드 요청에 따라 API 게이트웨이를 통하여 실행.
2) listImages 함수
3) analyzeUrl 함수
2.1 프런드 엔드 서비스
이제 곧바로 배포를 진행하기 위해 아래와 같이 커스텀 도메인 항목을 만들고 ui-service 배포를 위한 기본 도메인을 사용한다. 또한 기본 도메인에 대한 인증서와 그 인증서의 ARN 환경 변수를 설정한다.
인증서 발급 후, 해당 인증서 ARN을 도메인 ARN 환경변수로 설정했다.
인증서를 생성 후 개인 도메인 가져오는 것까지 성공했으나,