From ffd92be16efdb3bd936faa72a0fe7c9e6041a380 Mon Sep 17 00:00:00 2001
From: Ye jin Shin <108514552+shinyj0@users.noreply.github.com>
Date: Wed, 16 Oct 2024 02:36:37 +0900
Subject: [PATCH 1/2] =?UTF-8?q?docs=20:=20[=EC=8B=A0=EC=98=88=EC=A7=84]=20?=
=?UTF-8?q?2=EC=A3=BC=EC=B0=A8=20=EA=B3=BC=EC=A0=9C=20=EC=97=85=EB=A1=9C?=
=?UTF-8?q?=EB=93=9C?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
...0 \352\262\203\354\235\270\352\260\200.md" | 2 +-
...4\355\231\224 \354\262\230\353\246\254.md" | 116 ++++++++++++++++++
2 files changed, 117 insertions(+), 1 deletion(-)
create mode 100644 "shinyj0/Week02/2\354\243\274\354\260\250 - \353\202\240\354\247\234 \354\247\201\353\240\254\355\231\224 \353\260\217 \354\227\255\354\247\201\353\240\254\355\231\224 \354\262\230\353\246\254.md"
diff --git "a/shinyj0/Week01/1\354\243\274\354\260\250 - \354\226\264\353\226\240\355\225\234 \352\260\234\353\260\234\354\236\220\352\260\200 \353\220\240 \352\262\203\354\235\270\352\260\200.md" "b/shinyj0/Week01/1\354\243\274\354\260\250 - \354\226\264\353\226\240\355\225\234 \352\260\234\353\260\234\354\236\220\352\260\200 \353\220\240 \352\262\203\354\235\270\352\260\200.md"
index 8c35426..fb1910b 100644
--- "a/shinyj0/Week01/1\354\243\274\354\260\250 - \354\226\264\353\226\240\355\225\234 \352\260\234\353\260\234\354\236\220\352\260\200 \353\220\240 \352\262\203\354\235\270\352\260\200.md"
+++ "b/shinyj0/Week01/1\354\243\274\354\260\250 - \354\226\264\353\226\240\355\225\234 \352\260\234\353\260\234\354\236\220\352\260\200 \353\220\240 \352\262\203\354\235\270\352\260\200.md"
@@ -1,4 +1,4 @@
-#1주차 - 어떠한 개발자가 될 것인가
+# 1주차 - 어떠한 개발자가 될 것인가
### 개발자를 왜 하고 싶은가
diff --git "a/shinyj0/Week02/2\354\243\274\354\260\250 - \353\202\240\354\247\234 \354\247\201\353\240\254\355\231\224 \353\260\217 \354\227\255\354\247\201\353\240\254\355\231\224 \354\262\230\353\246\254.md" "b/shinyj0/Week02/2\354\243\274\354\260\250 - \353\202\240\354\247\234 \354\247\201\353\240\254\355\231\224 \353\260\217 \354\227\255\354\247\201\353\240\254\355\231\224 \354\262\230\353\246\254.md"
new file mode 100644
index 0000000..d774fec
--- /dev/null
+++ "b/shinyj0/Week02/2\354\243\274\354\260\250 - \353\202\240\354\247\234 \354\247\201\353\240\254\355\231\224 \353\260\217 \354\227\255\354\247\201\353\240\254\355\231\224 \354\262\230\353\246\254.md"
@@ -0,0 +1,116 @@
+# [SPRING] 날짜 직렬화 및 역직렬화 처리: @DateTimeFormat vs @JsonFormat
+
+**스프링은 날짜를 어떻게 역직렬화할까?**
+
+**(@DateTimeFormat, @JsonFormat)**
+
+```java
+{
+ "startDateTime": "2023-07-13 14:00",
+ "endDateTime": "2023-07-14 15:59"
+}
+```
+
+
+1)**@DateTimeFormat을 사용**
+
+```java
+//Request Dto
+public record ScheduleRequest(
+
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+ LocalDateTime startDateTime,
+
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+ LocalDateTime endDateTime) {
+
+}
+
+```
+
+→에러! 데이터바인딩시 에러
+
+
+**어떻게 해결하는가?**
+
+2)**@JsonFormat으로 해결**
+
+```java
+public record ScheduleRequest(
+
+ @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm", timezone = "Asia/Seoul")
+ LocalDateTime startDateTime,
+
+ @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm", timezone = "Asia/Seoul")
+ LocalDateTime endDateTime) {
+
+}
+```
+
+3)**@DateTimeFormat vs @JsonFormat**
+
+**@DateTimeFormat**
+
+```java
+package org.springframework.format.annotation;
+
+...
+
+public @interface DateTimeFormat {
+ ...
+}
+```
+
+→**@DateTimeFormat**은 Spring의 어노테이션
+
+**@JsonFormat**
+
+```java
+package com.fasterxml.jackson.annotation;
+
+...
+
+public @interface JsonFormat {
+ ...
+}
+
+```
+
+→
+
+**@JsonFormat**은 @RequestBody, @ResponseBody를 사용한 직렬화/역직렬화를 담당하는 Jackson 라이브러리의 어노테이션이다.
+
+-Jackson 라이브러리에서는 내부적으로 pattern으로 지정한 형식을 LocalDateTime으로 변환해준다.
+
+따라서, Jackson 라이브러리의 @JsonFormat은 날짜 형식이라면 자유롭게 사용이 가능하다.
+
+하지만, @RequestBody, @ResponseBody를 사용한 역직렬화/직렬화 시,
+
+@DateTimeFormat을 사용하려면 Jackson 라이브러리에 있는 어노테이션이 아니기 때문에 LocalDateTime의 기본 형식인 'yyyy-MM-dd'T'HH:mm:ss'으로 요청이 들어와야 바인딩된다.
+
+
+
+
+4) **@RequestParam, @ModelAttribute에서는 무엇을 사용해야 할까?**
+
+
+
+ @RequestBody, @ResponseBody 등 Jackson 라이브러리를 사용하여 역직렬화/직렬화를 하는 상황이 아닌 Jackson 라이브러리가 관여하지 않는 @RequestParam, @ModelAttribute에서는 무엇을 사용해야 할까?
+
+Jackson 라이브러리가 사용되지 않기 때문에 **@JsonFormat은 무시된다.**
+
+**→** @DateTimeFormat을 사용하여 날짜 형식을 자유롭게 바인딩 할 수 있다.
+
+
+
+5) 결론적으로 @RequestBody, @ResponseBody를 사용한 역직렬화/직렬화 시,
+
+날짜 형식을 자유롭게 사용하기 위해서는, **@DateTimeFormat**이 아닌, **@JsonFormat**을 사용해야한다!
+
+```java
+* 기본 전제 : LocalDateTime의 기본 형식인 'yyyy-MM-dd'T'HH:mm:ss'이 아닐 때
+
+1. @RequestBody, @ResponseBody : @JsonFormat 사용
+2. @RequestParam, @ModelAttribute : @DateTimeFormat 사용
+
+```
\ No newline at end of file
From 9548218b0902ccb594fc6310109f4c31078664ef Mon Sep 17 00:00:00 2001
From: Ye jin Shin <108514552+shinyj0@users.noreply.github.com>
Date: Tue, 12 Nov 2024 11:23:53 +0900
Subject: [PATCH 2/2] =?UTF-8?q?docs:=20[=EC=8B=A0=EC=98=88=EC=A7=84]=203?=
=?UTF-8?q?=EC=A3=BC=EC=B0=A8=20=EA=B3=BC=EC=A0=9C=20=EC=97=85=EB=A1=9C?=
=?UTF-8?q?=EB=93=9C?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
...\254\355\231\224 \354\262\230\353\246\254.md" | 16 ++++++++--------
...54\260\250-\353\260\261\354\244\200 16974.md" | 0
2 files changed, 8 insertions(+), 8 deletions(-)
create mode 100644 "shinyj0/Week03/3\354\243\274\354\260\250-\353\260\261\354\244\200 16974.md"
diff --git "a/shinyj0/Week02/2\354\243\274\354\260\250 - \353\202\240\354\247\234 \354\247\201\353\240\254\355\231\224 \353\260\217 \354\227\255\354\247\201\353\240\254\355\231\224 \354\262\230\353\246\254.md" "b/shinyj0/Week02/2\354\243\274\354\260\250 - \353\202\240\354\247\234 \354\247\201\353\240\254\355\231\224 \353\260\217 \354\227\255\354\247\201\353\240\254\355\231\224 \354\262\230\353\246\254.md"
index d774fec..d3ca4a2 100644
--- "a/shinyj0/Week02/2\354\243\274\354\260\250 - \353\202\240\354\247\234 \354\247\201\353\240\254\355\231\224 \353\260\217 \354\227\255\354\247\201\353\240\254\355\231\224 \354\262\230\353\246\254.md"
+++ "b/shinyj0/Week02/2\354\243\274\354\260\250 - \353\202\240\354\247\234 \354\247\201\353\240\254\355\231\224 \353\260\217 \354\227\255\354\247\201\353\240\254\355\231\224 \354\262\230\353\246\254.md"
@@ -33,6 +33,7 @@ public record ScheduleRequest(
**어떻게 해결하는가?**
+
2)**@JsonFormat으로 해결**
```java
@@ -46,7 +47,9 @@ public record ScheduleRequest(
}
```
-
+
+
+
3)**@DateTimeFormat vs @JsonFormat**
**@DateTimeFormat**
@@ -61,7 +64,7 @@ public @interface DateTimeFormat {
}
```
-→**@DateTimeFormat**은 Spring의 어노테이션
+→ **@DateTimeFormat**은 Spring의 어노테이션
**@JsonFormat**
@@ -76,9 +79,7 @@ public @interface JsonFormat {
```
-→
-
-**@JsonFormat**은 @RequestBody, @ResponseBody를 사용한 직렬화/역직렬화를 담당하는 Jackson 라이브러리의 어노테이션이다.
+→ **@JsonFormat**은 @RequestBody, @ResponseBody를 사용한 직렬화/역직렬화를 담당하는 Jackson 라이브러리의 어노테이션이다.
-Jackson 라이브러리에서는 내부적으로 pattern으로 지정한 형식을 LocalDateTime으로 변환해준다.
@@ -88,10 +89,9 @@ public @interface JsonFormat {
@DateTimeFormat을 사용하려면 Jackson 라이브러리에 있는 어노테이션이 아니기 때문에 LocalDateTime의 기본 형식인 'yyyy-MM-dd'T'HH:mm:ss'으로 요청이 들어와야 바인딩된다.
-
-4) **@RequestParam, @ModelAttribute에서는 무엇을 사용해야 할까?**
+4)**@RequestParam, @ModelAttribute에서는 무엇을 사용해야 할까?**
@@ -103,7 +103,7 @@ Jackson 라이브러리가 사용되지 않기 때문에 **@JsonFormat은 무
-5) 결론적으로 @RequestBody, @ResponseBody를 사용한 역직렬화/직렬화 시,
+5)결론적으로 @RequestBody, @ResponseBody를 사용한 역직렬화/직렬화 시,
날짜 형식을 자유롭게 사용하기 위해서는, **@DateTimeFormat**이 아닌, **@JsonFormat**을 사용해야한다!
diff --git "a/shinyj0/Week03/3\354\243\274\354\260\250-\353\260\261\354\244\200 16974.md" "b/shinyj0/Week03/3\354\243\274\354\260\250-\353\260\261\354\244\200 16974.md"
new file mode 100644
index 0000000..e69de29