개요모의 주식 거래 사이트를 개발하면서 WebSocket 으로 실시간 가격을 받아오고 있다. 이때 시장가 주문이 들어온다면 해당 실시간 가격으로 거래를 처리해야하기에 실시간 데이터를 기록하고 불러오는 기능이 필요했다.@Component public class PriceHolder { private BigDecimal currentPrice = BigDecimal.ZERO; public void updatePrice(BigDecimal price) { currentPrice = price; } public BigDecimal getCurrentPrice() { return currentPrice; } }그래서 PriceHolder 라는 객체를 생성하고 여기에서 매번 ws 응답마다 가격을 저장하고, 주문 처..
Programming
2024.10.26 - [Programming/Spring] - [Spring Boot] WebSocket, Kafka 채팅 서버 구현 (1)2024.11.04 - [Programming/Spring] - [Spring Boot] WebSocket, Kafka 채팅 서버 구현 (2)채팅 서버를 만들고 이를 활용하기 위해서 낸 아이디어가 크롬 확장자이다. 단순하게 각 URL 별로 확장자를 통해 익명 채팅할 수 있다면 어떤 웹사이트에서도 채팅 기능이 구현되어있는 것처럼 `확장자` 스럽게 사용할 수 있을 것 같았다. 그래서 이번 포스팅에서는 크롬 확장자를 구성해 보겠다. https://support.google.com/chrome/a/answer/2714278?hl=ko 맞춤 Chrome 앱 및 확장 프로그..
2024.10.26 - [Programming/Spring] - [Spring Boot] WebSocket, Kafka 채팅 서버 구현 (1) 이제 Kafka 를 사용해서 채팅 서버를 구현해보고자 한다. 추가 환경 설정 하지만 이전에 해당 글을 통해 Kafka 서버 실행을 Docker-compose 를 통해 한 번에 실행하며, 추가적으로 Kafka-UI 까지 사용할 수 있었다.2024.10.31 - [Programming/Coding] - Docker 를 통한 일관된 개발 환경 배포 방법version: '3'services: zookeeper: image: confluentinc/cp-zookeeper:latest container_name: zookeeper environment: ..
컨트롤러에서 여러 개의 쿼리 파라미터의 입력을 받는 상황이 있었다.@GetMapping("/params") public String getParams( @RequestParam String param1, @RequestParam int param2, @RequestParam(required = false) String optionalParam) { return "param1: " + param1 + ", param2: " + param2 + ", optionalParam: " + optionalParam; }모든 요소를 하나 씩 나열하는 게 당연히 어려움이 있었고 아래와 같이 바꿔줄 수 있다.@Getterpublic cla..
https://www.wanted.co.kr/events/pre_challenge_be_25 OOP와 SOLID를 이용한 클론코딩 | 프리온보딩 BE 챌린지 11월 | 원티드백엔드 지식을 총동원해 통합 결제 모듈을 클론 코딩해보는 강의입니다. OOP와 SOLID 이론을 설계와 구현에 적용하며, 이론을 실제 코드에 녹여내는 방법을 배웁니다. 또한, 원티드 JD 공고를 기반www.wanted.co.kr 원티드에서 진행하는 25차 프리온보딩 챌린지의 주제가 좋아보여 참가하였다. 사전 과제도 주어졌는데, 이를 배포하는 방식이 인상적이라 기록해두고자 한다.1. docker-compose.yml우선 해당 프로젝트에서는 데이터베이스를 필요로 한다. 데이터베이스를 어느 환경에서나 동일하게 실행할 수 있는 방법이 컨테이..
사이드 프로젝트로 채팅 서버를 만들어보고 있다. 해당 서버는 STOMP 프로토콜을 사용해서 구현하고자 했는데, 이전에 쓰던 웹 앱이 안들어가지면서 STOMP 프로토콜을 테스트하기가 어려워서 직접 만들고자 하였다. 1. apic 이전 게시글을 보면 apic 라는 웹 사이트를 사용했었다. 하지만 현재(2024-10-27)는 접속이 안되어서 사용할 수가 없었다. 2. POSTMAN POSTMAN 에도 웹소켓 프로토콜을 테스트해볼 수 있다. STOMP 역시 웹소켓을 기반으로 하기 때문에 양식만 맞춰 작성한다면 테스트할 수 있다. 문제는 STOMP 프로토콜의 마지막에는 null octet 이 들어가야한다.하지만 아스키코드로 입력해보고, `^@` 를 사용해보고, 실제 `\0` 을 출력하고 그걸 복사해서 집어넣..
Kafka 를 사용한 채팅 서버를 구축해보고자 한다.Kafka 를 통해서 Pub/Sub 메세지를 소화하고, 클라이언트와 서버와의 연결은 WebSocket 을 사용할 예정이다. 메세지의 기록이 필요하다면 MongoDB 를 사용해서 저장한다.1. 환경설정 우선 Kafka 설치가 필요하다. https://kafka.apache.orgKafka 는 기본적으로 브로커, 프로듀서, 컨슈머로 구성되어있다. 토픽과 파티션처럼 데이터를 토픽별 관리하고 분산 저장되는 서비스이다. 또한 Kafka 클러스터는 각 파티션에 대해 Leader 와 Follower 를 유지한다.이러한 분산 서비스에서는 노드들을 관리하기 위해 Zookeeper 가 필수적이다. Kafka 2.8.0 이후로는 Zookeeper 없이도 Kafka 클러스..
2024.09.01 - [Programming/Spring] - [Spring Boot] 트래픽 우회, 대기열 서비스 구현 [Spring Boot] 트래픽 우회, 대기열 서비스 구현개발 방향성현재 t3.small 인스턴스를 사용하여 서버를 배포하고 있다. 현 서비스는 이벤트 서비스로 선착순 당첨 이벤트가 포함되어있다. 또한 사용하는 EC2 는 외부적인 요인으로 t3.small 을 사용happyzodiac.tistory.com 이전에 대기열 서비스에 대한 글을 발행했었다. 마지막 개선점을 다시 한번 확인해보면 G 마켓에서는 폴링 방식을 사용하고 있어 그대로 사용하였지만 기본적으로 실시간성 데이터에 허점이 존재하며, 서버의 부담도 크다는 것을 깨달았다. 실시간성 데이터의 허점이라하면 A 라는 사용자는 0..