소리꽃 KeyBloom TIL 14
설치형 앱에는 광고가 안 떠서 그 자리가 비어 있었다. 내 다른 앱과 블로그를 홍보하는 자체 광고로 채우며 나온 것들.
배포된 앱은 못 고친다
자주 바뀌는 것은 앱 밖에 둔다
광고 내용은 자주 바뀐다. 새 앱을 내면 추가하고, 다 지난 홍보는 내린다. 이걸 앱 안에 넣으면 문구 하나 고치는 데 앱을 새로 만들어 올리고, 사용자가 업데이트를 받기까지 기다려야 한다.
그래서 광고를 그리는 부분을 SDK(남이 만든 기능을 내 앱에 붙여 쓰는 도구 묶음)로 밖에 두고, 앱은 “여기에 그려 달라”고 자리와 링크 처리만 넘겨주게 했다. 내용이든 정책이든 바깥에서 고치면 다음에 앱을 켤 때 바로 반영된다.
설치형 앱을 만들 때 미리 갈라 둘 것이 있다. 앱과 함께 굳어도 되는 것과, 앞으로 계속 바뀔 것. 뒤엣것을 앱 안에 넣으면 그때부터 사소한 변경마다 배포가 따라온다. 배포는 우리 손이 가는 것으로 끝나지 않고 사용자가 받아 줘야 완성되는 일이라 훨씬 비싸다.
그 편의의 대가는 남에게 우리 앱 안을 내주는 것이다
원격 SDK를 불러와 앱 안에서 돌린다는 건, 그 주소를 쥔 쪽이 설치된 모든 앱 안에서 원하는 코드를 실행할 수 있다는 뜻이다. 공격이 들어올 수 있는 이런 지점을 신뢰 표면이라고 한다. 지금은 그 주소가 내 것이라 괜찮지만, 구조상으로는 그렇다.
데이터(JSON)만 받아 와서 앱이 직접 그리는 방법도 있었다. 그쪽이 더 안전한 대신 광고 형태를 바꿀 때마다 앱을 고쳐야 한다. 광고 도구가 대부분 앞엣것을 쓰는 데는 이유가 있어서, 같은 사람이 양쪽을 다 쥐고 있다는 조건으로 받아들였다.
대신 경계에서 한 번 더 봤다. 바깥에서 받은 주소를 열기 전에 앱 쪽에서도 안전한 형태인지 확인한다. 믿는 상대라도 경계에서 다시 확인하는 건 싸고, 나중에 그 상대가 바뀔 수도 있다.
편한 방식을 고를 때는 그 편함이 무엇을 담보로 잡는지 한 번 적어 보는 게 좋다. 적어 보면 받아들일지 말지가 명확해지고, 최소한 나중에 문제가 생겼을 때 몰랐다는 말은 안 하게 된다.
감싼 앱의 사소한 함정
앱 안에서 링크를 열면 앱이 사라진다
배너를 눌렀을 때 그냥 링크로 열면 앱 창 자체가 그 페이지로 넘어간다. 사용자 입장에서는 앱이 사라지고 웹사이트가 뜬 것이다. 돌아올 방법도 마땅치 않다.
그래서 외부 링크는 앱 창이 아니라 기본 브라우저로 넘겨서 연다.
웹뷰로 감싼 앱에 외부 링크를 넣을 때는 항상 이걸 챙겨야 한다. 웹에서 테스트하면 새 탭이 열려서 멀쩡해 보이기 때문에 앱에서 눌러 보기 전에는 모른다.
감추는 것과 없애는 것은 다르다
연주 모드에서 화면 아래쪽을 감췄더니 그 자리가 접히면서 위쪽 미리보기 크기가 모드를 바꿀 때마다 출렁였다.
CSS에는 둘이 따로 있다. display: none은 요소를 배치에서 아예 빼서 자리까지 접히고, visibility: hidden은 자리를 차지한 채 안 보이기만 한다. 뒤엣것으로 바꾸니 화면 크기가 안 흔들린다.
무언가를 화면에서 뺄 때 “없애는 것”인지 “안 보이게 하는 것”인지 먼저 정해야 한다. 주변 배치가 움직여도 되면 없애고, 움직이면 곤란하면 감춘다. 영상 작업용 앱처럼 미리보기 크기가 결과물과 직결되는 경우엔 특히 중요하다.
요약
- 앞으로 계속 바뀔 것은 앱 안에 넣지 않는다 — 배포는 사용자가 받아 줘야 끝나는 비싼 일이다
- 바깥 코드를 불러 쓰는 편함은 그쪽에 우리 앱 안을 내주는 것과 같다. 받아들이더라도 적어 두고 받아들인다
- 믿는 상대라도 경계에서 한 번 더 확인한다 — 싸고, 상대는 바뀔 수 있다
- 감싼 앱에서 외부 링크는 기본 브라우저로 넘긴다. 웹에서 테스트하면 안 드러난다
- 화면에서 뺄 때 “없애기”인지 “감추기”인지 정한다 — 주변이 움직여도 되는지가 기준이다