2021. 7. 12. 11:00ㆍTech Insights/개발 잡소리
Day.js는 날짜와 시간을 다루는 경량 라이브러리로 많은 개발자들 사이에서 인기 있는 도구입니다. 그러나 가벼운 라이브러리라고 해서 모든 것이 항상 완벽하게 작동하는 것은 아니죠. 특히, 여러 플러그인을 함께 사용할 때 예상치 못한 문제가 발생할 수 있습니다. 이번 글에서는 Day.js에서 발생한 "Invalid Date" 오류를 어떻게 발견하고 해결했는지, 그리고 그 해결 방법을 GitHub PR #1566을 통해 오픈소스에 기여한 과정을 공유하고자 합니다.
1. 문제의 시작: "Invalid Date" 오류
Day.js의 advancedFormat
플러그인과 timezone
, utc
플러그인을 함께 사용할 때 "Invalid Date" 오류가 발생하는 문제를 겪게 되었습니다. 유효하지 않은 날짜(null
또는 다른 잘못된 값)를 포맷팅하려 할 때, 포맷팅이 정상적으로 처리되지 않고 오류가 발생했습니다.
문제의 예시
const dayjs = require('dayjs');
const advancedFormat = require('dayjs/plugin/advancedFormat');
const timezone = require('dayjs/plugin/timezone');
const utc = require('dayjs/plugin/utc');
dayjs.extend(utc);
dayjs.extend(timezone);
dayjs.extend(advancedFormat);
// 유효하지 않은 날짜 (null)
const invalidDate = dayjs(null);
console.log(invalidDate.format('lll z')); // Invalid Date 오류 발생
위 코드에서 dayjs(null)
을 사용해 생성한 유효하지 않은 날짜에 대해 포맷팅을 시도하면 오류가 발생합니다. 이 문제는 advancedFormat
플러그인이 날짜 포맷팅을 처리할 때 발생한 문제였습니다.
2. 문제 분석: "Invalid Date" 오류의 원인
이 문제를 처음 접했을 때, advancedFormat
플러그인에서 날짜가 유효한지 체크하는 로직이 부족하다는 것을 파악했습니다. dayjs(null)
처럼 유효하지 않은 날짜를 입력했을 때, format
메서드는 오류를 발생시키는 이유는 날짜가 유효한지 검증하는 로직이 없기 때문이었습니다. 따라서, format
메서드가 호출될 때 내부적으로 처리되는 값이 Invalid Date
라는 문자열이 되어야 했지만, 예외 처리가 되어 있지 않았습니다.
이 문제는 단순한 예외 처리가 아니라, 라이브러리 차원에서 해결해야 할 문제라는 생각이 들었습니다.
3. 문제 해결: PR을 통한 오픈소스 기여
문제를 해결하기 위한 방법으로, Day.js 라이브러리 코드에 유효성 검사를 추가하는 방향으로 진행했습니다. 바로, 날짜가 유효한지 먼저 확인하고, 유효하지 않은 날짜에 대해서는 "Invalid Date"
를 반환하도록 수정하는 방식입니다.
3.1. 유효성 검사 추가
Day.js의 advancedFormat
플러그인에 날짜가 유효한지 확인하는 로직을 추가했습니다. 날짜가 유효하지 않다면 "Invalid Date"
를 반환하도록 처리하여, 예외 상황을 안전하게 다룰 수 있었습니다.
4. 결론: 오픈소스 기여로 해결한 문제
이번 글에서는 "Invalid Date" 오류를 오픈소스 PR을 통해 해결한 과정을 다뤘습니다. 문제를 해결하는 방식이 단순히 개인적인 예외 처리에서 끝나지 않고, 오픈소스 프로젝트에 기여하여 더 많은 개발자들이 이 문제를 겪지 않도록 개선한 경험을 공유했습니다.
참고 자료:
이 글이 여러분에게 도움이 되었기를 바랍니다. 추가적인 질문이나 피드백이 있으면 댓글로 남겨 주세요! 😊
'Tech Insights > 개발 잡소리' 카테고리의 다른 글
Monorepo vs Polyrepo: 무엇이 더 나을까? (0) | 2025.01.30 |
---|---|
MSA vs 모놀리틱: 무엇이 더 나을까? (4) | 2025.01.25 |
개발자로서의 권고사직 경험과 그 후의 이야기 (0) | 2022.09.02 |
Jest의 `expect` 함수 사용법: JavaScript 테스트의 핵심 (0) | 2021.07.03 |