Optional에는 참 편리한 기능이 많은 것 같다.if문 없이 null을 방지할 수 있다는 것 자체에 감동받으면서 사용하고 있다👍 좋아요 기능을 ifPresentOrElse를 사용해서 작업했는데, 요놈말고 map, orElse 등의 방식으로 더 많이 사용한다는 피드백을 받았다. 그래서 해당 기능을 map형식으로 바꾸려다가 오류를 만나서... 정리겸 블로그를 작성한다.- 유저가 특정식당에 좋아요를 누른 적이 있으면, 좋아요 취소(좋아요 DB에서 해당 좋아요 삭제)- 좋아요를 누른적이 없다면, 좋아요 (좋아요DB에 좋아요 추가) 위 기능을 수행하는 코드를 작성하면서 Optional을 점차 리팩토링 해보았다. if문과 isPresent isPresent()는 boolean역할로, 값이 존재하면 true..
3~4월 회고를 해보자. 이번에는 4L이라는 회고 방식을 사용해서 회고를 해보려고 한다. 4L 회고방식은 4Ls라고도 하는데, Liked, Learned, Lacked, Longed for 이라는 4가지 'L'로 회고하는 방식이다.참고로 4L방식은 프로젝트를 진행하면서 느낀 점에 대해 개인의 생각과 경험을 중심으로 쓸 때 용이하다고 한다. Liked (좋았던 점, 성과)1. 지난 회고에서 결심한 대로, 3월 후반부터 개인 프로젝트를 시작했다👍초반에는 Spring에 대한 이해도를 높이고 JPA와 자바8 이상의 문법에 익숙해지는 것이 제일 기본 목표였기에, 먼저 단순 CRUD 정도로 작업을 완료했다. 그리고 나서 개인 프로젝트를 기획했다.뭔가 엄청난,, 획기적인,, 새로운,, 것을 만들어보려고 했으나, ..
🚨 개인 프로젝트 진행 중 오류가 발생했다. 오류자체는 간단해서 바로 해결은 했지만... 의문이 되는 부분이 있어서 이것 저것 테스트해보다가 save()와 flush에 대해 좀 더 이해하게 되었다. 역시나 기본 개념이 제일 중요하다는 걸 다시한번 깨달았다.🤣 아직 김영한님의 DB 2편을 듣지 못했는데, DB와 트랜잭션관련하여 지식이 부족한 것 같으니 빨리 완강해봐야겠다. 우선 상황을 복기해보자면... TransientPropertyValueException: object references an unsaved transient instance 예외발생 결론부터 말하면 원인자체는 간단했다. 외래키를 넣어야 하는데, 해당 데이터가 없어서 발생한 것이었다. 오류가 발생한 것은 ShopRepositoryTest..
@Transactional 어노테이션을 사용했는데 등록, 수정이 안돼요😥위는 실제로 내가 사수에게 물었던 질문이다. 때는, 스프링도 JPA도 거의 모르고 그저 일을 쳐내기 급급했던 시절...상사가 컨트롤러 작성할 때, 간단한 등록과 수정은 로직이 동일하니 같은 API로 만들고 서비스에서 분류하는 쪽으로 작업해보라고 하셨고, 그렇게 작업을 시작했다. 대충 간단하게 예시를 보이자면, @PostMapping("/api/v1/products/save") public ApiResponse saveProduct(Product request) { return ApiResponse.ok(productService.saveProduct(request)); } 위 처럼 컨트롤러를 작성하고service에서 reque..