인프런 커뮤니티 질문&답변

khmin3011님의 프로필 이미지

작성한 질문수

Practical Testing: 실용적인 테스트 가이드

완벽하게 제어하기

섹션 7에서 완벽하게 제어하기 파트에서 질문이 있습니다!

23.05.19 10:08 작성

·

312

0

  • 학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!

  • 먼저 유사한 질문이 있었는지 검색해 보세요.

  • 서로 예의를 지키며 존중하는 문화를 만들어가요.

    LocalDateTime. now(), 즉 현재 시간과 관련된 기능의 사용을 지양하자라고 말씀해주셨습니다!

    이 뜻이 현재시간과 관련된 요구사항이 넘어왔을 때 해당 요구사항을 현재시간과 관련 없이 다른 방법으로 풀어보자 라는 의미일까요?

    아니면 다른 기술적인 방법을 말씀하시는 걸까요~? 기술적인 방법이 있는 것이라면 어떤 방법이 있을지 궁금합니다!

답변 2

3

박우빈님의 프로필 이미지
박우빈
지식공유자

2023. 05. 21. 09:47

안녕하세요, khmin3011님! :)

기술적인 방법을 의미하는 것은 아니었고, 강의 초반부부터 말씀드렸던 내용과 동일한 기조인데요!
현재 시간과 같이 내가 제어할 수 없는 값들은 (가능하다면) 메서드 파라미터로 분리하여 외부로부터 주입하도록 하고, 테스트 시에는 제어할 수 있는 시간값을 주입하여 테스트하자라는 맥락이었습니다.
제어할 수 없는 값을 분리하여 상위 계층으로 올리고, 그에 따라 하위 계층을 테스트에 유연한 구조로 만들자는 의미입니다.

다만, 이 제어할 수 없는 값을 분리하여 상위 계층으로 올리는 설계가, 무조건 최상단 계층까지 올려야 한다는 의미는 아니고요.
어느 계층까지 분리하여도 비즈니스 로직의 맥락이 깨지지 않는지, 어느 수준까지 테스트 가능하도록 만들 것인지 고민이 필요합니다.
(저는 보통 자연스러운 맥락 안에서는, Controller에서 현재 시간값을 생성하여 Service에 넘겨주도록 하거나, 가능하다면 아예 외부에서 요청이 들어올 때 시간값을 받도록 고민하며 설계하고 있습니다.)

도움이 되셨기를 바랍니다.
감사합니다. :)

khmin3011님의 프로필 이미지
khmin3011
질문자

2023. 05. 22. 15:56

넵! 이해했습니다!

답변 감사합니다!

0

인프런 AI 인턴님의 프로필 이미지

2023. 05. 20. 10:10

안녕하세요, 인프런 AI 인턴이에요.

섹션 7에서 완벽하게 제어하기 파트를 공부하면서 생긴 궁금증에 대해 질문해주셨군요!
“LocalDateTime.now()의 사용을 지양하자”는 내용은 현재 시간과 관련된 요구사항이 있을 경우, 해당 요구사항을 다른 방법으로 해결하도록 권장하는 것이에요.
그러나 다른 기술적인 방법이 없는 것은 아니며, 대신에 시스템 시간을 가져오는 다른 API나 라이브러리를 사용하면 됩니다. 예를 들면, 대부분의 서버에서는 NTP(Network Time Protocol) 프로토콜을 통해 시간을 동기화합니다. 이를 이용하여 서버에서 정확한 시간을 가져오는 방법이 있습니다.
따라서, 현재 시간과 관련된 요구사항이 있는 경우에도 LocalDateTime.now()를 사용하기 보다는, 다른 방법을 고려하는 것이 좋습니다.

도움이 되셨길 바랍니다. 감사합니다.