마네키 네코 프로젝트는 종합 투자 어플리케이션 개발 프로젝트로 투자 자동화와 시황 판단을 위한 시각화를 목적으로 개발하고 있습니다.
투자는 포트폴리오 운용전략과 특정 전략을 추종할 수 있도록 설계 했습니다.
투자자는 다양한선택지를 통해 자동으로 포트폴리오를 구축하고, 투자를 운용할 수 있습니다.
애플리케이션은 두개의 서버로 이뤄져잇습니다. 여러 호트스의 api 통신을 통해 데이터를 취득하고, 거래를 담당하는 윈도우서버와 FE를 담당하는 우분투 서버로 이뤄져있습니다.
종합 투자 어플리케이션은 4개의 도메인으로 나눠져있습니다.
FE를 담당하는 우분투 서버에서는 금융 데이터의 시각화를 위한 시황 판단하는 시황 도메인, 이를 통해 투자 전략을 세우고 자동으로 투자를 수행하는 투자 도메인으로 이뤄져있습니다.
윈도우 서버에서는 대신증권, 빗썸, 한국은행, dart의 api를 활용하여 데이터를 취득하는 데이터 도메인과 거래를 수행하는 트레이딩 도메인으로 이뤄져있습니다.
포트폴리오 구축 프로세스는 전략에 따라 두 종류의 포트폴리오를 구축할 수 있습니다.
포트폴리오 전략은 특정 모델을 선택하여 종목을 추출하고, 추출된 종목을 포트폴리오 배분 모델에 따라 비중을 조절해 포트폴리오를 구성합니다.
트레이딩 전략은 계량적 방법론을 적용해 포트폴리오를 등록하고, 금융데이터를 분석하여 조건에 맞는 종목을 유동적으로 매매가 이뤄집니다.
포트폴리오 마다 상이한 매매전략을 구사하고 있기 때문에 전략별 포트폴리오와 포트폴리오에 배정된 종목들을 쿼리하여, 개별 종목들이 전략에 조건에 부합하는지 체크 후 매매가 발생할 수 있도록 설계하였습니다.
리셀 상품에 투자할 수 있 트레이딩 플랫폼을 개발하였습니다. 총 개발 인원은 2명, 개발기간은 1달이 소요되었습니다.
조각 투자를 통해 리셀 투자의 접근성을 낮춰 새로운 투자 기회를 제공하기 위해 개발하였습니다.
서비스 제공자가 현물을 매입하여 청약을 통해 투자자(회원)들에게 지분을 배분하고 투자자는
지분을 플랫폼 내에서 자유롭게 매매 할 수 있습니다. 상품의 약정기간이 만료되면 현물을 청산하여 수익금을 투자자에게 지급하는 것이 리셀 투자 플랫폼의 메인 시나리오입니다.
플랫폼 내 재화는 open banking을 통해 OAuth 인증을 구현, 입출금 프로세스를 설계했습니다.
프로젝트는 프론트엔드, 백엔드로 나눠져 있고 프론트엔드는 vanila js를 사용해 MVC패턴을 구현했습니다.
유저의 상태를 로컬 스토리지에 저장하게 됩니다. fetch를 사용해 서버에 요청을 주고받습니다.
백엔드는 자바, 스프링 프레임 워크를 사용하여 개발하였습니다.
브라우저와 Restful api를 사용하여 통신하게 되며 db는 mysql을 사용하였습니다. 형상 관리는 git깃을 사용하였고,
aws ec2를 사용해 배포하였습니다.
스프링 프레임 워크를 통해 서버를 개발하였습니다. RESTFUL api를 사용하여 브라우저와 통신을 하며, 사용자의 상태는 로컬 스토리지에 저장되도록 하였습니다. 사용자의 요청은 프록시 서버인 nginx를 지나 톰캣으로 전달됩니다. db는 my sql을 사용하였고 jdbc를 사용하여 개발하였으나 mybatis로 전환하는 작업을 하고 있습니다. 도커를 통해 배포환경을 구축하고 젠킨스를 사용하여 배포 자동화를 구현하였습니다.
입출금 프로세스는 오픈뱅킹 API를 사용하여 구현했고, 다음의 프로세스를 따르게 됩니다.
깃허브를 사용해 형상관리를 했습니다. 백엔드, 프론트엔드에서 각각 브랜치를 만들었고, 기능별 개발이 완료 될 시각화에는 완료하면 dev 브랜치와 병합하고 테스트 후 배포하는 전략을 사용하였습니다. jenkins가 main 브랜치에 훅을 걸어 파이프 라인을 구축하였습니다.
실제로 주차장 아르바이트를 하며 개선하면 좋겠다고 생각한 것들을 해결해보고 싶어서 사설 주차장이라는 시나리오를 가지고 웹 애플리케이션을 개발했습니다.
예약 시스템, 대형차와 중·소형차의 주차 공간 분리, 무인 계산기 등의 기능을 구현하여 주차장의 프로세스를 개선하기 위해 노력했습니다.
jsp와 servlet을 사용하여 Model2패턴을 구현하였습니다.
dto와 dao를 사용하지 않았지만, 객체지향 설계를 하기 위해 노력했습니다.
DB에서 쿼리된 내용은 데이터 타입이 String형이기 때문에 때문에 util 통해 데이터 타입을 map 전환하여 서비스 로직을 담당하는 클래스에서 데이터를 처리할 수 있도록 개발하였습니다.
JSP는 화면을 구성하는 view로, client의 요청을 로직 처리 클래스로 연결하는 controller 그리고 서비스 로직 담당 클래스는 model의 패턴을 구현하였습니다.
서블릿, JSP간의 이동은 forward를 사용하였습니다.
본 어플리케이션은 종목과 종목이 포함된 산업 평균과의 재무 비율을 비교하기 위해 R과 샤이니를 사용해 개발했습니다. 코스피와 코스닥에 상장된 모든 종목을 산업별로 분류하였고, 수익성, 안정성, 성장성 3가지 인덱스를 ggplot을 사용하여 손쉽게 비교할 수 있도록 하였습니다.
샤이니는 R을 사용해 interactive web app 제작을 가능케 하는 R 프레임워크로 R을 사용해 UI(html, css)와 서버를 구현할 수 있다는 장점이있습니다.
더 체계적으로 투자 자산을 관리하기 위해 투자 수익률을 작성하기 위해 어플리케이션을 개발하였습니다.
어플리케이션은 현금흐름에 영향을 주는 이벤트를 기록하는 펑션들과 매일 갱신되는 주가 가격을 기록하는 펑션들로 이뤄져 있습니다.
주식별 주가의 변화뿐만 아니라 전체 주식 포트폴리오, AuM의 변화를 csv로 기록하며, ggplot 라이브러리를 사용해 직관적으로
수익률의 변화를 확인할 수 있도록 하였습니다.
Quantitative 메서드를 사용하여 포트폴리오를 구축하고 투자했습니다.
yahoo finance에서 나스닥과 s&p에 상장된 종목들의 주가 및 재무 데이터를 크롤링, 전처리하였습니다.
value, momentum, quality 등의 factor들을 추출하였고 z-score를 사용해서 상위 30종목을 추렸습니다.
최소공분산을 갖도록 포트폴리오 비중을 구성하였고, 추가로 리스크 관리를 위해 채권 ETF를 편입하여 VaR를 낮췄습니다.
   프로그래머로서 저의 지향점은 복잡한 문제를 코드로 풀어나가 편리하고 즐거운 삶을 만들어 가는 것 입니다.
   주 언어로 자바를 사용하고, 다양한 개인 프로젝트를 진행하며 기획, 개발, 배포를 한 경험이 있습니다. 4개월 간 백엔드 개발자로 근무하며 유지보수 업무를 진행 했습니다.
종합 투자 어플리케이션, 마네키 네코의 목표는 자동으로 포트폴리오를 구축, 액티브 매니지먼트, 금융데이터 시각화입니다. 대신증권, dart, bithhum, 한국은행의 api를 활용해 데이터를 취득, 가공, 시각화를 하는 시황 도메인, 원하는 전략을 선택해 자동으로 투자를 진행하는 투자 도메인으로 구성되어 있습니다. 보안과 호환성 문제로 윈도우 서버에서 데이터 취득과 매매가 이뤄지고, 우분투 서버에서 포트폴리오 구축 및 시각화가 이뤄집니다.
리셀이란, 희소한 재화를 매입하여 리셀 프리미엄을 받고 되파는 행위를 의미합니다.
이러한 재화는 미술품, 스니커즈, 사치재 등이 포함되고 고가이기 때문에 대중들에게 접근성이 좋지 못하다는 단점이 있습니다.
이러한 점에 착안하여 리셀 상품의 지분을 사고 팔 수 있는 어플리케이션을 개발 하였습니다.
백엔드 개발을 담당하며 db설계, ipo, 청산, 거래 로직과 오픈뱅킹dmf 사용해 입출금 프로세스를 개발하였습니다.
실제로 주차장 아르바이트를 하며 개선하면 좋겠다고 생각한 것들을 해결해보고 싶어서 사설 주차장이라는 시나리오를 가지고 웹 어플리케이션을 개발했습니다.
예약 시스템, 대형차와 중·소형차의 주차 공간 분리, 무인 계산기 등 프로세스를 개선하기 위해 주차장에 필요한 기능들을 서비스 로직으로 구현하였고,
JSP와 servlet을 사용하여 모델2를 구현하였습니다.
그림을 홍보하고 굿즈를 판매하기 위한 반응형 정적 사이트를 개발하였습니다. 기본적인 CSS와 HTML5를 사용하여 정적인 페이지를 만들었고 깃허브를 통해 배포하였습니다. 굿즈를 판매하기 위해 페이팔 결제 버튼을 사용하였습니다.
샤이니 프레임 워크를 사용하여 산업 평균과 종목 간의 index 비교를 할 수 있는 app을 개발하였습니다.
코스피, 코스닥에 상장된 1900여 개의 종목들의 회계정보를 사용하였고,
fn가이드에서 섹터 정보를 취득하여 회계정보를 섹터별로 취합하였습니다.
샤이니를 통해 서버와 UI를 구성하였고,
ggplot을 사용하여 시각화를 통해 섹터와 개별 종목 간의 재무 비율을 직관적으로 비교할 수 있도록 하였습니다.
더욱 정확하게 투자를 관리하기 위해 수익률 계산기를 개발했습니다. app의 개발 목적은 수익률의 시각화와 시간가중평균 수익률을 산출하는 것이었습니다. 매매, 입출금, 배당금과 같은 현금흐름에 영향을 주는 이벤트를 기록하는 메서드를 개발했고, 포트폴리오에 추가된 종목들의 가격을 매일 갱신하 도록 크롤링을 하였습니다. data는 csv로 기록하였고 시각화에는 ggplot을 사용해 종목별 비중의 변화와 AUM의 변화를 그래프로 나타내었습니다.
Quantitative 방법을 사용하여 포트폴리오를 구축하고 투자했습니다. yahoo finance에서 나스닥과 s&p에 상장된 종목들의 주가 및 재무 데이터를 크롤링, 전처리하였습니다. value, momentum, quality 등의 factor들을 추출하였고 z-score를 사용해서 상위 30종목을 추렸습니다. 최소공분산을 갖도록 포트폴리오 비중을 구성하였고, 추가로 리스크 관리를 위해 채권 ETF를 편입하여 VaR를 낮췄습니다.