프로젝트명 : Sporty Note

: 헬스, 이제 방법과 기록을 한번에! 초보자도 쉽게 따라하고 성장할 수 있는 운동 애플리케이션


- 소프트웨어 마에스트로 13기 인증티켓팀 SportyNote 어플리케이션 서버


image
image image
랜딩페이지 바로 가기

✅ 프로젝트 소개

프로젝트 구조

image

### 프로젝트 개요/동기

1) 헬스장에서 기구 사용 방법에 대한 접근이 어려움.
- 간편하게 확인할 수 있는 기구 사용법에 대한 직관적인 시각 자료 제공.

2) 개인 특성에 맞는 운동 방식이 달라서 개인 강습을 받지만, 해당 내용을 단기간에 체득하기까지는 어려움이 있음.
- 학습 내용에 대한 리마인드를 위한 노트 솔루션 제공


✅ 기술 스택

Java SpringBoot JPA JPQL QueryDSL MySQL Redis AWS S3/EC2/CDN/CodePipeline

✅ 데이터베이스 구조

sporty note ERD


구현 기능

기능 1

  • Spring Data JPA, JPQL, QueryDSL을 사용하여 일대다, 다대일 관계에서의 다양한 상황의 DB 쿼리를 처리함
  • 'N+1 문제' 대해서 fetch join을 사용하여 성능 개선함
  • Optional을 사용하여 NullpointerException과 같은 오류를 예외처리함

기능 2

  • REST API에 대하여 학습하고 Swagger API를 사용하여 API 명세서를 작성하여 프론트 개발자와 협업함
  • Swagger API, Postman을 사용하여 API를 개발하고 이를 문서화하여 프론트 개발자와 협업함

기능 3

  • 배포를 하기 위해 특정 키 값들을 암호화를 하여 배포하는 방식에 대해서도 찾아 @Jasypt 를 사용함
  • 배포 환경을 고려하여 브랜치 및 properties를 나누어서 개발함

기능 4

  • JWT 토큰 방식을 이용한 OAuth2를 통해 소셜 로그인 기능을 개발함
  • Redis를 사용하여 토큰을 관리함

✅ 배운 점 & 아쉬운 점

  • 도메인을 결정하고, 프로젝트 아키텍처 및 DB 설계의 과정을 통해 많은 고민과 숙련된 경험을 얻을 수 있었습니다.
  • Jira를 사용하여 스토리 포인트와 스프린트 방식을 진행해보았으나, 프로젝트 진행 인원이 3명인 것을 감안하여 효율성을 감안하여 Notion으로 회의 및 멘토링 내용들을 정리하며 좀 더 원활하게 프로젝트를 수행 할 수 있었습니다.
  • Spring Data JPA에서 페이징(Paging)을 사용해보지 못한 것이 아쉽습니다. 추후 Machine의 조회 과정에서 사진을 다수 불러오기 때문에 이에 대하여 Paging을 도입할 계획이 있습니다.
  • Jenkins를 이용하여 CI/CD를 구성하려 하였지만 최종 Gitlab 인증 과정에서 실패하여 AWS ECS, CodePipeline, Gitlab->GitHub 미러링 방식을 사용하여 CI/CD를 구성할 수 있었습니다.
  • Redis의 기본 포트에서 인증없이 접근이 가능하게 하여, 해킹 시도를 당했지만 도커 환경이었기에 피해는 입지 않았습니다. 이러한 실수를 방지하기 위해 인증과 ACL을 간과해서는 안된다는 것을 깨달았습니다.