DB 설계
JAVA로 데이터를 분석하거나 처리하는 자료가 별로 없었습니다. 구글링을 해도 대부분 Python을 사용하는 자료였습니다. 데이터를 다루거나 활용하는 라이브러리는 Python이 제공하는 경우가 많았습니다. 찾아볼수록 Python이 더 효율적이다 생각했습니다.
그래도 처음 배운 언어는 JAVA고 아직 수박 겉핣기 수준으로 다른 언어를 사용하는 건 아니라고 생각했습니다. 결국 내가 활용하기 쉬운 웹서비스를 시작으로 추후에 데이터를 본격적으로 활용하는 건 Python을 추가하자는 계획을 세우게 되었습니다.
1. 네이버 증권에서 제공하는 종목분석 벤치마킹
네이버 증권에서 제공하는 종목분석에 재무제표를 벤치마킹해서 직접 서비스를 만들어 보자고 계획했습니다. 웹 크롤링을 사용하면 쉽게 불러올 수 있지만 경험상 정확한 숫자나 내용을 불러오기는 어렵고 네이버 증권의 구성이 변경되는 부분이 있어 지속적으로 수정을 해야된다는 단점이 있었습니다.
2. 금융감독원 DART OpenApi 활용
금융감독원에서는 재무정보를 제공하는 오픈API를 서비스하고 있습니다. 각 기업의 사업보고서와 여러 재무정보를 제공하고 있습니다. 사용해본 결과 장단점이 존재했습니다.
장점
1. 모든 기업이 의무적으로 재무제표 및 정보를 신고해야 하는 가장 신뢰도가 높은 데이터 제공
2. 제공 받을 수 있는 데이터의 형식 중 JSON이 있다.
단점
1. 기업의 이름이나 종목코드가 아닌 고유번호를 따로 저장하고 고유번호를 추가로 URL에 제공해야 해당 기업의 데이터를 받을 수 있음
2. JSON Key의 이름은 같지만 value 값에 있는 정보가 너무 많다. 예를 들면 key는 "a"라는 하나에 재무제표에서 제공하는 항목이나 이름들이 전부 다 들어있다는 점이다.
{
"account_nm": "자산총계",
"account_detail": "-",
"thstrm_nm": "제 55 기",
"thstrm_amount": "296857289000000",
"frmtrm_nm": "제 54 기",
"frmtrm_amount": "260083750000000",
"bfefrmtrm_nm": "제 53 기",
"bfefrmtrm_amount": "251112184000000",
},
{
"account_nm": "유동자산",
"account_detail": "-",
"thstrm_nm": "제 55 기",
"thstrm_amount": "68548442000000",
"frmtrm_nm": "제 54 기",
"frmtrm_amount": "59062658000000",
"bfefrmtrm_nm": "제 53 기",
"bfefrmtrm_amount": "73553416000000",
},
{
"account_nm": "미수금",
"account_detail": "-",
"thstrm_nm": "제 55 기",
"thstrm_amount": "1910054000000",
"frmtrm_nm": "제 54 기",
"frmtrm_amount": "2925006000000",
"bfefrmtrm_nm": "제 53 기",
"bfefrmtrm_amount": "1832488000000",
}
이런 단점을 극복하기 위해 DB 테이블을 설계하는데 많은 고민을 했습니다. 처음에는 각 JSON 파싱을 통해 각 칼럼을 따로 만들어서 switch 문을 사용해 필터링한 후 칼럼에 직접 넣는 방식을 사용해 봤습니다. 필터링하는 코드가 제 눈에는 깔끔해 보이지 않았고 좀 더 효율적인 방법을 고민했습니다.
엔티티를 하나 더 만들어서 JSON 파싱을 통해 모든 데이터를 모아놓은 테이블을 통해 저장하고 그 테이블을 검색하고 쿼리문보단 코드를 통해서 다시 가공하는 방식을 선택했습니다.
4. 예정
지금까지 완성한 부분은 고유코드를 저장하고 해당 코드를 사용해서 재무데이터를 불러오는데 까지 성공했습니다. 그 과정을 조금씩 정리해서 글을 올리고 정리가 된 후 추가적으로 진행 사항을 업데이트할 예정입니다.
- 웹 서비스로 종목분석(재무제표)를 제공하는 서비스 구현 예정.
- 이후 재무지표와 주식정보는 한국투자증권 API를 사용하여 추가 예정.
- Python과 NoSQL을 사용해서 JSON 자체를 다룰 예정.
해당 프로젝트는 장기 프로젝트로 조금씩 완성하고 보완하는 과정을 기록할 예정입니다!!!!