유닉스시간(unixtime)의 개념과 서버,DB,클라이언트에서 얻어오는 방법
- 흑구의 공부내용 공유
- 2019. 3. 9. 12:40
유닉스 시간
- 시각을 타나내는 방식이다. POSIX 시간이나 Epoch 시간이라고 부른다. 1970년 1월 1일 0시 0분 0초 협정 세계시(UTC)로부터의 경과된 시간을 초(sec)로 환산하여 정수로 나타낸 것이다.
- 즉, 1970년 1월 1일이 시작되고 나서부터 지금까지 몇초가 흘렀는지를 알 수 있는 시간이다.
- 윤초는 무시된다.
- 어떤 사건의 앞뒤관계(무엇이 먼저 발생하고, 나중에 발생했는지)를 객관적으로 판단할 수 있는 지표가 된다.
웹개발에 있어서 데이터는 DB에서 가져와서 서버 -> 클라이언트 순으로 주로 이동한다.
어떠한 데이터를 처리하는데 있어서는
1. DB(ex Postgresql)에서 처리하여 그대로 가져다 쓸것인가
2. 서버(Java)단에서 처리하여 클라이언트로 보내서 쓸것인가.
3. DB에서 raw material처럼 가져온 값을 서버에서도 거쳐 클라이언트(Javascript)측에서 바로 가져다가 쓸것인가.
최소한 이 3가지는 고민을 해야 합니다. 어느 사이드에서 데이터를 가공하느냐에따라 DB에서 가져오는 데이터의 형식도 달라질 수가 있고, 프로그램이 더 효율적으로 운영될 수가 있습니다.(더 빠르게 진행된다는 의미)
그래서 대표적으로 유닉스시간에 대하여 Postgresql, JAVA, Javascript 사이드에서 가져오는 방법을 공유하고자 합니다.
현재의 unixtime 얻어오기(자바, Postgresql, 자바스크립트)
[JAVA]
Calendar.getInstance().getTime().getTime() : Calendar(Date 객체로 변환)객체를 이용하는 방법
>>
1. Calendar.getInstance()로 현재의 시각정보를 가진 Calendar 객체 생성.
2. Calendar 객체로는 못가져오므로 getTime() 메소드로 Date형으로 형변환.
3. Date객체(생성시각 데이터를 가진)의 getTime() 메소드는 Long형 반환타입으로 유닉스타임의 밀리초를 반환한다.
4. 따라서 초단위의 유닉스타임으로 가공하기 위해서는 1000으로 나누어 주어야 한다.
System.currentTimeMillis() : System 클래스를 이용하는 방법
>>
유틸기능으로 Calendar보다는 적은코드양으로(차이는 얼마안나지만) 유닉스타임의 밀리초를 얻어낼 수 있다.
공통점과 차이점
- 공통점 : 밀리초 단위(1970년 01월 01일 0시0분0초 이후부터 현재까지)의 Long형 데이터를 반환, 유닉스타임으로 변환하려면(1000을 나눠줘야함)
- 차이점 : Calendar 객체를 이용할 경우 현재시각 뿐만아니라 다른 시각의 유닉스타임도 얻어올 수 있다.
[Postgresql]
- now() 함수 사용 : 현재 시각을 반환하는 function
select now(); -> '2019-03-05 16:16:17.796027+09' : 함수를 실행한 시각의 날짜데이터 반환
select extract(epoch from now()); -> 1551770195.49156 1초 미만의 단위는 소수점으로 나타냄.
select date_part('epoch', now()); -> 결과 동일
참조 사이트 : https://www.postgresql.org/docs/9.6/functions-datetime.html [9.9.1. EXTRACT, date_part]
[Javascript]
- Date.now(); -> 밀리초단위
Date 객체의 now() 함수 설명
>> Returns the numeric value corresponding to the current time - the number of milliseconds elapsed since 1 January 1970 00:00:00 UTC
현재날짜의 숫자데이터를 반환하며 1970년 1월1일 이후의 밀리초를 숫자로 반환한다.
참조 사이트 : https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Date
'흑구의 공부내용 공유' 카테고리의 다른 글
[번역글] 스프링 vs 스프링 부트 차이 비교하기! (1) | 2020.01.09 |
---|---|
[번역글] 더 나은 자바개발자가 되기위한 10가지 팁! (3) | 2020.01.06 |
[번역글] REST API URI를 결정하는 7가지 규칙 (0) | 2019.12.12 |
Microservices Architecture의 소개(모놀리식 아키텍처vs 마이크로서비스 아키텍처) (0) | 2019.12.11 |
[Java] 자바 Properties 파일 읽는 방법(한글 깨지는 사람 들어오세요) (2) | 2019.04.13 |