날짜의 정보가 담긴 문자열 ex) 20230101 8자리 문자열을
사용자에게는 다른형식으로 보여주고 싶을때 어떻게 처리할 것인가?
방법은 3가지 이다.
1. Client 단 - DB에서 그대로 가져와 js로 형식을 변환시켜준다.
2. Controller나 Service단 - Servlet 내에서 java로 값의 형식을 처리 한후 객체 전달.
3. DB에서 slect 시에 sql문으로 변환하여 출력
모든 날짜를 date로 저장할 수있지만 시간이 존재하지 않는 날자는 숫자 8자리 형식으로 저장하는 것이 DB에서는 가장 효율적이다.
20230101 같은 문자열로 값을 DB에서 바로 받아오는 것에 대한
단점이 하나 있다면 date로 받아오는 형식은 java나 jsp(jstl) 에서 값 형식을 변환해주는게 편리하지만
일반적인 문자열은 날짜 형식변환 library를 사용하기 어렵다는 것이다.
그래서 생각한게 가장 깔끔한 것은 DB단에서 부터 불러올때 date형식으로 변환해서
library를 통해서 변환하는것도 있지만 vo(dto)의 형식을 date로 변경해야하는 점이 생긴다.
정리해보면
1. Client 단 (js로 변경)
- js 변경하게되면 코드가 길어진다는 단점이 있지만 서버 리소스를 잡아먹지 않는다는 장점이 있다.
2. tomcat jsp 서버단
- date형식은 문자형식을 편하게 변경해주는 라이브러리가 많지만 문자열은 하드코딩해야 한다는 단점이 있따.
3. DB 단
- db에서 애초에 문자열 형식을 변경해준다면 select 시간이 아주조금 늘어나겠지만 spring단이나 클라이언트단에서 별도 설정없이 갈 수 있다는거다.
그래서 db slect절에 다음과 같이 형식을 다음과같이 변환해서 조회한다.
TO_CHAR(TO_DATE(컬럼명, 'YYYYMMDD'), 'YYYY/MM/DD')
문자열 형식을 변환하는 방법이 있겠지만 문자열 -> date로 변경했다가 to_char()를 사용해서 원하는 포맷으로 바꿔준다.
'Study Hard > 개발 /로직 생각' 카테고리의 다른 글
CSR(클라이언트 렌더링)이 대세가 된 시장 (feat. jsp는 사장되고 있나요..?) (0) | 2023.07.05 |
---|---|
[스프링Legacy] 아이디 찾기, 비밀번호 찾기 로직 (Ajax, JSON 사용) (0) | 2023.06.09 |
[Web] 로그인 폼에서 엔터키로 로그인하기 (자바스크립트 사용하지않고) (0) | 2023.05.28 |
[스프링, 자바] VO객체의 필드의 공백,null값 일괄 확인 (form 필드 공백확인) (0) | 2023.05.26 |
[스프링,Mybatis] Model(VO)의 필드명은 CamelCase가 좋을까? UnderScore가 좋을까? (0) | 2023.05.26 |
댓글