🍎 개발에 있어 시간 값을 정확하게 다루는 것은 아무리 강조해도 지나치지 않습니다.
- 한 예로 시간 값을 정확하게 관리하지 않으면 데이터의 일관성을 유지하기 어려워질 수 있고 이는 예상치 못한 상황을 발생시키거나 시스템의 신뢰성을 저하시킬 수 있습니다.
🍎 상황
- 포춘 쿠키 이벤트 요구 사항을 해결하는 중 "하루 한 번의 포춘 쿠키 메시지만 얻을 수 있다"는 세부 요구사항을 해결하기 위해 Application Layer에서 Instant.now()를 사용해 시간값을 발행해 사용
💭 생각하게 된 이유
- 위와 같이 Application Layer에서 시간값을 발행한 이유는 아래 두 이유 존재
- 시간값을 외부에서 주입해 사용함으로 시간값이 포함된 로직 테스트 가능하다고 판단
- 23:59:59에 발생한 API가 DB에 저장될 때, 최대한 가까이 시간 값을 찍어 Edge Case를 없애기 위함
🍏 결과
- 결론부터 이야기하자면 영속계층(RDB)에서 시간 값을 발행해 사용하기로 판단
📝 생각이 바뀐 이유로 1번 2번 내용에 답을 하자면
- (1) 번에 대한 생각 변경 이유는 “외부에서 주입하지 않으면 테스트할 수 없다고 생각”한 부분은 Mocking을 통해 해결할 수 있었고 또한 DB에 저장된 포춘쿠키의 시간값(DB에서 발행)을 통해 충분히 테스트를 할 수 있었음.
- (2) 번에 대한 생각 변경 이유는 “Time Critical한 요구사항인가”를 따져봤습니다. 포춘쿠키 이벤트는 시간이 정밀하게 요구되는 개발 부분이 아니라고 판단
🍏 영속계층에서 시간값을 발행해 얻을 수 있는 장점
- 시간값 발행 주체를 DB로 집중함으로 관리의 지점을 줄일 수 있고 이를 통해 리소스를 감소할 수 있음.
- 시간을 달리해 서버 레벨에서 시간값을 발행해 사용한다면 개발자가 특정 시간 관리 지점을 파악하고 있어야하기 때문에 리소스가 많이 소모됩니다.
'Dev' 카테고리의 다른 글
Spring @Value를 통해 환경 변수를 주입받을 때 주의할 점 (0) | 2024.09.16 |
---|---|
DB CRUD 작업의 비용 분석 (1) | 2024.09.15 |
[설계] 순서 결정의 책임을 결정하는 방법 (0) | 2024.09.03 |
[설계] 설계 시 우선되어야 할 계층 구조에 대하여 (0) | 2024.09.03 |
[Kotlin] reified, inline 그리고 Generic (1) | 2024.09.03 |