카테고리 없음

WIL 4주차 회고

feel2 2024. 7. 15. 10:19
반응형

문제

이번 주차를 지나며 겪었던 문제가 무엇이었나요?

-> 대기열 구현이 가장 어려웠던 것 같습니다.

시도

문제를 해결하기 위해 어떤 시도를 하셨나요?

-> 대기열 구현을 위해 처음에는 수동으로 대기열을 확인하는 API를 풀링으로 호출할 때 마다 대기열 순서대로 활성화를 시키려고 했습니다. 다만, 이 방법을 사용하면 풀링을 하지 않으면 계속 활성화 할 수 있는 공간이 남아서, 문제가 발생할 수 있다는 걸 알았습니다.

해결

문제를 어떻게 해결하셨나요?

-> 스케줄러를 사용해보기로 하였습니다. 정해진 시각마다 순차적으로 대기열에서 활성화열로 옮기는 작업을 진행하였습니다. 그러면 풀링을 하지 않아도 계속해서 빈자리가 발생할 때 마다 토큰을 활성화 시키게 됩니다.

 

 

@Component
@RequiredArgsConstructor
@Slf4j
public class SeatScheduler { //좌석 관련 스케줄러

    private final ReservationFacade reservationFacade;

    @Scheduled(fixedRate = 5000) // 매 5초마다 스케줄러 실행
    public void checkOccupiedSeat() {
        log.info("5초 마다 예약 후, 5분이 지났는지 체크하는 스케줄러 실행");
        reservationFacade.checkOccupiedSeat();
    }
}

 

@Component
@RequiredArgsConstructor
@Slf4j
public class WaitingQueueScheduler { // 대기열 관련 스케줄러

    private final WaitingQueueFacade waitingQueueFacade;

    @Scheduled(fixedRate = 5000) // 매 5초마다 스케줄러 실행
    public void activeToken() {
        log.info("token을 active하는 스케줄러 실행");
        waitingQueueFacade.active();
    }

    @Scheduled(cron = "0 0 0 * * *") // 매일 자정마다 스케줄러 실행
    public void deleteAllExpireWaitingQueue() {
        log.info("expired 된 토큰 삭제 스케줄러 실행");
        waitingQueueFacade.deleteAllExpireToken();
    }
}

 

이런식으로 스케줄러를 돌려서 예약하고 5분이 지나면 좌석 점유가 풀리는 것과 주기적으로 토큰을 활성화 시키는 로직을 모두 해결할 수 있었습니다. 다만 정해진 시각마다 스케줄러가 돌기 때문에 조금의 오차가 발생할 것으로 예상됩니다.

 

알게된 것

문제를 해결하기 위해 시도하며 새롭게 알게된 것은 무엇인가요?

-> 스케줄러를 통해 정해진 로직을 반복적으로 수행하면 대기열을 구현할 수 있다는 것을 알았습니다.

 

지난 목표 회고

지난 주에 설정해두었던 목표는 달성하셨나요? 잘된 것은 무엇이고 안된 것은 무엇인가요?

-> 네 기한 안에 과제 제출을 하여 목표를 달성하였습니다. 그리고 TDD를 통해서 개발을 진행하니 테스트케이스를 좀 더 생각하지 않아도 로직을 다 구현하면 더 생각할게 없다는 것을 깨달았습니다.

다음 목표 설정

반복적인 성장을 위한 실천 가능한 단기적인 목표를 설정해보세요!

-> 객체 지향적으로 어떻게 코드를 짜면 좋을지 좀 더 고민해보겠습니다.

반응형