기본 콘텐츠로 건너뛰기

타파스에서 사용하는 제품군(인프라) 선정

타파스 시스템을 개발하는데 있어서 외부 제품군들을 사용하고 있다. 타파스(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 : 로그 관리 타파스에서 출력하는 모든 로그를 한...

pflib 공통모듈 작성

타파스 시스템을 개발하면서 필요한 라이브러리를 개발했다.(지금도 업데이트 하고 있음) pflib(platform library)에는 가장 기본이 되는 모듈을 라이브러리로 만들었다.

위의 디렉토리 구조를 보면 알겠지만 각각의 c소스파일과 inc/헤더파일로 이루어져 있다. 소스를 보면 알겠지만 pflib의 모든 구조는 init():생성 -> 함수사용 -> dispose()로 자원해제 방식으로 이루어져 있다.

첫번째 모듈은 pfcommon.c 이다. 이모듈은 시스템 전체에 공통으로 사용될 함수들을 작성했다. 필요하다면 공통함수를 계속해서 추가해 나갈 예정이다.

함수 설명
isRunning 프로세스명으로 현재 실행중인지 확인

헤더파일에는 사용할 변수와 함수의 포인터를 선언한다.

pfcommon.c

헤더파일에서 선언한 함수를 기술한다. 함수의 형태는 전부 static으로 선언해서 다른 모듈에서 사용가능한 extern를 배제했다. 경험으로 봤을때 시스템이 커지면 extern를 많이 사용하면 소스를 파악하거나 유지/보수에 힘이 들었다.

static int _isRunning(char *pname) 함수를 작성하고 initCommonSt()에서 pThis->isRunning = _isRunning; 함수포인터에 매핑을 했다.

내가 굳이 이렇게 사용하는 이유는 시스템이 커지고 여러사람을 거쳐서 유지/보수가 일어나면 소스에서 사용하는 함수가 어디에 있는지 왜 사용하는지 의아해 할때가 많이 있었다. 이렇게 사용을 하면 좀 귀찬더라도 pfcommon.c의 함수를 사용하는구나 라고 명확하게 알수 있어서 이렇게 라이브러리를 작성했다.

pfcommon 사용

COMMON_ST *pCommon = initCommonSt(); 으로 생성을 하고 pCommon->isRunning("termsvr"); 이렇게 함수를 사용을 하고 pCommon->dispose();로 생성된 자원을 해제한다.(여기서는 아무 기능도 없다)

모든 pflib/aplib는 이런 방식으로 동작한다.

pCommon->isRunning("termsvr"); 함수는 프로세스명 termsvr이 현재 실행되고 있는가를 확인하는 기능을 한다. 사용자 부주의로 중복실행되는걸 방지하는 기능이다.


댓글

이 블로그의 인기 게시물

pflib 환경파일 모듈 작성

pflib ├── CMakeLists.txt ├── inc │   ├── pfchannel.h │   ├── pfcommon.h │   ├── pfconf.h │   ├── pffile.h │   ├── pfipc.h │   ├── pflib.h │   ├── pflog.h │   ├── pfstring.h │   └── pftime.h ├── pfchannel.c ├── pfcommon.c ├── pfconf.c ├── pffile.c ├── pfipc.c ├── pflib.c ├── pflog.c ├── pfstring.c └── pftime.c 환경파일 모듈은 pfconf.c 이다. 프로세스에서 환경파일을 참조해서 설정값을 가져올때 사용하는 함수를 작성한다. 주로 프로세스 실행시 프로세스의 설정을 파일로 관리할때 사용한다. 함수 설명 getConfItem 아이템 메모리확보 freeConfItem 아이템 메모리해제 getConfSection 섹션 메모리확보 freeConfSection 섹션 메모리해제 getConfData 환경파일의 모든내용을 메모리로 로드 makeConfList getConfData의 내용으로 섹션/아이템으로 만듬 reload 환경파일을 다시 읽어드림 prtConfList 환경파일을 출력 getInt 해당하는 섹션에서 키값을 찾아 int형으로 리턴 getString 해당하는 섹션에서 키값을 찾아 string형으로 리턴 getSectionCount 섹션수를 리턴 getSectionName 해당하는 세션을 구함 getSectionPos 해당하는 세션의 pos를 구함 getItemCount 섹션의 아이템수를 리턴 getItemInfo 섹션의 아이템을 구함 dispose 모든 자원을 해제 initConfSt 환경파일을 메모리로 읽어들이고 섹션/아이템으로 만듬 환...

velog글을 blogger로 게시하는 방법

타파스 관련 작업을 블로그로 시작한곳은 velog이다. 가장 글 쓰기 편안한것 같다. 특히 코드를 삽입하기 좋고 마크다운이 이렇게 편안한지 몰랐다. 블로그를 노출하거나 광고를 노출하기에 velog가 좀 한계가 있는듯 해서 구글블로그에도 velog와 같은 글을 게시하고 싶어졌다. 처음에는 velog글을 복사해서 붙여넣기, 마크다운 이나 코드삽입 부분은 html로 붙여넣기로 게시를 했다. 그런데 너무 불편하고 html로 붙여넣기 하기에 신경이 많이 쓰였고, 오류도 많았다. 특히 시간이 너무 걸린다는것이다. 그래서 자동화를 알아보고 나름대로 만족한 방법을 알아냈다. 자동화(?)를 하기 위해서는 몇가지 절차가 필요하다. 1. Google Cloud Console에서 프로젝트 생성 및 API 활성화 1.1 Google Cloud Console 접속 Google Cloud Console에 접속. Google 계정으로 로그인. 1.2 새 프로젝트 생성 상단 메뉴에서 프로젝트 선택 드롭다운을 클릭. "새 프로젝트"를 선택. 프로젝트 이름을 입력하고 "만들기"를 클릭. 1.3 Blogger API 활성화 왼쪽 메뉴에서 "API 및 서비스" > "라이브러리"를 선택. 검색창에 "Blogger"를 입력하고 "Blogger API"를 선택. "사용" 버튼을 클릭하여 API를 활성화. 2. OAuth 2.0 인증 정보 생성 2.1 사용자 인증 정보 생성 왼쪽 메뉴에서 "API 및 서비스" > "사용자 인증 정보"를 선택. "사용자 인증 정보 만들기" 버튼을 클릭하고 "OAuth 클라이언트 ID"를 선택. 2.2 동의 화면 구성 동의 화면을 구성하라는 메시지가 표시되면, "외부"를 선택하고 ...

시세 데이타를 수신 및 처리 개요

거래소로 부터 시세데이타를 수신하는 방법은 크게 2가지 이다. 거래소로 부터 직접 UDP로 받거나 FEP를 통해서 받는 방법이다. UDP로 부터 시세데이타를 수신하는 방법을 선택했다. UDP의 포트별로 시세데이타가 구분되어 들어온다. 자세한 정보는 거래소에서 제공하는 전문설계서를 참조하면 된다. 아래표는 간단하게 요약한 표이다.(실제 항목은 아래 항목 보다 많다) 배치/기타 데이타 정보제공 데이타구분 UDP포트 증권종목정보 A0 11001 협의거래결과 C4 11001 종목이벤트정보 I6 11001 회원사정보 M9 11001 업종별 투자자별 통계 C0 11001 거래상위 5개상위 통계 B9 11001 현재등락 B5 11001 프로그램매매 투자자별 통계 P0 11001 프로그램매매 종목별 집계 C3 11001 프로그램매매 전체 집계 J0 11001 공매도정보 I8 11001 체결 데이타  정보제공 데이타구분 UDP포트 증권체결 A3 11021 ~ 11025 장운영 A7 11021 ~ 11025 종목마감 A6 11021 ~ 11025 VI발동/해제 R8 11021 ~ 11025 호가 데이타  정보제공 데이타구분 UDP포트 증권 우선호가 B6 ...