타파스 시스템을 개발하는데 있어서 외부 제품군들을 사용하고 있다. 타파스(TAPAS)는 클라우드 환경에서 마이크로서비스(Microservices) 형태로 운영되는 시스템으로, 다양한 금융 데이터를 실시간으로 처리하고 관리하는 데 최적화되어 있다. 이 과정에서 높은 성능과 확장성을 보장하기 위해 여러 가지 인프라 및 제품을 활용한다. 클라우드 환경에서 동작하는 제품군을 대상으로 한다. c언어의 라이브러리 형태는 여기서 제외한다. 1. 도커/쿠버네티스(k8s) : 타파스 시스템 관리 타파스는 클라우드환경에서 마이크로서비스로 운용되는 시스템이다. 도커를 활용한 이미지를 만들고 k8s에서 운용된다. 좀더 자세한 내용은 도커와 쿠버네티스를 활용한 C 언어 개발 환경 구축(1)(2) 에서 기술했다. 2. 메세지브로커 : 서비스간 통신 메세지 브로커는 마이크로서비스 사이의 통신(송/수신) 기능을 담당한다. 타파스에서는 여러 메세지브로커 가운데 RabbitMQ, Kakfa 를 사용한다. 이제품군에 대한 설명, 장단점은 생략한다. 수신처 브로커 송신처 클라이언트 요청 RabbitMQ/Kafka 요청처리 서비스 요청처리 응답 RabbtMQ/Kafka 클라이언트 응답 실시간 처리 RabbitMQ/Kafka 클라이언트 전송 3. Redis-Cluster : 실시간 시세 데이터 저장소 Redis Cluster는 주식 시세 데이터를 실시간으로 저장하고 관리하는 역할을 한다. 주로 당일 시세데이타를 저장하고 클라이언트의 조회 요청에 사용된다. 4. 관계형 데이터베이스(RDBMS) : 시세 데이터 영구 저장 데이타베이스는 시세 데이터의 히스토리성 데이타를 장기 보관하고, 관리하는 역활을 한다. 타파스에서는 PostgreSQL, MySQL를 사용한다. 당일/일자별 시세데이타 보관, 관리한다. 5. FluentBit-ELK : 로그 관리 타파스에서 출력하는 모든 로그를 한...
타파스에서 사용하는 로그를 정리할 필요성을 느꼈다. 왜냐하면 운영하는 사람의 입장에서는 로그의 중요성이 매우 크다. 로그에 오류를 확인해서 조치를 취해야 할 경우가 많다. aplib/aplog.c에서는 콘솔출력, 파일에 출력, 로그를 처리하는 프로세스에 로그데이타를 전송하는 기능 등을 구현했다. 로그데이타를 전송할때 사용한 기술은 메세지큐, kafka이다. 로그데이타를 받은 프로세스에서는 파일로 출력, mongo-db에 저장을 했다. 이방법 보다 좋은 방법이 없을까? 웹서치를 계속 했다. 그래서 발견한 방법이 Fluent-Bit -> ELK(Elasticsearch-Logstash-Kibana)조합이다.(Logstash는 사용안함) k8s에 Fluent-bit를 설치하면 로그를 일정포맷으로 Elasticsearch로 전송한다. 전송된 데이타를 Kibana로 조회해서 사용한다. 가장 보편적으로 많이 사용하는 방법인것 같다. 데이타의 포맷은 JSON포맷으로 많이 사용된다. 타파스에서 사용하는 로그포맷을 정해 보았다. {"timestamp":"2025-03-28T11:21:09.034Z","level":"INFO","message":"User login succeeded","pgname":"sise-job-grp1","hostname":"my-server"} 키 값 timestamp 출력일자/시간 level 로그레벨(DEBUG,INFO,NOTICE,WARN,ERROR,FATAL) message 로그내용 pgname 프로세스명 hostname 호스트명 지금까지 개발된 타파스의 로그는 JSON포맷도 아니고 정형화가 되어 있지 않았다. zlog 라이브러리를 채택해서 타파스의 로그를 전...