[MyCoach] 문제해결과정 - 체크리스트 생성 로직 수정 (요일 회전 기반)

2025. 8. 7. 12:25·프로젝트
# 요일 회전 기반 체크리스트 생성 로직 문제 해결 보고서

## 1. 문제 파악
- AI 기반 루틴 생성 플랫폼(MyCoach)에서, 사용자가 플랜을 실행할 요일을 자유롭게 선택(예: 수, 목 등)해도, 체크리스트 배열은 항상 월~일 순서로만 생성되어 원하는 순서대로 표시되지 않음.
- 예를 들어, 시작일이 목요일이고, 실행 요일이 수·목이면 체크리스트상에서 실행 요일의 위치가 어색하게 배치되는 현상 발생.

## 2. 원인 분석
- 기존 generate_checklist 함수는 요일 리스트(days=[0,0,1,1,0,0,0])를 월~일 순서로 고정해서 반복문을 돌려 체크리스트를 만들고 있었음.
- 사용자 루틴의 "시작 요일(start_day)"이 언제이든 상관없이, 체크리스트 배열은 항상 월요일부터 시작됨.
- 실제로 "체크리스트의 첫 번째 요일"이 항상 월요일이 아닌, 루틴의 시작일에 맞춰 첫 칸이 되기를 기대함.

## 3. 해결 과정
1. **문제 재현 및 원인 로그 분석**
   - print로 days, start_day, rotated_days, day_order 등을 찍어 실제 회전 동작 여부 확인.
   - 시작일이 목요일, 실행요일이 수·목이면 rotated_days가 [1,0,0,0,0,0,1]로 회전되어야 정상임을 검증.

2. **회전 로직(rotate_days) 구현**
   - utils.py에 rotate_days(days, start_idx) 함수를 구현하여, 요일 배열을 시작 요일 기준으로 회전할 수 있도록 함.
   - generate_checklist 함수에 start_day 인자 추가 및 days 배열을 rotate_days로 회전하여 생성 로직에 적용.

3. **시작 요일 계산 로직 추가**
   - 시작 날짜(예: "2025-08-07")를 받아서 get_korean_weekday 함수로 요일 문자열(예: "목")로 변환.
   - worker.py 등 체크리스트 생성 호출부에서 plan_dict["PLAN"]["DATE_START"]를 활용해 start_day를 계산, generate_checklist에 넘김.

4. **테스트 및 검증**
   - 다양한 예시로 직접 print 및 테스트 코드를 통해 요일 배열이 기대한 대로 회전·적용되는지 반복 확인.
   - 수, 목 실행/목요일 시작 → [1,0,0,0,0,0,1], 수요일 시작 → [1,1,0,0,0,0,0] 등 정상 동작 확인.

## 4. 최종 결과 및 개선점
- 이제 체크리스트 배열은 **루틴 시작일에 맞춰 회전된 요일 순서**로 생성됨.
- 월~일 고정 배열이 아닌, 사용자의 루틴 시작일(start_day)을 기준으로 배열이 동적으로 회전됨.
- 실제 체크리스트상에서 첫 번째 칸이 시작일의 요일, 마지막 칸이 시작일의 전날이 되어, 실행 요일에 체크가 정확하게 생성됨.
- 해당 로직은 앞으로 다양한 요일 조합과 시작 요일에 모두 유연하게 대응 가능.

---

## (부록) 주요 적용 코드
```python
def rotate_days(days: list, start_index: int) -> list:
    return days[start_index:] + days[:start_index]

def generate_checklist(week_plans: list, days: list, start_day: str = "월") -> list:
    day_order = ["월", "화", "수", "목", "금", "토", "일"]
    start_idx = day_order.index(start_day)
    rotated_days = rotate_days(days, start_idx)
    # 이하 생략...

def get_korean_weekday(date_str):
    days_kor = ["월", "화", "수", "목", "금", "토", "일"]
    d = datetime.datetime.strptime(date_str, "%Y-%m-%d")
    return days_kor[d.weekday()]

'프로젝트' 카테고리의 다른 글

[MyCoach] 1-0-3 요청에 대한 응답도 1-0-3으로 할까?  (1) 2025.08.05
n주차 잘 전송되는 코드  (1) 2025.08.04
0721 머신이어 마이크  (2) 2025.07.21
복겟몬 조건  (1) 2025.03.17
개인 / C언어 / 로또 프로그램  (0) 2025.03.15
'프로젝트' 카테고리의 다른 글
  • [MyCoach] 1-0-3 요청에 대한 응답도 1-0-3으로 할까?
  • n주차 잘 전송되는 코드
  • 0721 머신이어 마이크
  • 복겟몬 조건
joo_coding
joo_coding
2025.02.18~
  • joo_coding
    주코딩일지
    joo_coding
  • 전체
    오늘
    어제
    • 분류 전체보기 (163)
      • 일지 (19)
      • 계획표 (7)
      • 프로젝트 (6)
      • C언어 (35)
        • 연습장 (12)
      • C++ (3)
      • Python (28)
        • 연습장 (11)
      • TCP IP (4)
      • DB (2)
      • ubuntu (1)
      • Git (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    c언어 #vscode #gcc #윈도우 #c언어윈도우 #gcc윈도우 #vscode윈도우 #c #c++
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
joo_coding
[MyCoach] 문제해결과정 - 체크리스트 생성 로직 수정 (요일 회전 기반)
상단으로

티스토리툴바