Skip to content

[feat] 스케줄러 구현#156

Merged
saokiritoni merged 9 commits intodevelopfrom
feat/#155-scheduler
Nov 19, 2025
Merged

[feat] 스케줄러 구현#156
saokiritoni merged 9 commits intodevelopfrom
feat/#155-scheduler

Conversation

@saokiritoni
Copy link
Member

@saokiritoni saokiritoni commented Nov 5, 2025

🌱 관련 이슈

🌱 작업 사항

Request(우분투 계정)의 만료 처리를 자동화하는 스케줄러를 구현합니다.

주요 기능:

  1. RequestSchedulerService 신규 구현
  2. @scheduled(cron = "0 0 10 * * ?") : 매일 오전 10시 실행
  3. 만료 7일/1일 전 사용자(이메일/슬랙) 및 관리자(슬랙) 알림
  4. 만료일이 지난 FULFILLED 상태의 계정 조회
  5. UbuntuAccountService를 호출하여 외부 서버 계정 및 PVC 삭제
  6. IdAllocationService를 호출하여 UsedId 반납 (DB에서 삭제)
  7. Request 상태를 DELETED로 변경 (Soft Delete)
  8. 삭제 처리 완료 후 사용자 및 관리자 알림

통합 테스트 환경

H2 인메모리 DB 기반의 통합 테스트 환경을 구축하고, 스케줄러의 모든 시나리오(7일 전, 1일 전, 당일 삭제)를 검증하는 테스트 코드를 작성합니다.

주요 변경 사항:

  1. build.gradle에 H2 의존성 추가 (testRuntimeOnly)
  2. src/test/resources/application.yml 신규 추가 (노션 참고)
  3. H2 DB 설정 (ddl-auto: create-drop)
  4. main의 모든 외부 설정(Mail, Slack, JWT 등)을 Mocking하여 PlaceholderResolutionException 해결
  5. RequestSchedulerServiceTest 신규 작성
  6. @SpringBootTest(classes = AdminBeApplication.class)
  7. @DirtiesContext: @transactional 롤백 방식이 스케줄러 내부 트랜잭션(커밋)과 충돌하므로, 매 테스트 후 컨텍스트를 재생성하여 DB 상태를 100% 초기화
  8. @MockitoBean: AlarmService, UbuntuAccountService Mocking
  9. Mockito.mockStatic(LocalDateTime.class, CALLS_REAL_METHODS): LocalDateTime.now()만 Mocking. (Logback과의 NPE 충돌을 피하기 위해 CALLS_REAL_METHODS 명시)

🌱 참고 사항

사용 신청 -> 승인
config server에서 달라진 uri 많으니 확인하고 다 수정해야 함. 근데 정확히 뭘 수정한지 그 리스트는 몰라서 그냥 수시로 api 문서 확인하고 고쳐야 할듯......
그리고 복합키 구조 최대한 지양할 것. DB 설계상으로 복합키 넣는 건 맞는데 스프링부트에서 구현할 때는 최대한 지양하고 실무적인 구조 채택 필요함. 현재 복합키 구조 때문에 여러곳에서 문제 터지고 있는데 다 테스트 돌려서 문제 부분 점검하고 수정해야 함.

@saokiritoni saokiritoni requested a review from a team as a code owner November 5, 2025 07:04
@saokiritoni saokiritoni self-assigned this Nov 5, 2025
@saokiritoni saokiritoni merged commit 12c4a90 into develop Nov 19, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[ feat ] 우분투 계정 정리 스케줄러 기능

2 participants