Skip to content

Mojacknong/Farmus_App

Repository files navigation

🥬 FARMUS, 팜어스 🥗

서비스 이미지

함께 즐기는 홈파밍, FARMUS

최근 집에서 채소를 길러서 먹는 사람들이 부쩍 늘어났는데요. 저마다의 동기를 가지고 홈파밍을 시작한 사람들이 여러 가지 어려움을 겪고 있습니다.

베란다에서 직접 기른 채소가 테이블 위 나의 접시 위에 성공적으로 올라오게 하기 위해서는 꾸준한 관리부지런한 정보 탐색, 그리고 그 과정에서 지루함보다는 즐거움을 느끼는 것이 중요합니다. 팜어스는 누구나 홈파밍의 즐거움을 느껴 포기하지 않도록 돕고자 합니다.



🧑🏻‍🌾 팀명 : 모던파머

모던파머

R&R

분야 이름 포지션
기획 국준호 📑 데스크리서치, 정성리서치, 비즈니스모델 담당
기획 김서연 📊 기획 리드, 데스크리서치, 정량리서치, 서비스 브랜딩 담당
기획 이장미 🔍 데스크리서치, 정성리서치, 비즈니스모델 담당
디자인 남서윤 🖼️ 디자인 리드, 서비스 브랜딩, UI 디자인
개발 김아린 💻 개발 리드, Android 개발 담당
개발 양건희 📱 Android 개발 담당
개발 이승렬 🖥️ 서버 개발 담당
개발 이은섭 📢 프로젝트 매니징, 서버 개발 담당



🔦 목적 및 필요성

목적

목적

FARMUS는 누구나 홈파밍의 즐거움을 느껴 포기하지 않도록 돕는 서비스입니다. 사람들과 채소 키우는 과정을 공유하는 챌린지 기능으로 홈파밍 성공 확률을 높여주고, 성취감을 느끼게 합니다.

필요성

📑 데스크 리서치를 통한 도메인 이해

🪴 홈파밍이란?

최근 집(Home)에서 채소를 키우는(Farming) 이른바 '홈파밍족'이 늘고 있습니다. 홈파밍이란 베란다, 옥상 등의 공간을 텃밭으로 활용해 직접 채소를 키우는 행위를 말합니다.

👨🏼‍🌾 홈파밍에 참여하는 사람의 증가

‘모두가 도시농부’의 도시농업 주요현황 자료에 따라 최근 3년간 지역별로 주택활용형 도시농업, 즉 홈파밍에 참여하는 인원 수를 시각화한 결과, 특히 수도권/부산 지역에서 주택활용형 도시농업 참여 인원 수 가장 많고, 모든 지역에서 꾸준히 증가 추세라는 사실을 파악할 수 있었습니다.

최근 3년간 주택활용형 도시농업 참여자 수

🌾 홈파밍 물품 판매량의 급증

국내 유명 이커머스 업체 W사에 따르면 2022년 7~8월에 홈파밍 관련 품목의 판매량이 전년도 같은 기간 대비 대폭 증가한 것으로 나타났습니다. 일례로 상추 모종과 대파 모종이 각각 98%, 197%로 크게 늘었고, 미니화분(116%), 식물재배기(297%) 등 부자재의 판매량도 동반 상승한 것으로 나타났습니다.

🌟 트렌드 코리아 2022 - 러스틱라이프

트렌드 코리아 2022의 ‘러스틱 라이프’ 는 시골풍의 ‘소박한’, ‘투박한’이라는 뜻을 가진 단어입니다. 한마디로 단순하지만 편안한 시골의 분위기를 자아내는 것을 말합니다. 트렌드코리아 2022에서는 시골로 여행을 떠나거나 자리를 잡는 것 뿐만 아니라 집에서 베란다를 텃밭으로 가꾸거나 홈파밍을 즐기는 것도 러스틱 라이프 트렌드와 관련이 있다고 말합니다.

최근 세계 인구가 2050년까지 90억 명 이상에 이를 것으로 예상되는 가운데, 식량 생산과 재고를 늘려야 할 필요성이 지속적으로 제기되며, 특히 식량안보가 전 세계 국가의 첨예한 관심사로 떠올랐습니다. 홈파밍 역시 단순 트렌드를 넘어 지속 가능한 생산과 소비 측면에서 주목받고 있습니다.

📈유저 리서치를 통한 니즈 파악

📊 정량 리서치를 통한 니즈 파악

1️⃣ 사람들이 홈파밍에 참여하는 동기

홈파밍 동기

홈파밍을 경험해본 202명에게 홈파밍을 시작하게 된 동기를 질문했을 때, ‘스트레스를 해소하고 정서적 안정을 찾기 위해서’라는 응답이 가장 많았습니다. ‘신선하고 안전한 식재료를 먹고 싶어서’, ‘채솟값이 너무 비싸서 경제적인 이유로’라는 응답이 그 뒤를 이었는데요. 사람들이 다양한 동기를 바탕으로 홈파밍을 시작하는만큼, 이러한 니즈를 모두 존중하는 서비스를 제공하고자 합니다.

2️⃣ 사람들이 홈파밍을 하며 겪는 어려움

어려움의 유형 응답 수 응답 비율
재배 전 한 번이라도 어려움을 겪은 사람 118명 58.4%
재배 중 한 번이라도 어려움을 겪은 사람 183명 90.6%
재배 후 한 번이라도 어려움을 겪은 사람 74명 36.6%

같은 표본에게 재배 전, 중, 후에 어떤 어려움을 경험했는지 물어본 결과 재배 중 어려움을 겪은 사람이 가장 많다는 것을 파악했습니다. 이때, 구체적으로 환경 관리, 수분 관리, 병충해 관리에서 어려움을 겪는 사람이 많았습니다.

어려움

재배 중 어려움을 경험한 이후, 홈파밍에 지속적으로 참여하고자 하는 마음이 줄어들었다는 답변이 전체의 38.1%로 나타났습니다. 사람들이 홈파밍을 하는 과정 속에서 느끼는 어려움을 해결해주어야만 홈파밍을 꾸준히 지속할 것이라 생각했습니다.

3️⃣ 홈파밍의 진입장벽

아직 홈파밍을 경험해보지 않은 사람들 중 홈파밍을 시작할 의향이 있는 사람에게는 실제로 시작하지 않은 이유를 물어보았고, 시작할 의향이 없는 사람에게는 시작 의향이 없는 이유를 물어보았습니다.

유형 응답
시작 의향 有 - 시간을 투자해서 꾸준히 관리할 여유가 없음 (81.5%)
- 정보를 찾기 번거로움 (36.9%)
- 비용이 많이 듦 (27.7%)
시작 의향 無 - 시간을 투자해서 꾸준히 관리할 여유가 없음 (58.3%)
- 정보를 찾기 번거로울 것 같음 (28.3%)
- 들어본 적 없음 / 들어봤지만 관심 없음 (각 21.7%)

두 유형 모두에서 ‘꾸준한 관리의 부담’과 ‘정보 탐색의 번거로움’이 홈파밍의 가장 큰 진입 장벽으로 작용하는 것을 알 수 있었습니다. 따라서 꾸준한 관리와 정보 탐색 측면의 서비스 제공이 필요하다고 판단했습니다.

💬 정성 리서치를 통한 니즈 파악

정량리서치를 통해 인터뷰 참여 의향이 있는 응답자를 선별하여 1)성별과 세대를 불문 2)홈파밍 경험자 혹은 경험이 없어도 시작할 의향이 있거나 미션 형태로 홈파밍을 해본 사람 을 대상으로 질의응답을 진행했습니다.

인터뷰 답변 중 응답자가 느낀 페인포인트, 홈파밍과 미션수행/챌린지와의 연관 서비스에 얼마나 높은 필요 인식을 가지고 있는지 1차적으로 분류하는 작업을 거쳤습니다.

정성리서치 정리

2차적으로 각 응답자의 답변 내용 중 기획의도, 리서치 전 설정한 가설과 들어맞는 답변, 새로운 니즈가 담긴 답변들을 분류해 정량리서치의 연장선으로 겪고 있는 문제 상황과 요구사항을 파악했습니다.

정성리서치 분석

💥 정성리서치 인사이트 도출

분류 응답
홈파밍 주요 동기 - 코로나 19 동안의 지루함 해소
- 채솟값 폭등으로 인한 경제적 절약
- 신선하고 안전한 식재료
- 스트레스 해소 및 정서적 안정
페인포인트 - 홈파밍 사전 정보 부족으로 인한 진입 장벽
- 홈파밍을 함께 할 사람을 찾기 어려움
- 정보를 찾기 번거로움
- 꾸준한 관리의 부담
주요 니즈 - 작물 관리에 관한 전반적인 가이드라인 제시
- 기르고 있는 작물을 캘린더 형식으로 기록할 수 있는 기능
- 여러 사람들과 작물의 성장 과정을 공유
- 스스로 재배 과정을 기록하고, 그 기록을 검토하는 과정에서 오는 성취감
- 실제 경험자로부터 제공받는 실용적인 홈파밍 정보 공유 커뮤니티

☀️ 문제 정의

👨🏻‍🌾 모던파머 팀은 정량리서치와 정성리서치를 통해 도출한 인사이트를 통해 초보 홈파머들이 홈파밍을 하는 과정 속에서 어려움을 겪고 포기한다는 문제상황을 발견했습니다.

📢 따라서, 팜어스는 홈파밍 그룹 챌린지 서비스를 통해 문제상황을 해결하고자 합니다. 작물 생장주기에 맞춰 제공하는 챌린지 가이드라인을 통해 홈파밍 관련 맞춤 정보를 제공하고 다른 사람들과 함께 수행하고 소통하는 챌린지 미션을 통해 초보 홈파머들의 흥미 저하를 방지하며 작물을 꾸준히 관리하게 하여 재배 성공까지 이어지도록 돕습니다.



👀 리서치 및 시장조사

사용자 조사

💡 홈파밍의 인기몰이 이유

1️⃣ 낮은 진입 장벽

전문가들은 홈파밍 인기몰이의 원인을 '낮은 진입 장벽'이라고 가장 먼저 얘기합니다. 바질, 대파, 방울토마토 등의 채소를 씨앗 키트로 쉽게 구매할 수 있고, 누구든지 집에서도 키울 수 있다는 장점이 있습니다. 이런 소비 트렌드가 자리 잡은 데는 ‘취테크(취미+재테크)’에 대한 젊은층의 관심 증가도 한몫했다고 전문가들은 분석합니다.

2️⃣ 삶의 만족도 증진

National Statistical Office 통계청의 2022년 국민 삶의 질 조사에 따르면

주관적 웰빙의 인지적 측면을 나타내는 삶의 만족도

얼마나 자주 행복했는지 측정하는 긍정 정서

모두 전년 대비 악화되어 국민이 주관적으로 느끼는 전반적인 삶의 만족도가 하락한 것으로 나타났습니다. 두 가지 지표 모두 정서적으로 안정되고 행복한 상태뿐만 아니라 건강과도 밀접한 관계가 있기 때문에 안정된 상태를 되찾고자 해결책을 찾는 움직임이 분주해졌습니다.

그 중에서도 원예 활동은 신체적, 심리적 상태를 긍정적으로 향상시키는 것으로 알려져 있습니다. 녹색공간과 식물과의 접촉으로부터 획득할 수 있는 이점은 삶의 질, 교육, 공중보건 등을 포함하는 사회적 문제 해결을 위한 중요한 열쇠로 인식되어 녹지공간 확보와 홈파밍의 중요성에 힘을 실어 주고 있습니다.

3️⃣ 채솟값의 폭등

2023년 4월 국가통계포털(KOSIS)에 따르면

신선채소 가격 전년 동기 대비 13.9% 상승

해당 월 소비자물가 상승률이 4.2% 기록
→ 1년 만에 가장 낮은 수준을 보였지만 채소 가격 상승으로 인해 물가 상승폭을 더 줄이지 못함.

📊 Tableau를 활용한 채솟값(파) 전년, 평년 대비 비교 시각화 및 인사이트 도출

파값 비교

코로나19 이후 위와 같은 물가상승은 자연스레 식자재 부담을 줄이는 차원에서 가정 내 베란다, 마당, 옥상 등 공간을 활용한 ‘주택활용형 홈파밍’으로 이어졌습니다.

💡홈파밍의 지속적 참여 의도

코로나 시대, 그리고 앞서 말한 홈파밍의 인기몰이 이유 등 다양한 요인이 홈파밍에 입문하는 결과를 초래했지만, 단순히 입문에서 그치지 않고 홈파밍을 지속하는 것에는 어떤 동기가 가장 유의미한 영향을 끼쳤는지 관련 논문을 탐색했습니다.

호서대학교 윤중환 교수의 2022년 <도시농업 참여동기가 인지적 몰입, 만족도 및 지속적 참여 의도에 미치는 영향> 연구 논문에 따르면

사회적 동기(사회적 관계를 통해 타인으로부터 얻을 수 있는 도움과 서비스, 일련의 활동)가
사회적 만족도(사람들과 교류하고 공통된 관심사를 나누면서 느끼는 고립감이나 외로움 해소)를 매개변수로
홈파밍의 지속적 참여의도(목표를 달성하기 위해 현재 행동을 유지하거나 재참가하려는 의도)에 유의한 영향관계를 끼친다는 가설이 유일하게 채택되었습니다.

이에 따라 도시농업 및 홈파밍에서도 사람들과 함께하는 커뮤니티나 공통된 문제를 해결하려는 행위가 성취감 형성 및 홈파밍의 지속적 참여 빈도 상승에 가장 좋은 프로세스라는 점을 알 수 있었습니다.

따라서 실제 현장에서도 미션 수행이나 정보공유, 또는 챌린지 형태의 사회적 동기가 사회적 만족도를 높여 지속적 참여까지 이어지는지 정량 설문조사와 정성인터뷰를 통해 추가 리서치하였습니다.

유사서비스 조사

📈 포지셔닝 맵

포지셔닝 맵

✅ 경쟁사별 특징

🪴 팜어스 1️⃣ Groo 2️⃣ Plantgram 3️⃣ Planta 4️⃣ 챌린저스
서비스 분야 작물 관리&홈파밍 챌린지서비스 식물 관리 및 기록 서비스&커뮤니티 & 스토어 식물 관리 및 기록 서비스&커뮤니티 식물 관리& 식물 식별 서비스 습관 관리&챌린지 서비스
서비스 한줄소개 함께 즐기는 홈파밍 챌린지 꽃, 다육이, 식물 이름 찾기, 홈가드닝 알림어플 식물집사 물주기 알람 어플 여러분의 식물을 위한 돌봄 리마인더 나의 건강 습관 만들기, 동기부여, 일상 루틴 계획
주요 기능 챌린지/캘린더/커뮤니티/히스토리 다이어리&알림/식물 쇼핑/식물 병원/맞춤 검색/공략집 식물 물주기 알림 및 관리/식물공유/식물커뮤니티 식물 관리 알림/식물 식별 기능/ 식물 맞춤 추천 챌린지 탐색/ 챌린지 개설 및 참여
함께 키우는 그룹 챌린지 동일한 작물을 함께 키우는 챌린지를 통해 지속성 및 성취감 강화 ‘가드닝 클럽’에서 함께 키울 순 있지만 한 식물만 키우는 것은 아님 그룹 챌린지 부재 그룹 챌린지 부재 ‘반려식물 물 주기’ 챌린지가 존재하지만 물주기 미션에만 한정
생장주기에 맞춰 기본 미션 및 가이드 제공 해당 작물의 생장주기에 맞춰 주차별 가이드 및 미션 제공 뉴스레터 형식으로 가이드가 제공되고 미션은 제공되지 않음 그룹 챌린지 부재 그룹 챌린지 부재 물 주기 미션만 인증하는 방식
미션 진행 현황 미션을 제출한 후, 다른 참여자의 미션 현황을 볼 수 있음 미션 부재 미션 부재 미션 부재 다른 참여자의 미션 현황 볼 수 없음
작물 등록 방식 작물을 등록하면 생장 주기에 맞춰 메인 화면에 일러스트를 배치하여 성취감 극대화 직접 찍은 사진으로 등록 직접 찍은 사진으로 등록 직접 찍은 사진으로 등록 자신이 키우는 식물 등록 기능 부재

차별성 1️⃣ 함께 키우는 그룹 챌린지

동일한 작물로 공동의 목표를 가지고 다른 참여자들과 함께 키우며 홈파밍에 대한 흥미와 성취감을 느낄 수 있습니다. 자신의 미션뿐만 아니라 다른 참여자들의 미션 현황을 보고 서로 소통하며 ‘함께 키운다’는 소속감을 제공한다는 점에서 차별성을 가집니다.

차별성 2️⃣ 생장주기에 맞춰 제공되는 가이드와 기본 미션

작물의 생장주기에 맞춰 제공되는 가이드와 기본 미션을 통해 챌린지 참여자는 홈파밍에 대한 전반적인 지식을 얻을 수 있습니다. 단순 정보 제공 형식의 가이드가 아니라 관련 미션을 함께 부여함으로써 참여자가 해당 지식을 홈파밍에 바로 적용해볼 수 있게 합니다.

TAM SAM SOM

앱 다운로드 건수 1만 건(수익시장의 10%) 확보를 목표로 점차 시장을 넓혀나갈 계획입니다.

탐삼솜

TAM SAM SOM
도시농업을 하는 사람 집에서 채소를 기르는 사람 집에서 채소를 기르며 재배 중의 어려움을 겪은 후 홈파밍 지속 참여 의지가 줄어든 사람
196만 명 30만 명 12만 명

TAM 2022년도 도시농업 참여자수 : 1,956,081명

SAM 2022년도 주택활용형 도시농업 참여자수 : 302,631명

SOM 홈파밍을 경험해본 사람 중 38.1%가 재배 중의 어려움을 겪은 후 홈파밍 지속 참여 의지가 줄어듦 : 115,302명



🎯서비스 타겟층 정의

1차 서비스 타겟층은 각각의 동기를 가지고 홈파밍을 시작했지만 지식 부족, 꾸준한 관리에서의 어려움을 겪어 성취감과 즐거움을 느끼지 못하는 사람들입니다. 2차, 추후 서비스 론칭을 통해 타겟과 관련기능을 확장해나갈 예정입니다.

분류 1차 서비스 론칭 2차 서비스 론칭 추후 서비스 론칭
타겟 삶의 만족도 증진, 라이프스타일 추구, 경제적 절약 등 다양한 동기를 가지고 홈파밍을 시작했지만 어려움을 겪고있는 사람들 가정 내 홈파밍 뿐만 아니라 이미 꽤 큰 규모의 개인 텃밭을 운영하고 있는 홈파밍족 개인 홈파밍족 + 텃밭 공동체나 체험장 운영 사업을 하고 있는 단체 혹은 지자체
관련기능 홈파밍 정보를 공유하고 함께 미션을 수행하는 챌린지 기능, 성장일기 기능, 커뮤니티 기능 텃밭 분양 기능 체험장 신청 중개 기능, 지자체 사업 홍보 기능



🔥 핵심기능

기능 overview

기능 설명
캘린더 1. 오늘의 할 일을 확인하고, 체크할 수 있는 기능
2. 성장일기를 작물별로 작성할 수 있는 기능
3. 할 일, 성장일기 기록을 캘린더에서 모아볼 수 있는 기능
나의 챌린지 1. 참여 중인 챌린지 정보를 확인할 수 있는 기능
2. 미션을 인증할 수 있는 기능 (생장 주기에 맞는 미션, 가이드 기본 제공)
3. 팀원들의 미션 인증을 열람하고 간단한 반응을 남길 수 있는 기능
4. 팀원들의 성장일기를 열람하고 간단한 반응을 남길 수 있는 기능
커뮤니티 1. 어려움이 생겼을 때 질문을 작성하고, 댓글로 답변을 받을 수 있는 기능
2. 나의 작물을 자랑하고 싶을 때 피드를 작성하고, 댓글로 반응을 얻을 수 있는 기능

해결방안에 대한 근거

1️⃣ 혼자 기록하는 기능

Q. 챌린지 경험 후, 챌린지를 진행했던 행동을 지속적으로 이어가고 있나요?

A. ‘혼자 기록하고 그 내용을 모아볼 수 있는 기능’을 사용한 사람들의 답변 평균이 가장 높았음. 그래프 또한 ‘매우 그렇다’인 오른쪽에 치우쳐 있는 것을 확인할 수 있음.

혼자 기록하기

⇒ 캘린더에서 할 일을 기록, 체크하고 성장일기를 기록하는 기능을 통해 유저가 지속적으로 홈파밍에 참여할 수 있도록 함.

2️⃣ 미션 기능

Q. 미션 형태로 과업(물 주기, 흙 관리 등)을 수행하며 채소를 길러본 응답자들에게 재배 성공 확률이 올라가고, 성취감을 느꼈나요?

A. 두 지표 모두에서 긍정적 변화 존재

미션

⇒ 캘린더에서의 할 일 체크, 챌린지에서의 미션 인증 등의 기능을 제공하여 유저가 재배를 성공하고, 그 과정에서 성취감을 느낄 수 있도록 함.

메뉴구조도(IA)

메뉴구조도



💰 비즈니스 모델

<팜어스>는 각각의 동기를 바탕으로 여러 사람이 함께 채소를 기르며 미션을 수행하는 챌린지 기능과 성장일기 기능, 커뮤니티 기능은 무료로 제공해 서비스 진입 장벽을 낮추면서, 더 많은 세부기능과 혜택을 원하는 유저에게는 과금을 통해 다양한 기능을 제공합니다.

Phase1

초기 MVP 단계에서는 다음과 같은 비즈니스 모델이 적용됩니다.

관련 파트너1 관련 파트너2 내용
🥬팜어스 일반 유저 성장일기 프리미엄 기능 제공
1. 고도화 성장일기 템플릿
2. 재배 관리 알림 기능

챌린지 운영 프리미엄 기능 제공
1. 미션 무제한 생성 기능
2. 광고 제거 기능
🥬팜어스 텃밭체험장, 도시농업 체험장 광고료

Phase2

추후 확장 서비스에서는 다음과 같은 비즈니스 모델이 추가 적용됩니다.

관련 파트너1 관련 파트너2 내용
🥬팜어스 일반유저 유저 간 텃밭 분양 기능 제공
1. 분양 시 중개 수수료 지불
🥬팜어스 일반유저, 텃밭체험장, 도시농업 체험장 체험장 신청 기능 제공
1. 신청 시 중개 수수료 지불
🥬팜어스 지자체 도시농업 사업 홍보 광고료
🥬팜어스 홈파밍 업체 홈파밍 작물 및 부자재 판매 업체 제휴
1. 제휴 챌린지 프로젝트 진행
2. 스토어 입점




🎨 디자인 무드보드

워터마크 로고, 아이콘 서비스 브랜딩

               디자인의도
로고 작물을 심는 지면의 흙 모양을 모티브로 합니다. GT Pressura Black 영문의 서체를 변형해 아웃라인을 울퉁불퉁하게 만들어 즐거움을 추구하는 서비스의 무드에 맞게 생동감이 느껴지도록 합니다.
색상 농업 관련 서비스이기 때문에 자연에서 볼 수 있는 컬러를 바탕으로, 목적에 맞게 조정해 사용합니다. 차분하고 부드러운 톤의 브라운을 메인 컬러로, 비비드한 녹색을 포인트 컬러로 사용해 경쾌함을 잃지 않도록 합니다.
아이콘 아이콘은 로고와 같은 스타일로 디자인해 친근한 투박함이 느껴지도록 합니다. 작물이 성장하며 뻗어가는 모습을 나타냅니다.
무드보드 생동감이 느껴지는 플랫한 그래픽을 활용한 레퍼런스를 위주로 구성했습니다.




🛠️ 기술 스택 🛠️

📱 Frontend 📱

  • 언어, 프레임워크

    Java Java

  • 스키아 엔진과 직접 통신

    • 렌더링이 필요한 위젯들만 렌더링한다
    • 웹뷰를 사용하지 않고 스키아 엔진으로 직접 화면에 UI를 그린다
    • 안드로이드, iOS 개발을 동시에 할 수 있는 네이티브 앱 개발
    • 크로스 플랫폼 프레임워크
  • 디자인 패턴

    MVVM (Model - View - ViewModel)

    • View와 Model의 의존성이 없다
    • View와 ViewModel은 양방향 소통이 아니므로 여러 View가 ViewModel 하나를 참조할 수 있다

    View : 사용자에게 보여지는 영역

    ViewModel : View 상태, 비즈니스 로직 담당

    Repository : 데이터 저장소

    DataSource : 데이터를 가져오는 영역

    Model : 데이터 설계

    라이브러리
    • Dio
      • Flutter에서 API 통신을 가능하게 하는 http 라이브러리
    • GetX
      • 상속 위젯을 더 쉽게 사용하고 재사용할 수 있도록 만들어진 Wrapper 패키지
    • SharedPrefrences
      • 로컬에 값을 저장하고 읽어올 수 있게 하는 라이브러리
    • flutter_staggerd_grid_view
      • 화면 레이아웃을 자유롭게 나눠줌
    • ImagePicker
      • 갤러리에서 이미지를 선택하거나 카메라로 새로운 사진을 찍을 수 있는 플러그인
    • flutter_screenutil
      • 바로 화면 및 글꼴 크리를 조정하기 위한 라이브러리
      • 다양한 화면 크기에서 UI가 적절한 레이아웃을 표시할 수 있음

🖥️ Backend 🖥️

  • 언어, 프레임워크

    Java Springboot Spring Gradle
    • 가장 많이 사용하는 웹 서버 프레임워크
    • MVC 패턴을 활용하여 깔끔한 코드 구성이 가능
  • 클라우드

    AWS EC2 S3 RDS ElastiCache
    • AWS 프리티어를 통해 클라우드 인프라 구축
    • 서비스 생태계가 잘 구성되어 있기 때문에 AWS 하나만 활용해도 간편한 설계가 가능
    • 여기에 스프링 클라우드 라이브러리의 기능을 더해 msa 게이트웨이를 구현
  • cicd

    GitHub Actions Docker
    • 어느 환경에서나 배포할 수 있도록 하는 대표적인 컨테이너 런타임
    • 깃허브 액션을 활용하여 별도의 인스턴스 없이 간편하게 ci-cd 파이프라인 구축
  • 데이터베이스

    MySQL Redis Redis
    • msa의 이점을 활용하여 정형, 비정형 데이터베이스를 동시에 사용
    • redis를 통해 유저 리프레시 토큰 관리
  • api 테스트, 명세서

    Notion Postman
    • 노션에 명세서 페이지 및 swagger를 동시에 활용함으로 프론트 개발자에게 편리성 제공

📝 코드, 커밋 컨벤션 📝

📌 Frontend Code Convention


식별자(Identifiers)

UpperCamelCase : 첫 글자가 대문자

  • Classes
  • enum types
  • typedefs
  • type parameters
  • extension
class SliderMenu { ... }

class HttpRequest { ... }

typedef Predicate<T> = bool Function(T value);

class Foo {
  const Foo([Object? arg]);
}

@Foo(anArg)
class A { ... }

@Foo()
class B { ... }

xtension MyFancyList<T> on List<T> { ... }

extension SmartIterable<T> on Iterable<T> { ... }

lowerCamelCase : 첫 글자가 소문자

  • 클래스 멤버
  • 최상위 정의
  • 변수
  • 매개변수
  • 상수
const pi = 3.14;
const defaultTimeout = 1000;
final urlScheme = RegExp('^([a-z]+):');

class Dice {
  static final numberGenerator = Random();
}

lowercase_with_underscores : 소문자와 언더바

  • 패키지
  • 디렉토리
  • 소스 파일
  • import prefixes
my_package
└─ lib
   └─ file_system.dart
   └─ slider_menu.dart

import 'dart:math' as math;
import 'package:angular_components/angular_components.dart' as angular_components;
import 'package:js/js.dart' as js;
정렬(Ordering)

dart: 로 시작하는 패키지를 제일 앞에 배치

import 'dart:async';
import 'dart:html';

import 'package:bar/bar.dart';
import 'package:foo/foo.dart';

package: 로 시작하는 패키지는 Relative의 앞에 배치

import 'package:bar/bar.dart';
import 'package:foo/foo.dart';

import 'util.dart';

import는 import끼리, export는 export끼리

import 'src/error.dart';
import 'src/foo_bar.dart';

export 'src/error.dart';

섹션을 알파벳 순으로 정렬

import 'package:bar/bar.dart';
import 'package:foo/foo.dart';

import 'foo.dart';
import 'foo/foo.dart';
코드 구조(Formatting)

1. 한줄 주석_변수 설명

// 한 줄 주석일 때

2. 여러줄 주석_함수, 위젯 설명

/**
* 여러줄
* 주석일 때
*/
주석(Comments)

1. K&R 스타일로 중괄호 선언

클래스 선언, 메서드 선언, 조건/반복문 등의 코드 블럭을 감싸는 중괄호에 적용되는 규칙이다. 중괄호 선언은 K&R 스타일(Kernighan and Ritchie style)을 따른다. 줄의 마지막에서 시작 중괄호{를 쓰고 열고 새줄을 삽입한다. 블럭을 마친후에는 새줄 삽입 후 중괄호를 닫는다.

2. 닫는 중괄호와 같은 줄에 else, catch, finally, while 선언

아래의 키워드는 닫는 중괄호(}) 와 같은 줄에 쓴다.

  • else
  • catch, finaly
  • do-while 문에서의 while

3. 빈 블럭에 새줄 없이 중괄호 닫기 허용

내용이 없는 블럭을 선언할 때는 같은 줄에서 중괄호를 닫는 것을 허용한다.

4. 조건/반복문에 중괄호 필수 사용

조건, 반복문이 한 줄로 끝더라도 중괄호를 활용한다. 이 문서에 언급된 중괄호의 전후의 공백, 제어문 앞 뒤의 새줄 규칙도 함께 고려한다.

📌 Backend Code Convention


네이밍

1. 패키지 이름은 소문자로 구성

패키지 이름은 소문자를 사용하여 작성한다. 단어별 구문을 위해 언더스코어(_)나 대문자를 섞지 않는다.

2. 클래스/인터페이스 이름에 대문자 카멜표기법 적용

클래스 이름은 단어의 첫 글자를 대문자로 시작하는 대문자 카멜표기법(Upper camel case)을 사용한다. 파스칼표기법(Pascal case)으로도 불린다.

3. 클래스 이름에 명사 사용

클래스 이름은 명사나 명사절로 짓는다.

4. 인터페이스 이름에 명사/형용사 사용

인터페이스(interface)의 이름은 클래스 이름은 명사/명사절로 혹은 형용사/형용사절로 짓는다.

5. 테스트 클래스는 'Test'로 끝남

JUnit 등으로 작성한 테스트 코드를 담은 클래스는 'Test’을 마지막에 붙인다.

6. 메서드 이름에 소문자 카멜표기법 적용

메서드의 이름에는 첫 번째 단어를 소문자로 작성하고, 이어지는 단어의 첫 글자를 대문자로 작성하는 소문자 카멜표기법(Lower camel case)를 사용한다. 테스트 클래스의 메서드 이름에서는 언더스코어를 허용한다.

7. 메서드 이름은 동사/전치사로 시작

메서드명은 기본적으로는 동사로 시작한다. 다른 타입으로 전환하는 메서드나 빌더 패턴을 구현한 클래스의 메서드에는 전치사를 쓸 수 있다.

좋은 예

  • 동사사용 : renderHtml()
  • 전환메서드의 전치사 : toString()
  • Builder 패턴 적용한 클래스의 메서드의 전치사 : withUserId(String id)

8. 상수는 대문자와 언더스코어로 구성

상태를 가지지 않는 자료형이면서 static final로 선언되어 있는 필드일 때를 상수로 간주한다. 상수 이름은 대문자로 작성하며, 복합어는 언더스코어(_)를 사용하여 단어를 구분한다.

9. 변수에 소문자 카멜표기법 적용

상수가 아닌 클래스의 멤버변수/지역변수/메서드 파라미터에는 소문자 카멜표기법(Lower camel case)을 사용한다.

10. 임시 변수 외에는 1 글자 이름 사용 금지

메서드 블럭 범위 이상의 생명 주기를 가지는 변수에는 1글자로 된 이름을 쓰지 않는다. 반복문의 인덱스나 람다 표현식의 파라미터 등 짧은 범위의 임시 변수에는 관례적으로 1글자 변수명을 사용할 수 있다.

주석

1. 한줄 주석은 // 를 사용한다.

// 하이~

2. Bracket 사용 시 내부에 주석을 작성한다.

/*
   하이~!
*/

3. 주요 함수에 대한 주석

/*
 * 입력 : 인덱스:Long
 * 기능 : 유저 인덱스로 db에 접근해 유저 객체를 반환한다
 * 출력 : 유저:User
 */
public User getUser(Long idx)
선언

1. 소스파일당 1개의 탑레벨 클래스를 담기

탑레벨 클래스(Top level class)는 소스 파일에 1개만 존재해야 한다. ( 탑레벨 클래스 선언의 컴파일타임 에러 체크에 대해서는 Java Language Specification 7.6 참조 )

2. static import에만 와일드 카드 허용

클래스를 import할때는 와일드카드(*) 없이 모든 클래스명을 다 쓴다. static import에서는 와일드카드를 허용한다.

3. 애너테이션 선언 후 새줄 사용

클래스, 인터페이스, 메서드, 생성자에 붙는 애너테이션은 선언 후 새줄을 사용한다. 이 위치에서도 파라미터가 없는 애너테이션 1개는 같은 줄에 선언할 수 있다.

4. 한 줄에 한 문장

문장이 끝나는 ; 뒤에는 새줄을 삽입한다. 한 줄에 여러 문장을 쓰지 않는다.

5. 하나의 선언문에는 하나의 변수만

변수 선언문은 한 문장에서 하나의 변수만을 다룬다.

6. 배열에서 대괄호는 타입 뒤에 선언

배열 선언에 오는 대괄호([])는 타입의 바로 뒤에 붙인다. 변수명 뒤에 붙이지 않는다.

7. long형 값의 마지막에 L붙이기

long형의 숫자에는 마지막에 대문자 'L’을 붙인다. 소문자 'l’보다 숫자 '1’과의 차이가 커서 가독성이 높아진다.

중괄호

1. K&R 스타일로 중괄호 선언

클래스 선언, 메서드 선언, 조건/반복문 등의 코드 블럭을 감싸는 중괄호에 적용되는 규칙이다. 중괄호 선언은 K&R 스타일(Kernighan and Ritchie style)을 따른다. 줄의 마지막에서 시작 중괄호{를 쓰고 열고 새줄을 삽입한다. 블럭을 마친후에는 새줄 삽입 후 중괄호를 닫는다.

2. 닫는 중괄호와 같은 줄에 else, catch, finally, while 선언

아래의 키워드는 닫는 중괄호(}) 와 같은 줄에 쓴다.

  • else
  • catch, finaly
  • do-while 문에서의 while

3. 빈 블럭에 새줄 없이 중괄호 닫기 허용

내용이 없는 블럭을 선언할 때는 같은 줄에서 중괄호를 닫는 것을 허용한다.

4. 조건/반복문에 중괄호 필수 사용

조건, 반복문이 한 줄로 끝더라도 중괄호를 활용한다. 이 문서에 언급된 중괄호의 전후의 공백, 제어문 앞 뒤의 새줄 규칙도 함께 고려한다.

📌 Commit Convention


형식 - [TAG] : Message (#Issue)

태그 구분

feat : 새로운 기능 구현

fix : 버그, 오류 해결, 코드 수정

chore : 내부 파일 수정

style : 코드에 관련 없는 주석 달기, 줄바꿈

docs : README, WIKI, PR 템플릿 등의 문서 개정

add : feat 이외의 부수적인 코드 추가, 라이브러리 추가, 새로운 파일 생성

🖍️ Git Flow

브랜치 형식 - feature_이슈번호/제목

master 제품으로 출시될 수 있는 브랜치
develop 다음 출시 버전을 개발하는 브랜치
feature 기능을 개발하는 브랜치
release 이번 출시 버전을 준비하는 브랜치

깃 플로우

⚙️ 시스템 아키텍처 ⚙️

Farm-Us



마무리