아이즈원 프라이빗 메일 백업의 계보 - 2편
지난 이야기
아이즈원이 해체를 발표하고, 팬덤인 위즈원들은 아이즈원 팬 전용 SNS인 프라이빗 메일을 보존하고 백업하려 했습니다. 하지만 8000장이 넘는 메일을 손으로 하나하나 스크린샷을 찍는 것 말고는 방법을 알지 못했죠.
페이로드님은 대학생으로 아이즈원 기록 보관소 방주의 개발자 중에 한 분이었습니다. 페이님은 프메 앱의 구조를 알아내고, 프록시 서버로 토큰을 획득해, HTTP 요청으로 백업을 하는데 성공했습니다.
하지만 프록시 서버와 보안 관련 인증서 처리는 일반인은 물론이고, 개발자도 사용하기 어려웠습니다. 프메 백업 개발자들은 백업을 더 쉽게 만들기 위해 머리를 싸매기 시작합니다...
저작권의 회색지대
여기서 좀 걱정이 되기도 했습니다. 저희는 이용약관의 회색지대에 서 있었습니다. 약관에서 사용자가 직접 백업을 하라고 하긴 했지만요. 어떻게 보면 앱을 변조하고 토큰을 탈취하는 등 '비정상'적으로 앱을 이용하고 있는 것도 사실입니다. API를 이용하긴 해도, 메일 8000여개가 넘는 데이터를 다운 받으면서 CDN에 부하를 거는 것은 아닐까 걱정도 됐습니다.
어떻게 보면 이 문제는 프메를 1명이 백업해서 모두에게 파일을 공유해버리면 간단하게 해결할 수 있는 일이었습니다. 하지만 위즈원들은 운영사의 권리를 나름 존중하는 방식으로 프메를 백업하고 싶었습니다. 그러려면 각자 구독한만큼의 프메만 정확하게 백업을 할 수 있게 해야했습니다.
그래서 저희는 액세스 토큰을 이용한 '인증' 방식을 존중하면서, 그 외의 부분을 최대한 편리하게 만드는 식으로 문제를 해결해나가려 했습니다.
공용 프록시 서버와 복제앱
3가지 문제 : 서버 구축, 인증서, 토큰
지난 이야기에서 말씀 드렸듯이 문제는 크게 3가지 였습니다.
- 프록시 서버를 직접 구축하기 어렵다.
- 안드로이드 HTTPS 인증서 설정이 어렵다.
- 토큰을 프로그램에 입력하기가 어렵다.
대안 : 공용 서버와 복제앱
안드로이드 정책상, 보안 인증서 규정을 우회할 방법이 없어서 결국 수정이 가해진 apk를 이용할 수 밖에 없습니다. 어플 자체에 수정이 가해진건 아니고, 그냥 사용자 인증서도 사용할 수 있게끔 Manifest만 수정되어있는 버전입니다.
[Android 프메 백업 가이드] - 페이
페이님은 신버전 백업 툴을 제작하기 시작했습니다. 이 신 버전 백업툴은 이 세 가지 문제를 독특한 방식으로 해결하려 했습니다.
- 도커로 프록시 서버 컨테이너를 AWS에 배포하고
- 인증서 설정을 바꾼 복제앱을 다운 받아 설치하고 로그인하면
- 토큰이 포함된 설정 파일과 스크립트를 다운 받을 수 있게 했습니다.
이 방식은 그나마 좀 합리적이었습니다. 1번은 페이님이 직접 서버를 운영하셨으니. 일반 사용자는 복제앱을 다운 받아서, 와이파이로 프록시만 설정하고 로그인만 하면 스크립트를 다운 받을 수 있었죠. 사용 설명서도 친절하게 하나하나 따라할 수 있게 만들었습니다.
"프록시 다 썼으면 접속 끊어주세요..."
어제부터 사용자가 많이 몰리고 있습니다.. 어제 하루 접속자 통계가 하루 1300명 정도 나왔습니다.
[프메 백업 프록시 서버 접속 오류 관련] - 페이
하지만 이 방식에는 큰 결함이 있었습니다. 서버가 자꾸 터진다는 것이었죠. 프록시 서버를 천 명 넘게 접속하는 것만 문제가 아니었습니다. 이미 접속한 사람이 와이파이 프록시를 끊어주지 않으면... 프록시에 연결된 채로 게임을 하고 웹서핑을 하는 등. 엄청난 트래픽이 몰리게 된 것이죠.
서버가 자꾸 터지다보니, "서버 또 죽은 건가요? ㅠㅠ"하는 문의가 빗발쳤습니다. 페이님이 뭘 어떻게 할 방법이 없었고, 이 방식에 한계를 느끼는 분들이 나왔습니다.
스크립트 자동화
원클릭 스크립트가 알아서 다 해줘요~
2~3 클릭안에 끝나는 안드로이드 전용 프메 백업 대충 원클릭입니다. 기존 프메 백업 가이드의 흐름을 매크로 비슷한 형태로 구현하였습니다.
- windows 10환경에서 작동합니다. 이전 버전은 작동 여부를 알 수 없습니다.
- nox가 설치되어 있지 않다는 전제로 합니다. nox가 깔려있지 않은 상태로 진행해주세요.
- 제 환경에서 테스트를 완료하였고, 혹시라도 작동 안하면 댓글에 남겨주세요.
[프메 백업 가이드 - 안드로이드 대충 원클릭] - 나예최
다른 한편으로는 "나예최"라는 닉네임을 쓰는 디씨 최예나 갤러리의 개발자님이 계셨는데요. 이 분은 기존 백업 방식을 정리해서 친절한 가이드로 만들었고요. 그 후에는 '원클릭'이라 해서 자동화 스크립트를 만드셨습니다. 프록시 서버를 열고, Nox 에뮬레이터를 이용해 앱을 설치, 토큰을 받고, 백업하는 과정을 자동화한 것이죠.
간단하게 설명했지만 놀라운 진보였습니다. 스크립트를 다운 받아서 실행만 하면 알아서 척척 프로그램을 설치하고 백업하는 모습에, 많은 위즈원이 놀랐습니다.
환경에 따른 오류와 버그들...
하지만 이 역시 버그에서 자유롭진 못했습니다. 이렇게 많은 걸 자동화하는 스크립트는 사용자 환경에 따라 작동이 안 되기도 했고요. 중간에 버그가 나면 모든 걸 '수동으로' 지우고 다시 시작해야했습니다.
비밀번호를 통한 이어받기
소녀시대/IU/IZ*ONE을 좋아하는 아재. 안드로이드 전문 14년차 개발자 - 레디필님 트위터 프로필
안드로이드 만이지만 프메 백업 앱 만들었어요. - 레디필님 트위터. 3월 28일. 혁명의 시작.
안드로이드 백업의 혁명은 트위터에서 활동하신 레디필(@redifil)님에게서 시작됩니다.
레디필님은 안드로이드 전용 백업 앱을 만드셨는데요. 앱 자체에서 제공하는 이어받기 기능을 이용했습니다.
저희는 계속 '토큰'이 필요하다는 이야기를 반복하고 있습니다. 결국 이 모든 삽질은 액세스 토큰을 얻기 위한 삽질입니다. 그러면 원래 프메 앱은 어떻게 토큰을 발급 받을까요?
앱을 처음 설치하고 가입하거나, 다른 핸드폰으로 전환하면 서버에게 요청을 보내서 인증을 받고 토큰을 발급받습니다. 특히 이 "데이터 이어받기"를 할 때에는 기존에 쓰던 앱에서 무작위로 생성된 "비밀번호"를 발급 받아서 입력하게 되는데요.
다시 말해 이어받기 비밀번호만 알면 서버에 요청을 해서 인증을 수행하고 토큰을 받을 수 있다는 겁니다. 말 그대로 데이터를 이어받는 거죠. 단지 팬들이 만든 앱으로 이어받을 뿐입니다. 프록시 서버나 인증서 같은 꼼수를 쓸 필요가 없는 것이죠.
그래서 트위터 안드로이드 백업앱은 큰 호평을 받았습니다. 앱을 다운 받아서 비밀번호만 입력하면 백업이 되니까요. 원래 앱의 데이터를 옮기는 방식이랑 크게 다를 게 없었습니다. 무엇보다 컴퓨터 없이 핸드폰으로만 백업을 받을 수 있어서, 군인처럼 컴퓨터를 사용할 수 없는 분들도 사용하실 수 있었죠.
비밀번호 방식이 널리 퍼지다.
이어받기 비밀번호를 이용한 방식은 이후로 나온 여러 백업 앱이 따라하면서 더 널리 퍼졌습니다. 나중에 이야기할 플러터 백업 앱, 제가 만든 파이썬 비동기 백업툴, Go를 이용한 백업툴도 이러한 비밀번호 방식과 토큰 방식을 같이 사용했습니다.
어? 토큰 방식을 아직도 쓴다고요?
"아이폰은 방법이 없나요?"
네. 아이폰은 비밀번호 이어받기 기능이 없었습니다. 프메 서비스가 종료될 때까지 저희는 여기에 답을 찾지 못했고요. 앞서 말씀 드린 프록시 서버로 직접 토큰을 따는 방식 밖에 없었습니다.
기술으로 안 되면 친절한 가이드와 AS로 해결하기
기술로 해결할 수 없는 부분은 결국 사람을 가르쳐서 해결해야 했습니다.
저와 함께 "백업이 빠른 남자"라는 닉네임을 쓰는 위즈원이 같이 오픈 카톡방을 운영했습니다. 에러가 나서 찾아오는 수 많은 분들을 도와서 하나하나 알려드리고, 파이썬을 설치하고 백업까지 진행시켜 드렸죠. 특히 서버가 종료되기 전날은 아침부터 저녁까지 사람들이 끝 없이 몰려왔던 기억이 납니다.
파이썬 설치가 뭐 그렇게 어려워?... 어려워요.
반드시 Add Python 3.X to PATH 옵션을 선택하여 활성화 시킨뒤에 설치해줍니다.
[프메 백업 풀 가이드 : 파이썬 스크립트 구동] - 백업이 빠른 남자, IZ*PUZZLER
페이님의 백업 툴은 파이썬을 이용합니다. 그래서 파이썬을 설치해야 했고... 많은 분들이 환경변수에서 막혔습니다. 그 외에도 윈도우7 사용자는 파이썬 3.9를 설치할 수 없다던가. Mac에서 python은 2버전을 가리키기 때문에, python3 라고 쳐야 된다던가. 여러 이슈가 많았죠.
그리고 백업 툴이 사용하는 requests 같은 라이브러리도 pip으로 설치해야해서 머리가 아팠습니다. 이걸 bat 이나 sh 파일로 만들어보기도 했는데. Mac은 스크립트 권한 때문에 실행이 안 되서 직접 권한을 추가해주도록 했던 기억이 있네요. 어떤 분은 설치하다가 pip 이 날아가기도 했는데. python -m ensurepip 을 써서 pip을 복구할 수 있다는 것도 처음 알았습니다. 파이썬 버전이 여러 개 깔려 있어서 충돌 나는 분도 있었고요. 윈도우7에서는 유니코드 문자를 터미널에 출력하면 에러 난다는 것도 배웠습니다.
정말 파이썬 설치하는 것조차 생각보다 어렵다는 걸 배웠습니다. 정말 그냥 다운 받아서 설치하면 끝이 아니더라고요. 여러 개발자들이 모여서 노션에 메뉴얼을 만들었는데. 개선하고 개선해도 안 읽는 분은 많았고, 읽으셨는데 저희가 생각지 못했던 예외 케이스가 끝 없이 나왔던 기억이 있습니다. 나중에는 유튜브 영상으로 따라할 수 있는 가이드를 만들어 제공했어요.
하지만 이런 고민들도 결국 끝이 났습니다. 아이즈원 프메 서버가 서비스를 종료하면서, 이제 프메 백업은 불가능하게 되었으니까요.
다음 회 예고. 속도전.
아직 할 이야기가 많습니다. 일단 제가 만든 프메 백업 뷰어 이야기는 아직 나오지도 않았고요. ;) 좀 더 기다리셔야할 것 같습니다. 왜냐하면 다음 시간에는 비동기를 이용해 프메 백업이 빨라진 과정을 소개해보려 합니다.
사실 파이썬 백업 툴에는 큰 문제가 있었습니다. 백업에 1시간이 넘게 걸렸거든요. CDN에서 8000개가 넘는 HTML과 1만 개가 넘는 이미지를 불러오긴 했지만... 그렇다고 해도 너무 오래 걸렸습니다.
이게 파이썬이 스크립트 언어라서 생기는 문제가 아니었습니다. 자바 안드로이드 백업 앱도 비슷한 시간이 걸렸습니다. 아니 자바는 수 백배 빠른데... 핸드폰이라서 느린 걸까요?
아닙니다. 이 문제의 핵심 키워드는 블로킹(blocking)이었습니다. 다음 시간에는 shelter 개발자님과 제가 어떻게 비동기 동시성으로 파이썬에서 8분 만에 백업을 끝냈는지. Go 개발자님은 이 기록을 뚫고 1~3분으로 기록을 단축하실 수 있었는지 이야기해보겠습니다.
다음 주 월요일에 만나요~