23-06-15 TIL

more·2023년 6월 15일
0

문제

  • 인텔리제이에서 mysql 데이터베이스를 drop하려고 하는데 갑자기 '[HY000][1008] Can't drop database 'voyagepost'; database doesn't exist. [42000][1049] Unknown database 'voyagepost'.' 이런 식의 에러 메시지가 출력 된 뒤 drop이 되지 않는다. 3분 전까지만 해도 잘 drop이 되었었는데...

  • postman으로 api를 보내어서 확인중인데 createdAt과 modifiedAt이 저장이 안되어있고 null값으로 계속 나온다.

  • 다른 기능들 (전체 조회, 하나만 조회, 삭제, 작성) 은 되는데 update 기능만 작동을 안함

시도

  • Mysql Database
    • 일단 refresh를 계속 시도하면서 drop을 table, schema 등 전부 시도해봄
      -> 안됨
    • 에러 메시지를 살펴보니 존재하지 않는 database라고 말하고 있다. 하지만 인텔리제이 상에서는 존재하는 걸로 나옴
      -> 코드를 실행시켜서 확인
      -> 실행이 되지 않고 에러메시지 (Unable to determine Dialect without JDBC metadata)가 출력됨

  • 우선, createdAt과 modifiedAt이 제대로 들어가는지 확인
    • 테이블에 있기는 한데 null 값으로 입력되는 거 보니 인식을 ResponseBody에서 보낸거를 인식 못하는 듯
    • 계속 되는 고민 끝에 뭔가 Annotation을 빼먹은거 아닐까? 하는 의심이 들었다.
      -> 강의에서 만든 Memo 프로젝트와 계속 비교해 보았다.

  • Postman을 통해서 PUT 을 계속 날려본 결과 제대로 api로 들어가기는 한다.
    -> 그렇다면 데이터는 보내주는데 데이터를 받지 못하거나 데이터베이스에서 수정을 못하고 있다는 뜻으로 생각
    -> 출력을 해보니 데이터를 제대로 받기는 하는 것으로 보임
    -> 데이터베이스에서 수정을 못하고 있는 것으로 보인다!!

해결

  • voyagepost라는 이름의 database가 없다고 하니 cmd에서 mysql에 들어가서 show databases; 로 확인해보니 아까 만들었던 voyagepost가 없어졌다. 아마도 cmd를 종료하니 사라진 느낌인데...
    -> voyagepost를 다시 만들어주고 cmd를 끄지 않고 하니 정상 작동이 된다.
    -> 아까 cmd를 exit으로 종료하지 않고 강제종료해서 사라졌거나, drop하는 과정에서 schema 전체를 drop해버린 거 같다. (cmd 종료하고는 아무 상관 없는듯 ㅎㅎ)
    -> 다시 하니까 저장됨
    -> 해결

  • ...Application.java에서 @EnableJpaAuditing 이 어노테이션을 추가해주지않았다.
    -> TimeStamped.java에서 @EntityListeners(AuditingEntityListener.class) 어노테이션은 추가해주었고 Entity에다가 extends도 해주었는데 VoyagePoastApplication.java에서@EnableJpaAuditing@EnableJpaAuditing을 안해주었던 것...
    -> 제대로 개념을 모르고 있다는 것, 사용법이 익숙지 않았다는 것
    -> 해결... 은 했지만 다시 복습해야겠음

  • 아무리 봐도 또 Annotation 문제인 것으로 보인다.
    -> update하는 메서드는 코드가 굉장히 짧기 때문
    -> VoyageController에 들어가서 updateVoyage를 'ctrl + 클릭' 해보니 VoyageService로 이동했다.
public Long updateVoyage(Long id, VoyageRequestDto voyageRequestDto) {
        VoyagePost voyagePost = findVoyage(id);
        voyagePost.update(voyageRequestDto);
        return id;
    }

-> 별 이상은 없어보이고 return 까지 제대로 출력되는 것을 볼 수 있었는데...
-> @Transactional을 안해줬음...
-> 해결

알게 된 점

  • Database를 Drop할 때에 schema를 drop해버린다면 다시 create database ... 을 해야하므로 주의하자
    -> drop은 테이블만 하는 걸로

  • Timestamp를 Auditing할 경우에 실행시키는 파일인 ...Application.java에 @EnableAuditing을 해주어야 Auditing으로 사용 가능
    -> 제대로 복습하자, 인강 3회독 이상...

  • 데이터베이스를 수정할 경우에는 @Transactional이라는 Annotation을 꼭 붙여주어야지 수정이 가능하다고 어제 강의에서 들었는데 또 까먹었다...
    -> 진짜 제대로 하자!!!!!

0개의 댓글