로스팅 기록을 쌓아두기만 하고 제대로 들여다본 적은 없었다. Artisan이 자동으로 남겨주는 .alog 파일이 폴더에 140여 개 쌓여 있었는데, 이걸 한 번에 파싱해서 에티오피아 미디엄 로스팅의 패턴을 뽑아봤다. 나는 거의 예가체프만 볶기 때문에 사실상 "내 예가체프 로스팅"에 대한 분석이다.
로스팅을 시작한 지는 5년이 됐다. 첫 2년은 로스팅망을 흔들며 손으로 했고, 그다음 지인에게 빌린 로스터로 했는데 Artisan 연결이 안 되는 모델이라 기록이 남지 않았다. 그래서 데이터로 남은 건 Artisan을 쓰기 시작한 뒤의 약 3년(2023년 8월~2026년 10월)이다. 아래 숫자는 통계적 결론이라기보다 "내 로스터, 내 습관"의 기록이라고 읽어주면 좋겠다.
- 로스터: 부자300, 강제배기 장착 모델 (Artisan 2.8.4, MODBUS 연결). 댐퍼는 수동이라 거의 건드리지 않고 100% 열어 두고 쓴다.
- 분석 대상: 에티오피아 생두 (콩가·코체레·첼바·고티티·할로베리티 같은 예가체프 계열 33건, 시다모·구지 9건), 워시드·내추럴, 100~318g
- "미디엄"의 기준: 배출 시점 BT 205~211℃ (관능 점수나 Agtron 값이 아니라 온도 기준이다)
1. 로그를 숫자로 만드는 법 (개발자용)
.alog는 JSON이 아니라 파이썬 딕셔너리 리터럴이다. json.loads는 실패하고 ast.literal_eval로 읽어야 한다.
import ast log = ast.literal_eval(open(path, encoding="utf-8").read()) t, bt = log["timex"], log["temp2"] # temp2 = BT, temp1 = ET ti = log["timeindex"] # [CHARGE, DRY END, FC start, FC end, SC start, SC end, DROP, COOL] charge, fc, drop = ti[0], ti[2], ti[6]
세 가지 함정이 있었다.
- BT는
temp2다. 헷갈려서computed.CHARGE_BT값과 맞춰보고 확인했다. timeindex의 0은 "이벤트 없음"이다. FC 버튼을 안 누른 배치는 값이 0이라서, 그냥 계산하면 FC 시간이 0초로 잡힌다. 이런 배치가 17건이었다.- macOS 파일명은 NFD다. 한글 파일명을 정규식으로 찾으면 안 걸린다.
unicodedata.normalize("NFC", name)을 먼저 해야 한다. 처음엔 "예가체프 파일 0건"이 나와서 한참 헤맸다.
Artisan이 computed에 요약값을 넣어두긴 하지만, 건조 구간(DRY END)을 안 찍은 로그에서는 값이 이상하게 나와서 쓰지 않고 곡선에서 직접 계산했다.
2. 데이터 청소: 104건 → 42건
- 파일명에 에티오피아 생두 이름이 있고 배출까지 기록된 배치: 104건
- FC(1차 크랙) 마커가 없는 17건 제외 (개발 시간을 계산할 수 없다) → 87건
- 배출 온도가 200~212℃ 밖이거나, 중간에 끊긴 로그, 1,250초를 넘긴 로그, "망함"이라고 적어둔 배치 제외 → 69건
- 2023년 말 버너 교체 전의 로그와, 배출 시간이 5601,000초 밖인 극단적인 곡선 제외 → 42건 (2024-022026-10)
남은 42건의 평균과 편차는 이렇다.
| 지표 | 평균 ± 표준편차 | 범위 |
|---|---|---|
| 터닝포인트 시간 | 42초 (±3) | 36~52초 |
| BT 150℃ 도달 | 370초 ± 60 | 298~560초 |
| 1차 크랙 시작 (시간) | 660초 ± 92 | 500~844초 |
| 1차 크랙 시작 (온도) | 195.0℃ ± 3.9 | 184~204℃ |
| 배출 (시간) | 766초 ± 90 | 588~946초 |
| 배출 (온도) | 208.3℃ ± 1.9 | 205~211℃ |
| 개발 시간 | 105초 ± 37 | 50~206초 |
| DTR (개발 비율) | 13.9% ± 4.9 | 6~28% |
3. 발견 1: 온도는 일정한데 시간은 흔들린다
배출 온도의 편차는 ±1.9℃, 배출 시간의 편차는 ±90초다. 상대 변동으로 보면 온도는 1% 안쪽, 시간은 12% 수준이다.
이건 당연한 결과이기도 하다. 나는 시간이 아니라 온도를 보고 배출 버튼을 누르는 사람이기 때문이다. 그런데 그 말은 곡선 전체의 모양은 매번 다르다는 뜻이기도 하다. 같은 208℃에 도달해도 어떤 날은 10분 남짓, 어떤 날은 15분 가까이 걸렸다. 미디엄이라는 이름 하나에 사실 꽤 다른 로스팅들이 섞여 있다.
4. 발견 2: 변동은 "개발 구간"에 몰려 있다
초반은 놀랄 만큼 일관됐다. 터닝포인트가 42초 ±3초, 1차 크랙 온도도 ±4℃ 안이다. 흔들리는 건 마지막 구간이다. 개발 시간이 50초에서 206초까지 4배 넘게 벌어졌다.
- 가장 긴 날 (2026-01-06, 270g 예가체프 G2): 개발 206초, DTR 23%. 배출 온도도 가장 높은 211℃였다. DTR만 놓고 보면 2024-03-31의 코체레 250g이 28%(개발 198초)로 가장 높았다.
- 가장 짧은 날 (2024-11-24, 케라모니구세 200g): 개발 50초, DTR 6%. 2026-02-14의 예가체프 250g도 개발 52초였는데, 이 날은 FC 시점 RoR이 19.6℃/분으로 이례적으로 높았다.
내가 노리는 범위(DTR 10~15%)를 크게 벗어난 날들이다. 기록상으로는 "의도한 변주"가 아니라 "그날 불 조절이 어긋난 결과"에 가깝다.
4-1. 흔들림의 원인: 겨울 작업실
배출 시간이 흔들린 이유는 로스팅 환경 때문이라고 생각한다. 외부 작업실이라 겨울에 실내 온도가 많이 떨어지고, 같은 화력 설정이어도 예열 상태와 곡선 초반 속도가 달라진다. Artisan에는 주변 온도(ambientTemp)를 기록하는 칸이 있지만 전부 0으로 비어 있어서, 날짜로 계절을 나눠 확인했다.
| 구분 | 건수 | 150℃ 도달 | 1차 크랙 시간 | 배출 시간 | 개발 시간 |
|---|---|---|---|---|---|
| 겨울 (12~3월) | 17 | 364초 ±42 | 654초 ±75 | 765초 ±83 | 111초 ±45 |
| 그 외 (4~11월) | 25 | 374초 ±68 | 664초 ±102 | 766초 ±95 | 102초 ±30 |
- 평균 시간은 두 구간이 거의 같다(765초 대 766초). 겨울이라고 곡선이 일관되게 느려지지는 않았다. 추운 날은 그만큼 화력을 더 만졌다는 뜻일 것이다. 댐퍼는 수동 조작 모델이라 100% 열어 두고 쓰기 때문에, 곡선을 바꾸는 손은 사실상 화력 하나다.
- 개발 시간의 편차는 겨울이 ±45초, 그 외가 ±30초로 겨울이 1.5배 컸다. 겨울에는 평균이 아니라 배치마다 결과가 들쭉날쭉했다는 해석과 맞는다. 다만 배출 시간 자체의 편차는 겨울(±83초)과 그 외(±95초)가 비슷했다.
- 한계: 그 외 구간은 4~6월에 15건이 몰려 있고, 한여름과 가을 데이터는 7월 0건, 8월 1건, 9월 2건으로 거의 없다. "겨울이라서"를 확정하기엔 비교할 따뜻한 날 표본이 부족하다.
그래서 다음부터는 주변 온도를 로그에 같이 남기려 한다.
5. 발견 3: 변수 간 관계
상관계수를 몇 개 뽑아봤다.
| 관계 | n | r |
|---|---|---|
| 150℃ 도달 시간 ↔ FC 시간 | 31 | +0.46 |
| FC 온도 ↔ 개발 시간 | 42 | -0.51 |
| 배출 온도 ↔ 개발 시간 | 42 | +0.40 |
| FC 시점 RoR ↔ 개발 시간 | 42 | -0.33 |
해석은 이렇다.
- 150℃ 도달이 늦은 날은 FC도 늦다. 초반 속도가 이후 일정에 어느 정도 이어진다. 완전히 정해주는 정도는 아니고(r=0.46), 중간에 내가 불을 만지면서 상당 부분이 바뀐다.
- 배출 온도를 거의 고정해 두니, FC가 낮은 온도에서 터진 날일수록 개발 시간이 길어진다. 208℃까지 가야 하는 거리가 길어지기 때문이다. 산수에 가까운 결과다.
- FC 시점 RoR이 높으면 개발이 짧아지는 경향이 있다. 끝까지 힘이 남은 채 배출 온도에 닿는다는 뜻이다.
주의할 점이 하나 있다. FC 시점은 내가 귀로 듣고 버튼을 누른 값이다. FC 온도가 184~204℃로 퍼진 건 원두 차이일 수도 있지만 버튼 타이밍 노이즈일 수도 있다. 즉 DTR의 변동 일부는 실제 로스팅 차이가 아니라 측정 오차일 가능성이 있다. 그래서 위 상관계수는 방향 정도만 믿고, 크기는 믿지 않으려 한다.
6. 발견 4: 가공 방식과 배치 크기
| 구분 | 건수 | FC 시간 | 배출 시간 | 개발 시간 | DTR |
|---|---|---|---|---|---|
| 워시드 | 25 | 663초 | 774초 | 112초 | 14.5% |
| 내추럴 | 17 | 657초 | 753초 | 97초 | 13.0% |
| 200g | 9 | 688초 | 774초 | 87초 | 11.2% |
| 250g | 22 | 642초 | 748초 | 107초 | 14.5% |
- 내추럴이 워시드보다 개발이 15초쯤 짧고 배출이 20초쯤 빨랐다. 방향은 그럴듯하지만 편차(±30~40초)에 비하면 차이가 작아서 "경향" 정도로만 본다.
- 200g이 250g보다 FC는 늦게 오고 개발은 짧았다. 이건 배치 크기 효과라고 단정할 수 없다. 200g 배치가 주로 2024년 초중반에 몰려 있어서 시기 효과가 섞여 있다.
- 연도별 DTR 평균은 2024년 14.3%, 2025년 12.7%, 2026년 14.7%였다. 기록을 시작한 뒤 개발이 짧아지는 추세는 이 데이터에서 보이지 않는다.
7. 정리: 다음 배치에 쓸 기준
| 구간 | 내 목표값 (분석 42건의 중앙값) |
|---|---|
| 터닝포인트 | 42초 / 59℃ 전후 |
| 150℃ | 5분 54초 전후 |
| 1차 크랙 | 11분 7초 / 195℃ 전후 |
| 배출 | 12분 40초 / 208℃ |
| 개발 시간 | 80120초 (DTR 1015%) |
초반 구간은 이미 안정적이다. 앞으로 줄여야 할 건 FC 이후 구간의 편차이고, 특히 겨울에 예열과 화력을 어떻게 가져갈지가 숙제다.
한계와 다음 단계
- 표본이 작다. 42건으로 얻은 상관계수는 방향만 참고해야 한다. 2024년 이후 분석이라 5년 경력의 후반 3년만 담고 있다.
- 관능 평가가 없다. 컵 노트와 점수를 같이 기록하지 않아서 "어떤 곡선이 맛있었는가"는 이 데이터로 답할 수 없다. 이게 제일 아쉽다.
- 화력 조작은 Artisan 이벤트로 기록하지 않아서(댐퍼는 100% 고정), 곡선의 변화를 화력 조작과 짝지어 보지 못했다.
- 주변 온도와 습도 기록이 모두 0이라, 겨울 효과를 실측 온도가 아닌 월(月)로만 추정했다.
- 생두 이름이 파일명에 없는 로그와, 에티오피아가 아닌 생두(콜롬비아·케냐·부룬디 등)는 이번 표본에 넣지 않았다.
다음 로스팅부터는 FC 시점을 더 일관되게 찍고, 화력을 바꾼 순간과 작업실 온도, 컵 점수를 같이 남기려 한다. 그렇게 1년만 더 쌓이면, 그때는 "온도는 일정한데 시간이 흔들린다"에서 한 걸음 더 나가 "어떤 곡선이 맛있었나"를 말할 수 있을 것 같다.

댓글 0개