예외가 났는데 INSERT가 남았다면: 체크 예외의 롤백 규칙
트랜잭션이 활성화돼 있어도 기본 체크 예외는 커밋될 수 있다. Spring 6.2.19와 H2에서 예외별 종료 후 행 수를 비교하고, rollbackFor·ALL_EXCEPTIONS·예외를 잡아 정상 반환하는 경우를 구분한다.
빌드노트
검색어를 입력해 글을 찾아보세요.
총 480개의 글
트랜잭션이 활성화돼 있어도 기본 체크 예외는 커밋될 수 있다. Spring 6.2.19와 H2에서 예외별 종료 후 행 수를 비교하고, rollbackFor·ALL_EXCEPTIONS·예외를 잡아 정상 반환하는 경우를 구분한다.
ExecutorService.submit의 Future를 버리면 작업 실패가 호출부의 catch와 uncaught handler에 드러나지 않을 수 있다. execute·submit의 실제 비교로 완료 표식과 성공을 구분하고, 반환 Future를 관찰할 담당 경계를 정한다.
Spring Boot 3.5.7의 자동 구성 매퍼는 모르는 JSON 속성을 무시했다. 오타·추가 필드·누락을 실제 요청으로 비교하고, FAIL_ON_UNKNOWN_PROPERTIES와 필수 값 검증을 각각 선택할 기준을 설명한다.
로그 안에 id=42가 있어도 String.matches는 전체 입력을 검사해 false일 수 있다. 같은 패턴으로 matches·lookingAt·find의 결과와 탐색 위치, 실패 후 group() 예외, region의 영향을 직접 비교한다.
Spring MVC의 LocalDate 날짜 파라미터가 컨트롤러 진입 전에 400이 되는 조건을 비교한다. ISO 명시 여부와 두 Locale의 실제 결과를 바탕으로 요청 형식, 존재하지 않는 날짜, 누락을 구별한다.
오류 DTO의 status 필드가 400이어도 HTTP 응답은 200일 수 있다. 같은 예외와 JSON을 POJO·ResponseEntity·ResponseStatus로 비교하고, 처리 메서드에서 상태를 지정한 뒤 본문과 상태를 함께 검사하는 방법을 설명한다.
Java replaceAll의 replacement는 달러를 그룹 참조로, 역슬래시를 이스케이프로 해석한다. 실제 예외와 경로 손실을 비교하고, 문자 치환에는 String.replace를, 정규식 검색에는 Matcher.quoteReplacement를 적용하는 기준을 설명한다.
로그용 count()도 Stream을 끝낸다. 같은 Stream의 collect()에서 난 예외를 확인하고, 한 번 수집한 목록의 size()로 개수를 기록하는 수정과 원본에서 새 Stream을 만들 조건을 설명한다.
삽입 뒤 키의 equals·hashCode에 쓰는 필드가 바뀌면 같은 객체로도 조회가 실패할 수 있다. 실제 해시·get·containsKey·entrySet 결과로 확인할 지점을 짚고, 불변 ID 키와 변경 전 제거 순서를 설명한다.
subList는 원본과 연결된 범위 뷰다. 원본 add 뒤 조회 실패와 변경 전 ArrayList 복사를 짧게 비교하고, set·뷰 remove의 차이와 복사 시점을 설명한다.
String.length()는 UTF-16 코드 단위를 센다. JShell에서 이모지·결합 문자의 길이와 잘린 서로게이트를 비교하고, 코드 포인트 또는 확장 자소군으로 제한하고 자르는 기준을 설명한다.
Java split이 끝의 빈 필드를 버리는 이유와 split(",", -1)로 보존한 뒤 열 수를 검사하는 방법을 설명한다. 빈 배열·빈 문자열 원소의 차이, 양수 limit의 함정과 정규식 구분자·CSV 문법의 경계를 실제 결과로 확인한다.