본문 바로가기
회고/나

사이드 프로젝트 - 국내 주식 배당금 계산기

by 나이아카 2026. 5. 4.
반응형

주식 투자를 참 좋아합니다. 투자 시드 머니를 모으느라 주식 투자를 제가 가진 현금의 절반 이상 투입하게 된 건 얼마 되지 않았는데요. 사람이 천성이 겁이 많아 하이 리스크 하이리턴을 잘 못견딥니다. 그래서 나스닥도 국내 주식도 물리더라도 현금이 조금이나마 나오는 배당금을 주는 주식 위주로 포트폴리오를 구성했는데요. 어떻게 구성해야 배당금이 적당히 기분 좋을 정도로 나오면서 주가 상승도 기대해볼만한 주식들로 구성할 수 있을까 고민했습니다. 근데 미국 주식은 단일 종목으로 배당금 계산이 쉬운데(여러 종목을 한 번에 계산해서 배당보는 사이트는 없더라구요) 국내 주식은 배당금 계산을 종목 검색조차 잘 안보이더라구요. 그래서 이번 사이드 프로젝트는 이걸 해봐야 겠다! 싶어서 진행하게 된 게, 국내 주식을 타깃으로 한 배당금 계산기입니다.

https://dividend-calc.xyz/

 

국내 주식 배당금 계산기

1년 예상 배당금 0원 계산 가능 0개 투자 금액 0원 종목 0개 1년 기준 예상 배당률 0.00% 배당금 / 투자금액 기준 3년 기준 예상 배당률 0.00% 3년 평균 예상 배당금 0원

dividend-calc.xyz

 


 일단 디자인이 볼품없습니다.(개발자다 보니 UI를 구성하는데 재능이 없어요) 근데 계산기에 UI 이쁜게 뭐가 중요하겠습니까! 그런 생각으로 기능만 열심히 꾸며봤습니다.

 페이지를 구성하기 위해 외부에서 가져온 API를 설명하자면, 금융감독원 전자공시 Open DART와 공공데이터포털 KRX 상장종목정보 API, 한국투자증권 Open API를 사용했습니다. 금감원 전자공시 Open DART API의 경우 배당금 공시 여부 데이터를 가져와서 가공 후 사용자들에게 배당금 계산을 도와주기 위한 핵심 API입니다. 공공데이터포털 KRX 상장종목정보는 현재 코스피 코스닥에 상장되어 있는 주식회사의 목록을 가져오기 위함입니다. 마지막으로 한투 Open API는 실시간 가격 정보를 노출하기 위해 사용합니다. 그래서 간단한 페이지에 비해 서버에서 작업하는 내용은 꽤 많아졌습니다.

 작업은 SpringBoot + Kotlin으로 진행했습니다. 아키텍처는 아주 소규모 프로젝트라 딱히 제대로 되진 않았지만, 나름 헥사고날 아키텍처를 적용해볼까 해서 AI의 도움을 받아 적용해보았습니다. 페이지도 따로 repo를 분리해볼까 생각했지만, 한페이지만을 위한 프로젝트는 의미 없는 것 같아 서버에 그대로 붙여두었습니다. 아마 나중에 여러 기능들을 추가하게 된다면 그때는 분리를 고려해보지 않을까 싶습니다. 지금은 스프링부트의 API 전송이나 기본적인 기능 구조를 확인해보고자 하는 게 커서 더 큰 공수를 만들진 않았습니다.

 

 왼쪽에는 국내 주식 상장 회사를 검색하는 부분입니다. 여기서 공공데이터 포털 KRX 상장종목정보 API를 사용했는데, 실제로 사용자가 검색할 때 마다 매 번 API를 호출하는 건 아니고, 서버 DB에 미리 상장종목정보를 저장해두고 거기에서 호출하는 형태입니다. 상장회사의 경우 그 종목이 매일 상장되고 폐지되는게 아니기 때문에 실시간으로 지속될 필요가 없습니다. 그래서 DB에 두고 사용해도 충분합니다. 대신 매달 1일에 배치를 통해 데이터를 당겨오는 식인데, 이러면 2일부터 31일까지 상장되는 주식의 데이터를 가져올 수 없지만, 어차피 상장한 지 1년 미만의 주식회사는 예상배당금을 계산할 수 없으므로 이 사이트의 특성상 크게 중요한 부분은 아니라서 한달에 한 번 데이터를 업데이트 하는 정책을 사용했습니다.

 

 오른쪽에는 크게 2가지 패널로 나눠뒀는데요. 하나는 상단에 있는 total 관련 패널이고, 하나는 각 종목 별 패널입니다. 왼쪽에서 검색한 회사를 선택하면 오른쪽 하단에 리스트 형태로 구성됩니다. 실시간 가격의 경우 한투 API가 데이터를 안주는 경우가 많아서 노출이 안될 수도 있습니다. 아마 API가 열려있어서 불필요하게 자주 호출하는 경우를 막고자 하는 것 같은데, 저의 경우 여러번 검색하는 경우 공격으로 간주하는지 안되는 경우가 많더라구요. 그래서 실시간 정보 노출 실패시 가장 최근에 호출한 가격을 캐싱해서 노출하게 처리 해뒀는데, 차라리 노출이 안되는게 나을 수도 있을 것 같긴 합니다. 실시간 가격 정보도 배당금을 계산하는데 중요한 부분일거라 봐서요. 주당 구매 금액은 수정 가능한 칸으로 뒀습니다. 예상 배당금이 아직 주식을 사기 전일 수도 있지만, 주식을 사는 중에 계산을 하는 사람일 수도 있으니까 말이죠.

 여기 아이템의 예상 배당금의 경우 공시여부 데이터를 사용합니다. 배당 공시의 경우 키 데이터가 복잡해서 배당금으로 예상되는 여러 키들을 다 종합해서 가져온 후, string으로 된 값 중 배당 데이터로 예상되는 문자들을 뽑아서 배당금으로 처리해야 합니다. AI를 통해 여러번 테스트하고 수정해서 진행했는데, AI가 없는 시절이었으면 여기서 접었을 수도 있겠다는 생각이 들었습니다(나약해진 건가). 이 부분의 경우에는 이 프로젝트의 핵심이 되는 부분이기 때문에 공시가 나오는 기간인 장 오픈일에는 매일 한 번 공시를 조회해서 새로 나온 공시를 기준으로 데이터를 측정하고 있습니다. 1년에 한 번만 배당해주는 경우가 대부분이었던 몇 년 전이었다면 연 초 3개월 정도만 매일 돌리고 나머지는 아예 안돌렸을 것 같은데, 지금은 월배당은 없지만 분기배당이나 반기배당이 조금 생겨버려서 그냥 평일 매일로 정책을 정하게 되었습니다.

 

 국내 주식의 경우 왜 배당금을 이렇게 종목별로 선택해서 배당을 해주는 사이트가 없을까 고민을 해봤는데, 이번에 만들면서 가장 문제가 됐던 건 배당 정보가 효율적으로 배치되어 있지 않다는 점인데 이 부분을 고려해서 리소스가 큰 작업을 진행하기에는 국내 주식 중 배당이 제대로 이루어지는 회사가 크게 많지 않다는 것이 문제가 되지 않았을까 생각합니다. 또한 국내 주식의 경우 예상 배당금을 작년 및 3년 기준으로 측정해둬봐야, 올해 배당을 하지 않는 들쭉날쭉한 문제가 많습니다. 그래서 아마 작년에 줬던 걸 생각해서 올해 배당주식으로 들어갔는데 갑자기 배당을 중지하는(한화생명과 같은) 경우 때문에 나스닥에 비해 계산이 불명확하지 않나 싶습니다.

 

 


 개인적으로 금융 관련 데이터가 상당히 난해하다는 이야기를 주변에서 많이 해줬어서 괜시리 건들지 않고 싶었는데, 이번에는 제 필요에 의해서 만들다보니 거부감을 극복하고 진행하게 되었습니다. 복잡하고 귀찮은 문제들은 AI와의 협력을 통해 꽤 빠르게 넘어간 것도 있습니다.

 이전까지 계속 안드로이드나 플러터로 개발하다가 이번에 그냥 생각이 나서 스프링부트를 다시 만지게 되었는데, 생각보다 재밌다는 생각이 들었습니다. 예전에도 API 만드는 건 굉장히 재밌구나 생각했었는데 어쩌면 서버쪽이 제 성향이 더 맞을지도 모르겠다는 착각을 해 봅니다. 이번 사이드 프로젝트로는 open API 연결 + DB 연결 + 웹페이지 구성으로 아주 간단해서 기초 정도를 조금 배우는 과정이었는데, 시간이 된다면 프로젝트를 좀 더 발전시키거나 아니면 앱과 연동된 서버까지 직접 구축하는 방식으로 진행해야 할 것 같습니다. 시간 들여 사이드 하는 건데 발전이 있어야 하니까요!

댓글