반응형
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()을 사용
반응형
'유레카' 카테고리의 다른 글
ajax 학습 메모 (0) | 2024.07.17 |
---|---|
스프링 시큐리티 독학기 (1) | 2024.02.12 |
[SPA 미니 프로젝트 中] antd Menu에 링크 연결하기(5.0 버전 이슈) (1) | 2023.10.29 |