Blog

[Spring]19 MVC CRUD기능 구현중 500 error null값과 생성자와 관련된 트러블슈팅

Author
Summary
오류를 끝까지 될때까지 끝까지 파버리기
Category
Study
Tags
Spring
Favorite
Memory Date
2023/08/30
Cross Reference Study
Related Media
Related Thought
Related Lessons
tag
날짜
작성자
진행상황
진행 전
태그구분
6 more properties
프로젝트를 진행하다가 가장 무서운 오류가 있다.
그냥 개발자(나)의 잘못인 경우가 대부분이다. 이 오류는 오타부터 시작해서 로직이 잘못된 것 등등 DB까지 연결되면 점점 어려워진다. 그런데, Spring은 오히려 오류를 찾기가 쉽다. 컴파일러나 런타임 오류 부분을 잘 찾아주기도 하지만 그 힌트를 통해서 일단 데이터 흐름을 생각해보고 구조적으로 어느 부분을 봐야 할 지 내가 결정하기 편한 느낌이 있다.
password가 null로 들어간다.
Create Post작성 후 테스트에서 비밀번호가 null로 들어가는 문제가 발생했다. 하나씩 추적해 나가자.
우선 SQL문이 잘못되었는지 확인 → DB콘솔에서 SQL문을 직접 INSERT해보았다. 잘 들어간다. 그럼 객체에 문제가 있는 것이다. 확인해봐야 할 부분은
JSON→DTO [→안전지대 - SQL문 실행 구간→] DTO→JSON
이렇게 3구간으로 나눠지는데, 일단 위에서 SQL문의 문제는 아니었기 때문에 결국 객체와 JSON 변환 구간에서 문제가 생긴 것으로 판단했다.
먼저 첫번째 JSON→DTO 구간을 살펴보았다. JSON Dictionary 형태에 맞게 {”Key” : “Value”, … , … }의 형태, Key가 틀렸는지 확인했다. 매개변수로 들어온 JSON엔 문제가 없었다.
그럼 변환은 제대로되었을까? JSON을 받아서 DTO객체로 변환된다. 이것은 Blog 클래스의 생성자에 의해서 객체가 인스턴스화 되는데, 분명히 여기에 문제가 있을 것이다. 역시 매개변수로 들어온 password를 this.iv에 전달하지 않고 있었다. 클래스, 생성자의 중요성을 매번 깨닫는다. 괜히 선배님이 이부분을 꼭 보고가라했던것이 아니었다. 만약 ‘Java의 정석’을 주말에 달리지 않았으면 이것에 대한 문제를 해결하는데 엄청 오랜시간이 걸렸을 것이다. 너무 뿌듯하다. 다시한번 기본기의 중요성을 느꼈다.
나와 비슷한 사례를 검색 할 수 있었다.
이번엔 accesstime이 null이다
이건 생각보다 대공사였다. 우선 Date, Datetime, Timestamp의 차이와 DB와 연결 할 때 어떤것을 보고 선택해야 하는지 찾아봐야겠다. 우선은 Date로 했었는데 결국 나는 YYYY-MM-DD HH:MM:SS 형태를 맞추고 싶었기 때문에 Timestamp를 선택했지만 예전에 SimpleDateFormat?같은것을 사용했던것 같은데 당장 기억이 나지 않았다. 또한 시간이 나오지 않는 문제도 있었다.
날짜 관련된 것들에 대해서 좀 정리해볼 필요가 있다. 그리고 처음엔 시간이 맞춰지지 않아서 무슨문제인가 찾아보았는데 결국 UTC 시간으로 되어있어서 한국에 맞춰서 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+9") 로 현재시간을 맞출 수 있었다.
이게 또 JDK버전마다 다른점이 있나보다..
각종 타입을 전체적으로 정리하신분이 있었다. 참고 될 듯하다.
전체적으로 내가 궁금한 점을 정리해주신 블로거도 있었다. 이걸 재정리해서 사용해봐야겠다.