전체 글

✅ 기존 테이블 구조CREATE TABLE reservation( id BIGINT NOT NULL AUTO_INCREMENT, guest_name VARCHAR(255) NOT NULL, date DATE NOT NULL, time_id BIGINT NOT NULL, theme_id BIGINT NOT NULL, status VARCHAR(50) NOT NULL, PRIMARY KEY (id), UNIQUE (guest_name, date, time_id, theme_id), FOREIGN KEY (time_id) REFERENCES reserv..
⚡️ 왜 테스트도 성능이 중요한가?1. 빠른 피드백은 개발 생산성을 높인다.개발자는 보통 다음과 같은 사이클을 반복하며 개발을 진행한다.코드 작성 → 테스트 실행 → 실패 확인 → 수정 → 테스트 실행테스트 실행 시간이 길어질수록 피드백을 받기까지의 시간이 늘어난다.결과적으로 버그를 더 늦게 발견하게 되고 개발 생산성도 감소한다.이는 개발자의 집중력을 떨어뜨리고, 가뜩이나 귀찮은 테스트를 더 실행하기 싫게 만드는 원인이 된다. 2. 테스트 성능은 배포 속도에 직접적인 영향을 준다대부분의 서비스는 CI/CD 파이프라인에서 테스트를 수행한 후 배포된다.따라서 테스트가 느리면 CI/CD 파이프라인 전체에 병목이 발생한다.PR 생성 → 테스트 수행 → 빌드 → 배포테스트 시간이 길어질수록 코드 리뷰, 머지, 배..
✅ 소프트 딜리트는 무엇이고 왜하는걸까?소프트 딜리트란 데이터를 진짜로 삭제하지 않고 “삭제된 것처럼 표현만 하는 방식”이다.즉, 데이터 자체는 DB에 그대로 존재하지만 조회에서는 숨긴다.DELETE 쿼리를 실행해 실제 데이터베이스 테이블 상에서 제거하는 ‘하드 딜리트’ 방식과 대조되는 방식이다.DELETE FROM users WHERE id = 1; 그럼 왜할까?삭제했지만 나중에 필요할 수도 있기 때문이다.예를 들어 사용자가 실수로 삭제해서 데이터를 복구해야 할 수도 있고,금융, 의료, 기업 서비스 처럼 데이터를 감사하고 추적해야 하는 서비스의 경우 삭제데이터가 매우 중요할 수도 있다.또한 DELETE 자체가 UPDATE에 비해 생각보다 비싼 연산이기 때문에 성능상의 이점을 위해 소프트 딜리트를 쓰는 ..
✅ 상황현재 시간을 활용해야 하는 로직이 존재한다고 해보자.예를 들면 예약을 수정할 때 “이미 시작된 예약 시간을 수정하려는지 검증”하려면 현재 시간을 알아야 한다.직관적으로 머릿 속에 생각나는대로 구현한다면, 다음과 같이 구현할 수 있을 것이다.@Transactionalpublic Reservation editDateTime(Long reservationId, LocalDate date, Long timeId, String guestName) { Reservation reservation = getReservation(reservationId); // 기타 검증 생략 validateAlreadyStarted(reservation); ReservationTime changedTim..
jaehee1113
나의 개발 발자취