본문 바로가기

유레카

날짜 형태의 데이터를 활용할 때 (Date , Timestamp / TO_CHAR() / split())

반응형
js로 캘린더에서 일정관련 기능을 구현하다

 

 

 

 

DB의 DATE 타입 데이터를 동적뷰와 비교하는 로직을 구현할 때

var hasSchedule = response.some(function(schedule) {
    return (schedule.calDate).split(' ')[0] === tdDate;
});

 

 

위와 같이 시간 부분을 제외한 YYYY-MM-DD 형태로 포맷팅하여 비교했었다.

 

이에 대한 장단점은 아래와 같았다.

 

장점:

  • 유연성: 서버 측에서 날짜 포맷을 변경할 필요 없이 클라이언트 측에서 다양한 날짜 형식을 처리할 수 있다.
  • 서버 부하 감소: 서버에서 날짜 포맷을 처리하지 않기 때문에 서버 측의 부하를 줄일 수 있다.

단점:

  • 클라이언트 부하: 클라이언트에서 문자열을 처리하고 비교하는 작업이 추가되어 성능에 영향을 미칠 수 있음. 특히 데이터가 많을 경우 성능 저하가 있을 수 있다.
  • 형식 일관성: 서버와 클라이언트 간의 날짜 형식이 일관되지 않을 수 있으며, 이로 인해 오류가 발생할 수 있다.

 

js의 코드의 가독성을 높이고 정확한 데이터 형식 전달을 위한 방법을 찾아보다가

SQL 쿼리호출을 할 때

SELECT TO_CHAR(CAL_DATE, 'YYYY-MM-DD')

 

TO_CHAR() 함수를 통해 일관적인 데이터형식의 문자열로 데이터를 불러올 수 있었고

js에서의 조건을 간결화 할 수 있었으나 calDate(CAL_DATE)데이터를 맵핑하지 못하는 에러가 발생

var hasSchedule = response.some(function(schedule) {
    return schedule.calDate === tdDate;
});

 

매퍼에서 AS CAL_DATE를 넣어주어 마무리했다.

<select id="checkSchedule" parameterType="Map" resultType="calendarVo">
	SELECT TO_CHAR(CAL_DATE, 'YYYY-MM-DD') AS CAL_DATE
	FROM CAL
	WHERE CAL_YEAR = #{calYear} AND CAL_MONTH= #{calMonth}
</select>

 

이 방식의 장단점으로는

 

장점:

  • 간결한 코드: 서버에서 이미 포맷된 날짜를 문자열로 가져오기 때문에 클라이언트 쪽에서 추가적인 문자열 처리가 필요 없다.
  • 성능 향상: 클라이언트 측에서 문자열 처리와 비교 작업을 줄이기 때문에 성능이 개선될 수 있습니다. 특히 대량의 데이터가 있을 때 유리
  • 일관성: 날짜 포맷이 일관되므로 클라이언트와 서버 간의 날짜 형식 차이로 인한 문제를 방지할 수 있다.

단점:

  • 서버 부하: 서버에서 날짜를 문자열로 포맷하는 작업이 추가되며, 이로 인해 서버 측의 부하가 약간 증가할 수 있다.
  • 제어 제한: 서버 측에서 포맷을 결정하므로 클라이언트에서 포맷을 변경하기 어렵다.

 

결론적으로

1. 데이터 양이 많고 서버에서 날짜 포맷을 일관되게 유지할 필요가 있을 때,

TO_CHAR(CAL_DATE, 'YYYY-MM-DD')를 사용하여 클라이언트 측 코드가 간결해지고 성능이 개선되므로

서버에서 포맷하는 것이 유리

 

2. 서버의 부하를 줄이고 클라이언트에서 유연하게 처리하고자 할 때는 클라이언트에서 split()을 사용

 

 

반응형