프로젝트에서 "2024-08-27T18:42:08.000Z" 형식의 ISO 날짜 문자열을 "YYYY-MM-DD" 형식으로 변환하는 과정에서 에러가 발생했다. 단순하게 ISOString 문자열을 받아 파싱하는 함수였다.
// 기존 코드
export const formatDate = (dateString: string) => {
const date = new Date(dateString);
return date.toISOString().split("T")[0];
};
이렇게 구현하니 에러가 API 응답 데이터를 처리하면서 나타났다. 예를 들어, 크롤링한 게시글의 날짜 정보게 데이터베이스에 없는 경우 undefined나 null 값이 전달될 수 있다. 이런 상황에서 클라이언트 쪽에서 TypeError가 발생한다. 또한 잘못된 형식의 날짜 문자열이 입력되면 Invalid Date 에러가 발생한다. 예외 처리 로직도 없어 앱 전체가 중단되는 문제가 있다.
더 안전한 날짜 포맷팅을 위해 다음과 같이 코드를 개선했다.
export const formatDate = (dateString: string | undefined | null) => {
if (!dateString) {
return "-";
}
try {
const date = new Date(dateString);
if (isNaN(date.getTime())) {
return "-";
}
return date.toISOString().split("T")[0];
} catch (error) {
console.error("Date formatting error:", error);
return "-";
}
};
입력 파라미터의 타입을 string | undefined | null
로 확장해 타입 안전성을 강화했다. null 체크와 유효하지 않은 날짜 검증을 통해 TypeError를 방지했다. try-catch 블록으로 예외 상황을 처리할 수 있도록 했다.
formatDate("2024-08-27T18:42:08.000Z") // "2024-08-27"
formatDate(undefined) // "-"
formatDate(null) // "-"
formatDate("invalid-date") // "-"