메뉴 단건 조회 API에서 존재하지 않는 매장의 ID와 유효한 메뉴 ID를 함께 요청했음에도 정상적인 메뉴 정보가 반환되는 문제가 발생했습니다.매장 목록Redis에 저장된 데이터요청 API반환 결과존재하지 않는 매장 ID인 333과 Redis에 캐싱된 메뉴 ID인 3을
Spring Batch size 적용법 Batch size 적용법에 대해 알아보겠습니다. Batch Size란? Batch size는 JPA가 다수의 INSERT, UPDATE, DELETE 작업을 처리할 때 SQL 실행을 모아서 일괄 실행(batch executi
도서 리뷰 평점 평균을 구해 순위를 집계하는 로직을 작성했습니다. 처음 생각했던 구조 도서 총 리뷰 수를 집계하는 쿼리를 작성하여 통계 엔티티로 반환 도서 평점 평균을 집계하는 쿼리를 작성하여 통계 엔티티로 반환 평점 평균 포매팅 변경 이유 집계 결과를 엔티티로
Spring Framework에서 제공하는 기능으로, 정해진 시간에 작업을 자동으로 실행할 수 있게 도와주는 기능입니다.어플리케이션 클래스에 @EnableScheduling을 사용합니다.Spring Bean으로 등록된 클래스의 메서드 단위에서 선언하여 사용합니다.메서드
CascadeType을 ALL로 할지 PERSIST로 할지 고민하던 중 일정 삭제 시 담당자도 삭제되는것이 옳다고 생각해 ALL을 적용하여 해결했었습니다. 그러나 추후 CascadeType을 여러가지를 적용할 수 있다는 사실을 알게되었고, PERSIST와 REMOVE를
Spring JPA에서 조건에 따라 검색 조건이 달라지는 쿼리를 작성할 때 자주 사용하는 기법이 바로 Dynamic Filter, 즉 동적 필터링입니다. 사용자의 입력 값이 존재하는 경우에만 조건을 추가하고, 그렇지 않으면 해당 조건을 무시하는 방식으로 단일 쿼리로
자기 자신의 메서드를 호출하는 것입니다.Spring AOP관점에서 살펴보겠습니다.AOP기능은 반드시 프록시 객체를 통해 메서드를 호출해야만 작동합니다. 이 때 Self-invocation이 발생할 경우, 프록시 객체가 아닌 진짜 자기 자신의 메서드를 호출하므로 AOP가
트랜잭션(Transaction)은 데이터베이스에서 하나의 논리적 작업 단위를 의미합니다. 여러 SQL 명령을 하나의 단위로 묶어 모두 성공하거나 모두 실패해야만 데이터 정합성을 유지할 수 있습니다.A → B 계좌 이체 작업 A의 잔액 차감 B의 잔액 증가→ 하나라도
AOP(Aspect-Oriented Programming, 관점 지향 프로그래밍)은 공통된 기능(=횡단 관심사)을 분리하여 핵심 비즈니스 로직과 독립적으로 관리하기 위한 프로그래밍 패러다임입니다.예: 로깅, 트랜잭션, 보안, 성능 측정 등핵심 로직을 건드리지 않고도 공
댓글 삭제 기능을 만든 뒤 Postman에서 테스트를 해보려는데, 반환값이 출력되지 않는 문제가 발생했습니다.해결과정 : HTTP Method가 204 NO CONTENT일 경우 Body를 반환할 수 없다는 사실을 알게되어, 200 OK로 변경했습니다. (API 명세서
Spring Validation은 Spring Framework에서 제공하는 입력값 검증 기능으로, 사용자의 입력값이 미리 정해진 조건에 부합하는지를 확인하는 데 사용됩니다.이 기능은 Bean Validation 2.0(JSR-380) 스펙을 기반으로 작동하며, 대표적
Lv.2 과제 진행 사항에 fetch join을 사용하여 N+1 문제를 해결하고 있는 TodoRepository를 동일하게 동작하는 @EntityGraph기반의 구현으로 수정하는 부분이 있었습니다.우선 @EntityGraph가 무엇인지 간단하게 알아보았습니다.간단하게
@EntityGraph와 Fetch Join은 모두 N+1 문제를 해결하기 위해 사용하는 도구입니다.JPA에서 연관된 엔티티를 즉시 로딩(Fetch Join) 하도록 선언하는 방법입니다.내부적으로 SQL문의 JOIN FETCH와 유사한 SQL을 자동 생성해줍니다.JPQ
프로그래머스 Lv.1 가운데 글자 가져오기 문제.처음 문제를 접했을 때 들었던 생각은 문자열의 길이를 구하고, 홀수 짝수 여부를 판별해 가져올 글자의 범위를 정하면 되겠다는 생각이 들었습니다.하여 문자열의 길이를 strLength 변수에 담아준 뒤, if()문을 사용해
자바에서는 예외(Exception)를 클래스 형태로 정의해두었으며, 크게 체크 예외와 언체크 예외로 나뉜다.체크 예외: Exception을 상속받은 예외 중 RuntimeException을 제외한 모든 예외이다.언체크 예외: RuntimeException과 그 하위 예
@PathVariable의 값이 URL 경로에서 누락된 경우 발생한다.위 PI 사용할 경우 RL로를 /posts/{id}로 보내야 하는데, 이 때 /posts로 보내고 id값이 누락되는 경우 MissingPathVariableException이 발생한다.@Request
스프링 프로젝트를 개발하다 보면 도메인별로 명확하고 통일된 방식의 예외 처리 구조가 필요하다. 이를 위해 CustomException을 활용한 글로벌 예외 처리 구조를 구축할 수 있다. 아래는 지금까지의 구현 내용을 기반으로 커스텀 예외 처리 방식에 대해 정리한 글이다
원래 계획했던건 ResponseDto를 용도별로 분리하는 브랜치를 만들어서 작업한 후 기존에 작업했던 게시글 전체 조회, 단건 조회, 수정 브랜치 순서로 각각 이동하여 하나씩 구현하려 했는데, 이렇게 작업하면 게시글 전체 조회 기능을 구현할 때 단건 조회, 수정까지 함
사용자 신원 확인과 해당 사용자에게 권한을 부여해 할 수 있는 일의 범위를 지정하는 보안의 핵심 개념이다.가장 기본적인 웹 인증 방식이다.로그인 시 서버가 인증 정보를 담은 쿠키를 클라이언트에게 발급한다.클라이언트는 매 요청마다 이 쿠키를 자동 전송한다.서버는 쿠키의
첫 번째 문제 전체 일정 목록을 조회하는 API를 만들어 POSTMAN으로 테스트하는 과정에서 에러가 발생했다. schedule_id컬럼을 조회할 수 없기 때문에 발생되는 오류로 판명되었다. 컬럼명을 카멜케이스로 사용중이어서 찾지 못 하는 것 같았다. 그래서 데