์ค๋ ํ ๊ณต๋ถ ๐ง
- ๊ฐ์ธ ๊ณผ์ ํ์ ๊ธฐ๋ฅ ๊ตฌํ
- ์์ค๋ณ ํ์ต๋ฐ ์คํ ๋ค๋๋ฐ ์ธ์ ๋ฃ๊ธฐ
- ํ ์คํธ ์ฝ๋ ์ค์ต ์ธ์ ๋ฃ๊ธฐ
- TIL ๋ธ๋ก๊ทธ ์์ฑ
์ค๋ ์ป์ ๋ด์ฉ ์ ๋ฆฌ โ๏ธ
๊ฐ์ธ ๊ณผ์ ํ์ ๊ธฐ๋ฅ ๊ตฌํ
ํํฐ๋ ํผ๋๋ฐฑ ๋ฐ์ํด์ ์ฝ๋ ๋ฆฌํฉํ ๋ง
- Setter๋ก ๋์ด ์๋ ๋ฉ์๋๋ช
๋ฐ๊พธ๊ธฐ
- Comment์ Todo Entity์ setMember, serTodo ๋ฉ์๋๋ฅผ updateMember, updateTodo๋ก ๋ฐ๊ฟ์ฃผ์๋ค.
- Comment ์์ฑ์์์ User์ Todo๋ฅผ ๊ฐ์ด ๋ฐ์ผ๋ฉด Comment๋ฅผ ์์ฑํ ๋ ๋ Entity๋ฅผ ๋ฃ์ง ์๋ ์ค์๋ฅผ ๋ฐฉ์งํ ์ ์๋ค.
- update ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๋์ ์์ฑ์ ์์ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์์ผ๋ก์จ ๋นผ๋จน๋ ์ค์๋ฅผ ๋ฐฉ์งํ ์ ์๋๋ก ์ฝ๋๋ฅผ ์์ ํ๋ค.
- ์ถ๊ฐ์ ์ผ๋ก Todo์ ์์ฑ์์๋ Member๋ฅผ ๋ฐ์ ์ ์๋๋ก ์์ ํ๋ค.
- ๊ทธ ํ ํ์์์ด์ง update ๋ฉ์๋๋ค์ ๋ชจ๋ ์ง์๋ฒ๋ ธ๋ค!
- ๋ก๊ทธ์ธ์ด ๋์ง ์์์ ๊ฒฝ์ฐ Filter์์ ์์ธ๋ฅผ ๋ฐ์์ํค๋๋ฐ 401 Error๊ฐ ๋์ฌ ์ ์๊ฒ ๋ณ๊ฒฝํ๋ค.
- GlobalExceptionHandler๋ฅผ ์ด์ฉํด์ ์์ธ๋ฅผ ์ฒ๋ฆฌํ๋ค.
→ Filter์์ ๋ฐ์ํ ์์ธ์ ๋ํด์๋ ์ ์ฉ์ด ๋์ง ์๋๋ค.
Spring์ DispatcherServlet ์ดํ ์ปจํธ๋กค๋ฌ ๋ ๋ฒจ์์ ๋ฐ์ํ ์์ธ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ๋์ํ๋ค.
- GlobalExceptionHandler๋ฅผ ์ด์ฉํด์ ์์ธ๋ฅผ ์ฒ๋ฆฌํ๋ค.
- GlobalExceptionHandler๋ฅผ ํ์ฉํด์ ์์ธ ์ฒ๋ฆฌ ์งํํ๋ค.
- AuthService
- MemberNotFoundException ์์ฑ ํ ํ์์ ์ฐพ์ ์ ์์ ๋์ ์์ธ ์ฒ๋ฆฌ ์๋ฃ
- InvalidPasswordException ์์ฑ ๋น๋ฐ๋ฒํธ ์ผ์นํ์ง ์์ ๋์ ์์ธ ์ฒ๋ฆฌ ์๋ฃ
- CommentService
- CommentNotFoundException ์์ฑ ํ ๋๊ธ์ ์ฐพ์ ์ ์์ ๋์ ์์ธ ์ฒ๋ฆฌ ์๋ฃ
- MemberService
- ์์ธ ์ฒ๋ฆฌ ์ ๋ถ ์์ ์๋ฃ
- TodoService
- TodoNotFoundException ์์ฑ ํ ์ผ์ ์ ์ฐพ์ ์ ์์ ๋์ ์์ธ ์ฒ๋ฆฌ ์๋ฃ
- AuthService
- @Valid๋ฅผ ํตํด์ ์์ฑ๋๋ ์์ธ๋ ์ฒ๋ฆฌํ๋ค.
- GlobalExceptionHandler์ ์์ธ ์ฒ๋ฆฌํ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ค.
์คํ ๋ค๋๋ฐ ์ธ์ ๋ฃ๊ธฐ
- @Transactional ๊ฐ๋
๋ฐ์ด ๋ด๊ธฐ!
- ์ด๋ฒ ์ฃผ ์์ผ๋ก ๋ธ๋ก๊ทธ์ ์ ๋ฆฌํ๊ธฐ โ๏ธ
ํ ์คํธ ์ฝ๋ ์ค์ต ์ธ์ ๋ฃ๊ธฐ
- ํ
์คํธ ์ฝ๋๋ฅผ ์ด๋ป๊ฒ ์์ฑํ๋์ง ํํฐ๋๊ณผ ํจ๊ป ์ค์ต!!
- ๋ นํ๋ณธ ๋ค์ ๋ณด๋ฉด์ ์ถ๊ฐ์ ์ธ ์ดํด ํ์!
๊ถ๊ธํ๋ ์
ํํฐ๋์ ํผ๋๋ฐฑ ์ค ๋ด๊ฐ ์ดํดํ ๋ด์ฉ์ด ๋ง๋์ง ํ์ธํ๊ธฐ ์ํด์ ํํฐ๋๊ป ์ฐพ์๊ฐ๋ค!
- Comment ์์ฑ์์์ User์ Todo๋ฅผ ๊ฐ์ด ๋ฐ์ผ๋ฉด Comment๋ฅผ ์์ฑํ ๋ ๋ Entity๋ฅผ ๋ฃ์ง ์๋ ์ค์๋ ๋ฐฉ์งํ ์ ์๋ค๋ ๋ถ๋ถ์ด update ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ฐ๋ก ์์ฑ์์ ๋งค๊ฐ๋ณ์๋ก ๊ฐ์ ธ๊ฐ์ผ๋ก์จ ๋น ๋จ๋ฆฌ๋ ์ค์๋ฅผ ๋ฐฉ์งํ ์ ์๋ ๊ฒ์ธ์ง ๊ถ๊ธํ๋ค.
- ๋ด๊ฐ ์๊ฐํ ๋ฐฉํฅ์ด ๋ง์๋ค!
- update ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ์ปดํ์ผ ๋จ๊ณ์์ ์ก์์ค ์ ์๋ค.
- ์ปดํ์ผ ๋จ๊ณ์์ ๋ฌธ์ ๋ฅผ ์ก์ ์ ์๋๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์ฐ๋ฆฌ์ ์ผ์ด๋ค!
- ์ถ๊ฐ์ ์ผ๋ก ControllerAdvice๊ฐ ์ด๋๊น์ง์ ์์ธ๋ฅผ ์ก์์ค ์ ์๋์ง ํจ๊ป ์ฐพ์๋ณด๋ฉด์ ์งํํ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค๊ณ ํ์ จ๋ค.
ํธ๋ฌ๋ธ ์ํ
Filter์์ ๋ฐ์ํ๋ ์์ธ๋ฅผ GlobalExceptionHandler๋ฅผ ์ด์ฉํด์ ํด๊ฒฐํ๋ ค๊ณ ํ์ง๋ง Postman์ ์คํํ์ ๋ 500 Internal Error๊ฐ ๊ณ์ ๋ฐ์ํ๋ค.
- @RestControllerAdvice๋ Filter์์ ๋ฐ์ํ ์์ธ์ ๋ํด์๋ ์ ์ฉ์ด ๋์ง ์๋๋ค.
- Spring์ DispatcherServlet ์ดํ ์ปจํธ๋กค๋ฌ ๋ ๋ฒจ์์ ๋ฐ์ํ ์์ธ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ๋์ํ๋ค.
- ์ง์ ์์ด ์ฝ๋์ ๋ฉ์์ง๋ฅผ ์ ๋ ฅํด์ ์ถ๋ ฅ๋ ์ ์๋๋ก ํ๋ค.
if (session == null || session.getAttribute("loginMember") == null) {
httpResponse.setCharacterEncoding("UTF-8"); // UTF-8๋ก ์ธ์ฝ๋ฉ ์ค์
httpResponse.setContentType("application/json; charset=UTF-8"); // Content-Type ์ค์
httpResponse.setStatus(HttpStatus.UNAUTHORIZED.value());
Map<String, String> errorResponse = new HashMap<>();
errorResponse.put("errorCode", "401 UNAUTHORIZED");
errorResponse.put("error", "๋ก๊ทธ์ธํ์ง ์์ ์ํ์
๋๋ค. ๋ก๊ทธ์ธ ํด์ฃผ์ธ์.");
ObjectMapper objectMapper = new ObjectMapper();
String jsonResponse = objectMapper.writeValueAsString(errorResponse);
httpResponse.getWriter().write(jsonResponse);
return;
}
์ค๋ ํ๋ฃจ ์ ๋ฆฌ โ๏ธ
์๊ฐ๋ณด๋ค ์ค๋ ์๊ฐ์ด ๋น ๋ฅด๊ฒ ์ง๋๊ฐ๋ค.
์ค์ ์๋ ๊ฐ์ธ ๊ณผ์ ํ์ ๊ธฐ๋ฅ์ ์์ํ๋ค!
Lv1์ ํํฐ๋์ ํผ๋๋ฐฑ์ ๊ณผ์ ์ ์ ์ฉํ๋ ๊ฒ์ด์๋๋ฐ ํ์ ์๋ ์ฝ๋๋ ์์ ๊ณ ์ค์ํ ์ ์๋ ๋ถ๋ถ์ ํ๋์ ์ฝ๋๋ก ํฉ์น๋ ๋ฐฉํฅ์ผ๋ก ์ฝ๋ ๋ฆฌํฉํ ๋ง์ ์งํํ๋ค.Lv 2์์๋ ์์ธ ์ฒ๋ฆฌ์ @Valid๋ฅผ ์ด์ฉํด์ ๊ธฐ๋ฅ์ ๊ฐ์ ํด์ผ ํ๋ค. Valid ๋ถ๋ถ์ ์ ์ ๊ณผ์ ํ ๋ ์ ์ฉํ์ด์ ์ฝ๊ฒ ๋ง๋ฌด๋ฆฌํ ์ ์์๋ค.
๋ฌธ์ ๋ GlobalExceptionHandler๋ฅผ ์ด์ฉํด์ ์์ธ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ถ๋ถ์ด์๋ค. ์์ง ํ ๋ฒ๋ ํด๋ณธ ์ ์๋ ํํธ์ฌ์ ๊ฒ์ด ๋ฌ์ง๋ง ์ธํฐ๋ท์ ์ฐพ์๋ณด๋ฉด์ ํ๋ฆ์ ์ดํดํ๊ณ Filter์์ ๋ก๊ทธ์ธํ์ง ์์์ ๋ ์คํํ๋ฉด ์์ธ๊ฐ ๋ฐ์ํ๋ ๋ถ๋ถ์ ์ก์ผ๋ ค๊ณ ์ฝ๋๋ฅผ ์์ฑํ๋ค. ํ์ง๋ง ์๊ฐ์ด๋ ๋ค๋ฅด๊ฒ ๊ณ์ ์์ธ๊ฐ ์กํ์ง ์๊ณ 500 Internal Error๊ฐ ๋ฐ์ํ๋ค. ๋ญ๊ฐ ์ด์ํจ์ ๋๋ผ๊ณ ํํฐ๋์ด ์ถฉ๊ณ ํด ์ฃผ์ จ๋ @RestControllerAdvice์ ๋ฒ์๋ฅผ ์ฐพ์๋ณด์๋ค. ์ด๋ด ์๊ฐ.... ๋ฒ์๊ฐ Spring์ DispatcherServlet ์ดํ ์ปจํธ๋กค๋ฌ ๋ ๋ฒจ์์ ๋ฐ์ํ ์์ธ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ๋์ํ๋ค. ์ฆ Filter์์ ๋ฐ์ํ๋ ์์ธ๋ ์ฒ๋ฆฌํ ์ ์๋ ๊ฒ์ด์๋ค. ๊ทธ๋์ ์ธํฐ๋ท์ ์ฐพ์๋ณด๋ฉด์ Filter์ ์์ธ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ ์์๋ณด๊ณ ๊ณผ์ ์ ์ ์ฉํ๋ค.
์ค์ ์๋ ์ด๋ ๊ฒ ์ ์ ์์ด ๋ณด๋ด๊ณ ์คํ์๋ ์ธ์
์ ์ฐ์์ด์๋ค.
2์์ ์คํ ๋ค๋๋ฐ ์ธ์
์ ๋ค์๋ค. @Transactional์ ๋ํ ๊ฒ์ ์ค์ต๊ณผ ํจ๊ป ์์๋ดค๋๋ฐ, ํธ๋์ญ์
๊ณผ ๊ฐ๊น์ด ๋ฏ ๋จผ ๊ทธ๋ฐ ์ฌ์ด๊ฐ ๋์ด๋ฒ๋ ธ๋ค. ๋ณต์ต์ ํตํด ์ข ๋ ๊ฐ๊น์์ง ์ ์๋๋ก ๋
ธ๋ ฅํด์ผ๊ฒ ๋ค. ๐ฅฒ๐ฅฒ
4์์๋ ํ
์คํธ ์ฝ๋ ์ค์ต ์ธ์
์ ๋ค์๋ค. ์ด๋ค ์์ผ๋ก ํ
์คํธ ์ฝ๋๊ฐ ์์ฑ๋๋์ง ํ๋ฆ์ ํจ๊ป ๋ณด๋ฉด์ ์ง์ ์ฝ๋๋ฅผ ์์ฑํ๋ ์๊ฐ์ ๊ฐ์ก๋๋ฐ ์ธ์
์ ๋ค์ผ๋ฉด์ ๊ฒจ์ฐ๊ฒจ์ฐ ์ฝ๋๋ง ๋ฐ๋ผ ์น๋ ๊ผด์ด ๋์๋ค.. ์ค๊ฐ์ค๊ฐ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด์ ์ดํด๋ฅผ ํ ์ ์์์ง๋ง ์ ์ฒด๋ฅผ ์ดํดํ๊ธฐ์ ๋ฌด๋ฆฌ์๋ค...
๊ทธ๋์ ์ ๋
์ ๋จน๊ณ 7์์ ์ถ๊ฐ๋ก ์งํ๋ ์ธ์
์ ํตํด ํ
์คํธ ์ฝ๋๋ฅผ ์ดํดํด ๋ณด๋ ค๊ณ ๋
ธ๋ ฅํ๋ค! ํํฐ๋์ ์ถ๊ฐ์ ์ธ ์ค๋ช
์ ํตํด ์ด๋ ์ ๋ ๋ ์ดํดํ ์ ์์์ง๋ง ์์ง ๋ง์ด ๋ถ์กฑํ ๋๋์ด๋ผ์ ๋
นํ๋ณธ์ ๋ณด๋ฉด์ ์ถ๊ฐ์ ์ธ ๊ณต๋ถ๊ฐ ํ์ํด ๋ณด์๋ค...
ํํฐ๋๋ ์์ง ํ
์คํธ ์ฝ๋๋ฅผ ๋ง์คํฐํ์ง ๋ชปํ ๊ฑธ ๋ณด๋ฉด.. ์ฝ์ง ์์ ๋
์์ธ ๊ฒ ๊ฐ๋ค.
ํ.. ์ค๋๋ ๋ญ๊ฐ ์ด๊ฒ์ ๊ฒ ๋ง์ ๊ฒ๋ค์ด ๋จธ๋ฆฟ์์ผ๋ก ๋ค์ด์จ ๋๋์ด๋ค..
๋ค ์ํํ ์ ์๊ฒ ์ง๋ง ๋
นํ๋ณธ์ ํ์ฉํด์ ์ ๋ถ ๋ด ๊ฒ์ผ๋ก ๋ง๋ค๊ธฐ ์ํด ๊ณ์ ๋
ธ๋ ฅํด์ผ ํ ๊ฒ ๊ฐ๋ค.
์์ง ์ด๋ฒ ์ฃผ ๊ธ, ํ , ์ผ์ด ๋จ์์์ผ๋๊น ๋ ์ด์ฌํ ๊ณต๋ถํด ๋ณด์!!! ํ์ดํ
!!!!!!!!!!! ๐ฅ๐ฅ๐ฅ๐ฅ
๋ด์ผ ๊ณํ โฐ
- ๊ฐ์ธ ๊ณผ์ ๋์ ๊ธฐ๋ฅ ์์!
- @Transactional์ ๋ํ ๊ธฐ์ ๋ธ๋ก๊ทธ ์์ฑ
- TIL ๋ธ๋ก๊ทธ ์์ฑ
+ ์ถ๊ฐ๋ก ๊ณํ์ด ๋ ์๊ธธ ์ ์์ด๋ค~_~
'Today I Learned(TIL) > ์คํ๋ฅดํ ๋ด์ผ๋ฐฐ์์บ ํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ TIL ] ์ฃผํน๊ธฐ ์ฌํ_Day 3 (1) | 2025.01.01 |
---|---|
[ TIL ] ์ฃผํน๊ธฐ ์ฌํ_Day 2 (0) | 2024.12.31 |
[ TIL ] ์ฃผํน๊ธฐ ์ฌํ_Day 1 (1) | 2024.12.30 |
๊ธฐ์ด ํ๋ก์ ํธ_Day 5 (0) | 2024.12.26 |
๊ธฐ์ด ํ๋ก์ ํธ_Day 7 (2) | 2024.12.26 |