[3 - 4단계 방탈출 예약 대기] 레디(최동근) 미션 제출합니다.#116
[3 - 4단계 방탈출 예약 대기] 레디(최동근) 미션 제출합니다.#116ddu0422 merged 52 commits intowoowacourse:reddevilmidzyfrom
Conversation
ddu0422
left a comment
There was a problem hiding this comment.
안녕하세요 레디! 미르입니다 :)
요구 사항 구현 잘 해주셨네요~
몇 가지 코멘트 남겼으니 확인 부탁드려요 :)
궁금한 내용이 있으면 언제든지 코멘트 남겨주시거나 DM주세요!
답변
더티 체킹은 무엇일까요?
현재 프로세스에서 적용할 만한 부분이 있을까요?
(선택) 추가 학습
코드 변경은 많지 않을 것 같아서 추가 학습 키워드 드립니다.
급하게 진행하지 않고 기간을 정해서 할 수 있는 내용만 우선 학습해보면 어떨까합니다 :)
- @Embedded란?
- @Transactional 이란?
- 복잡한 한방 쿼리 vs 여러 단계로 나누어 쿼리 요청 후 Application에서 조합
- N + 1이란? 해결 방법은?
- Lazy Loading 이 반드시 효율적인가?
This reverts commit 6d60fec.
더티 체킹이란 엔티티의 변경을 감지하고 명시적으로 업데이트 쿼리를 날리지 않아도, 엔티티가 영속 상태라면 최초 조회때의 엔티티와 비교하여 커밋 시점에 수정된 부분에 대한 업데이트 쿼리를 날리는 것을 말합니다!
현재 테이블 구조상에선 사용할 일이 없습니다. 지금은 예약을 취소하거나 예약 대기를 취소하면 아예 delete 쿼리를 날려 데이터를 삭제해버리지만, 실생활에서 티켓팅할 때 보면 예매를 취소해도 아예 취소되는 게 아니라 그래도 기록은 남는 형태입니다! 예약이나 예약 대기를 취소하여도 delete 쿼리를 날리는 것이 아니라 상태를 변경해야 한다면 적용해볼만한거 같습니다! |
스프링이 aop를 활용하여 제공하는 기능으로써 @transactional이 붙은 메서드 안에서 어느 하나의 작업이라도 실패한다면 롤백을 수행해주는 애노테이션입니다 ! jakarta에서도 @transactional 애노테이션이 있지만 스프링이 제공하는 @transactional이 전파, 격리수준, 읽기전용 등등 더 많은 옵션을 제공해주고 있습니다! 트랜잭션을 학습하면서 서비스 레이어의 메서드에 @transactional을 붙여 하나의 트랜잭션으로 묶어주고 동시에 OSIV의 속성도 false로 변경해주었습니다! |
ddu0422
left a comment
There was a problem hiding this comment.
안녕하세요 레디! 미르입니다 :)
JPA 관련해서 학습 많이 해주셨네요~
몇 가지 코멘트 남겨드렸으니 확인 부탁드립니다 😄
궁금한 점 있으면 코멘트 남겨주시거나 DM주세요!
src/main/java/roomescape/controller/reservation/ReservationController.java
Show resolved
Hide resolved
There was a problem hiding this comment.
흑 여러번 돌렸을 때 잘 돌아갔었는데 요녀석도 테스트 실행순에 따라 터지는 녀석인거 같네요 😥
AdminEndToEndTest에 있는
@Test
@DisplayName("시간 저장 및 삭제")요 녀석이 AdminEndToEndTest 클래스 안에서 가장 마지막으로 실행되면 @DirtiesContext의 옵션이 DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD 이기 때문에 컨텍스트가 앞에서 초기화 되고 이후엔 초기화되지 않기 때문에 TimeService에서 auto increment 값이 초기화되지 않았네요,,,
TimeServiceTest의 테스트 시 id를 저장할 때 나온 아이디를 가지고 비교하는 방식으로 테스트를 변경하였습니다!
There was a problem hiding this comment.
1~2 단계에서도 비슷한 상황이 있었는데 결국 초기화 문제였습니다,
이런 실수를 예방할 수 있는 방법이 궁금합니다!
모든 클래스에서 @DirtiesContrext를 사용하면 너무 느려질 거 같아서 필요한 데에서만 사용하고, repository 테스트에선 @DataJpaTest를(@transactional 포함) 사용하고, service 테스트에선 @Trasactional 을 사용하는 방식으로 테스트 했는데, 미르는 어떤 방식으로 테스트를 하시나요?!
There was a problem hiding this comment.
저는 런던파이고 Unit Test를 작성하여 잘 사용하지 않아요.
테스트 코드가 길어지지만, 예상치 못한 테스트 결과를 도출하려고 하지 않아요.
만약, 저라면 각 테스트마다 격리하는 환경을 사용하는 것이 아닌 테스트 코드가 독립적으로 수행될 수 있도록 노력할 것 같습니다.
또한 id 값을 비교하는 게 아니라 나머지 내용이 올바른지 확인할 것 같아요.
레디도 해당 내용을 지속적으로 사용하며 레디만의 노하루를 쌓아보는건 어떨까요?
ddu0422
left a comment
There was a problem hiding this comment.
안녕하세요 레디! 미르입니다 :)
충분히 잘 해주셨다고 판단하여 이번 내용은 여기서 마무리하겠습니다.
고생 많으셨어요~
다음 미션도 화이팅입니다 💪🏻

안녕하세요 미르!
이번 단계에선 요구사항이 명확하게 주어진 것이 아닌 자율적인 부분이 있어 제가 구현한 방식에 대해 남겨요!
이런 구현들을 예약 대기를 모아둔 테이블을 새로 만들지 않고, 또 기존 Reservation 테이블에 필드를 추가하지 않고 스키마 변경없이 구현해보았습니다!
기존에 있던 Reservation 테이블에 테마, 날짜, 시간으로 조회했을 때 나온 예약들 중 첫번째 값이 예약이고, 그 이후의 나머지 값들은 전부 예약 대기며 이 점을 이용했습니다!
맞으면서 배우는 타입이라 그런진 몰라도 혼자 차력쇼한 감이 없지 않아 있는데 테이블 수정 없이 구현해보고 싶었습니다 😀
리뷰 감사드립니다! 🙇♂️
회원정보