이글루스 앱 개발 후기와 주의점 내 앱

이번에 이글루스 앱을 전면 개편하면서(스와이프 방식으로 변경, 로그인과 글쓰기 기능 추가) 겪었던 시행착오나 느낀점을 적어봅니다. 후에 이글루스 앱 개발하는 개발자님에게 도움이 되길 바랍니다.


[그림: 이번에 스와이프 방식으로 변경한 이글루스 밸리 여행 앱]




이글루스는 OAuth1.0a를 사용하고 있으며 이용할 수 있는 라이브러리는 signpost, scribe가 있습니다. OAuth의 핵심은 access token을 얻는 것입니다. OAuth 인증 문서 읽다보면 어려워서 미치겠죠. 복잡하게 써 있는데 결국 아이디와 비밀번호로 직접 로그인하게 하는 게 아니라 중간 단계를 하나 두어(access token, token secret)으로 api 로그인하게 하는 것입니다. 왜 이렇게 하냐 하면 기존 아이디와 비밀번호 방식으로 직접 로그인하는 방식은 잘못되어 유출되었을 때나 악의적으로 이용하는 개발자가 있을 경우 문제가 큽니다. 하지만 중간 단계를 두면 잘못되었을 경우 폐기하거나 api 사용 횟수를 제한하는 보완책이 가능함으로 훨씬 안전합니다.

signpost를 이용할 때는 callback uri가 필요하고 이것은 정해 있는 건 아니며 내가 정하면 됩니다. callback은 onNewIntent로 받거나 웹뷰인 경우 shouldoverrideurlloading로 가로채 받을 수 있습니다. onNewIntent로 받으려면 manifest에 내가 이런 방식의 uri를 받겠다고 써 놓아야 받을 수 있습니다. android:scheme은 http://www.egloos.com/에서 http://에 해당합니다. 예를들면 egloos://와 같은 callback scheme을 내가 만들어서 받을 수 있습니다.

scribe는 기본 상태로 할 때 callback uri를 정할 필요가 없고 사용자가 아이디 비밀번호로 인증하면 숫자로 callback를 줍니다. url 마지막에 붙어있으니 이걸 가로채서 가져오면 됩니다.

signpost나 scribe 모두 인증할 때 네트워크를 이용하는 부분(sign부분)는 AsynkTask를 이용해야 오류가 안 납니다. 인터넷 검색하면 이글루스 인증 방법에 대한 글이 있는데 이 소스로 하면 오류가 나는 건 예전 진저브레드 때 방식으로 하기 때문입니다. 허니콤 이후로는 AsynkTask를 이용해야 main thread 오류가 나지 않습니다.

signpost는 글쓰기 할 때 제대로 했는데도 invalid signature가 납니다. http://zewaren.net/site/?q=node/123를 참고해서 doubleEncodedParam를 하세요. 저는 이렇게 하는게 불합리하다고 생각해서 scribe나 okhttp-signpost를 썼습니다.

이미지를 올리려면 multipart를 이용해야 합니다. 그렇지 않으면 서버로부터 invalid structure 오류를 받게 됩니다.

volley나 okhttp를 이용하면 AsynkTask를 쓰지 않아도 되는 장점이 있습니다. volley와 signpost를 결합하여 사용할 때는 위에서 말한 것처럼 doubleEncodedParam를 써야 오류가 안 납니다. 어디에다 하면 HurlStack에 합니다. http://qiita.com/chibatching/items/d9e81a391731e3c51fd9 참고. okhttp는 okhttp-signpost library를 쓰면 되고 doubleEncodedParam를 안해도 됩니다.

이글루스는 글쓰기 인증할 때 서버 응답이 너무 느립니다. 10초에서 1분, 더 걸릴 때도 있습니다. (다른 앱에서도 마찬가지인 것으로 보아 서버 문제로 보입니다.) 이미지 업로드 때나 덧글쓰기나 비공개로 글쓰기 인증할 때는 금방 인증됩니다. 공개글을 쓸 때 이글루스 서버에서 무언가 작업을 하는데 이것이 비효율적으로 프로그래밍되어 있는 듯합니다.



※이글루스 서버 개발자님 이것좀 보완해 주세요.
  • 이미지 업로드한 걸 삭제하는 api가 없습니다. 이미지/파일 신규등록으로 한다면 어떤 폴더에 저장이 되는 겁니까? 어디서 지워야 합니까? 이게 왜 문제가 되냐면 개인정보가 담긴 민감한 파일을 실수로 올렸는데 지울 수 있는 방법이 없다면 이거 문제 아닌가요? 저는 이 문제 때문에 결국 포스트 번호를 임시로 받아서 거기에 올리는 거로 수정했습니다만 설계 논리에 헛점이 있는 것 같습니다.
  • 밸리 발행 api 만들어 주세요. 모바일 웹 에디터에도 있는데 왜 api에는 없는지 좀 이상합니다. 마찬가지로 마이리더 api도요.
  • api로그인을 적어도 두 기기는 되도록 해 주세요. 아니 요즘 세상에 두 기기를 갖고 있는 사용자가 한둘이 아닌데 한 기기에서만 인증이 되도록 한 건 모자랍니다.
  • 글 수정할 때 api 제공해 주세요. 그림 주소가 pc 웹에디터에서 제공하는 주소 형태로 주어져야 합니다.
  • 이외에 제 앱 설명 참고해서 api 보완해 주시길 바랍니다.



덧글

댓글 입력 영역
* 비로그인 덧글의 IP 전체보기를 설정한 이글루입니다.


애드센스_200px 정사각형