Skip to content

feat(v2): 알고리즘 분류 N:M 정션 — problems.algorithm → problem_algorithms (계약 v3.0) - #166

Merged
LsMin124 merged 1 commit into
mainfrom
feat/v2-algorithm-junction
Jun 22, 2026
Merged

feat(v2): 알고리즘 분류 N:M 정션 — problems.algorithm → problem_algorithms (계약 v3.0)#166
LsMin124 merged 1 commit into
mainfrom
feat/v2-algorithm-junction

Conversation

@LsMin124

Copy link
Copy Markdown
Owner

요약

백엔드 알고리즘 분류 필터링이 합성 기법(composition)까지 가져가려면 문제당 다중 알고리즘이 필요. 기존 problems.algorithm 스칼라는 코어(reduction_core) 1개만 담아, P2 합성 문제의 합성 기법이 internal_meta JSONB 안에만 갇혀 필터 불가였음. → N:M 정션 테이블로 교체 (계약 v3.0, breaking).

동기

  • 스칼라 problems.algorithm = 코어 1개 → "segtree 들어간 문제" 필터 시 segtree가 합성인 P2 문제 누락.
  • compositiontuple[TargetAlgorithm, ...](blueprint.py) — 코어와 동일 19종 enum → 정션 어휘 일관.

변경

영역 변경
schema.py problem_algorithms(problem_id, algorithm, role) 추가(복합 PK + algorithm 인덱스), problems.algorithm 제거
persistence.py 적재 시 코어(role='core')+합성(role='composition') 행 생성, 코어=합성 중복 PK 회피
difficulty.py _row_to_packageinternal_meta.hidden_algorithm 읽도록(제거 컬럼 의존 해소)
migration 0004 정션 생성 + internal_meta(jsonb)에서 코어/합성 백필 + problems.algorithm drop
계약 v3.0 contract/db-access/deploy 3 문서 동기화 + §7 변경이력

백엔드 필터 쿼리 예시

SELECT DISTINCT p.id, p.title FROM problems p
JOIN problem_algorithms pa ON pa.problem_id = p.id
WHERE pa.algorithm = 'segtree' AND p.status = 'published';

검증

  • pytest 762 passed, 4 skipped / mypy --strict 91 files Success / ruff green
  • 신규 테스트: 코어+합성 3행 적재 / P1(합성 없음) 코어 1행
  • 패키지 형상(meta.hidden_algorithm/composition) 불변 — DB 적재 형상만 변경
  • 정션 어휘 = TargetAlgorithm 19종(코어=합성 동일)

비고

  • v3.0 major (breaking): 계약 규칙 "제거/의미 변경 = major". 백엔드 미연동 시점이라 단독 반영(소비자 없음).
  • 사용자 결정: 스칼라 교체(정션 단일 소스) / 차원(카테고리) 테이블은 보류(YAGNI).
  • 머지 후 듀얼 remote(SSAFY-TEAM-LYL/Problem-Generator) 동기화 예정.

…s (계약 v3.0)

백엔드 알고리즘 필터링이 합성 기법(composition)까지 가져가려면 다중값이 필요.
스칼라 컬럼(코어 1개)은 P2 합성 문제의 합성 기법을 누락 → N:M 정션으로 교체.

- schema: problem_algorithms(problem_id, algorithm, role) 추가, problems.algorithm 제거
- persistence: 적재 시 코어(role=core)+합성(role=composition) 행 생성 (중복 PK 회피)
- difficulty: _row_to_package 가 internal_meta.hidden_algorithm 읽도록 (제거 컬럼 의존 해소)
- migration 0004: 정션 생성 + internal_meta(jsonb) 백필 + algorithm 컬럼 drop
- 계약 v3.0: contract/db-access/deploy 3 문서 동기화 + §7 변경이력

게이트 762 passed / mypy 91 strict / ruff green. composition 은 TargetAlgorithm enum
타입이라 정션 어휘 일관(코어=합성 동일 19종).
@LsMin124
LsMin124 merged commit 364b68f into main Jun 22, 2026
4 checks passed
@LsMin124
LsMin124 deleted the feat/v2-algorithm-junction branch June 22, 2026 03:31
LsMin124 pushed a commit that referenced this pull request Jun 22, 2026
- meta: main/dev 238f917, tests 724→727 (v1 500 + v2 227 worktree 실측), contract v3.1, version '전달/연동 국면'
- 신규 delivery[] 7종(API·공유DB·P1/P2·난이도·알고리즘 N:M정션·공개번호·계약) + bank{} prod 스냅샷(25문제 1000~1024·algo 25+44·Silver9/Gold16)
- index/dashboard: 전달·연동 섹션 신설 + 문제은행 스냅샷, recentPrs #149~168 trim, backlog 현행화
- requirements: 인수기준 v2 227 + 범위항목(API/DB/난이도 구현완료) 현행화
- 하드코딩 테스트수 4파일 727 동기화, NFR-6/stack.pytest 227
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