KURLY HACK FESTA 2022 회고록

Nicholas·2022년 8월 29일
0

회고록

목록 보기
3/3

본 회고록은 2022년 마켓컬리에서 주최하는 해커톤에 참가하여 본선에 올라가 프로젝트를 진행한 내용에 대한 회고록이다.

1. 팀 및 프로젝트 소개

  • Frontend : 3명
  • Backend : 1명(본인)
  • 팀명 : borikkori
  • 프로젝트 소개 :
    우리팀은 마켓컬리 회원들이 각자의 레시피와 생활 팁 등을 공유할 수 있는 커뮤니티 사이트를 개발하고자 했다. 하지만 개발 기간이 짧아 레시피만을 위한 커뮤니티 사이트를 필수 구현으로 진행했다. 마켓 컬리에서 판매하는 원재료나 제품들을 통해,고객들이 직접 요리를 제작하고 본인들의 레시피를 공유 하면서 고객들끼리 본인들이 원하는 정보와 제품을 추천할 수 있다는 순기능이 있다. 또한, 베스트 게시글이나 레벨제 와 같이 지속적인 커뮤니티 활동을 하는 사용자의 경우에는 적립금, 경품과 같은 혜택들을 부여하여 고객 유치의 지속성 역시 기대해볼 수 있다.
  • 개발기간 :
    - 예선 계획서 제출 기간 : 2022년 07월 25일 ~ 2022년 08일 15일(21일)
    - 본선 결과발표 : 2022년 08월 17일
    - 본선 개발 기간 : 2022년 08월 19일 ~ 2022년 08월 24일(6일)

    해커톤 준수사항 : AWS 인프라를 활용하여 프로젝트를 배포해아 한다.

2. 예선

2-1 주제선정

  • 위에 과제들을 가지고 일주일간 장기간의 회의를 진행했다.
    이전 프로젝트들은 클론을 함으로써 계획하는 부분을 건너뛰고 진행했었으나 이번에는 계획부터 디자인 개발 배포까지 단 4명의 팀원들이 해야함으로 다들 처음해보는 계획이여서 서툰점이있었다.

  • 주변에 조사도 해보고 따로 설문지를 주변 지인들에게 설문을 받아 주제선정에 도움을 받기도 했다.

  • 이렇게 선택된 우리의 주제는 3번. 상품추천이였다. 추천방법은? 바로 커뮤니티, 마켓컬리가 오프라인 대형 마켓이라면 그 대형마트 한가운데에 상품을 서로 추천해주고 어떻게 쓰는지 알려주는 등 다양한 이야기를 할 수있는 광장을 하나 만들어주면 어떨까 에서 출발했다.

  • 다행이 우리 borikkori팀의 정점, 팀장님이 디자인 및 계획에 대한 플로우를 전반적으로 알고있어서 주제가 선정되고 어떤것을 해야될지 정해지고나서는 일사천리였다.


  • 전반적인 레이아웃과 디자인부터 유저플로우, 퍼소나설정, 여정맵 까지 큰어려움없이 모두가 적극적으로 의견을 내서 좋은 계획서를 작성했다.

2-2 본선진출

  • 8월 17일 본선진출발표..최종 본선진출 67팀에 선정되 본선에 진출하게 됬다.

위코드에서 진행했던 프로젝트들은 사이트 클론 프로젝트다보니 계획단이 어느정도 빠진프로젝트였고 또 팀원들또한 위코드측에서 선정하여 결정된 팀으로 진행하였었는데 이번 프로젝트는 계획부터 팀모집까지 모두 우리들 스스로 했다. 본선진출한 우리들의 계획서 또한 마켓컬리에서 심사를 하고 본선으로 올려준것으로 보아 주니어들이 모여서 만든 첫 계획서임에도 불구하고 훌륭하다 판단해서 본선에 갔다고 생각한다. 이제 개발만 하면된다...

3. 개발

3-1. ERD

  • ERD가 매우 복잡하다.
  • 물론 3개의 게시판(레시피커뮤니티게시판, 팁공유게시판, 리뷰게시판)이 있어서 더그럴수도있겠지만 처음으로 이렇게 복잡한 ERD는 처음 그려봤다.

3-2. 개발시작

  • 처음개발은 Django로 개발을 하면서 DRF를 적용해봐야겠다고 생각하고 진행했으나 개발시간이 부족하여 익숙한 방식인 기본 Django를 이용하여 개발을 진행하였다.

3-2-1. bulk_create

  • 테스트코드에서 자주사용되던 ORM중하나인 bulk_create의 활용
  • 사진에서와 같이 Ingredient의 경우 몇개가 될지 모르는 자료들이 백엔드 API로 넘어온다.
    최소 1개부터 많게는 10개이상의 데이터가 한번에 전달되는데 이 가변적인 요소들을 어떤 방식으로 처리하면좋을지 고민했었다.
  # views.py

  def post(self, request):
      ingredients = request.POST["ingredient"]
      # 폼데이터 로 프론트엔드에서 전달

      ingredients = json.loads(ingredients)
      # 데이터를 loads로 읽는다.

      ingredient_list = [Ingredient(name = i["name"], quantity = i["quantity"], recipe_id = recipe.id)for i in ingredients]

      Ingredient.objects.bulk_create(ingredient_list)
  • 위와같이 bulk_create 는 리스트형식의 데이터를 여러개 한번에 동시에 저장가능한 ORM으로 저장가능한 리스트형식만 만들어준다면 몇개의 데이터가 들어오더라도 저장이 가능하겠다고 생각하여 진행하여 문제없이 처리하였다.

3-2-2. KoNLPy 라이브러리

  • KoNLPy라는 라이브러리를 이용한 추천기능
  • KoNLPy라이브러리는 한국어 정보처리를 위한 파이썬 패키지로 형태소분석기를 사용할수있는데 여기서 Okt클래스의 기본뼈대인 twitter-korean-text를 활용하여 단어를 추출하여 사용하였다.
# utills/word_extract.py

from konlpy.tag import Twitter      
from collections import Counter

def word_extract(word):
    nlpy = Twitter()
    nouns = nlpy.nouns(word)
    
    count = Counter(nouns)
    tag_count = []
    tags = []
    for n, c in count.most_common(100):
        dics = {'tag': n, 'count': c}
        if len(dics['tag']) >= 2 and len(tags) <= 49:
            tag_count.append(dics)
            tags.append(dics['tag'])

    return tags
  • 위의 모듈은 단어들을 매개변수로 넣으면 단어별로 많이 나오는 순서대로 리스트형태로 처리해주는 기능을 담당한다.
    위의 모듈로 현재 접속해있는 레시피의 본문을 단어별로 많이쓰인 순서대로 리스트하여 그 리스트순으로 레시피를 필터하여 추천 레시피로 반환하는 코드를 구현했다.
	# views.py
    
    from utils.word_extract     import word_extract
    
    def get(self, request, recipe_id):
        recipe_content = Content.objects.filter(recipe_id = recipe_id)
        
        content = ""
        for i in recipe_content:
            content += i.content
        
        word_rank_list = word_extract(content)[:5]
        recipe_lists = []
        for i in word_rank_list:
            r = Recipe.objects.filter(content__content__icontains = i).first()
            recipe_lists.append(r)
        
        result = [{
            "id"       : recipe.id,
            "title"    : recipe.title,
            "thumbnail": recipe.thumbnail
            }for recipe in recipe_lists]

        return JsonResponse({"result": result}, status = 200)  

4. 마무리

  • 결과적으로 3개의 게시판을 구현하는것이 목표였으나 레시피 게시판을 구현하는것으로 해커톤은 마무리하였다.
  • 이번 해커톤으로 게시판 3개를 다 구현못해서 아쉬운것은 사실없었다. 기능적으로는 레시피게시판만 구현하면 나머지 두개의 게시판은 크게 바뀌는것이없어서 아쉬운것은 없었다.
    다만 전체적인 해커톤에서 두가지정도 아쉬운부분이 있다.
  • 아쉬운점 1. DRF의 활용
    • 사실 이번 해커톤에 이전 위코드 프로젝트 과정에서 활용못해본 DRF를 활용하고자 하는 마음이 컷으나 못사용해본것이 아쉬웠다. DRF는 Django를 하면 자연스럽게 따라오는 기술로 취업활동에서도 Django만 할줄아는 것은 큰 메리트가없었기에 사용을 못해본것이 아쉬웠다.
  • 아쉬운점 2. 배포
    • 위코드에서의 앞선 두번의 프로젝트는 EC2를 이용해서 배포를 하여 최소한 동작하는것을 확인했었다.
      이번에 Docker를 이용해서 배포 하는 과정에서 KoNLPy라이브러리가 JAVA기반의 Python패키지가 문제였던건지 EC2의 우분투서버에 Docker빌드가 되지않아 결국 제출일자내에 배포를 못한것이 아쉬웠다.
    • API개발을 조금더 타이트하게 조이고 마지막날은 배포에만 전력을 다했어야 했는데 API개발이 점점 늦어지면서 배포에 시간배분을 너무 적게 하여 아쉬웠다.
  • 하지만 지난 2번의 프로젝트에 비해 프론트엔드와 백엔드간의 소통부터 최종 결과물까지 조금더 퀄리티 높은 프로젝트여서 개인적으로는 만족하는 프로젝트였다.






profile
WEB Developer

0개의 댓글