문제 상황Redis Cache를 사용해서 List를 저장하려고 했습니다.엔티티의 모든 데이터를 저장하는 것은 비효율적이고 참조된 엔티티와의 순환 참조 때문에 List 형태로 저장하기로 했습니다.기존 캐싱 적용 코드@Override@Cacheable(value = "nowRecruit", key = "'sorted'")public List getNowRecruitOrderByClass(LocalDateTime now) { return recruitRepository.findNowRecruitOrderByClass(now);}캐싱한 데이터는 위 코드와 같습니다.List를 응답으로 반환하고 **nowRecruit**라는 캐시의 **sorted**라는 키 값으로 저장됩니다.Redis 설정으로 Value는 ..
기존 Dockfile을 통해 도커 이미지를 빌드하고 푸쉬하는 방식에서 Gradle 플러그인 Jib을 통해 빌드 시간을 단축하고자 빌드 방식을 변경해 보았습니다. Jib을 통해 빌드된 이미지를 실행하면서 겪은 시행착오를 기록하고자 합니다.트러블 슈팅문제 상황Error: Unable to access jarfile app.jar 기존 Dockerfile을 통해 빌드와 이미지를 생성하는 방식에서 JIB 빌드 방식으로 변경하여 이미지를 생성했습니다. JIB으로 생성한 이미지를 Run 했을 때, 위와 같은 오류가 발생하여 올바르게 Spring Server를 실행시킬 수 없는 오류가 있었습니다.logs를 찍어봐도 별다른 오류가 없고 app.jar 파일에 접근할 수 없다는 에러 메시지만 있어 당황스러웠습니다. 또한,..
이슈 👉 (1) 일대다 관계에서 1+N 문제로 인해 불필요하게 N 번의 쿼리가 계속해서 발생했고, 페이징 처리를 동시에 해야 했다. (2) List 타입에 해당하는 요소들을 각각 query를 날려 여러 번의 select 문이 발생하는 비효율적인 상황이 있었다. 문제 👉 (1) N + 1 문제와 더불어 페이징 처리 구현 문제 내가 좋아요 한 게시글의 정보를 불러와야 해서, Page 에서 Board의 정보를 추출했다. getBoard()를 하는 만큼 N 번의 쿼리가 추가로 발생하여 비효율적이라는 생각이 들었다. (내가 구현하는 API는 좋아요한 글의 정보를 조회하는 것이어서 좋아요 정보랑 게시글의 정보가 무조건 필요한 상황이었다.) 또한, Fetch Join을 사용해 CountQuery를 정상적으로 만들어 ..
이슈 'toBoardInfo(Page, List)' clashes with 'toBoardInfo(Page, List)'; both methods have same erasure 👉 동일한 자료형을 반환하는 메서드 오버로딩을 구현하는데 문제가 발생했다. 자바에서는 메서드 오버라이딩과 오버로딩을 통해 다형성을 구현할 수 있다. 메서드 오버라이딩이란 부모 클래스가 가지고 있는 메서드를 자식 클래스에서 동일한 메서드 이름, 매개변수 타입 및 개수로 재정의하는 것을 의미한다. 상속 관계에서 발생하며, 자식 클래스에서 부모 클래스의 메서드를 재정의하여 자식 클래스의 특정한 동작을 수행할 수 있다. 메서드 오버로딩이란 같은 클래스 내에서 메서드 이름은 같지만, 매개변수의 타입, 순서, 개수가 다른 여러 개의 메서드..