데이터베이스에 유니버스가 없다면 앞서 생성한 if 문 안에서 유니버스를 생성하고, 유니버스가 있다면 select 문으로 유니버스를 조회합니다. 조회해서 얻어 온 유니버스는 self.universe에 저장됩니다.
여기서 중요한 점은 universe 딕셔너리에 들어가는 값(value) 또한 딕셔너리라는 것입니다. main.py 파일을 실행해서 self.universe에 저장되어 있는 데이터를 확인해 보겠습니다. 이번에 main.py 파일을 다시 실행할 때는 유니버스가 생성되어 있기 때문에 not check_table_exist(self.strategy_name, 'universe') 결과가 False가 되어 유니버스를 생성하는 과정을 거치지 않습니다. 하지만 아직 유니버스를 생성하지 않고 main.py 파일을 실행할 때는 계좌번호가 출력된 후 유니버스 구성 종목 전체가 리스트 형태로 출력될 수 있습니다.
connected
8*********
{'000060': {'code_name': '메리츠화재'}, '000990': {'code_name': 'DB하이텍'}, '001120': {'code_name': 'LX인터내셔널'}, (...) '900250': {'code_name': '크리스탈신소재'}}
self.universe는 딕셔너리를 값으로 가지고 있는 딕셔너리인 것을 확인할 수 있습니다.
지금까지 데이터베이스에서 확인한 유니버스 존재 여부에 따라 유니버스를 생성하고 저장하는 방법을 다루었습니다. 여러 패키지와 모듈을 오가며 소스를 추가하는 일이 쉽지만은 않았을 것입니다. 앞서 말했듯이 모든 코드를 하나하나 이해하기보다 매매를 수행하는 데 꼭 필요한 유니버스를 만들고 저장하는 과정의 흐름을 이해하는 것이 중요합니다.