99클럽 6일차 TIL: Unix Time (nanoseconds)
2024. 4. 9. 19:17ㆍ개발 공부
728x90
반응형
#1. 오늘의 학습 키워드
자바스프링에서의 unix 시간을 나노초 단위로 구하고 싶을 때:
- 이전글인 Loki 에 로깅 정보를 API POST request 로 보낼 때 로그 라인에 앞 부분은 nanoseconds( 나노초 ) 단위로 찍힌 timestamp이다.
- 이 timestamp 를 보낼 때 자바 스프링에서 제공하는 나노초 단위의 현재 시각을 반환하는 메서드가 있다.
- System.nanoTime()
- 그런데 이로는 loki 에서 400 에러를 리턴하였다.
- 그래서 밀리초 단위의 현재 시각을 반환하는 메서드를 통해 나노초로 변환하여 log를 보냈더니, 오류가 나질 않았다.
- System.currentTimeMillis()
- 이 두 메서드를 통한 값을 디버깅 툴을 사용해 비교해보니 숫자의 자리수가 큰 차이가 없었다.
- 1 밀리초 = 1,000,000 나노초
- 이기에, 원래 의도대로면 백만 자리수 차이가 났어야했다.
- 이 두 메서드는 단순히 단위의 차이 뿐만 아니라, 값자체에서 차이가 있었던 것이다.
- 이 timestamp 를 보낼 때 자바 스프링에서 제공하는 나노초 단위의 현재 시각을 반환하는 메서드가 있다.
- System.nanoTime() 디버깅 상 값
String nanosecond = String.valueOf(System.nanoTime());
- System.currentTimeMillis() 디버깅 상 값
String nanosecond = String.valueOf(System.currentTimeMillis());
- Loki API 호출 시 timeStamp 이슈로 400 에러가 리턴되는 모습
#2. 공부한 내용
- Unix Time
- Unix 시간은 1970년 1월 1일 00:00:00 UTC 부터 현재까지 센 밀리초 단위의 시간이다.
- System.currentTimeMillis()
- unix 시간을 반환한다.
- 즉 1970년 1월 1일 00:00:00 UTC 부터 현재 시각까지 흘러간 밀리초 단위의 시간을 반환한다.
- System.nanoTime()
- 마찬 가지로 현재 시간을 반환하고, 나노초 단위의 시간을 반환한다.
- 그러나 위 메서드랑 시작점이 다르다.
- 해당 메서드는 시간을 세는 시작점이 시스템의 시작시점이다.
- 이 값은 프로그램이 실행되는 시스템의 하드웨어 타이머에 기반하기 때문이다.
- Loki 에서 요구하는 것은 나노초 단위의 Unix Time이다.
- 그렇기에 System.currentTimeMillis() 메서드의 결과 값을 나노초 단위로 아래와 같이 변환하면 된다.
String nanosecond = String.valueOf(Duration.ofMillis(System.currentTimeMillis()).toNanos());
#3. 오늘의 회고
- 위 두 메서드를 사용해보면서, 같은 시간의 개념을 내포하고 있는 클래스 또는 메서드여도, 표현 방식에 따라서 그 의미는 정말 많이 달라질 수 있다라는 것을 다시 한 번 깨달았다.
- 자바가 자체적으로 제공하는 시간 관련 클래스도 정말 많다.
- Date
- Calendar
- java.time.Duration
- 위에서 Unix Time 을 나노초 단위로 변환할 때 쓰였다.
- 등등..
- 자바가 자체적으로 제공하는 시간 관련 클래스도 정말 많다.
- 위 메서드로 국한해서 설명하자면
- System.currentTimeMillis() 은 전통적인 Unix 시간의 개념을 따르고, 시간의 절대적인 흐름을 나타내는 반면
- Sysmte.nanoTime() 은 상대적인 시간을 측정하며, 더 낮은 단위의 시간을 나타내는 만큼, 성능 분석 등에 요긴하게 쓰일 수 있겠다.
- 자바에서 제공하는 라이브러리에서 어떤 메서드들이 있고, 각 메서드들이 어떤 역할을 수행하는 지 전부 외울 수는 없겠지만, 이 차이를 빨리 파악하고, 각 메서드들을 적절한 상황에 적절히 활용하는 능력을 키우는 것이 프로그래밍 스킬 향상에 큰 도움이 될 거라 생각한다.
728x90
반응형
'개발 공부' 카테고리의 다른 글
99클럽 9일차 TIL: Bean 관련 에러 (0) | 2024.04.12 |
---|---|
99클럽 7일차 TIL: Collectors.toList() vs. toList() (0) | 2024.04.10 |
99클럽 5일차 TIL: Loki (0) | 2024.04.08 |
99클럽 4일차 TIL: Collectors.toMap() (2) | 2024.04.07 |
99클럽 3일차 TIL: JPA vs. MyBatis (2) | 2024.04.06 |