https://github.com/mingtian-chan/Hang99_Spring_intro/tree/week1_assignment
GitHub - mingtian-chan/Hang99_Spring_intro
Contribute to mingtian-chan/Hang99_Spring_intro development by creating an account on GitHub.
github.com
Spring을 이용해서 Restful 하게 CRUD를 구현하는 과제였다.
과제를 하면서 힘들었던 점이 몇 가지 있었기에 공유하고자 한다.
힘들었던 점
- MySQL이 갑자기 연결이 안됨
- 말 그대로 잘 되다가 갑자기 MySQL연결이 안되어서 시간을 많이 빼앗겼다.
컴퓨터 재부팅을 하니까 제대로 잘 작동했는데, 오늘 멘토링 받을 때 그 내용을 이야기 하니까, 컴퓨터를 끄지 않아도 IntelliJ 에서 Invalidate Caches 를 실행하면 된다고 하셨다!
- 말 그대로 잘 되다가 갑자기 MySQL연결이 안되어서 시간을 많이 빼앗겼다.
2. DB에서 time을 처리하는 방식이 timestamp랑 time중에서 어떤 방식으로 할 지 고민을 하다가 DB에는 date으로 저장하고 자바에선 localdatetime으로 구현해서 에러가 났던 것 같다. 하나의 타입으로 통일을 잘 하도록 하자..
Refactoring
코드는 깃허브에 있으니 어떤 부분에서 리팩토링을 진행했는지 간단히 공유하고자 한다.
- 명사든 동사든 복수형이 Default
명사는 복수형이 s로 끝나니, board의 경우엔 boards로 만드는게 맞다.
동사의 경우, help라고 가정을 한다면 복수는 help가 맞다 (helps 아님! ) - if ~ else문 줄이기
필요없는 else문은 가급적이면 줄이는 게 좋다.
if에서 한번 걸러져서 return 되었으면 else문 대신 그냥 리턴문만 놓는게 더 보기 좋다 - 에러 핸들링은 앞에서! 함수 리턴은 마지막에 하는게 보기가 좋다!
말 그대로, 함수에서 원하는 기능의 리턴은 마지막에 놓는게 보기가 좋다.
에러 핸들링의 경우 앞에 놓고 에러의 경우에 함수를 실행하지 않고 바로 에러를 리턴하자. - password의 경우에는 PathVariable방식으로 처리하게되면 보안상의 문제가 있을 수 있다.
RequestBody에 넣어서 처리하는 방식으로 해결했다 .
put method 에서 RequestBody에 password를 넣어서 board의 정보와 비교했는데 계속 500 에러가 떠서 왜 그런지 콘솔에 print(board.getPasseword) 해서 봤는데
getPassword가 null이었다.
왜 null일까 하고 계속 올라가보니, findbyid 리턴 직전에 print(password)를 해보니 또 null이 나와서, 이부분에서 잘못되었구나 라고 직감하고 더 올라가보니까, findbyId에서 리턴해주는 board는 password가 설정되지 않은 ( null값이 들어가있는) board를 리턴해줘서 그런 거였다.
느낀 점
생각보다 프로젝트에서 에러로 인해 소비한 시간이 꽤 많았다.
왜 그렇지.. 하면서 무작정 GPT의 힘을 빌리는 것보다는, 내가 코드를 더 유심히 관찰하고 print문을 찍어 보는 것이 직관적으로 더 도움도 됐고 일관성있게 문제를 해결할 수 있었다.
앞으로도 콘솔을 찍어보는 습관을 잘 들여서 에러가 있으면 어디까지 안 되는지 콘솔을 찍어보도록 해야겠다.
'항해99 > [항해99] Spring' 카테고리의 다른 글
[Spring] 24.01.25 - Spring Project 완료! (0) | 2024.01.27 |
---|---|
[Spring ] 24.01.24 - TIL (0) | 2024.01.24 |
[Spring] 24.01.18 TIL (0) | 2024.01.19 |
[Spring] 24.01.15 - TIL (0) | 2024.01.16 |