요즘 회사에서 결제 시스템과 연동되는 라이선스 서버를 개발하면서 라이선스 만료일을 계산하는 로직을 구현하게 되었다. 서비스 특성상 정기결제가 이루어지기 때문에 라이선스 기간을 산정하는데 다음과 같은 문제점이 있었다.
1. 라이선스 기간은 결제일로부터 한 달만 활성화된다.
2. 사용자가 말일에 결제한 경우 다음 달 말일은 30, 31, 28, 29일 등 윤년 여부와 월에 따라 기간이 다를 수도 있다.
처음에는 해당 로직을 직접 코드로 구현하고 있었다. LocalDateTime으로 저장된 최근 라이선스 만료일자를 바탕으로, Month 값만 가져와서, 다음 달 값을 구하고, 해당 달의 말일을 가져온 다음 결제일을 비교하면서 다음 달 말일에 기간이 포함되는지 여부 등 열심히 지지고 볶고 구현을 하고 있었다.
그러다가 LocalDate 클래스와 LocalDateTime 클래스에 plus** 메서드가 포함되어있는걸 알게 되었고, 레퍼런스를 보니 내가 원하는 기능을 딱 제공하고 있었다.
https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html
[ LocalDate 클래스 메서드 레퍼런스 중 일부 항목 ]
윤년 판단부분도 isLeapYear() 메서드로 정의가 되어있다.
그래서 바로 아주 아주 간단하게 테스트 코드를 작성해봤다.
기대한 값이 잘나온다. 직접 구현할 필요 없이 이미 구현이 되어있기에, 코드도 간결해졌다.
윤년, 말일에 따라 날짜를 계산해야 한다면 , LocalDate, LocalDateTime 클래스의 plus 메서드를 적절하게 활용해서 날짜를 계산해보자.
'Programming > Java' 카테고리의 다른 글
객체, 클래스 그리고 인스턴스 (0) | 2021.06.15 |
---|---|
[Java] CMD 또는 Shell 환경에서 Java 컴파일 및 Jar 파일 만들기 (0) | 2021.01.12 |
[Java] AES 256 암복호화 유틸클래스 (0) | 2020.07.15 |
[Java] 사용하는 라이브러리의 라이선스 내용 출력하기 (0) | 2020.07.04 |
[Intellij IDEA Plugin, Java] SonarLint 코드 퀄리티를 높여보자! (3) | 2020.02.03 |