-
Notifications
You must be signed in to change notification settings - Fork 3
요구사항 Guide
현재 server는 다음과 같은 문제를 겪고 있습니다.
- DB에서 실시간으로 보낼 데이터 View API가 존재하지 않음.
- 알람 기능 미구현.
- 데이터 분석에 필요한 다양한 API의 부재.
- Postgres 실행 계획을 통한 쿼리 최적화.
저는 다음과 같이 해결하기를 부탁합니다.
-
SSE (Server Sent Event) 로 알람과 실시간 View API 작성 -> SSE는 ServerSentEventManager란 interface로 추상화 해놨습니다. SseEmitter를 저장하는 자료구조는 CopyOnWriteArrayList 를 활용하시는 것을 권장합니다.
-
실시간으로 할지, 3분마다 데이터를 보낼지, 5분 등등 데이터 딜레이 버튼이 필요합니다.
-
동적으로 스케쥴링 할 수 있어야합니다.
-
SSE는 여러 브라우저에서 구독을 진행할 경우 동시성 이슈가 벌어질 수 있습니다. COW (CopyOnWrite)는 동시성을 보장함으로써 쓰기 성능은 아쉽지만 읽기는 Lock free하여 높은 성능을 보여줍니다. 우리가 많은 브라우저에 데이터를 던지려면 SseEmitter들을 읽어서 send 해야합니다. 높은 성능을 보여주려면 CopyOnWriteArrayList 가 적절하다고 판단됩니다.
public interface ServerSentEventManager {
SseEmitter register(SseEmitter sseEmitter);
<T> void send(T data);
<T> void send(List<T> data);
<T> void asyncSend(T data);
<T> void asyncSend(List<T> data);
int size();
}
// interface
-
알람 기능은 예를 들어 cpu의 임계치가 80% 이상일 경우 브라우저에 알람을 발송합니다. 이 바운더리를 적절하게 설정해주시고 디폴트 값을 회의를 통해 진행한 후 설정하고 이 임계치는 유저가 설정할 수 있어야합니다!.
-
알람도 ServerSentEventManager로 추상화 해놨으니 확인하시면 됩니다.
-
그리고 WebHook을 이용하여 사용자에게도 알람이 가야합니다. 알람은 Slack, Discord 등등 에게 알람이 전파되어야합니다. 추상화 꼭 해주세요! -> core 패키지에 부탁합니다 ㅎ.ㅎ
-
데이터 분석에 필요한 다양한 API는 현재 생각은 하고 있는데 예를 들어 최근 3년동안 cpu의 최고 사용률은 얼마이고, heap은 얼마이며, thread max count는 얼마인가? 를 보여주고 싶습니다. 이 부분은 실시간이 아니여야 됩니다.
-
이 부분은 아이디어가 더 필요하므로 맡게 되신 분은 자유롭게 의견 제시해 주시면 감사하겠습니다.!!
-
core/service/MetricService 에서 작업해주시면 됩니다.
-
TimescaleDB의 최적화 하는 Docs를 확인해주시길 바랍니다.
-
이 요구사항은 다같이 최적화 하는 방향으로 가보길..
-
👍 그리고 패키지 변경사항이나 건의하실 분은 언제든 말씀해주세요 (리팩토링은 환영입니다.)
-
👍 웬만하면 표준 예외를 사용해주세요.! IlligalArgumentException, IlligalStateException etc...
-
테스트는 AbtractTestConfiguration을 상속받아서 진행해주세요.
-
테스트 메서드는 한글로 작성해주세요.
-
추상적인 테스트 명이 아닌 구체적인 테스트 명을 기입해주세요.
- ex) API_테스트를진행한다. (X)
- ex) 회원_가입_아이디_비밀번호를_잘못_입력하면_예외가_발생한다_400 (O)
-
감이 잡히지 않으신다면, 다른 테스트를 참고하시면 됩니다.
-
Rest Docs를 활용할 예정이니 학습해두세용.
-
이게 개발 서버를 띄우기 애매한 상태라 Rest Docs를 활용하여 프론트 분에게 직접 주려고 합니다.
-
Spring Boot 3.4 버전부터 MockMvc가 쓰기 좋게 변경되었습니다.
-
테스트 컨테이너는 안 쓸 것 같습니다. TimescaleDB를 지원하는지 모르겠네요.
-
API를 작성하실 때 프론트 분과 상의하셔서 풀어가시고, 회의에서 웬만하면 다 풀어갈 것 같긴 한데 개인적인 이유가 있으시면 적극적으로 의견을 나누시길 바랍니다.
-
API 예외사항은 spring framework 6.x 버전부터 ErrorResponse 라는 인터페이스가 있습니다. 이건 예외 사항을 표준으로 만든 인터페이스입니다. 자세한건 RFC 9457을 참조해주세요.
-
spring docs: https://docs.spring.io/spring-framework/reference/web/webmvc/mvc-ann-rest-exceptions.html
-
rfc-editor.org: https://www.rfc-editor.org/rfc/rfc9457.html
-
ResponseEntity는 HTTP 헤더 조작이나 별다른 조작이 없는 경우 그냥 DTO로 리턴값을 설정해주세요. 성공 리스폰은 @ResponseStatus로 설정해주세요.
-
보안에 대해서 질문하실 것 같아서 미리 남겨둡니다. 보안은 딱히 필요가 없다고 생각하고 사용자가 해결해야할 일이라고 생각합니다. 다른 APM도 별다른 보안 설정을 하지 않는 것 같습니다.
-
OAuth 인증, 인가
해당 소스에 기여하시면 author를 남겨주세요. 버전명과 같이.. 맨 상단에 라이센스를 기록해주세요. 복붙하시면 됩니다 ㅎ
The MIT License
Copyright (c) 2024 traffic-hunter.org
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.