교내 소프트웨어 경진대회 회고

Yehyeok Bang·2023년 5월 14일
2

회고

목록 보기
2/4

경진대회

 저는 성공회대에서 주최한 제 15회 소프트웨어 경진대회를 참가하게 되었어요. 소프트웨어 경진대회는 소프트웨어공학 전공 학생들이 소프트웨어를 구상하고 개발함으로써 소프트웨어 개발 능력과 실무 관련 능력을 향상시키고 최신 기술과 지식 습득을 통해 경쟁력을 높이는 계기를 마련하는 취지로 진행하는 교내 활동이에요.

 자유 트랙과 저학년 트랙으로 구성되어 있으며, 저는 저학년 트랙 조건에 충족하기도 했고 개인 팀이기 때문에 저학년 트랙으로 지원했으며, EasySobi(이지소비)라는 프로젝트를 제출했어요. 소비기한 관리를 위한 백엔드 REST API와 간단한 웹으로 구성되어 있어요.

 경진대회를 돌아보며, Keep(유지할 것), Lack(부족한 것), Try(시도할 것) 키워드로 정리해보려고 해요.


EasySobi

 EasySobi는 쉬운 소비기한이라는 의미를 가지고 있으며, 소비기한을 쉽게 관리할 수 있는 서비스를 기획했어요. 소비기한은 유통기한을 대체하는 개념이에요. 실제로 이번년도(2023)부터 시행됐지만, 여러 사업장의 상황을 고려하여 사업 별로 계도기간을 부여하고 있어요.

  • 유통기한은 소비자에게 유통 및 판매가 허용되는 기한
  • 소비기한은 보관 방법을 준수했을 때 식품 섭취가 가능한 기한

 유통기한에서 소비기한으로 표시제가 바뀐 이유는 유통기한을 폐기 시점으로 인식하여 식품 섭취 판단에 혼란이 발생하고, 이로 인해 발생하는 식량 낭비를 감소시키기 위한 국제적인 추세라고 해요.

해결하려는 문제

소비기한을 본 적이 없어요 (홍보 부족)

  • 주변 사람들이 충분히 알 수 있을 만큼의 홍보가 부족한 것 같아요.
  • 기존 포장지 재고 및 새로운 포장지 준비 등 현장에서의 애로사항과 잔여 포장지 폐기로 인한 환경 오염을 막기 위해 소비기한 표시에 대한 계도기간을 부여했기 때문에 아직 소비기한을 주변에서 보기 힘들어요.
    (참고로 우유의 소비기한 적용 시기는 2031년이에요.)

그럼 유통기한이 지나도 섭취 가능해요? (정보 혼란)

  • 유통기한이 지나도 섭취가 가능하다고 할 수 있지만, 식품 종류 및 보관 방법을 알 수 없기 때문에 섭취 가능 여부는 판단하기 어려워요.
  • 유통기한, 소비기한은 간단하게 해당 날짜까지 먹어도 된다는 것이 아니에요. 식품 특성에 맞는 보관 방법을 준수할 경우 식품 고유의 품질이 유지될 수 있는 기한이라는 뜻이에요. 즉, 소비자의 보관 방법이 중요해요.

 이처럼 소비기한이 시행됐지만 모르는 사람이 많고, 아직까지도 식품 섭취 기한에 혼란을 느끼는 사람이 많다고 생각되어서 소비기한 관리 및 홍보를 위한 서비스를 만들기로 했어요.

기획

 식품의약품안전처는 소비기한 표시제도의 안정적 정착을 지원하기 위해 2022년부터 2025년까지 순차적으로 식품 유형별 소비기한 참고값을 설정 및 제공하고 있어요. 한 과자의 기존 유통기한은 제조기한으로부터 45일이었지만, 소비기한 참고값은 81일로 설정되었어요. 이 자료들을 바탕으로 아직 소비기한을 볼 수 없는 식품들을 유형에 따라 소비기한을 계산해주는 것을 먼저 생각했어요.

 하지만 단순히 소비기한을 계산해주는 서비스라면 스스로 생각해봐도 굳이 사용하지 않을 것 같다고 생각했어요. 그래서 냉장고처럼 사용자에게 보관함을 주고 보관함에 식품 정보를 저장하고(소비기한 계산 후 저장) 관리할 수 있게 만들어보자고 생각했어요. 추가로 가족끼리 냉장고를 같이 쓰는 것처럼 보관함을 같이 사용하는 사용자와 함께 관리할 수 있도록 보관함을 공유하는 기능까지 기획했어요.

 에브리타임에서 친구 추가를 하면 서로의 시간표를 조회할 수 있어요. 친구 추가는 아이디로 친구 추가 또는 카카오톡 메시지를 통해 진행해요. 보관함을 공유하는 기능을 이것과 비슷하게 구현하고 싶어서 EasySobi 서비스는 회원가입과 같은 기능을 카카오 로그인을 이용해 구현하도록 기획했어요. 카카오로 구현해두면 메시지를 보낼 때 이점이 있을 거라고 생각했어요. 또한 경험이 부족한 제가 직접 누군가의 개인 정보를 직접 관리하기 부담스러운 부분도 있었고, 무엇보다 개발 기간을 단축할 수 있다는 이점이 있어서 선택하게 되었어요.

 처음에는 스프링부트와 자바를 사용한 백엔드 API만 구성하여 제출하는 것이 목표였으나, 백엔드 특성상 불특정 다수에게 눈으로 결과를 보여주기 힘들다고 판단해서 간단하게 리액트를 이용해 프론트를 구성하기로 했어요. 디자인은 부족하더라도 API 연결과 의도에 맞는 화면 구성을 목표로 진행했어요.

기대

 이지소비는 소비기한 관리를 통해 폐기되는 음식물 쓰레기의 양을 줄이고 식품 안전성을
높이는 것을 기대하고 있습니다.

구현

  • EasySobi 서비스는 기획 단계에서 설명했듯이 카카오 로그인을 통해 이용할 수 있어요.
  • 사용자는 보관함의 이름을 마음대로 설정하고 여러 개 만들 수 있어요.
  • 보관함에 식품 정보를 입력하여 식품을 저장할 수 있어요.
    (소비기한 참고 값을 기준으로 소비기한이 자동으로 계산)
  • 메인 화면에서 소비기한이 얼마 남지 않은 식품을 따로 볼 수 있어요
  • FCM을 이용하여 푸시 알림을 구현했어요.
    (보관함 삭제 알림 등)
  • 바코드 인식을 이용하여 식품 유형을 인식할 수 있도록 구현했어요.
    (식품 추가 기능을 위해 구현했지만, 소비기한 참고 값 자료의 식품 유형과 바코드 인식을 통해 알 수 있는 식품 유형이 조금 달라서 개선 중에 있어요.)
  • 보관함 접근 가능 여부 테이블과 공유 API를 만들어 테스트에 성공했어요.
    (유저가 쉽게 공유할 수 있도록 프론트 부분 개선 중에 있어요 카카오톡 메시지를 통한 공유는 아직 구현하지 못했어요.)

 자세한 내용은 해당 프로젝트 깃허브 링크를 통해 확인할 수 있어요.


어려웠던 점 1

 식품의약품안전처의 자료에 많이 의존하는 것이 어려웠어요. 또한 식품은 물론이고 식품 유형부터 수많은 종류가 존재하기 때문에 소비기한 계산 과정에 어려움이 있었으며, 불완전한 소비기한 계산 서비스는 상품성이 없다고 판단했어요.

 문제를 개선하기 위해 보관함 개념을 추가하여 소비기한 계산 외에도 스스로 식품 유무를 관리하거나, 보관함 공유를 통해 다른 사람과 함께 관리할 수 있는 기능을 추가하여 상품성을 보완했어요. 추가로 식품 유형의 가짓수를 늘리고, 유형별 참고 값의 평균 값을 사용하여 편차를 최소화 했어요.

어려웠던 점 2

 단기간에 익숙하지 않은 리액트를 사용하여 웹을 구현하는 것이 어려웠어요. 사실 백엔드 API만 제출하는 것이 경진대회 목표였으나, 앞서 말한 이유인 눈으로 보여주기 위해 제출 5일 전에 리액트를 사용하여 웹을 구현했어요.

 시간이 촉박하다 보니 공식 문서를 읽기 보단, 이미 구현되어 있는 누군가의(?)코드나 누군가의(?)블로그처럼 참고 자료만 참고하며 기능 작동이 최우선인 코드를 작성했어요. 그렇게 좋지 않은 코드가 쌓이던 도중 페이지 라우팅 기능을 구현하며 오류가 발생했어요. 이 부분에서만 2일이 소요되며 시간의 압박을 더욱 느끼게 되었어요.

 많은 삽질 끝에 리액트 라우터 공식 문서에서 문제의 원인을 발견할 수 있었어요. 업데이트로 인한 버전 차이였어요. 최신 버전을 사용하며, 이전 버전의 코드로 구현된 참고 자료를 보면서 구현했기 때문에 발생한 문제였어요.

 같은 오류를 겪은 블로그 대비 공식 문서는 제가 해결하고 싶은 문제를 바로 찾기는 쉽지 않지만, 제일 중요한 근본적인 사용서임을 기억하고, 이후 HTTP 통신을 위한 Axios 라이브러리 사용 중 발생한 문제도 공식 문서의 설명을 보고 해결할 수 있었어요.

어려웠던 점 3

 카카오톡 메시지를 이용한 보관함 공유 기능은 구현하지 못했어요. 텍스트나 링크를 포함한 메시지를 카카오톡 메시지로 보내는 것은 성공했지만, 제가 원하는 보관함을 공유하기 위해 어떤 형태로 API를 구성해야 하는지에 대한 답을 찾지 못했어요.

 상대의 이메일을 이용하여 보관함을 공유하는 API는 구현했어요. 하지만 사용자 입장에서는 이메일을 이용한 방법보다는 카카오톡 메시지를 이용한 방법이 더 좋은 방법인 것 같아요. 경진대회가 끝났다고 멈추는 것이 아니라. 포기하지 않고 해당 기능을 구현하려고 해요.


결과


Keep (유지할 것)

  • 개발 효율에 도움이 되는 도구를 적극적으로 사용하기
  • 공식 문서를 잘 활용하기
  • 사용자 입장에서 생각해보기

Lack (부족한 것)

  • 어딘가에 의존하는 프로젝트 기획
  • 작동만 하는 JPA, 최적화 문제

Try (시도할 것)

  • 프로젝트 리팩토링
  • SQL, JPA 공부하기
  • 피드백 받아보기

기타

백엔드 깃허브
웹 깃허브
소비기한 관련 정보
이미지 출처

0개의 댓글