25장. 깨끗한 환경에서 첫 실행을 증명한다
java -version만 같아도 vendor, architecture, JVM option이 다르면 결과가 달라질 수 있다. CrewLink는 Java 21, Maven Wrapper, UTF-8, UTC container 시간을 고정하고 실제 현장 timezone은 업무 값으로 다룬다. ./mvnw -q test와 ./mvnw spring-boot:run을 새 clone에서 실행한다. IDE가 만든 classpath로만 성공한 상태는 합격이 아니다.
configuration은 이름·형식·필수 여부·secret 여부·owner를 표로 관리한다. production 값은 저장소에 두지 않는다. @ConfigurationProperties와 validation으로 잘못된 URL, 음수 timeout, 빈 audience를 시작 시 거부한다. local용 예제 값은 실제 account와 닮지 않은 fixture를 쓴다.
첫 실행 기록에는 commit, Java/Maven version, OS, 명령, test 수, health 응답, 종료 code를 남긴다. 오류가 나면 target 삭제부터 하지 말고 첫 Caused by, condition report, active profile, effective pom을 확인한다. 같은 README로 다른 독자가 30분 안에 화면과 API를 재현해야 다음 장으로 간다.