Skip to content

Conversation

@chemistryx
Copy link

안녕하세요 김준수 리뷰어님! 이번 Spring Core 8, 9, 10단계 리뷰이로 참여하게된 하수한이라고 합니다!
이번 미션을 통해 처음 리뷰를 부탁드리는 것 같은데, 잘 부탁드립니다!

이번 단계에서는 동적으로 시간을 관리할 수 있는 기능 추가를 중심으로 진행했습니다.

다음은 현재 프로젝트 구조입니다:

controller/
- HomeController.java : 메인 화면 관련 endpoint를 처리하는 컨트롤러
- ReservationController.java : 예약 관련 endpoint를 처리하는 컨트롤러
- TimeController.java : 시간 관련 endpoint를 처리하는 컨트롤러
dto/
- ErrorResponse.java : 오류 응답 정보를 담을 객체
- ReservationCreateRequest.java : 예약 생성 요청 Payload를 담을 객체
- ReservationCreateResponse.java : 예약 생성 요청 응답 정보를 담을 객체
- TimeCreateRequest.java : 시간 생성 요청 Payload를 담을 객체
- TimeCreateResponse.java : 시간 생성 요청 응답 정보를 담을 객체
exception/
- GlobalExceptionHandler.java : 공통 예외 핸들러
- TimeNotFoundException.java : 시간을 찾을 수 없을 때 발생하는 Custom Exception
model/
- Reservation.java : 예약 데이터의 구조를 정의한 Record
- Time.java : 시간 데이터의 구조를 정의한 Record
repository/
- ReservationRepository.java : 예약 관련 데이터를 DB에서 읽고 쓰는 기능을 캡슐화한 객체
- TimeRepository.java : 시간 관련 데이터를 DB에서 읽고 쓰는 기능을 캡슐화한 객체
service/
- ReservationService.java : 예약 관련 비즈니스 로직을 담은 객체
- TimeService.java : 시간 관련 비즈니스 로직을 담은 객체
validation/
- DateVaildator.java : ValidDate 어노테이션의 검증 로직
- TimeIdValidator.java : ValidTimeId 어노테이션의 검증 로직
- TimeValidator.java: ValidTime 어노테이션의 검증 로직
- ValidDate.java : 날짜를 검증하기 위한 Custom bean validator
- ValidTime.java : 시간을 검증하기 위한 Custom bean validator
- ValidTimeId.java : 시간 ID를 검증하기 위한 Custom bean validator
RoomescapeApplication.java : Main entrypoint

다음은 구현 과정에서 발생한 질문 사항입니다:

  1. 현재 Reservation Response를 보면 다음과 같은 형태를 가지고 있습니다.
[
    {
        "id": 1,
        "name": "123",
        "date": "2025-11-01",
        "time": {
            "time": "10:00:00",
            "id": 1
        }
    }
]    

기존 LocalTime 타입의 time 필드를 Time 객체로 변경한 뒤로 다음과 같이 JSON 필드가 자동으로 변경되었는데, 어떠한 사유로 인해 저렇게 변경된 것인지 궁금합니다! Time 객체로 변경하면서 저 부분도 Spring에서 자동으로 파싱? 해준걸까요..?

  1. 현재 ReservationCreateRequest에서 @ValidTimeId를 통해 입력 값에 대한 검증을 수행하고 있는데, 이 custom bean validator의 경우 내부적으로 TimeService.getById()를 호출하여 검증을 진행하고 있습니다. 검증 이후 ReservationService::createReservation() 에서도 위 메소드를 한번 더 호출하여 Time 객체를 받아오고 있는데, 이렇게 검증단에서 한번, 실제 비즈니스 로직에서 한번 더 호출함으로써 DB에 요청을 두번 날리게 되는 것이라고 보여지는데, 이게 과연 좋은 접근 방식인지 궁금합니다.

긴 글 읽어주셔서 감사합니다!! 🙂

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.

1 participant