✔ Done
- 프로젝트 : DB 설계
- JSON으로 LOCALDATE를 통신하는 방법을 알게되었다.
- MySQL의 VARCHAR 데이터 타입에 대해 더 잘 알게되고 언제 이를 써야할지 고민할 수 있게 되었다.
- 원시타입과 래퍼 클래스의 차이에 대해 복습했다.
📂 Feeling
Good
- 실습하면서 알게된 것을 정리하면서 다시 복습했다.
Bad
🗒 Learned
1) DTO에서 LocalDate 혹은 LocalDateTime을 사용할 경우
1.1) 문제
- json으로 데이터를 받아서 이를 LocalDate로 선언한 필드에 저장하고 싶었지만 형식이 맞지 않는다며 저장이 되지 않았다.
1.2) 해결방안 출처
- 스프링 문서
- 필드나 메서드 파라미터가 date나 time으로 포매팅 되어야 한다고 하는 어노테이션이다
Declares that a field or method parameter should be formatted as a date or time.
pattern
옵션으로 원하는 형식을 지정한다.

- form data로 전송시 아래와 같이 입력해 주면 잘 들어오는 것을 확인해줄 수 있다.

1.4) 보충 이동욱님 블로그 정리된 내용
- 창천항로님 블로그에 정리된 내용에 따르면 아래와 같다고 한다.
Get요청시에는 @DateTimeFormat
Post 요청, ResponseBody에서는 @JsonFormat
Post 요청시에도 @DateTimeFormat이 적용될 수 있으나, @JsonFormat이 지정되어 있지 않을때만 가능하다.
1.5) 이동욱님 블로그 내용 직접 해보니까
- 실제로 몇가지 실습을 해보니
- Get요청시 @JsonFormat을 적용했더니 요청을 가져오지 못했다.
- Post요청에 JSON으로(@RequestBody) 받는 경우 @JsonFormat과 @DateTimeFormat 이 모두 가능했다.
- 응답시에
이렇게 데이터를 넣고 반환했을 때
- @JsonFormat을 붙여주지 않은 경우
- @JsonFormat을 붙여준 경우

- 이렇게 postman으로 결과 확인시에는 차이 없이 똑같이 들어왔는데 혹시 iOS에서는 다른 결과로 들어오는지 한 번 확인해봐야겠다.
2) VARCHAR
2.1) 최대 바이트 65,535 bytes
- 최대길이는 65,535 bytes
- 이전에는 더 작았는데 버전업이 되면서 올라갔다.
The effective maximum length of a VARCHAR is subject to the maximum row size (65,535 bytes, which is shared among all columns)
2.2) VARCHAR는 길이에 대한 정보를 저장
- VARCHAR가 CHAR와 다른 점은 길이에 대한 정보도 저장한다.
In contrast to CHAR, VARCHAR values are stored as a 1-byte or 2-byte length prefix plus data.
2.3) VARCHAR는 가변
- VARCHAR가 CAHR와 또 다른 점은 입력되는 길이에 따라서 저장공간이 달라진다는 것이다 (가변)

2.4) VARCAHR 최대길이 21843글자 (utf8사용)
-
VARCHAR() 에서 이 ()안에 들어가는 것은 글자수다
- VARCHAR(45)는 45글자
- 그래서 SQL문으로 (65,535 bytes라고 했을 때 길이에 대한 바이트 빼고 655532로 저장할 경우)
에러가 난다.
한 글자당 3바이트 필요한 utf8
-
그런데 위에서 길이에 대한 정보를 저장할 공간이 필요하므로
- ( 65535 / 3 ) - 2 정도의 공간 21843 글자 최대
-
어차피 한 row에 대한 최대 사이즈가 65535 이다. text는 가변이 아니라 고정이라 성능 떄문에 text를 쓰는 것 같다. (더 자세히 알아볼 필요) https://dev.mysql.com/doc/refman/5.7/en/storage-requirements.html
3) Wrapper vs primitive