티스토리 뷰
통계 스케쥴러 구현
- 내가 아낀 이력 월별 통계 구현
Scheduler 선정 이유
일정 시간에 정해진 일을 수행하는 데는 batch, quartz, scheduler가 있다.
- batch: 여러 job을 순차적으로 처리. 보다 규모가 큰 경우 사용
- quartz, scheduler: 특정 job을 특정 시간에 처리. 단, quartz는 클러스트링 등 세부적인 조작이 가능하지만 구현이 복잡하다.
단순히 통계만을 위한 작업이므로, scheduler를 사용하기로 했다.
* scheduler는 스프링부트 스타터에 기본적으로 포함되어 있어 새로 주입할 필요가 없다.
고려해야할 것
* 서버 시간과 로컬 시간이 다를 수 있음
* cron 표현 방식
* 사람이 없는 시간대에 작동시켜야 함(ex. 새벽 5시)
* queryDSL 사용
* 프론트에서 요청하는 api, 정해진 시간에 맞춰 저장시킬 api 두 개가 필요하다.
고민
* 통계테이블에 userid를 연관관계를 맺어야 한다?
- yes: user별 데이터를 객체로 다루기 쉽다.
- no: 양방향 매핑을 한다면, 불필요한 데이터까지 꺼내와야 한다. 단방향 매핑을 한다면 되지만, 역시 userid 외 불필요한 데이터를 가져오게 된다. 번거롭더라도 where 절을 통해 구현하는 게 맞을 거라는 생각
* db에서 갖고 와서 sum/count를 계산할 것인가? 아니면 아예 갖고 와서 계산할 것인가?
queryDSL
- 문자가 아닌 코드로 쿼리를 작성함으로써, 컴파일 시점에 문법 오류를 쉽게 확인할 수 있다.
- 자동 완성 등 IDE의 도움을 받을 수 있다.
- 동적인 쿼리 작성이 편리하다.
- 쿼리 작성 시 제약 조건 등을 메서드 추출을 통해 재사용할 수 있다.
속성 종류
- cron : cron표현식을 지원한다. "초 분 시 일 월 요일 (년)"으로 표현한다. cron표현식에 쓸 수 있는 것들(특수문자 활용 포함)이 많은데 해당 내용이 핵심이 아니므로 다른 블로그에서 확인해보기를 바란다.
- fixedDelay : milliseconds 단위로, 이전 작업이 끝난 시점으로 부터 고정된 시간을 설정한다. ex) fixedDelay = 5000
- fixedDelayString : fixedDelay와 같은데 property의 value만 문자열로 넣는 것이다. ex) fixedDelay = "5000"
- fixedRate : milliseconds 단위로, 이전 작업이 수행되기 시작한 시점으로 부터 고정된 시간을 설정한다. ex) fixedRate = 3000
- fixedRateString : fixedDelay와 같은데 property의 value만 문자열로 넣는 것이다. ex) fixedRate = "3000"
- initialDelay : 스케줄러에서 메서드가 등록되자마자 수행하는 것이 아닌 초기 지연시간을 설정하는 것이다.
- initialDelayString : 위와 마찬가지로 문자열로 값을 표현하겠다는 의미다.
- zone : cron표현식을 사용했을 때 사용할 time zone으로 따로 설정하지 않으면 기본적으로 서버의 time zone이다.
'TIL' 카테고리의 다른 글
| [오늘 한 것 & 배운 것] (0) | 2022.08.26 |
|---|---|
| [스프링 핵심 기본 원리] SOLID 원칙 (0) | 2022.08.10 |
| 목표 (0) | 2022.06.23 |
| 클론 프로젝트 (0) | 2022.06.23 |
| [WIL] 6주차 회고 - 첫 미니 프로젝트 (0) | 2022.06.20 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- ManyToOne
- 서버환경
- MVC
- clean-up policy
- ManyToMany
- toCharArray
- 임포트
- 자바의정석
- jinja2
- 제어자
- overfatching
- 항해99
- 배열
- AfterEach
- ResetController
- Java
- 몽고db
- 고민
- ORM
- 패키지
- DI
- GIT
- 단항연산자
- IOC
- bean
- AssertJ
- 스프링부트
- 상속
- controller
- OneToMany
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
글 보관함
