KakaoBot 분석기 1

| Comment

KakaoBot을 한번 분석 해보겠습니다.
이번엔 간단히 구동 원리만 체크를 하고 넘어가겠습니다.

기본 구조

일단 기본적으로 어떻게 생겼는지 보고 가봅시다.

일단 눈에 띄는 점은 추가 모듈인 IridiumHighlightEditor가 있다는 점이겠네요.
IridiumHighlightEditor는 제가 만든게 아니라 깃허브에서 가져온 것 입니다. 물론 제가 개조를 많이 했긴 했다만…

다 펼쳐 봤습니다. IridiumHighlightEditor는 Kotlin으로 짜졌고 카카오봇은 Java로 짜졌군요.

IridiumHighlightEditor

이 부분이 제가 추가한 부분입니다. LineNumber기능을 추가했긴 했지만 ScrollView로 EditText를 감싸는 바람에 따라오지 않아서 기것 구현했다가 버림받은 슬픈 사연의 부분입니다. 사실 짤때부터 Kotlin이라 적응이 안되더라고요
사실 저부분 말고도 들여쓰기도 개선했습니다. 저걸로 저장하니까 아에 보이지 않는 오류가 있더군요. 가져오기전 앱에도 있었…

메세지 읽기

메세지를 가져오는 부분에 대해서 자세히 보겠습니다.

여기는 NotificationListener부분인데 KakaoTalk의 패키지명을 체크해서 카카오톡이 보낸 메세지일때만 실행을 합니다.
KakaoData로 Notification을 변환시킨뒤에 KakaoManager로 추가를 해줍니다.

KakaoManager부분입니다. addKakaoData에서 메세지를 받고 바로 ScriptEngineService를 통해서 invoke를 해주는 모습입니다. 뭔가 이상한 구조인거 같지만 일단 넘어가자구요.

invoke부분입니다. 일단 이름을 이용하여 함수를 얻습니다. 그런다음 함수를 call을 해주네요. 이 과정에서 오류가 날경우는 KakaoManager에 Error를 전달하는 구조입니다.
그 밑부분은 그저 Log를 작성하기 위한 부분이니 큰 신경 안쓰셔도 됩니다.

메소드 구현

여러분들이 쓰시는 메소드들은 전부 ScriptableObject를 통해 클래스를 등록 함으로써 가능해집니다.
여기서는 ScriptBotScriptUtil을 정의 해뒀군요.

여러분들이 주로 사용하시는 Bot.send부분은 이렇게 구현되어 있습니다. 역시 KakaoTalkListener에서 send를 하는부분은 일단은 신경 끄도록 하죠…
MainActivity가 foreground일때 Debug룸에 메세지를 추가해줍니다. 이래서 메세지가 오면 Debug룸에서 자동으로 메세지가 추가되는 이유입니다.

KakaoTalkListener에서 send를 실행시키는 모습입니다. SOLID원칙 어긋나는건 일단 나중에… 그때는 너무 급해서 일단 다무시하고 짰어요ㅠㅠ KakaoManager를 통해 얻은 데이터중 room과 같은 데이터가 있다면 그 세션을 불러옵니다. 그 후에 session을 통해서 전송을 하게되는데 이부분은 고인이 된ManDongI님이 구현을 해주셨습니다. (KakaoBot의 최초 전신은 ManDongI님의 것입니다.)

잡담

현재 기본적인 구조만 살펴 보았으며 나중에는 Logger에서 로그를 수집해 작성하는 방법이나 IridiumHighlightEditor에 대해서 깊이 살펴 볼 예정입니다. 언제가 될지는 모르겠다만… 그보다도 생각보다 markdown쓰는게 귀찮네요.

글쓰는게 노가다에요 노가다…

크리에이티브 커먼즈 라이선스 SuYong에 의해 작성된 KakaoBot 분석기 1은(는) 크리에이티브 커먼즈 저작자표시-비영리-변경금지 4.0 국제 라이선스에 따라 이용할 수 있습니다.
Programming
Android
Java
KakaoBot
Comments