RSS 기사 모음 앱 [2021. 09 ~ 2021.09]

Minsuk Jang·2021년 11월 20일
0

토이프로젝트

목록 보기
3/3
post-thumbnail

프로젝트 주소

💡 개발 배경


9일간의 휴가 때, 5개월 동안 경험했던 지식으로 전에 진행했던 기사 모음 앱을 리뉴얼 하기로 결정하였다.

🤔 이전 프로젝트


이전의 앱의 경우, 언론사 선택 -> 크롤링 -> 파싱 -> 데이터 바인딩 순으로 구성을 했다.

플로우를 간략하게 설명하면 아래와 같다.

1. 사용자가 언론사를 선택한다.
2. 선택한 언론사의 URL + Jsoup을 이용해서 크롤링을 진행한다.
3. 데이터 바인딩을 진행한다.
  • Java로 구현을 하다보니 Java 라이브러리인 Jsoup을 이용
  • 네트워크 작업은 AsyncTask를 이용해서 처리했다.

문제점

위와 같은 구조로 진행을 하다보니 문제점은 아래와 같다.

1. 에러 처리가 힘들다.
2. 각각의 언론사마다 Html 구조 형태가 다르다보니 크롤링의 어려움과 귀찮음이 존재
3. UX 측면에서 기사 목록들을 로딩하는데 불편함이 존재

🧐 프로젝트의 목표


5개월 동안 배운 지식을 토대로 이전 프로젝트 리뉴얼
5개월 동안 배운 지식들을 나열하면 Kotlin, RxKotlin, RxAndroid, Retrofit2 가 있다.

🔨 프로젝트 진행


프로젝트는 4가지를 고려하면서 진행하였다.

1. 언론사는 5개로 고정한다.
2. 각각의 언론사에서 제공되는 RSS를 이용한다.
3. UI는 간단하게 구성, UX의 경우 다른 기업에서 나온 것을 참고한다.
4. 기사를 보여주는 화면은 WebView로 구성한다.

1. 언론사는 5개로 고정한다.

BottomNavigation이 최대 5개의 Menu를 보여줄 수 있다고 해서
언론사를 5개로 고정하고 각각의 언론사는 중앙일보, 연합 뉴스, 전자 신문, 동아 일보, The Korea Herald로 정해서 진행하였다

Xml Parser인 TikXml 라이브러리를 이용할 시 [CDATA]가 빠진 xml인 경우, 파싱이 안되는 문제 로 인해 위의 5개의 언론사로 정하였다.

문제점에 대해서는 아래에서 언급하겠다.

2. 각각의 언론사에서 제공되는 RSS를 이용한다.

RSS란?

  • 해당 사이트를 매번 방문해서 새로운 글을 읽기에는 힘든점이 있다. 따라서, 매번 사이트를 방문하지 않고 새로운 글들만을 제공받는 방법이다.
  • 보통, 새로운 게시글이나 기사들을 보여주기 위해 블로그나 언론사에서 RSS 서비스를 제공한다.

각각의 언론사에서 제공하는 RSS를 바탕으로 Retrofit2 + RxKotlin을 이용해서 데이터바인딩 및 에러 처리를 하였다.

3. UI는 간단하게 구성, UX의 경우 다른 기업에서 나온 것을 참고한다.

  • 이익보다는 학습에 초점을 둬 UI,UX 모두 Youtube를 참고하여 진행
  • Bottom navigation을 이용해서 5개의 언론사만 선택 가능하도록 진행
  • 언론사에서 제공되는 RSS의 항목들을 chip 항목으로 둬서 사용자가 선택하면 해당 기사 목록들을 보여주는 방향으로 진행

4. 기사를 보여주는 화면은 WebView로 구성한다.

가~~~장 기사의 화면을 쉽게 구성하는 방법이다.

전에 크롤링을 이용해서 Html 태그마다 TextView or ImageView를 동적으로 만들어서 진행한 경험이 있으나 완벽하게 Html Tag에 맞춰서 View를 구성할 수 없다는 점 이 있다.

😢 문제점


Xml Parser인 TikXml 라이브러리를 이용할 시 [CDATA]가 빠진 xml인 경우, 파싱이 안되는 문제

[2021.09.15 기준]

RSS의 Response 값이 Xml인데 Retrofit2에서 제공하는 SimpleXmlParser가 동작이 되지 않았다. 따라서, SimpleXmlParser 대신 오픈 라이브러리인 TikXml 라이브러리를 이용하였다.

다른 언론사를 이용하지 못한 이유는 아래와 같다.

TikXml 라이브러리 문제인듯 한데 [CDATA] 가 빠져있을 경우, exception while reading rss feed #144 에러가 발생하는 듯하다. 해결법으로 0.8.15 release를 이용하라고 하는데 0.8.15 release로 진행하면 gradle 환경에서 빌드 에러가 발생한다.

실제 프로젝트면 모르겠지만 토이 프로젝트를 진행하는 입장에서 굳이 안되는 것을 붙들 필요가 없다고 생각하여 [CDATA]가 포함되지 않은 언론사는 과감하게 배제해서 프로젝트를 진행하였다.

TikXml를 이용하는 분들은 참고하시길 바란다.

👍 사용된 라이브러리


  • lottie
  • Rxkotlin, RxAndroid, RxJava
  • Retrofit2
  • Gson
  • TikXml
  • bubble navigation

👊 결과


profile
Positive Thinking

0개의 댓글