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를 구현하는 과제였다. 

 

과제를 하면서 힘들었던 점이 몇 가지 있었기에 공유하고자 한다.

힘들었던 점

  1. MySQL이 갑자기 연결이 안됨
    1. 말 그대로 잘 되다가 갑자기 MySQL연결이 안되어서 시간을 많이 빼앗겼다. 
      컴퓨터 재부팅을 하니까 제대로 잘 작동했는데, 오늘 멘토링 받을 때 그 내용을 이야기 하니까, 컴퓨터를 끄지 않아도 IntelliJ 에서 Invalidate Caches 를 실행하면 된다고 하셨다!

 

2. DB에서 time을 처리하는 방식이 timestamp랑 time중에서 어떤 방식으로 할 지 고민을 하다가 DB에는 date으로 저장하고 자바에선 localdatetime으로 구현해서 에러가 났던 것 같다. 하나의 타입으로 통일을 잘 하도록 하자.. 

 

Refactoring

코드는 깃허브에 있으니 어떤 부분에서 리팩토링을 진행했는지 간단히 공유하고자 한다.

 

  1. 명사든 동사든 복수형이 Default
    명사는 복수형이 s로 끝나니, board의 경우엔 boards로 만드는게 맞다.
    동사의 경우, help라고 가정을 한다면 복수는 help가 맞다 (helps 아님! )

  2. if  ~ else문 줄이기
    필요없는 else문은 가급적이면 줄이는 게 좋다.
    if에서 한번 걸러져서 return 되었으면 else문 대신 그냥 리턴문만 놓는게 더 보기 좋다

  3. 에러 핸들링은 앞에서! 함수 리턴은 마지막에 하는게 보기가 좋다! 
    말 그대로, 함수에서 원하는 기능의 리턴은 마지막에 놓는게 보기가 좋다. 
    에러 핸들링의 경우 앞에 놓고 에러의 경우에 함수를 실행하지 않고 바로 에러를 리턴하자.

  4. 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