Backend/AI App Server 5

[ELK] AI 모델링 시각화

AI 모델링에 사용한 데이터를 데이터 분석을 위한 Elastic stack(https://sirzzang.github.io/dev/Dev-elk-stack-01/)을 이용해 관리하고 시각화할 수 있다. AI 모델링 서버(https://projectlog-eraser.tistory.com/64)에서 로깅을 통해 input, modeling(모델링 중간 과정에 발생하는 데이터) data를 남기고, ELK stack을 통해 이를 수집 및 가공해 적재하고, 시각화하면 된다. # 구조 전체 구조도는 다음과 같다. AI app server의 Model, Datastore에서 input, output data 및 모델링 과정을 나타내는 데이터(예컨대, 클러스터링 점수 등)를 로그로 남긴다. Elastic stack은..

[App Server] Flask로 AI 백엔드 서버 구축해 보기

지난 포스팅(https://projectlog-eraser.tistory.com/m/57)에서 받은 피드백을 통해, 앱 서버의 구조를 변경해 개발을 진행하였다. # 구조 백엔드에서 따로 모델을 돌리는 프로세스를 생성하지 않고, socket 통신도 하지 않는다. 따라서 불필요하게 모델을 돌리기 위한 프로세스를 새로 생성하지 않아도 되고, Flask app 프로세스와 모델 프로세스 간에 통신으로 인해 (혹시라도 발생할 수 있는) 서버 부하를 줄일 수 있다. 또한, 모델별로 설계를 진행했던 것과 달리, 새로운 설계에서는 컴포넌트별로 레이어를 나누었다. Controller, Service, Model이 그것이다. Controller는 클라이언트의 요청을 받아, Service로 전달한다. Service는 모델링에..

[Tibero] Tibero에서 UPSERT 쿼리 구현하기

지난 글에서 개발하던 앱 서버를 운영하던 중, 이슈가 발생해 해당 이슈를 해결하기 위해 UPSERT 쿼리를 구현할 필요성이 생겼다. UPSERT란, 키 값이 존재하는 row에 대해서는 UPDATE를 수행하고, 그렇지 않은 row에 대해서는 INSERT를 수행하는 쿼리이다. MySQL, PostgreSQL, Oracle 등 많이 사용하는 데이터베이스에서는 UPSERT를 수행하기 위한 쿼리가 제공된다. 더보기 간략하게 (전적으로 내 기준) 기억하기 쉽도록 각 DBMS에서 제공되는 UPSERT 쿼리를 정리하면 다음과 같다. MySQL: ON DUPLICATE KEY UPDATE PostgreSQL: ON CONFLICT DO UPDATE SET ORACLE: MERGE WHEN MATHCED THEN WHEN..

[App Server] Flask, Socket으로 앱 서버 구축해 보기

(지난 포스팅에 이어) 클라이언트의 요청이 들어 왔을 때, 요청을 처리해 모델링을 한 뒤, 해당 결과를 클라이언트에게 전송하는 앱 서버를 개발하였다. Flask와 Socket을 이용해 개발했는데, 구조를 기획하고 실제 코드를 작성하는 과정에서 배운 점이 많았기 때문에 간략하게 전체적인 과정을 기록하고자 한다. 예전에 데이터 분석, AI를 배울 때부터 꼭 해보고 싶었던 일이기에, 회사 업무를 통해 경험할 수 있다는 것 자체가 큰 성장이었다. # 구조 개발에 앞서 다음 그림과 같은 구조를 기획했다. Flask app server는 클라이언트의 요청을 라우팅하는 router 모듈로 동작하고, backend server는 Flask app server에서 받은 요청에 따라 그에 맞는 모델을 호출해 작업을 수행한..

[App Server] ODBC를 이용해 Tibero와 Python 연동하기

회사에서 애플리케이션 API 서버를 개발하며, Tibero에 적재된 데이터를 불러오는 모듈을 개발할 일이 생겼다. Tibero 데이터 I/O 모듈의 위치는 다음 그림에서와 같고, 데이터베이스로부터 데이터를 추출해 Preparation 모듈로 넘기는 역할을 담당한다. 애플리케이션 API 서버 및 애플리케이션 내 AI 모델을 Python으로 개발할 예정이기 때문에, Tibero 데이터 I/O 모듈도 Python으로 개발하고자 한다. Tibero의 tbCLI는 DBMS와의 연결을 지원하기 위해 ODBC, JDBC를 지원한다. 사실 Python에는 각 데이터베이스와 연동을 지원하는 라이브러리가 있는데(예컨대, mysql과 연동하기 위해서는 pymysql 등을 사용하면 된다.), 아직 Tibero와의 연동을 지원..