#JPA
글 8편
-
예외를 잡았는데도 롤백됐다
문제: 부가 작업이 실패하면 본 작업까지 사라진다 LCA 승인 기능에 부가 작업이 둘 붙어 있다. baseline 저장 — 승인 시점의 지표를 스냅샷으로 남김 할당 스냅샷 — 같은 성격 둘 다 승인의 전제조건이 아니다. 없어도 승인은 유효하다. 그런데 이게 실패하면 승인 자체가 5...
-
ddl-auto: update의 빈틈을 보완 DDL 자동화로 메우기
Flyway를 걷어낸 뒤 남은 숙제 이전 글: Flyway를 도입하고 3주 만에 걷어낸 이야기 걷어낸 뒤 스키마 관리 방식 JPA ddl-auto 사람이 손으로 적용하는 SQL 파일 묶음(db/manual/*.sql) 구멍 두 가지 stg 환경은 ddl-auto: validate ...
-
소프트 삭제 전환과 @Filter가 새는 곳
엔티티 14개를 하드 삭제에서 소프트 삭제로 배경 — 보고서에서 참조하는 데이터가 삭제되면 과거 보고서가 파손 작업 — 삭제를 is_delete 플래그로 전환 대상 — 엔티티 14개 개념은 단순한데 실제로 걸린 곳은 둘 — 유니크 제약, @Filter 미적용 경로 (a) 유니크 제...
-
N+1 제거 4종 세트 — fetch join이 답이 아닐 때
N+1은 하나의 문제가 아니다 기간: 한 달 반 작업: 대시보드 조회 성능 개선 N+1 조우 횟수: 여러 번, 매번 처방이 상이 “N+1이면 fetch join” 반사가 통하지 않는 경우: 절반 이상 (a) fetch join을 못 쓸 때 — @BatchSize 첫 케이스 위치: ...
-
뷰를 물질화 테이블로 — 읽기 비용을 쓰기 시점으로 옮기기
읽을 때마다 5개 CTE를 풀스캔하고 있었다 대상 — 대시보드 조회에 쓰이는 엔티티 하나 매핑 — @Subselect로 매핑된 뷰 구성 — CTE 5개를 엮은 집계 뷰 MySQL의 동작 — 이 뷰를 실체화해두지 않음. 조회할 때마다 전체 재계산 즉 화면을 열 때마다 풀스캔 판단 기...
-
같은 User인데 권한 검사가 깨졌다 — 재사용의 숨은 계약
3분 만에 되돌린 최적화 인증 경로에서 DB를 네 번 때리던 걸 걷어낸 이야기는 인증 필터가 매 요청 DB를 네 번 때리고 있었다에 썼다. 감사 로그 비동기화, 커넥션 풀, 인메모리 캐시까지 29분 동안 커밋 여섯 개가 나갔다. 그 글에 안 쓴 게 하나 있다. 여섯 중 하나는 3분...
-
티켓 원정대 출발!
프로젝트 시작 TDD 책을 정독하고 읽었던 내용들을 사용해보는 프로젝트를 진행해보려고 한다. 나는 2,3번 프로젝트를 진행해봤는데 결과는 좋지 않았고 이번에는 결과물을 완성하고 싶은 마음이 크다. 설명 100명에게 Ticket을 배포하는 프로그램을 RESTful방식 개발합니다 *신...
-
엔티티 설정
고민 과연 Account 객체를 생성할 때 필요한 column명을 찾아서 적어봤다. Account @Getter @Builder @Entity @NoArgsConstructor @AllArgsConstructor public class Account { @Id @GeneratedV...