DTO는 record로 구현하고 간단한 entity 매핑 로직은 dto에서 static method로
서비스 DB 다루는 메서드 만들 때 트랜잭션 어노테이션 달기
어플리케이션 yml 관련 추적하도록 설정
JPA할 때 Many-To-One, One-To-One만 사용 (One-To-Many는 사용하지 않기)
메서드 구현 시 가독성을 위해 적절한 공백 사용
코드 리뷰 우선순위 지정 (재일 ↔ 근호, 시웅 ↔ 윤재)
인자없는 생성자 만들 때 protected 명시하기 → @NoArgsConstructor(access = AccessLevel.PROTECTED)
엔티티 pk 변수명은 그냥 id로 통일
코드 공백 라인 등은 인텔리제이 자동 정렬 기능으로 통일하기
윈도우 기준 ctrl + alt + L
맥 기준 option + cmd + L
페이지 / 공용 컴포넌트 / 훅 / 유틸 / 상수 디렉토리 역할을 나눠서 사용하기
Pages는 화면 구성, Shared/components는 공용 UI, hooks와 utils는 로직 담당컴포넌트는 UI만 담당하고 비즈니스 로직은 커스텀 훅 + 유틸 함수로 분리하기
도메인 로직은 가능하면 순수 함수 유틸로 만들고, Vitest로 단위 테스트 작성하기
서버 상태는 React Query 훅으로 관리하고, 컴포넌트에서는 중복 상태(useState)로 저장하지 않기
네이밍 규칙 통일하기
PascalCase.tsxuseXxx.tsxxxLogic.tsuseEffect / useCallback 사용 시 의존성 배열을 정확히 맞추고,
예외적으로 한 번만 실행해야 하는 부트스트랩 로직에서만 eslint-disable + 주석으로 의도 남기기
네비게이션/경로 로직은 useNavigate와 유틸을 통해 관리하고,
하드코딩 대신 헬퍼(getNextQuizPath, getRedirectDelay 등)로 의미를 드러나게 하기
스타일은 Emotion + 공통 theme/spacing/colors를 사용하고, 인라인 스타일/매직 넘버는 지양하기