2024.11.11 - [Programming/Project] - [Spring Boot] 모의 투자 사이트 개발기 (1)2024.11.18 - [Programming/Project] - [Spring Boot] 모의 투자 사이트 개발기 (2) 1. 개요 이전에 가장 먼저 목표로 잡은 것이 클라이언트단에서 bybit 가 아닌 서버에서 데이터를 처리할 수 있도록 변경하는 것이다. 그리고 WebSocket 의 양방향 통신을 이용해서 주문 접수도 WebSocket 을 사용하고자 한다. 2. 시세 데이터 가공 및 처리Bybit 로부터 WebSocket 으로 시세 데이터 하나만 가져오고 서버 내부적으로 데이터를 가공해 캔들 형태의 실시간 데이터와 과거 데이터를 API 로 제공한다. 2024.11.22 - [Pr..
1. 개요모의 투자 사이트를 개발하면서 토스 증권을 참고해보았을 때 실제 주문도 STOMP 를 통해서 진행되는 것을 확인할 수 있었다. WebSocket 이라는 것 자체가 양방향 통신이 가능한 프로토콜이기에 이미 연결되어있는 웹소켓을 사용하지 않을 이유가 없다. 모의 투자 사이트에서는 HTTP API 에 대해서 JWT 토큰을 사용해 사용자를 인증하고 있기에 STOMP 에서도 JWT 를 사용하고자 한다. 2. JWT 헤더 파싱const headers = { Authorization: `Bearer ${JWT_TOKEN}`,};try { const message = JSON.parse(messageJson); // JSON으로 변환 stompClient.send(destinationPath, he..
1. 개요모의 투자 서비스를 개발하면서 시세 데이터만 1초에 4~5개가 들어오곤 한다. 결국 프론트엔드의 모든 API 엔드포인트를 로컬 서버로 옮겨오기 위해서는 실시간 데이터를 가공해서 분봉 데이터 형태로 나타낼 수 있어야한다. 목표는 두 가지이다. 웹소켓을 사용해서 실시간 캔들 데이터를 제공하는 것과 HTTP API 로 과거 캔들 데이터를 조회할 수 있는 것이다. 실시간 데이터를 위해서는 당연히 웹소켓 을 사용하고 있으며 토스 증권을 참고하고 있기에 STOMP 프로토콜을 추가적으로 사용하겠다. 클라이언트에게 시세 데이터를 뿌려주기 위해서는 pub/sub 에서도 broadcast 가 필요하며 성능적으로 우수한 Redis 의 pub/sub 구조를 사용하고 있다. 이 역시 실제 토스 증권의 시세 ..
1. 개요현재 개발 중인 것은 모의 주식 사이트로 매수, 매도 주문이 발생한다. 당연히 이러한 주문은 동시성 제어가 되어야하며 여러 방법들을 사용해보면서 성능과 함께 비교해보겠다. /** * 주문 생성 - 시장가 주문 */ @Override @Transactional public synchronized BuyOrderDto createMarketOrder(BuyOrderRequest buyOrderRequest){ // 현재 주문 금액 조회 BigDecimal currentPrice = stockInfoHolder.getCurrentPrice(buyOrderRequest.getSymbol()); // 계좌 조회 및 금액 차감 ..
모의 투자 사이트를 개발한 지 2주가 채 안되었다. 솔직히 더 매진해야하지만 IT 동아리도 참여하게 되었고 여러 사정으로 인해 이번 주말에 살짝 정체되었다. 그러한 김에 지금까지 개발된 내용과 함께 두 번째 개발기를 작성해보고자 한다.1. 지난 이야기지난 글에서는 다른 투자 사이트들에서 WS 을 통해 실제 어떻게 데이터를 주고받는 지 비교해보았고, 프론트엔드와 백엔드 관점에서 어떤 부분을 개발해야할 지 생각해봤다. 그 결과로 2주간을 정리하자면 다음과 같다.Cursor AI 는 신이다.역시 지금까지 개인 프로젝트를 못한다는 말은 핑계다.이 프로젝트에서 어떤 고민을 담을 수 있을까프론트엔드의 전체를 Cursor 를 통해서 진행하고 있다. 완벽하지는 않지만 프롬프트만을 이용해서 내가 원하는 화면을 그려내고 ..
개요https://toss.im/career/next-developer-2024 2024 토스 NEXT 개발자 챌린지토스가 만들고 싶은 새로운 내일에 함께하세요.toss.im 토스 개발자 챌린지에서 좋은 기회로 면접까지 볼 수 있었다. 면접 결과는 불합격이었지만 너무 좋은 면접 경험을 가지고 있어서 꼭 토스에 한 번 입사해보고자하는 마음이 들었다. 이후 좋은 기회로 8년차 개발자분과 커피챗을 가질 수 있었고 아주 깊은 감명을 받았다. 아주 간단한 결론으로는 토스에 가고 싶으면 현재 토스에서 하는 일을 할 줄 알면 된다는 것이다. 이러한 결론을 토대로 토스 증권과 업비트를 참고한 모의 투자 사이트를 개발해보고자 한다. 시작하기백엔드 개발자를 희망하면서 포트폴리오를 어떻게 짜야할 지 많은 고민이 있었다...
개요요즘 모의 코인 거래 사이트를 만들어보고 있다. 모의 서비스이긴 하지만 금융 거래를 테마로 하고 있기 때문에 무엇보다 데이터 정합성과 확실한 트랜잭션 처리가 중요하다고 생각하고 있다. 모의 주식 사이트를 만들고자 하였지만 24시간 실시간 데이터를 제공받기에 코인이 더 용이하여 타겟을 바꾸게 되었고 이로 인해 소수점 거래가 발생하였다. 알다시피 주식은 일반적으로 정수개의 주식만 거래가 가능하다. 요즘에서야 소수점 거래도 증권사에서 제공하긴 하지만 기본적으로는 1주가 주식의 기본 단위이다. 하지만 코인 거래에서는 1BTC 가 오늘 기준 1억을 호가하며 단위로 사용하기에는 너무 커져버렸다. 그래서 0.00001 BTC 거래처럼 소수점이 많은 것을 흔히 봤을 것이다. 이러한 소수점 가격, 소수점 수량 등을 ..
N명 추첨개발하는 과정에서 이벤트 참가자들 중 당첨자를 추첨해야하는 상황이 발생했다. 추첨이라는 메서드는 이벤트 당 1 번만 발생하는 메서드이다. 처음에는 성능을 생각하지 않고 작성하였지만 이벤트 참여자가 1만명 이상이라면 거의 full table scan 을 통해서 1만 이상의 데이터를 가져와 계산하게 된다. 하지만 메모리 상에서 1만 이상의 데이터의 가중치를 계산하는 과정은 매우 위험하다고 생각한다.실제 Event_user 테이블 기준 Data TypeNumber of FieldsBIGINT3INT3DOUBLE4BIT(1)2DATETIME(6)2JSON1VARCHAR(255)2 대략 1 객체당 700 바이트 크기이다. 대략 150만개의 객체가 1GB 용량을 차지한다. 결국 이벤트 참가자가 많아질 수록..