13. 실시간 경매 시스템 만들기

13.1. 프로젝트 구조 갖추기

MySQL 사용
 
User ↔ Good ↔ Auction 3개의 테이블로 구성
 

13.2. 서버센트 이벤트 사용하기

같은 시간이 모든 클라이언트에 표기되어야하니 모두에게 서버 시간을 일괄 전송하기 위해 SSE 사용
npm install sse socket.io
 
const SSE = require('sse'); module.exports = sever => { const sse = new SSE(server); sse.on('connection', client => { setInterval(() => { client.send(Date.now().toString()); }, 1000); }); };
 
socketIO 연결은 roomID기준으로 연결 구현.
 
EventSource는 되지 않는 브라우저가 있어서 pollyfill 넣어줘야함.
브라우저에서 연결하면 네트워크탭에서 볼 수 있음. EventStream에 기록.
 

13.3. 스케줄링 구현하기

낙찰자는 경매 시작 후 24시간 뒤에 정해지니 24시간 뒤에 낙찰자 정하도록 스케줄링을 해야한다.
 
node-schedule 패키지 통해 가능.
노드가 종료되면 스케줄 예약도 같이 종료가 된다.
프로젝트가 시작될때 체크하고 24시간 지난것을 확인하고 낙찰처리하여 해결.
 
트랜잭션 적용
여러 테이블 값을 수정한다면 A 수정 → B 수정하는데 B 수정에서 오류 발생하면 A 수정한것도 되돌려야하기 때문에 transaction 생각해야함.