[Proof] PostgreSQL timestamptz(6)는 세션 시간대가 달라도 같은 순간을 돌려주는가 — 지지
제목 끝의 「지지」는 판정이다. 증명 글은 실험 결과가 주장을 받쳐 주면 지지(supported), 주장을 뒤집으면 반증(refuted), 어느 쪽인지 가를 수 없으면 판정 불가(inconclusive)라고 적는다. 이 글은 지지다.
제목 끝의 「지지」는 판정이다. 증명 글은 실험 결과가 주장을 받쳐 주면 지지(supported), 주장을 뒤집으면 반증(refuted), 어느 쪽인지 가를 수 없으면 판정 불가(inconclusive)라고 적는다. 이 글은 지지다.
제목 끝의 「지지」는 판정이다. 증명 글은 실험 결과가 주장을 받쳐 주면 지지(supported), 주장을 뒤집으면 반증(refuted), 어느 쪽인지 가를 수 없으면 판정 불가(inconclusive)라고 적는다. 이 글은 지지다.
제목 끝의 「지지」는 판정이다. 증명 글은 실험 결과가 주장을 받쳐 주면 지지(supported), 주장을 뒤집으면 반증(refuted), 어느 쪽인지 가를 수 없으면 판정 불가(inconclusive)라고 적는다. 이 글은 지지다.
이 글은 「규칙을 사람 대신 기계가 지키게 할 수 있는가」를 실제로 돌려 본 기록이다. 먼저 단어부터 정리하고, 왜 이 실험을 했는지로 넘어간다.
Domain 영속화 표준(Domain 객체를 DB에 저장하고 다시 꺼내는 방법을 정한 글이다. 「영속화」는 영속성을 갖게 만든다는 뜻이다)은 트랜잭션 경계를 UseCase 구현 메서드에 두기로 하면서 이렇게 적었다.
예외 종류별 처리 표준 원칙 5는 Spring이 던지는 요청 오류까지 Advice에 등록하라고 정했다. 여기서 「요청 오류」는 내 코드가 던지는 예외가 아니라, 바깥에서 서버로 보낸 메시지(요청)가 내 Controller 메서드에 닿기 전에 Spring이 「이 요청은 받을 수 없다...
계층별 DTO 명명 표준은 계층(Controller · Service · Repository처럼 역할별로 나눈 코드 층) 사이에서 데이터를 나르는 그릇(DTO)의 이름을 정한 글이다. 그 글은 목록 조회 결과를 담는 PagingResult에 전체 개수 totalCount를 두는 대...
이 글에는 서버가 셋 나온다. 우리 서버를 부르는 쪽(클라이언트 — 브라우저나 앱), 우리 서버, 그리고 우리 서버가 일을 하다가 다시 부르는 다른 회사의 서버(결제사 같은 곳, 이 글에서는 「상대」라고 부른다)다.
예외 종류별 처리 표준의 원칙 2는 영속성 예외(DB에 저장하고 읽는 과정에서 나는 예외)를 Repository 구현체의 try/catch에서 번역하게 한다. 예시 구현체는 save 하나에서 신규와 수정을 함께 처리하고, 전체를 감싼 catch가 DataIntegrityViolat...
패키지 구조 표준은 infra(DB와 맞닿는 클래스가 사는 계층)를 package-private으로 막는다. 그렇게 막으면 Service(업무 로직을 처리하는 계층의 클래스)는 infra 안의 클래스(예: Entity, DB 테이블과 짝을 이루는 클래스)를 import 할 수 없다...
DTO 생성자 표준은 DTO를 「생성자로만 만든다」고 정했다. 그래서 빈 객체를 먼저 만들게 하는 @NoArgsConstructor(기본 생성자를 만들어 주는 Lombok 표시)와, 만든 뒤에 값을 바꾸게 하는 @Setter(각 필드의 setter를 만들어 주는 Lombok 표시)...
제목 끝의 「지지」는 판정이다. 증명 글은 실험 결과가 주장을 받쳐 주면 지지(supported), 주장을 뒤집으면 반증(refuted), 어느 쪽인지 가를 수 없으면 판정 불가(inconclusive)라고 적는다. 이 글은 지지다.
DTO 생성자 표준은 금지 목록을 적은 뒤 그 목록이 저절로 지켜진다고 했다.
Jackson은 자바 객체와 JSON을 서로 바꿔 주는 라이브러리이고, 스프링이 기본으로 내장해 쓴다. JSON을 받아 객체를 만들 때 Jackson이 고를 수 있는 길은 크게 둘이다.
DTO 생성자 표준 원칙 3은 이렇게 적었다.
스키마 마이그레이션 표준 원칙 7은 슬로우 쿼리(정해 둔 시간보다 오래 걸린 쿼리)로 잡힌 검색 조건 컬럼의 조합에 인덱스를 추가하기로 정했다. 이때 만드는 인덱스는 컬럼 여러 개를 묶은 복합 인덱스라서 컬럼을 어떤 순서로 묶을지가 문제가 되는데, 원칙 7은 그 순서를 이렇게 적었...
패키지 구조 표준은 코드를 패키지(클래스를 묶는 폴더)로 나누는 규칙이다. 그 안에 common이라는 패키지가 있다. 주문 · 회원 같은 특정 도메인(업무 단위)에 속하지 않고 모든 곳이 같이 쓰는 클래스(응답 모양, 오류 코드 같은 것)를 모아 두는 곳이다.
계층별 검증 표준은 요청 값이 규칙에 어긋났을 때 돌려주는 실패 응답(서버가 요청을 보낸 쪽에 돌려주는 메시지)을 한 자리에서 만들기로 했고, 근거는 이랬다.
예외 종류별 처리 표준은 벌크·배치 경로(웹 요청이 아니라 배치 작업이 DB의 행을 한꺼번에 바꾸는 코드 흐름)에서 예외를 번역하지 않기로 하면서, 대신 로그를 남길 자리를 이렇게 정했다.
예외 처리 표준과 예외 종류별 처리 표준은 Error 계열을 잡지 않기로 정했고, 그 근거로 이렇게 적었다.
Service 계층 assert 표준은 Service 클래스 안에서 assert 문을 어디에 쓰고 어디에 쓰지 않을지 정한 글이다. 그 글은 도달 불가 분기(제대로 돌면 실행이 절대 오지 않아야 하는 갈래)를 assert가 아니라 throw new AssertionError로 막기...
먼저 알아 둘 것 — 이 글의 결과는 반증(주장이 틀렸다는 판정)이지만, 실험에 쓴 자식 객체(주문 항목 OrderItem)가 표준이 금한 모양이었다. 값을 담는 필드가 final이 아니었고, 그 필드를 직접 바꾸는 void 메서드가 있었다. 그래서 이 결과는 표준을 반증하지 않는...
제목 끝의 「지지」는 이 실험의 판정이 supported(주장이 뒷받침됐다)라는 뜻이다.