Anki를 위한 새로운 알고리즘 | FSRS 적용하기
Based on 코리안키's video on YouTube. If you like this content, support the original creators by watching, liking and subscribing to their content.
FSRS 적용의 목표는 Anki의 다음 복습 간격을 기존 SM2 방식에서 FSRS 계산값으로 재조정하는 데 있다.
Briefing
FSRS를 Anki에 적용하면, 카드의 다음 복습 간격이 기존 스케줄링 방식 대신 FSRS가 계산한 값으로 재조정된다. 핵심은 “학습 주기를 크게 갈아엎지 않으면서도” 더 나은 장기 스케줄링을 노리는 데 있다. 다만 복습 간격이 약간 바뀌는 만큼, 진행 전 백업을 권장하고 학습 효과 향상 여부는 개인차가 있을 수 있다고 짚는다.
Anki가 기본으로 쓰는 스케줄러는 SM2 알고리즘이며, 이는 1987년에 만들어진 오래된 방식이다. FSRS는 이런 기존 알고리즘을 보완하려는 여러 시도 중 하나로, 사용자가 입력한 난이도와 카드의 상태를 바탕으로 다음 복습 시점을 계산하도록 설계됐다. 적용에는 조건이 붙는다. Anki 2.1.55 이상이 필요하고, 설정에서 V3 스케줄러가 켜져 있어야 카드별 데이터 지원이 가능하다. 또한 FSRS는 장기 스케줄링에만 영향을 주며, New/Learn 카드(색으로는 파란색/빨간색)는 FSRS의 직접 영향 범위가 아니라는 점도 강조된다. 그래서 개발자는 카드들을 빠르게 졸업시키는 쪽을 권한다. 기존 SM2 설명에서 언급됐던 “Ease Hell” 문제를 FSRS가 자동으로 방지해주기 때문에, 빠른 졸업 전략이 덜 위험해진다는 논리다.
실제 적용 절차는 크게 세 단계다. 먼저 FSRS의 코드를 Anki에 넣는다. FSRS 공식 GitHub의 Usage 섹션에서 Scheduler 코드를 복사해, Anki의 Deck 옵션에서 Custom Scheduling 영역에 붙여넣는다. 이때 w 값들은 개발자 환경에 최적화돼 있으므로, 개인 덱 데이터에 맞게 재최적화해야 한다. 이를 위해 GitHub의 Optimizer를 통해 “Open in Colab”을 실행하고, 구글 계정으로 로그인한 뒤 덱을 업로드한다. 덱은 Export 시 apkg보다 collection 패키지(.colpkg)를 사용하고, 미디어 파일은 불필요하니 체크를 해제한다. Colab에서 런타임을 실행하면 Result에 최적화된 w 값이 나오며, 그 줄 전체를 Anki Deck의 Custom Scheduling 값으로 교체한다. 동시에 requestRetention으로 목표 기억 성공률(예: 80~90% 범위)을 설정하고, Maximum Interval Easy Bonus/Hard Interval도 기존 설정값을 그대로 반영한다.
다음으로 FSRS 적용 후 “재조정”을 수행한다. Anki 애드온 페이지에서 FSRS helper를 설치하고, 추가로 Anki WebView Inspector도 설치한 뒤 Anki를 재시작한다. 상단 도구 탭의 Reschedule all cards를 누르면 카드 복습 주기가 FSRS 기준으로 다시 계산된다. 안드로이드 AnkiDroid에서는 복습 시 FSRS가 적용되지 않으므로, PC에서 재조정 버튼을 눌러 동기화하는 방식이 권장된다.
마지막으로 적용 여부를 검증한다. Deck을 선택해 Study Now를 실행한 뒤 Inspect로 개발자 도구를 열고, 실행 중 FSRS 코드가 실제로 동작하는지 확인한다. 이후부터는 복습할 때마다 FSRS가 다음 간격을 계산한다. 영상은 FSRS가 기억력의 “극적인” 향상을 보장하진 않지만, 오래된 Anki 알고리즘이 개선되고 있다는 점 자체가 의미 있다고 정리한다. True Retention 애드온을 함께 써서 기억 성공률을 확인하며 복습을 이어가라고 권한다.
Cornell Notes
FSRS는 Anki의 다음 복습 간격을 계산하는 스케줄러를 기존 SM2에서 FSRS로 바꾸는 방식이다. 적용 전제는 Anki 2.1.55 이상과 V3 스케줄러 활성화이며, New/Learn(파란색/빨간색)은 FSRS의 직접 영향 범위가 아니다. GitHub의 Scheduler 코드를 Anki Deck의 Custom Scheduling에 붙여넣고, Colab 기반 Optimizer로 덱 데이터를 업로드해 w 값을 개인화한 뒤 requestRetention(목표 성공률) 등을 설정한다. 이후 FSRS helper와 Reschedule all cards로 카드 복습 주기를 재조정하고, Inspect로 FSRS 코드가 실제로 실행되는지 확인한다. 안드로이드 AnkiDroid에서는 복습 중 FSRS가 적용되지 않으므로 PC에서 재조정하는 흐름이 필요하다.
FSRS를 쓰려면 Anki에서 어떤 조건을 먼저 맞춰야 하나?
왜 w 값은 그대로 두면 안 되고, 반드시 최적화해야 하나?
requestRetention은 무엇을 조절하며, 어떤 범위를 권장하나?
FSRS가 영향을 주는 카드 범위와, 빠른 졸업을 권하는 이유는 무엇인가?
FSRS 적용 후 실제로 복습 주기를 바꾸려면 어떤 단계를 거쳐야 하나?
안드로이드 AnkiDroid에서는 왜 추가 조치가 필요하나?
Review Questions
- FSRS 적용 절차에서 ‘Scheduler 코드 붙여넣기’와 ‘w 값 최적화’가 각각 왜 필요한지 설명해보라.
- FSRS가 New/Learn 카드(파란색/빨간색)에 직접 영향을 주지 않는다는 말이 스케줄링 결과에 어떤 의미를 가질까?
- Reschedule all cards를 누르지 않으면 기존 복습 간격은 어떻게 될 가능성이 큰가?
Key Points
- 1
FSRS 적용의 목표는 Anki의 다음 복습 간격을 기존 SM2 방식에서 FSRS 계산값으로 재조정하는 데 있다.
- 2
적용 전제는 Anki 2.1.55 이상과 V3 스케줄러 활성화이며, 이 조건이 충족돼야 카드별 데이터 기반 스케줄링이 가능하다.
- 3
Scheduler 코드의 w 값은 개발자 데이터에 최적화돼 있으므로, Colab Optimizer로 덱을 업로드해 개인화된 w로 교체해야 한다.
- 4
requestRetention은 목표 기억 성공률을 정하며, 영상에서는 80~90% 범위에서 설정하라고 안내한다.
- 5
FSRS는 장기 스케줄링에만 영향을 주며 New/Learn(파란색/빨간색)은 직접 영향 범위가 아니다.
- 6
FSRS helper 설치 후 Reschedule all cards로 카드 복습 주기를 실제로 다시 계산해야 기존 간격이 바뀐다.
- 7
안드로이드 AnkiDroid에서는 복습 중 FSRS가 적용되지 않으므로 PC에서 재조정 흐름을 유지하는 것이 권장된다.