“진행을 알아서 해 주는 앱은 없나요”에서 시작했습니다
글은 r/gzcl 서브레딧에 올라왔습니다. GZCLP를 막 시작한 사람이, 세션을 기록하면 다음 세션을 알아서 정해 주는 앱이 있느냐고 물었습니다. GZCLP의 규칙은 종이에 적으면 짧지만 매번 머리로 굴리기에는 미묘합니다 — 모든 세트를 채웠으면 다음에 무게를 올리고, 하나라도 놓쳤으면 무게는 그대로 두고 5×3에서 6×2로, 다시 10×1로 단계를 바꾸고, 10×1에서도 놓쳤을 때만 90 %로 내려 처음으로 돌아가는 식이라, 스쿼트가 T1일 때와 T2일 때의 무게와 단계를 따로 세어야 합니다. 스프레드시트를 쓰면 되지만 헬스장 바닥에서 셀을 고치는 일은 오래가지 않습니다.
답으로 올라온 것들을 보면 같은 무늬가 반복됩니다. 규칙을 제대로 아는 앱은 영어 화면뿐이고, 여럿은 계정을 먼저 만들게 하거나 프로그램 자체를 구독 뒤에 두며, 흔한 운동 기록 앱은 세트×횟수×중량은 잘 적어 주지만 그다음에 무엇을 해야 하는지는 말해 주지 않아 결국 규칙은 다시 머릿속으로 돌아옵니다. 그리고 놓친 날 “다음엔 +2.5 kg”이라고 무심히 올려 버리는 앱이 GZCLP에서는 가장 나쁩니다 — 단계를 바꿔야 할 자리에서 무게를 올리면 프로그램이 아니라 벽에 부딪히는 것이니까요.
GZCL패드는 그 질문에 대한 다른 답입니다. 규칙은 코치가 들고 있고, 나는 각 세트에서 실제로 한 횟수만 적습니다. 모든 세트를 채우면 다음 세션에 플레이트 한 단계가 오르고, 놓치면 같은 무게로 다음 단계가 적히고, 마지막 단계에서 놓쳤을 때만 90 %로 돌아갑니다 — 그리고 그 판단이 왜 그렇게 나왔는지가 세션마다 남습니다. 화면은 한국어·영어·일본어·독일어이고, 계정은 없고, 모든 것은 이 기기의 브라우저에만 남습니다. 자이맥이 하는 자유로운 세트×횟수×중량 기록과는 다른 일이라 별개의 앱으로 두었습니다.
GZCL패드가 하는 일
시작은 한 번의 탭입니다. ‘GZCLP 시작’을 누르면 빈 바 무게 — 스쿼트·벤치·프레스 20 kg, 데드리프트 40 kg, 랫 풀다운과 덤벨 로우는 가벼운 시작값 — 로 프로그램이 열리고 첫 세션 A1이 뜹니다. 이미 내 무게를 안다면 그 아래 시작 무게 칸을 먼저 고치고 시작하면 됩니다. kg과 lb는 시작 카드와 설정에서 바꾸고, 바꾸면 모든 슬롯의 무게가 변환되고 증량 폭도 그 단위의 기본값(하체 5 kg / 10 lb, 상체 2.5 kg / 5 lb)으로 맞춰집니다.
세션 카드가 그날의 세 리프트를 보여 줍니다 — A1이면 T1 스쿼트 5×3+, T2 벤치 3×10, T3 랫 풀다운 3×15+ — 각 리프트에 세트 수만큼의 칸이 있고, 칸의 흐린 숫자가 목표 횟수입니다. 실제로 한 횟수를 적으면 칸이 초록(채움) 또는 빨강(놓침)으로 바뀌고, 리프트마다 모든 칸이 차는 순간 그 아래에 코치의 한 줄이 뜹니다: “모든 세트 성공 → 다음 22.5 kg, 3×10 그대로”, “놓침 → 무게는 20 kg 그대로, 다음은 6×2+. 무게를 올리지 않습니다.” 마지막 세트의 +는 최대 반복 세트라는 뜻이라 목표 이상이면 성공이고 더 해도 됩니다. ‘모두 성공’은 세트 전부를 목표로 채우고, ‘비우기’는 다시 비웁니다. 세 리프트가 다 차면 ‘세션 저장’이 켜지고, 저장하면 판이 바뀌고 다음 날이 뜹니다.
나머지는 판과 기록입니다. 프로그램 판에는 열 개 슬롯 — 네 리프트의 T1과 T2, T3 둘 — 의 현재 무게와 단계가 있고, 어느 줄이든 ‘수정’으로 무게와 단계를 직접 바꾸면 코치는 거기서부터 규칙을 적용합니다. 기록에는 세션마다 날짜, 날 이름, 리프트별 무게·단계·횟수·성공/놓침, 그리고 “+2.5 → 22.5 kg”이나 “단계 → 6×2+, 무게 그대로” 같은 결과 한 줄이 남고, 메모를 적었다면 그것도요. ‘마지막 세션 되돌리기’는 한 번 물어본 뒤 그 세션을 지우고 무게와 단계를 세션 전으로 돌립니다 — 그 사이에 손으로 고친 값이 있어도 정확히 그 전으로요. 티어별 휴식 타이머는 세트 횟수를 적는 순간 시작되고(설정에서 끌 수 있음), 끝나면 알려 줍니다. 화면 언어는 주소 뒤의 ?lang=ko, ?lang=en, ?lang=ja, ?lang=de로 고르고, 홈 화면에 추가하면 오프라인에서도 도는 PWA로 설치됩니다.
코치가 적용하는 규칙
GZCLP는 코디 르페버가 정리한 대로입니다. 네 세션이 A1, B1, A2, B2 순서로 돌고, 세션마다 T1 하나, T2 하나, T3 하나가 있습니다. A1은 T1 스쿼트·T2 벤치·T3 랫 풀다운, B1은 T1 오버헤드 프레스·T2 데드리프트·T3 덤벨 로우, A2는 T1 벤치·T2 스쿼트·T3 랫 풀다운, B2는 T1 데드리프트·T2 오버헤드 프레스·T3 덤벨 로우입니다. 같은 종목이라도 T1 슬롯과 T2 슬롯은 무게와 단계를 따로 갖습니다 — T1 스쿼트가 60 kg 6×2+에 있어도 T2 스쿼트는 40 kg 3×10일 수 있고, 둘은 서로에게 아무 영향도 주지 않습니다.
T1은 5×3+ → 6×2+ → 10×1+의 세 단계, T2는 3×10 → 3×8 → 3×6의 세 단계입니다. 어느 단계에서든 모든 세트가 목표에 닿으면 다음 세션에 플레이트 한 단계 — 스쿼트·데드리프트는 5 kg / 10 lb, 벤치·프레스는 2.5 kg / 5 lb — 가 오르고 단계는 그대로입니다. 한 세트라도 목표에 못 미치면 무게는 그대로 두고 다음 단계로 갑니다. 마지막 단계(10×1+ 또는 3×6)에서 놓쳤을 때만 무게를 90 %로 내려 플레이트 단위로 내림하고 첫 단계로 돌아갑니다 — 60 kg의 90 %는 54 kg이지만 5 kg 단위라 50 kg이 됩니다. 놓친 세션에서 무게가 오르는 일은 어느 티어에서도 없습니다.
T3 3×15+에는 단계가 없습니다. 세 세트를 채우고 마지막 최대 반복 세트가 25회에 닿으면 다음에 2.5 kg / 5 lb가 오르고, 그 전까지는 세트를 채웠든 놓쳤든 무게를 유지합니다. 선택할 수 있는 선형 3×5 템플릿은 두 날(A: 스쿼트·벤치·덤벨 로우, B: 스쿼트·오버헤드 프레스·데드리프트 1×5)이 번갈아 오고, 세트를 다 채우면 무게가 오르고, 놓치면 같은 무게로 한 번 더, 세 번 연속 놓치면 10 % 내립니다. 두 템플릿은 나란히 살아서 하나를 시작해도 다른 쪽의 진행은 그대로입니다.
하나의 미스가 어떻게 흘러가는지
예를 들어 봅니다. T1 스쿼트가 60 kg 5×3+에 있는 A1에서 3, 3, 3, 2, 2를 적었다고 합시다. 네 번째 세트에서 놓쳤으니 코치의 줄은 “놓침 → 무게는 60 kg 그대로, 다음은 6×2+. 무게를 올리지 않습니다.”입니다. 저장하면 판의 T1 스쿼트가 60 kg · 6×2+로 바뀌고, 다음 세션은 B1입니다. B1, A2, B2를 지나 다시 A1이 오면 세션 카드는 T1 스쿼트 6×2+ · 60 kg을 여섯 칸으로 보여 줍니다 — 62.5 kg이 아니라요. 그 A1에서 여섯 세트를 다 채우면 그때 65 kg 6×2+로 오르고, 또 놓치면 60 kg 10×1+로 가고, 10×1+에서도 놓치면 50 kg 5×3+로 돌아갑니다. 같은 세션의 T2 벤치 3×10을 40 kg에서 다 채웠다면 그쪽은 “+2.5 → 42.5 kg”이고, T3 랫 풀다운 15, 15, 18은 “마지막 세트가 25회에 닿을 때까지 유지”입니다.
자이맥과 무엇이 다른가요? 왜 하나로 합치지 않았나요?
자이맥은 운동 일지입니다 — 어떤 종목이든 세트×횟수×중량을 적고, PR을 찾고, 매크로와 체중을 함께 두는 곳이라 프로그램이 무엇이든 상관하지 않습니다. GZCL패드는 코치입니다 — GZCLP 한 프로그램의 규칙을 들고, 방금 한 세션에서 다음 세션의 무게와 단계를 정합니다. 한 앱에서는 “뭐든 적어라”가, 다른 앱에서는 “이번엔 이걸 해라”가 요점이라 화면도 저장되는 것도 다릅니다. 두 앱은 아무것도 공유하지 않고 서로의 저장 공간을 읽지 않습니다. GZCLP를 따르면서 나머지 운동이나 식단을 적고 싶다면 두 앱을 나란히 쓰면 됩니다.
계정이나 구독이 필요한가요? 데이터는 어디에 있나요?
아니요. 계정도, 로그인도, 구독도, 인앱 결제도 없고, 코치의 모든 기능이 처음부터 모두에게 열려 있습니다. 프로그램, 무게, 단계, 기록은 이 기기의 브라우저에만 저장되고 어떤 서버로도 보내지지 않습니다 — 앱은 자기 파일 말고는 아무것도 요청하지 않습니다. 그래서 백업은 내 몫입니다: ‘JSON 내보내기’가 프로그램·무게·기록 전체를 파일 하나로 내려주고, 다른 브라우저나 새 폰에서 ‘JSON 불러오기’를 하면 그 상태가 그대로 옵니다(이미 뭔가 있으면 바꿀지 먼저 묻습니다). 브라우저의 사이트 데이터를 지우면 기록도 사라지니, 몇 주에 한 번 파일을 내려받아 두세요.
헬스장에 갔더니 예정된 날이 아닌 걸 하고 싶어요. 순서를 바꿔도 되나요?
네. 세션 카드 오른쪽 위의 ‘이번에 할 날’에서 A1, B1, A2, B2 중 아무 날이나 고르면 그 날의 세 리프트가 현재 무게와 단계로 뜨고, 저장하면 로테이션은 그 다음 날로 이어집니다. 무게와 단계는 슬롯에 붙어 있지 날짜에 붙어 있지 않아서, 순서를 바꿔도 각 리프트의 진행은 흐트러지지 않습니다. 시작 무게를 잘못 넣었거나 오래 쉬고 돌아왔다면 판에서 ‘수정’으로 그 슬롯의 무게와 단계를 직접 맞추면 되고, 방금 저장한 세션이 잘못됐다면 ‘마지막 세션 되돌리기’로 세션 전으로 돌아갑니다.
증량 폭이나 휴식 시간을 바꿀 수 있나요? 마이크로 플레이트를 써요.
네, 설정에서요. 증량 폭은 하체(스쿼트·데드리프트), 상체(벤치·프레스), 악세서리 세 묶음으로 따로 정하고, 상체를 1.25 kg으로 두면 벤치와 프레스는 그만큼씩만 오릅니다. 90 % 리셋도 그 폭의 배수로 내림하니 폭을 줄이면 리셋도 더 정밀해집니다. 휴식은 T1, T2, T3, 선형 각각 초 단위로 정하고(기본 180·120·60·180), 세트 횟수를 적을 때 자동으로 시작되는 것이 싫으면 그 아래 체크를 끄고 리프트마다 있는 ‘휴식 시작’으로 손으로 시작하면 됩니다.
광고나 동기화가 있나요? 업데이트되면 기록이 사라지나요?
도구 화면에는 광고가 없고, 동기화도 없습니다 — 기기 사이를 옮기는 길은 JSON 파일뿐이고, 그것이 의도한 바입니다. 새 버전은 다음에 페이지를 열 때 조용히 들어오고, “업데이트 필요” 같은 벽을 세우거나 저장된 것을 지우는 일은 없습니다. 오래된 백업 파일도 그대로 읽히고, 이상한 값은 기본값으로 맞춰질 뿐 거부되지 않습니다. 오른쪽 아래의 ‘가이드 & 의견’ 버튼은 이 가이드를 열어 주는 작은 스크립트 하나이고, 앱은 그 밖에 어떤 외부 자원도 부르지 않습니다.
