코드로 배우는 스프링 부트 구판, 신판 둘 다 공부중인데 구판을 실습하는 중 getOne()을 사용하는 과정에서 오류가 발생했다.
왜냐하면 getOne()이 스프링 부트 2.5부터는 더이상 사용하지 않기 때문..... (이런 오류가 발생했다)
그래서 실습 코드 중
Board board = repository.getOne(boardDTO.getBno()); 를
Optional<Board>
result = repository.findById(boardDTO.getBno()); 으로 변경을 해줬다.
이번에는 findById로 변경을 하니 board의 값을 찾지 못하고 오류가 발생했다. (당연하다 board 타입으로 바로 받았던 걸 finaById는 Optional으로 받아야 하니까...)
이렇게 board에 직접 result의 값을 넣어서 해결 완료!
문득 왜 꼭 fineById()는 Optonal로 리턴타입을 감싸줘야 하는걸까? 하는 의문이 들었다.
검색을 해보니 CrudRepository 때문이라고 하는데 (🤔?)
일단은 Repository 인터페이스를 만들 때 JPA 관련된 것을 사용하기 위해서 JpaRepository를 상속 받았던 걸 기억해보자.
바로 그 JpaRepository 인터페이스에서 find와 관련된 메서드를 알기 위해서는 CrudRepository를 확인하라고 적혀져 있다!
그리고 CrudRepository 인터페이스로 가보면 findById()의 리턴값이 Optional 타입으로 고정이 되어 있다!!!
Optional을 쓰면 좋은 점은 여기로....