- 나의 냉장고 속 식료품을 관리하는 서비스입니다.
- 냉장고 속 식료품을 가지고 만들 수 있는 요리를 검색 할 수 있습니다.
- 사용자의 취향 및 알레르기 정보, 식료품의 상태에 따라 최적의 요리 레시피를 추천해 줍니다.
- 개발 기간 : 2024.08.30 ~ 2024.09.23
- URL : https://nonangbie.site
식료품 소비기한을 관리하고 불필요한 지출 및 음식물 쓰레기 발생을 최소화에 도움을 줄 수 있습니다.
| 팀장 신민준 | 팀원 윤영아 | 팀원 양수명 | 팀원 김준하 |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
| @Tizesin | @wooil6 | @Lifesheep1 | @HJk29 |
- 개발도구: Intellij IDEA
- 언어: Java 11 Open JDK
- 빌드도구: Gradle
- 개발
- Spring Framework: 5.3
- Spring Boot: 2.7.0
- Spring Data
- Spring Data JPA
- Spring Data Redis
- Spring Security
- JPA
- 데이터베이스
- MySQL: 8.0.25
- Redis
- ERD
- ERDCloud
- 프론트 개발 환경 및 언어
- 언어:
- HTML
- CSS
- JavaScript
- 라이브러리 및 프레임워크:
- React (JSX)
- React Query
- Axios
- 언어:
- 형상관리 및 이슈관리
- GitHub
- 서버 / 배포
- AWS EC2
- AWS S3
- AWS CloudFront
- Docker
- 기타
- Slack
| 로그인 | 회원가입 | 로그아웃 |
|---|---|---|
![]() |
![]() |
![]() |
| 식재료 등록 | 식재료 삭제 | 식재료 검색 |
|---|---|---|
![]() |
![]() |
![]() |
| 식재료 수정 | 알레르기 등록 | 알레르기 삭제 |
|---|---|---|
![]() |
![]() |
![]() |
| 게시글 등록 | 게시글 조회&수정&삭제 | 레시지 단일조회 |
|---|---|---|
![]() |
![]() |
![]() |
| 레시피 전체조회 | 레시피 좋아요 | 레시피 추천 |
|---|---|---|
![]() |
![]() |
![]() |
| 통계 | 닉네임 변경 | 냉장고 초기화 |
|---|---|---|
![]() |
![]() |
![]() |
| 회원 탈퇴 | 비밀번호 변경 |
|---|---|
![]() |
![]() |
팀 일정 관리 및 프로젝트 방향성 확립
- 팀원들의 일정 조율과 프로젝트 전반의 방향성을 설정하여 목표 설정
- 효율적인 커뮤니케이션 조율과 문서화 담당
Single Table 전략을 사용한 ERD 설계
- Single Table 전략을 사용하여 데이터베이스의 엔터티 구조를 설계
- 데이터 모델링의 일관성을 확보
소스코드 리뷰 및 품질 관리 주요역할 및 담당
- 정기적인 코드 리뷰를 진행하여 코드의 일관성을 유지
인덱싱 및 SQL 최적화를 통한 검색 속도 증진
- 데이터베이스 인덱싱 및 SQL 최적화 작업을 수행하여 검색속도를 크게 개선(조회성능약4배상승)
EventListener를 통한 비즈니스 로직 분리
- EventListener를 사용하여 비즈니스 로직을 모듈화
JSX를 사용한 React View 구성
- JSX를 사용해 동적 데이터 처리 및 인터렉티브한 뷰 구현
Docker를 이용한 배포 및 AWS S3 연결
- Docker를 사용해 애플리케이션을 컨테이너화
- AWS S3와의 연결을 통해 정적파일을 관리하는 시스템을 구축
기능에 따른 사용자의 요구 사항 분석 각 기능에 대한 우선순위 정렬
사용자의 보유 식재료 - 각 사용자의 보유 식재료 CRUD 설계 알레르기 식재료 - 사용자의 알레르기 식재료 CRUD 설계
나의 냉장고(보유 식재료) CRUD 페이지 구현 알레르기 식재료 등록, 삭제 구현 레시피 전체 조회 페이지 구현
사용자 요구사항 분석 및 기능 우선순위 설정:
- 사용자 요구사항 분석서를 작성하여 기능별 요구사항과 제한사항을 명확히 구분
- 각 기능의 중요도와 구현 우선순위를 체계적으로 정렬하여 프로젝트 일정 최적화
API 명세서 설계:
- 각 기능에 맞는 메서드(Method) 및 URI를 설계하여 명확한 API 구조 정의
- Request Header 및 Body, Response Status Code, Header, Body에 대한 세부 설계를 통해 통신 안정성 및 데이터전송의 일관성 확보
User flow 설계
회원 관리 기능 구현:
- JavaMailSender를 이용한 이메일 인증 코드 전송 및 확인 기능 개발
- 회원가입 및 닉네임 중복 확인 기능 구현
- 로그인/로그아웃 기능 개발 및 회원 탈퇴 처리
- 회원 정보 수정(닉네임, 비밀번호) 기능 추가
인증 및 인가 적용:
- Spring Security와 JWT, Redis를 활용한 인증 시스템 구현
- 로그인 시 JWT 토큰 발급 및 Redis에 저장하여 세션 관리
- 로그아웃 시 Redis에서 토큰 삭제 처리
- 사용자 권한 부여: Admin과 User 계정에 따른 권한 설정
API 인증 적용:
- API Authentication 적용을 통해 보안 강화
공통 패키지 구성:
- Auditable, PaginationDto, ErrorResponse 등 공통적으로 필요한 패키지 구조 설계 및 구성
회원 관련 페이지 구현:
- 회원가입, 로그인, 마이페이지, 비밀번호 및 닉네임 수정 페이지 UI 및 기능 구현
- Axios를 활용한 백엔드와의 비동기 통신 처리
Jmeter를 활용한 조회성능 측정:
-
인덱싱(Indexing)을 통해 레시피 조회 성능 4배 향상
-
더미 데이터 생성 및 테스트 환경 조성
- ERD 설계 및 관리
- 메뉴 CRUD
- SQL 데이터 삽입
- 메뉴 단일 조회 페이지
- 메뉴의 레시피 단계 페이지
- 각 메뉴마다 보유 재료 및 미보유 재료 분류
- Web Speech API
- EC2(Spring, MySQL, Redis) 배포
- S3(React) 배포
- CloudFront 배포
- ACM 인증서를 통한 HTTPS 적용
프로젝트에서 팀장 역할을 맡아 팀원들과의 원활한 의사소통과 팀원들의 역량 파악 및 적절한 역할 분배를 통해 전반적인 컨디션 난조 없이 성공적으로 프로젝트를 마무리할 수 있었습니다. 팀 프로젝트 일정 관리에서는 간트차트와 follow-up의 중요성을 깨달았으며, 코드 리뷰를 통해 불필요한 소스 및 동작 과정을 간소화하여 프로젝트 응답 속도 개선에 큰 영향을 줄 수 있었습니다. 이를 통해 코드 리뷰와 최적화의 중요성을 다시 한번 느꼈습니다. 다만, 프로젝트에서 가장 중요시되는 DB 조회 성능을 더 향상시킬 수 있는 방법을 다양하게 시도하지 못한 점이 아쉬웠습니다. 앞으로는 여러 방안을 모색하고 적용하여 빅데이터 검색 속도 향상을 이루고자 합니다.
프로젝트를 진행하면서 프론트엔드와 백엔드의 데이터 연동 작업을 통해 시스템의 전반적인 구조를 이해하는 능력을 키울 수 있었습니다. 또한, 다양한 예외 상황을 고려하여 기능을 구현하는 과정에서 문제 해결 능력이 크게 향상되었습니다. 철저한 시간 관리 덕분에 프로젝트 마감 기한을 준수할 수 있었고, 이를 통해 주어진 기간 내에 목표를 달성하는 능력을 키웠습니다. 특히 이번 프로젝트를 하며 팀원들과의 원활한 소통을 통해 협업의 중요성을 깨닫게 되었으며, 이 경험을 통해 더욱 효율적인 개발 방법과 체계적인 작업 방식을 습득할 수 있었습니다.
프로젝트를 진행하면서 좋았던 점은 일정 관리를 간트차트를 활용하여 세부적인 기능들을 각각 나누어 지정된 기간까지 목표로 삼아서 하니 목표 의식과 열정이 불타올랐고 그렇다 보니 기간 전까지 대부분의 능들을 빨리 구현해 냈습니다. 처음부터 목표치를 엄청 많이 잡고 일을 완성하는 방식보다 우선순위를 나누고 그 우선순위들을 다 끝냇으면 확장성을 더 펼쳐서 추가하는 방식으로 하니 일의 능률도 올라갔습니다. 이전 프로젝트에서는 안 해봤던 새로운 기능인 인증 인가 기능을 공부하고 성공적으로 구현할 수 있어서 뿌듯했습니다. 또한 조회성능을 측정하고 테이블 인덱싱 작업을 통해서 조회 성능을 향상하는 작업도 해볼 수 있어 좋았습니다. 하지만 다양한 방법들로 시도해보지 못한 점이 아쉬었습니다.
보안성을 강화하기 위해 HTTPS를 적용하는 과정에서 많은 문제가 발생었습니다. 인증서 발급, 설정 충돌, 그리고 웹 서버 구성에 대한 이해 부족으로 인해 SSL 인증서 적용과 트래픽 관리 설정이 원활하지 않았습니다. 이를 해결하기 위해 Nginx 설정을 재구성하고, 인증서 충돌을 해결하는 데 많은 시간이 소요되었습니다.
























