매일 아침 8시, 내 폰으로 메시지가 온다. 오늘 배울 영어 표현이다.


AI로 영어 공부를 해보자

AI를 실생활에 어떻게 활용하면 좋을까? 이번 글에서는 내가 AI를 활용해 영어 공부 몇 가지를 시도하다가 최근에 학습 프로그램을 개발한 내용을 소개한다.

영어 공부는 꾸준히 하는 게 중요한데 일부러 책을 펴거나 앱을 실행하거나 헤드폰을 쓴다든가 하는 게 생각만큼 꾸준히 되지 않는다. 그리고 내 수준에 맞는 영어 콘텐트를 찾아보는 건 더 번거로운 일이다.

그러다 잠자던 옛날 안드로이드 폰에 리눅스를 셋업할 수 있다는 걸 알고 장난감처럼 이것저것 해보다가 서버로 사용하면 좋겠다는 생각이 들어 AI 영어 공부 프로그램을 만들기로 했다.

  • 안드로이드 폰 서버에서 매일 일정한 시간에 내 폰으로 콘텐트를 보내주자.
  • 내가 원하는 콘텐트는 AI를 사용해 찾자 - 원하는 건 영어 게시판 등에 올라오는 현장감 있는 관용 표현
  • AI가 해당 표현을 해설하는 학습 콘텐트를 만들도록 하자.
  • 한 번 배운 건 저장했다가 며칠 뒤에 복습 알림을 보내자.

어떻게 만들지?

처음엔 리눅스가 기본 OS인 라즈베리파이 제로를 가지고 있어서 그걸로 서버를 만들까 했는데 너무 느리다. 안드로이드 폰보다 CPU 파워가 훨씬 떨어지는 것이다.

안드로이드 폰에 리눅스를 셋업하려면 Termux, Termux:Boot, Termux:API 등 몇 가지 플러그인 앱을 설치하면 된다. 프로그램 자체는 Python으로 코딩하고 일정 시간에 실행하는 건 리눅스 기본 기능인 cron을 사용했다. 이런 프로그램 실행은 그리 부하가 걸리지 않으므로 가끔 생각날 때 충전해준다. 충전을 깜박할 수 있으니 배터리가 낮을 때 알림을 보내도록 할 수도 있다.

서버에서 내 폰으로 메시지를 전송하는 방법은 다양하지만 여러 조건상 현실적으로 가능한 건 텔레그램과 디스코드가 있다. 나는 가족과 공유하기 위해 더 많이 사용 중인 디스코드로만 발신하도록 했다.

코딩은 PC에서 했는데 결과 프로그램을 안드로이드 폰으로 복사해넣으려면 SSH 서버를 설치하는 게 필요하다.

학습 내용은 아래와 같이 구성했다.

📚 오늘의 표현
━━━━━━━━━━━━━━

🔑 throw under the bus
📌 출처: Hacker News

📝 원문
> "The manager completely threw the dev team under
>  the bus when presenting to the board."

🇰🇷 번역
이사회에 발표할 때 매니저가 개발팀을 완전히 희생양으로 삼았다.

💡 설명
'throw someone under the bus'는 자신을 보호하기 위해
다른 사람을 희생시키거나 비난할 때 쓰는 관용구입니다...

🔀 비슷한 표현
> • sell someone out
> • hang someone out to dry
> • stab in the back

🗣 대화
> A: Did you hear what happened in the meeting?
> B: Yeah, he totally threw Mike under the bus.
> A: Exactly. Now Mike's the one answering to the client.

내가 원하던 생생한 원어민 표현을 AI가 찾아내고 공부할 내용으로 만들어줬다!

기술 스택: 외부 패키지 없이 Python 표준 라이브러리만 사용

아래와 같은 Python 표준 라이브러리만 사용했다. 조금 특이한 라이브러리를 사용할 경우 컴파일부터 진행하는 경우가 있어 안드로이드 폰 Termux에서는 안 되는 경우가 있기 때문이다.

  • urllib — HTTP 요청 (AI API, Discord webhook, HN API 전부)
  • sqlite3 — 학습 기록 저장, 복습 스케줄 관리
  • json — API 응답 파싱

AI 공식 SDK를 쓰면 편하지만 안드로이드에서 의존성 지원이나 컴파일이 어려우니 직접 urllib.request로 API를 호출했다. 대부분 AI 업체는 REST API를 제공하므로 일반적인 HTTP 호출로 AI와 소통이 가능하다.

Claude를 이미 구독해서 쓰고 있긴 하지만 별개로 몇 달러 결제한 게 있어서 그 크레딧을 사용하고 있다. Haiku 같은 모델은 토큰 사용량이 워낙 적어서 오래 사용할 수 있다.

구현한 기능

아래와 같은 기능을 만들고 cron 스케줄로 실행한다.

기능 설명
--new 오늘의 새 표현 전송
--review 복습 콘텐트 전송
--bulk 주간 복습 카드 (최근 1주일 내용 복습)
--stats 학습 통계 전송
배터리 모니터링 20% 이하 + 미충전 시 디스코드 알림

크론탭 설정 예시:

# 아침 8시: 새 표현
0 8 * * * python ~/daily-language-learn/main.py --new

# 저녁 8시: 복습 (없으면 신규)
0 20 * * * python ~/daily-language-learn/main.py --review

# 일요일 아침 8시: 주간 복습
0 8 * * 0 python ~/daily-language-learn/main.py --bulk

# 30분마다: 배터리 체크
*/30 * * * * ~/daily-language-learn/battery_alert.sh

즉, cron이 자동 실행되면서 글을 수집하고 AI한테 그중 적당한 표현을 선택해 학습 자료를 만들게 한 다음 Discord로 전송하는 구조다.

주의할 점

안드로이드 Doze 모드

안드로이드는 화면을 끄면 앱 실행을 줄이는 Doze 모드가 있어서 cron이 제시간에 실행되지 않는 문제가 있었다. 해결책은 초기 스크립트에서 wake lock 실행해 주기.

# ~/.termux/boot/start-crond.sh
termux-wake-lock
sshd
crond

Discord 2000자 제한

학습 내용이 길어질 경우 2000자를 넘는 경우가 있을 수 있는데 Discord 웹훅은 2000자 이상이면 400 에러를 뱉는다. 1900자 기준으로 자동 분할해서 여러 메시지로 나눠 보내도록 처리했다.

마치며

완성하고 나서 하루에 두 번 메시지가 날아오고 짧지만 2~3분 정도씩 공부하게 된다. 아침 업무 시작 전 한번, 저녁 먹고 한번.

공부를 위해 따로 뭘 하지 않아도 손쉽게 영어 공부가 가능하니 내가 나를 위해 만든 앱 중 가장 효과가 좋은 것 같다.

여러분도 자신을 위해 AI를 어떻게 활용하고 있는가?