Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Spring Core] 김의진 미션 제출합니다. #392

Open
wants to merge 4 commits into
base: sansan20535
Choose a base branch
from

Conversation

sansan20535
Copy link

안녕하세요 리뷰어님!! 잘 부탁드립니다 : )

⭐️ 주요 수정사항 및 고려사항

🧐 Sql문을 이용하여 DB에 저장

  • sql문으로 직접 내용을 저장하는 부분이 단순히 저장소의 역할을 하는 Repository의 역할과 맞는지 고민하게 되었습니다.

DAO객체를 몰랐었는데, 이를 알게 되고 DAO가 직접 저장하는 역할을 더 잘 나타낸다고 생각했기에 이를 수정했습니다.

🧐 반환 값 및 도메인에 대한 고민

  • 도메인에 관련해서 Controller, Service, DAO에서 사용되는 도메인의 차이가 있다고 생각했습니다.

Controller단에서는 DTO를, Service와 DAO단에서는 엔티티를 도메인으로 사용했습니다. 이후에 비즈니스 로직을 처리하기 위해 Service에 이용되는 도메인을 따로 만들어도 좋을 것 같다고 생각했습니다.

Copy link

@be-student be-student left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

약간 크게크게 수정을 먼저 드리는 방향이 더 깔끔할 것 같아서 이렇게 리뷰를 적게 남기게 되었습니다

첫 번째는 DAO 와 Repository 의 차이는 뭐라고 생각하시나요?
그리고 그 2가지는 과연 양립이 불가능한 내용일까요?
만약 양립이 불가능하지 않다면 2가지를 모두 적용해보셔도 좋을 것 같고, 불가능하다고 생각하시면 그 이유를 설명해주세요

DAO객체를 몰랐었는데, 이를 알게 되고 DAO가 직접 저장하는 역할을 더 잘 나타낸다고 생각했기에 이를 수정했습니다

2번째는 time 이라는 테이블이 생긴 부분입니다
혹시 time 이라는 테이블을 추가로 두게 된 이유는 무엇일까요?
이렇게 테이블을 분리했을 때 어떤 단점이 있고, 어떤 장점이 있는 것 같으신가요?

3번째는 테스트 격리입니다
현재 테스트 격리 방식은 DirtiestContext인데요 다른 테스트 격리 방식은 어떤 것들이 있을까요?
이 방식들의 장단점은 어떤 것들이 있을까요?
다른 방식을 적용해보셔도 좋을 것 같아요

이렇게 3가지정도를 한번쯤 고민해보시면 좋을 것 같아요!

저번과 동일하게 approve 를 드리지만, 언제든 수정후 리뷰 요청을 주시면 주시면 될 것 같습니다

Comment on lines +125 to +128
- [ ] 스키마 수정
- [ ] 예약 페이지 파일 수정
- [ ] 예약 클래스 수정
- [ ] 예약 쿼리 수정

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

요런 부분은 [x] 로 체크 표시를 할 수 있어요

Comment on lines +22 to 26
public ResponseEntity<List<ReservationResponse>> getReservations() {
return ResponseEntity.status(HttpStatus.OK)
.body(reservationsService.getReservations());
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저희 회사에서 가장 많이 보는 코드 형태네요 👍
저는 개인적으로 해주신 Service 에서 응답을 만들어주는 것을 선호해요

Comment on lines +11 to +12
@NotNull(message = "시간이 비어있습니다.")
Long timeId

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

약간 궁금한 부분인데요
time 으로 받는 것이 아닌 timeId 를 두게 된 이유가 있을까요?

import java.util.List;

@Service
@RequiredArgsConstructor
public class ReservationsService {

private final JdbcTemplate jdbcTemplate;
private final ReservationDao reservationDao;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아마 요구사항에 dao 와 repository 를 구분하라는 내용이 있었던 것 같은데요 이 부분이 맞을까요? (제가 정확하게 몰라서 잘못 알고 있을 수도 있을 것 같아요)
아니라도 혹시 이 2가지는 어떤 차이가 있다고 생각하시나요?
학습을 위해서 repository 를 여기에 넣어보려고 시도해봐도 좋을 것 같아요!

import java.util.Map;

import static org.hamcrest.Matchers.is;

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

혹시 이 방법을 제외한 다른 방식으로 테스트 격리를 시도해보실 수 있을까요?
이렇게 했을 때 가장 큰 문제점은 매번 스프링 컨텍스트를 새로 띄우다보니 테스트코드가 엄청 오래 걸리는 문제가 생겨서
테스트의 기본 원칙인 FIRST 원칙의 F 를 지키기 어려울 것 같아요

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants