GREENUP
소비자가 제품 정보를 확인하고 환경 보호를 실천하는 데 필요한 정보를 접할 수 있도록 만든 모바일 앱이다. 상품명·바코드 기반 제품 조회, 친환경 표시 확인, 재활용 팁·환경 칼럼, 알림 기능을 구현했다. 상품·이미지 검색 기능과 앱–서버 API 연동, 검색용 자체 서버 개발을 담당했으며 정식 배포는 하지 않았다.
만들게 된 배경
지속 가능한 방식으로 생산된 상품에는 이를 구분할 수 있는 표시가 있지만, 소비자가 해당 표시의 의미나 제품 정보를 쉽게 확인하기는 어렵다는 문제의식에서 시작했다. 친환경 제품에 관한 정보를 구매 시점에 제공하고, 일상적인 재활용 실천에 필요한 지식도 함께 전달하기 위해 GREENUP을 기획했다.
개발 기간
2023년 2학기 초(정확한 월 및 종료 시점 미기재)
해결하려던 문제와 목표
사용자가 제품명으로 상품을 검색하고 관련 정보 및 친환경 인증 표시를 확인할 수 있는 모바일 인터페이스를 제공하는 것이 목표였다. 별도의 자체 서버에서 외부 상품·이미지 정보를 수집·가공해 앱에 전달하고, 재활용 팁과 환경 칼럼을 통해 제품 조회 외의 환경 정보를 제공하도록 구성했다.
주요 기능
- 상품명 검색: 앱에서 제품명을 입력하면 상품 목록과 관련 이미지를 조회할 수 있도록 구성. 자체 서버의 상품 검색·이미지 수집 API와 연계.
- 상품 상세·친환경 표시 확인: 검색된 제품의 브랜드, 분류, 유통표준코드, 인증 마크 등 상품 정보를 표시하는 화면 구성.
- 바코드 기반 제품 조회: 카메라로 제품 바코드를 촬영해 상품 정보를 확인하는 기능 구현 완료(개발자 확인).
- 재활용 팁·환경 칼럼: 올바른 분리배출 방법, 재활용 정보, 환경 관련 글을 제공하는 콘텐츠 화면 구성.
- 계정·공지·알림: 온보딩, 로그인, 회원정보 수정, 공지사항 및 알림 기능 구현 완료(개발자 확인). 발표자료 작성 당시 알림 오류가 언급되었으나, 최종 구현 상태는 전체 기능 완료로 확인됨.
내가 직접 구현하거나 담당한 부분
- 앱 상품 검색: 제품 검색 기능, 상품 이미지 검색 기능, 상품 정보 API 통신 구현.
- 자체 서버 개발·총괄: 앱과 HTTP로 통신하여 상품 검색 결과와 이미지 링크를 전달하는 서버 영역 담당.
- 상품 데이터 수집·가공: 발표자료에 따르면 Selenium의 Headless 브라우저와 BeautifulSoup을 이용해 다나와 상품 정보를 수집·파싱하고, Google 이미지 검색 결과를 활용하도록 서버 구성.
- API 및 비동기 처리: FastAPI 기반 GET 요청 처리, aiohttp·asyncio 활용, JSON 형식의 데이터 전달 구조 설명.
- 캐싱: 반복 조회 처리의 성능 개선 목적으로 TTLCache를 서버 구성에 적용한 것으로 발표자료에 명시.
다른 팀원 담당 범위: 로그인·온보딩·알림·회원정보 및 환경 글, Firebase 연동, 앱 기획·디자인과 기타 프론트엔드 화면 등. 위 항목을 본인의 직접 구현 성과로 포함하지 않음.
팀 구성과 역할
4명 / 상품 검색·상품 이미지 검색·상품 정보 API 통신 구현(앱), 자체 서버 개발 담당 및 총괄(서버)
설계 구조 / 기술을 선택한 이유
서비스 구성: Firebase ↔ Android 앱 ↔ HTTP ↔ FastAPI 자체 서버. 발표자료에서 Firebase는 로그인 처리 및 데이터 저장 영역, 자체 서버는 상품 검색(다나와 파싱)과 이미지 검색(Google 파싱) 영역으로 구분한다. Firebase 측에는 Authentication, Storage, Firestore, Messaging 사용이 기재되어 있다.
검색 데이터 흐름: 앱의 상품 검색 요청 → FastAPI 서버의 GET 요청 처리 → Selenium·BeautifulSoup 등을 이용한 외부 상품 정보 수집 및 HTML 파싱 → 상품 정보·이미지 URL을 JSON 형태로 앱에 전달하는 구조다. 서버 설명에는 aiohttp 및 asyncio 기반 비동기 처리와 TTLCache를 이용한 캐싱이 포함된다.
기술 사용 목적: 발표자료는 FastAPI를 안드로이드와의 통신, Selenium을 Headless 브라우저를 통한 정보 수집, BeautifulSoup을 상품명·이미지 URL 파싱, TTLCache를 성능 개선에 사용했다고 설명한다. 이 밖의 기술 선정 과정이나 대안 비교는 확인되지 않는다.
기술 구성과 확인 범위
- App: Android 앱(사용 언어·UI 프레임워크 확인 필요)
- Backend: Python, FastAPI, aiohttp, Selenium, BeautifulSoup, asyncio
- Caching / Data Processing: TTLCache, urllib.parse
- Backend Services: Firebase Authentication, Storage, Firestore, Messaging (다른 팀원이 담당한 서비스 영역)
- External Data: 다나와 상품 정보 및 Google 이미지 검색 결과 파싱(발표자료 기준)
가장 어려웠던 문제
가장 어려웠던 문제: 외부 상품 정보를 크롤링할 때 대상 사이트가 자동화된 접근(봇·로봇)을 차단해 데이터 수집이 어려웠다(개발자 확인).
문제의 원인: 상품 검색 기능이 외부 웹사이트의 검색 결과 수집에 의존하는 구조였으며, 해당 사이트의 자동화 접근 차단으로 정상적인 데이터 확보가 제한되었다. 차단 방식과 구체적인 오류 로그는 남아 있지 않다.
해결 방법: 발표자료에 확인되는 최종 수집 구조는 Selenium Headless 브라우저를 통한 페이지 접근, BeautifulSoup을 통한 HTML 파싱, FastAPI를 통한 앱 응답 처리이다. aiohttp·asyncio와 TTLCache도 서버에 적용했다. 다만 봇 차단에 대응하면서 실제로 변경한 코드나 구체적인 차단 해결 기법은 확인 필요하며, 위 기술이 차단 자체를 우회했다고 단정할 수는 없다.
해결 결과: 개발자 설명에 따르면 상품 검색을 포함해 계획한 전체 기능을 구현 완료했다. 발표자료에도 검색·상품 상세 화면과 서버 GET 요청의 200 OK 응답 사례가 남아 있다. 차단 대응 방식의 세부 이력이나 성공률·성능 수치는 확인되지 않는다.
최종 결과 / 실제 사용 여부
전체 기능 구현 완료, 미배포. 개발자 확인에 따르면 상품명 검색·이미지 검색·바코드 조회·알림을 포함한 계획 기능을 모두 구현했다. 발표자료에 앱 화면과 자체 서버의 GET 요청 처리 사례가 제시되어 있으나, 정식 배포나 실제 외부 사용자 운영은 진행하지 않았다. 발표 당시 언급된 알림 오류의 수정 과정 및 전체 기능에 대한 테스트 기록은 별도로 확인되지 않는다.
배운 점
Android 앱과 FastAPI 자체 서버 사이의 HTTP 요청·JSON 응답을 연결하고, 웹페이지에서 수집한 정보를 앱의 상품 검색 결과로 가공하는 과정을 경험했다. 특히 자동화 접근이 차단되는 외부 사이트에 의존하면 검색 기능의 구현과 안정성 확보가 어려워진다는 점을 체감했다. 팀 내 Firebase 담당 영역과 검색용 자체 서버의 역할을 나누어 개발했다.
앞으로 개선하고 싶은 점
발표자료에 명시된 개선 방향: 오류 수정과 성능 개선, 재활용 팁·환경 칼럼 콘텐츠 확충, 관련 글의 조회·추천 기능 추가. 자료 작성 당시 알림 오류 수정도 과제로 제시되었으나, 이후 개발자 확인에 따르면 알림 기능을 포함한 전체 기능은 구현 완료했다. 추가 제안: 외부 사이트의 크롤링 차단과 HTML 구조 변경에 대비해 데이터 수집 실패 처리·재시도 정책 및 대체 데이터 공급원을 검토할 수 있다(실제 추진 여부 미확인).