TDD ‐ Driving Input Code with Output Tests - thought-corner/backend-roadmap GitHub Wiki
범위 클레임
- Spring Security가
OAuth2AuthorizationManagers.hasScope 정적 메서드를 사용해서 특정 조건에 해당하는 요청에 접근할 수 있는 범위를 지정할 수 있다.
- JWT 페이로드에 "scope" 클레임을 추가할 수 있다.
시간 확인
- 시간의 경우 정확히 같은 값(
isEqualTo)으로 비교하지 않는다.
- 왜냐하면 등록 시간은 서버가 요청을 처리하는 순간
LocalDateTime.now(UTC)로 생성된다. 테스트는 그 정확한 나노초를 알 수 없다.
isEqualTo로 비교하면 밀리초/나노초 차이로 항상 실패하거나 운 좋게 맞아도 극도로 불안정하다.
- 기준 시각(Reference Time) 패턴
- 그래서 등록을 트리거하기 직전에 기준 시각을 찍어두고 "실제 기록된 시간이 이 기준에서 얼마 벗어나지 않았는가"를 검증한다.
- 순서상
referenceTime ≤ 서버 기록 시간이 되고, 그 사이 간격은 네트워크 왕복 + 서버 처리 시간뿐이다.
isCloseTo(refernceTime, within(1, SECONDS))
- 1초는 양방향 허용치
- 1초라는 폭은 절묘한 균형점
- UTC를 양쪽에서 맞춰야만 하는 이유
- 테스트와 서버 둘 다
LocalDateTime.now(UTC)를 쓴다. LocalDateTime은 타임존 정보가 없는 값이라 한쪽이 KST고 다른 쪽이 UTC면 9시간 차이가 발생한다.
- 그래서 UTC 기준으로 통일해 비교 기준 프레임을 일치시키는 것이 중요하다.