Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/beyond-sw-camp/be10-4th-1253-goruna
❤️ 구대윤 💛김태영 💜 권형미 💚 김민주 💙김윤후 ❤️
https://github.com/beyond-sw-camp/be10-4th-1253-goruna
argocd docker ingress jenkins kubernetes ouath2 spring spring-boot spring-security vue
Last synced: 6 days ago
JSON representation
❤️ 구대윤 💛김태영 💜 권형미 💚 김민주 💙김윤후 ❤️
- Host: GitHub
- URL: https://github.com/beyond-sw-camp/be10-4th-1253-goruna
- Owner: beyond-sw-camp
- Created: 2024-11-12T05:04:46.000Z (8 days ago)
- Default Branch: develop
- Last Pushed: 2024-11-12T07:23:34.000Z (8 days ago)
- Last Synced: 2024-11-12T08:24:33.364Z (8 days ago)
- Topics: argocd, docker, ingress, jenkins, kubernetes, ouath2, spring, spring-boot, spring-security, vue
- Language: Java
- Homepage:
- Size: 65 MB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# GORUNA
## 🙂 1253조 팀원
| | | | | |
|:-------------------------------------------------------------------------------------------:|:------------------------------------------------------------------------------------------:|:------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------------:|:--------------------------------------------------------------------------------------:|
| 김민주
[@minju0224](https://github.com/minju0224) | 구대윤
[@kookong2](https://github.com/kookong2) | 김태영
[@wildcat222](https://github.com/wildcat222) | 김윤후
[@WhooGeek](https://github.com/WhooGeek) | 권형미[@hyomee2](https://github.com/hyomee2) |## 📢 프로젝트 소개
"고루나"는 음식점에서 다 팔리지 않은 음식을 저렴한 가격에 판매할 수 있도록 지원하는 웹 서비스입니다.
음식점 주인들은 매일 남는 음식을 처리해야 하는 부담에서 벗어나며, 그동안 낭비되던 음식 자원을 재활용할 수 있는 기회를 제공합니다.
이렇게 함으로써, 음식점은 추가 수익을 창출하고 음식물을 버리지 않음으로써 환경 보호에 직접적으로 기여할 수 있습니다.고루나의 서비스는 음식점과 고객 모두에게 큰 혜택을 줍니다. 음식점 주인은 남은 음식을 쉽게 등록하고, 플랫폼을 통해 인근의 고객들에게 즉시 판매할 수 있습니다.
고객은 다양한 음식점의 음식을 저렴한 가격에 구매할 수 있어, 비용 절감과 함께 다양한 맛을 즐길 수 있는 기회를 얻습니다.
이 과정은 모두가 만족할 수 있는 상생의 생태계를 조성하며, 특히 소비자들이 합리적인 가격으로 질 좋은 음식을 구매할 수 있다는 장점이 있습니다.고루나의 최종 목표는 음식 자원의 효율적인 활용을 통해 사회적, 경제적, 환경적 가치를 실현하는 데 있습니다.
음식물 쓰레기는 전 세계적으로 환경 문제를 일으키며, 고루나는 이를 줄이기 위해 지역 사회 내 지속 가능한 해결책을 제공합니다.
이러한 비전 하에, 고루나는 단순한 중개 플랫폼을 넘어서 음식 낭비에 대한 인식을 높이고 환경 보호와 지속 가능한 소비를 촉진하는 역할을 수행하고자 합니다.고루나는 모든 이해관계자들에게 이익을 제공하며, 지역 커뮤니티에 긍정적인 변화를 가져오는 것을 목표로 합니다.
음식점의 이익과 고객의 만족, 그리고 환경 보전이라는 세 가지 목표를 동시에 달성함으로써, 진정한 의미의 사회적 가치를 창출해내고자 합니다.## 💡 프로젝트 배경 및 필요성
"고루나"는 해외의 인기 서비스인 "Too Good To Go"에서 영감을 받아 개발되었습니다.
"Too Good To Go"는 음식 낭비 문제를 해결하기 위해 레스토랑에서 남은 음식을 저렴하게 판매하는 서비스로, 음식 자원의 낭비를 줄이는 데 큰 기여를 하고 있습니다.
이러한 아이디어에서 영감을 받아, 우리도 지역 사회에서 비슷한 긍정적인 영향을 만들고자 "고루나"를 기획하게 되었습니다.현재 전 세계적으로 심각한 문제로 대두되고 있는 음식물 쓰레기는 환경에 큰 영향을 미치며, 이는 기후 변화 및 자원 낭비와 밀접한 관련이 있습니다.
이러한 음식물 쓰레기는 음식점과 소비자 사이의 효율적이지 못한 수요 공급의 불일치로 인해 발생하는 경우가 많습니다.
음식점 입장에서는 팔리지 않은 음식이 버려지면서 경제적 손실을 겪고, 소비자들은 여전히 합리적인 가격에 질 좋은 음식을 구하기 어렵습니다."고루나"의 필요성은 바로 이러한 문제를 해결하는 데 있습니다.
음식점 주인들은 남은 음식을 처리해야 하는 부담에서 벗어나며, 손실을 최소화하고 추가 수익을 창출할 수 있습니다. 동시에, 고객들은 더 저렴한 가격으로 다양한 음식을 접할 수 있어 식비를 절감할 수 있습니다.
나아가, 음식물 쓰레기를 줄임으로써 환경에 긍정적인 영향을 미치고 지속 가능한 자원 활용을 촉진할 수 있습니다."고루나"는 음식점과 고객이 모두 혜택을 누릴 수 있도록 하여, 음식 자원의 효율적인 재분배와 환경 보호에 기여하고자 합니다.
이를 통해 음식물 낭비를 줄이고 지속 가능한 소비 문화를 형성하여 지역 사회에 긍정적인 변화를 가져오는 것을 목표로 하고 있습니다.## 💡 GORUNA의 경쟁력
## 📝 요구사항정의서
[![📝 요구사항 명세서 상세보기](/img/list.png)](https://docs.google.com/spreadsheets/d/1Q5mAK7DpkkMOAeIJh1vDpDNL0JCxNqVo04mbXbr1T1Y/edit?gid=0#gid=0)
## 📋 ERD
[![📋 ERD 상세 보기](/img/erd.png)](https://www.erdcloud.com/d/DDWNRpYaiZ6gYSKKD)
## 📑 REST API 설계 문서
[![📑 REST API 설계 문서](/img/restAPI.png)](https://docs.google.com/spreadsheets/d/1Q5mAK7DpkkMOAeIJh1vDpDNL0JCxNqVo04mbXbr1T1Y/edit?gid=900731616#gid=900731616)
## 🏷️ DDD 설계
### 🔸 Aggregate 정의
![Aggregate 정의](/img/aggregate.png)
### 🔸 Bounded-Context
![Bounded-Context 정의](/img/bounded.png)
### 🔸 Policy Deduction
![Policy Deduction 정의](/img/poly.png)
## 💻 아키텍처 구조도
![MSA 아키텍처 구조도](/img/arch.png)
## 📌 주요 기능
### 회원
소셜 로그인
![소셜로그인](/img/preview/user/login.gif)
로그아웃
![로그아웃](/img/preview/user/logout.gif)
닉네임 변경
![닉네임 변경](/img/preview/user/changeNickname.gif)
### 메인화면
메인화면
![메인페이지](/img/preview/user/mainMap.gif)
### 매장
유저 매장 조회
![매장조회](/img/preview/user/shopSearch.gif)
매장 등록
![매장 등록](/img/preview/user/shopApply%201.gif)
![매장 등록](/img/preview/user/shopApply%202.gif)관리자 매장 승인
![매장 등록](/img/preview/admin/(admin)%20updateShopAuth.gif)
(사장) 매장 수정
![매장](/img/preview/owner/(owner)updateShopData.gif)
(사장) 메뉴 수정
![매장 수정](/img/preview/owner/(owner)updateProduct.gif)
(사장) 수령 정보 업데이트
![매장 등록](/img/preview/owner/(owner)getCustomer,%20applyGet.gif)
g
### 예약
예약하기
![예약하기](/img/preview/book/book.gif)
예약 취소하기
![예약 취소하기](/img/preview/book/book-cancel.gif)
### 리뷰
리뷰 작성 및 조회하기
![리뷰 작성 및 조회하기](/img/preview/review/write-review.gif)
### 북마크
북마크 등록 및 조회하기
![북마크](/img/preview/bookmark/bookmark.gif)
### 관리자
매장 관리 검색
![매장 조회](/img/preview/admin/(admin)shopSearch.gif)
매장 삭제
![매장 삭제](/img/preview/admin/(admin)%20deleteShop.gif)
카테고리 추가
![카테고리추가](/img/preview/admin/(admin)%20addCategory.gif)
카테고리 삭제
![카테고리삭제](/img/preview/admin/(admin)deleteCategory.gif)
| 이름 | 회고 내용 |
|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **구대윤** | 짧은 시간 내에 서로 소통을 하며 부족한 부분을 채워주는 우리팀의 모습을 보면서 너무 감동을 받았습니다. 각각의 노력이 쌓여 좋은 결과물을 만들어낼 수 있었습니다. 서비스의 완성도와 CI/CD의 결합으로 사용자 편의성을 극대화 할 수 있었고, 이는 저의 개발 경험을 크게 향상시켜줬습니다. 앞으로 다가올 최종프로젝트에 쌓아왔던 경험을 토대로 좋은 결과물을 만들어낼 수 있도록 하겠습니다. |
| **권형미** | 짧은 기간 안에 기획, 개발, CI/CD 파이프라인 구축까지 완수해야 했기에 매 순간 시간이 촉박했습니다. 하지만 이번 시간을 통해 압박감이 느껴지는 상황에도 평정심을 가지고 제 역할을 수행하는 방법을 깨우칠 수 있었습니다. 개발 작업을 하던 중 CI/CD 파이프라인 구축과 그 과정에서 예상치 못한 이슈들이 발생하며 기존 인원이 개발을 중단하고 파이프라인 구축에 몰두했습니다. 이떄 다른 팀원들의 작업을 받아 개발을 진행하며, 이전에는 다른 사람이 작성한 코드를 보는 것이 익숙하지 않았는데, 이번 기회를 보고 많이 익숙해졌으며, 이 과정에서 컨벤션의 중요성과 코드 리뷰의 중요성을 다시 한 번 깨달을 수 있었습니다. 기존에는 조회 기능을 할 떄 주로 myBatis와 JPQL을 사용했었는데, 이번에는 QueryDSL를 사용하며 동적 쿼리를 작성할 수 있었고, 도중에 연관관계로 인해 N+1 문제가 발생했을 떄 fetch join을 이용하여 문제를 해결할 수 있었습니다. 또한 pinia를 통해 상태관리가 필요한 항목들을 관리할 수 있었습니다. 또한 카카오맵 지도 API를 연동하며 외부 API를 연동해보는 경험도 할 수 있었습니다. 이번에는 짧은 기간 안에 하나의 프로젝트를 완성해야 해서 계획적이고 체계적으로 수행하기 어려움이 있었는데, 다음 프로젝트에서는 JIRA, NOTION 등을 활용해서 좀 더 계획적인 개발의 필요성을 느꼈습니다.|
| **김민주** | 이번 프로젝트는 짧은 시간 안에 완성해야 했기 때문에 효율적인 시간 관리와 빠른 학습이 요구되었습니다. 프로젝트 개발에는 Spring Boot와 QueryDSL을 사용하였으며, QueryDSL은 처음 사용해보는 기술이었지만 이전 프로젝트 경험을 바탕으로 빠르게 습득할 수 있었습니다.
프로젝트에서 담당한 부분은 Spring Security와 소셜 로그인 기능의 구현이었습니다. 이 기능들은 제가 처음 접해본 것이었지만, 이를 통해 사용자 인증 및 보안에 대한 이해를 실제 코드에 적용할 수 있었습니다. Google OAuth를 사용하여 사용자의 원하는 정보를 받아오고 데이터베이스에 저장하는 과정을 구현하면서, 소셜 로그인 시스템의 동작 원리를 심도 있게 배울 수 있었습니다.
CI/CD 파이프라인 구축은 Kubernetes를 통해 애플리케이션을 배포하고 Jenkins와 ArgoCD를 활용하여 CI/CD 프로세스를 설계하고 구현하였습니다. 이러한 자동화 툴을 사용하는 것은 처음이었지만, DevOps의 개념을 직접 경험하면서 애플리케이션의 빌드, 테스트, 배포 과정의 효율성을 높이는 방법을 배울 수 있었습니다.
이 프로젝트는 이전에 단순한 CRUD 중심의 프로젝트에서 느꼈던 한계를 극복할 수 있는 좋은 기회였습니다. Spring Security는 수업에서만 접했던 기능이었지만 실제 프로젝트에 적용하면서 인증 및 보안 정책을 다루는 방법을 배웠고, 다양한 상황에서 발생할 수 있는 문제를 해결하는 데 도움이 되었습니다.
프로젝트는 빠르게 진행되었고, 처음 접하는 개념과 기술이 많아 버겁긴 했지만, 이를 통해 많은 경험을 쌓을 수 있었습니다. 앞으로 이번 프로젝트에서 접했던 보안과 소셜 로그인, CI/CD에 대해 더 깊이 공부할 것입니다. |
| **김윤후** | 프로젝트를 경험하며 많은 어려움이 있었고, 그 과정에서 많은 것을 배울 수 있었습니다. 처음 맡은 역할을 충실히 수행한 후 다른 파트의 부족한 부분과 수정이 필요한 부분을 발견해 추가 작업을 진행하게 되었고, 이를 통해 더 깊은 지식을 쌓을 수 있었습니다.
새롭게 다뤄봤던 S3를 활용한 이미지 파일 url 자동 생성 및 등록 로직 구현, 프론트엔드 연동에 필수적인 기능들을 구현하며 예상치 못한 여러 문제들을 마주했고, 이를 해결하는 과정에서 큰 성장을 경험했습니다. 어려움을 겪을 때마다 포기하지 않고 해결 방안을 모색하며 문제 해결 능력을 키울 수 있었던 값진 시간이었습니다.
앞으로 다가올 최종 프로젝트에서는 더욱 다양한 기술들을 다뤄보고 싶습니다. 다양한 시도와 시행착오 끝에 문제를 해결해 나가는 경험을 통해 더 큰 성장을 이루고 싶습니다. |
| **김태영** | 이번 프로젝트에서는 Spring Boot와 JPA를 사용하여 데이터를 효과적으로 관리하는 방법을 배우고, QueryDSL을 처음 경험하는 기회를 가졌습니다. 팀원들의 도움을 통해 다양한 기술을 응용하며 문제를 해결하는 과정에서 여러 접근 방식을 시도해보는 자세를 갖추게 되었고, 이는 제 개발 역량을 한층 향상시키는 데 큰 도움이 되었습니다.
이전 프로젝트에서는 결과물을 내지 못해 아쉬움이 남았었지만, 이번 프로젝트에서는 Vue.js의 Props와 Emit을 깊이 이해하고 이를 실제로 활용할 수 있는 능력을 기르게 되었습니다. 이벤트 처리와 Axios를 사용하는 과정이 한층 수월해졌고, 다양한 상황에서 발생하는 에러를 차분히 분석하며 로그를 확인하는 경험은 문제 해결 능력을 키우는 데 큰 도움이 되었습니다. 특히, 팀원들과 함께 원인을 찾아 해결하는 과정은 협업의 중요성을 다시 한번 느끼게 해주었고, 그 과정에서 큰 성취감을 안겨주었습니다. 이러한 경험들은 앞으로의 프로젝트에서도 큰 자산이 될 것이라고 확신합니다. |