newcodingtest / ProjectManagementSystem

:sunny::sunny:레거시 코드 리펙토링 해보기:sunny::sunny:
1 stars 0 forks source link

[고민1] 날짜 타입을 어떻게 서버에서 처리해줄것인가?? #6

Open newcodingtest opened 2 years ago

newcodingtest commented 2 years ago

View의 input 태그에서 날짜타입의 형태

input type="date" 2022-03-08

input type="datetime" 더이상 사용되지 않으며 datetime-local 사용을 추천하고 있음

input type="datetime-local" 2022-03-08T13:53

문제점

TaskDTO의 날짜형태

image

컨트롤러

image

엔티티

image

현재 html의 View단에서는 form 형식으로 데이터를 전송하고 있다.

전송 받은 DTO는 그대로 DB에 dtoToEntity로 변환되어 엔티티로서 저장이 되는 형태이다

컨트롤러에서 데이터를 받을때 View에서 전송하는 날짜 데이터를 온전히 LocalDateTime의 날짜 형태로 받을려고 한다면 애노테이션에 선언되어있는 패턴의 형식 yyyy-MM-dd HH:mm:ss 대로 던져주어야 한다.

장점은 클라이언트에서 던진 날짜타입 그대로 LocalDateTime 으로 받아서 그대로 DB에 저장되기 때문에 타입의 일치성이 좋다.

그러나 View에서는 2022-03-08 또는 2022-03-08T13:53 형식으로 만들어져서 서버에 전송하기 때문에 서버에서는 받을수 없게 된다.

물론 form 전송 시점에서 yyyy-MM-dd HH:mm:ss 형식을 임의로 만들어주는 로직을 추가해 패턴을 인위적으로 만들어 전송하면 되긴 하지만 로직이 추가된다는 불편함이 존재한다.

위의 고민을 하던 중 참고사이트 가 명쾌한 답을 주어 참고 할 수 있었다.

프론트단에서의 개발을 최소화 하고 싶었기 때문에 따로 로직은 추가하지 않고, 서버에서 처리하기로 생각했다.

DTO 날짜를 받을땐 String 형태로 받으며 엔티티 저장시점 에서는 stringToLocalDateTime으로 변경하는 메서드를 호출하여 날짜타입으로 변화하여 저장하는 방식을 채택하기로 하였다.

image image