: 헬스, 이제 방법과 기록을 한번에! 초보자도 쉽게 따라하고 성장할 수 있는 운동 애플리케이션
- 소프트웨어 마에스트로 13기 인증티켓팀 SportyNote 어플리케이션 서버
### 프로젝트 개요/동기
1) 헬스장에서 기구 사용 방법에 대한 접근이 어려움.- 간편하게 확인할 수 있는 기구 사용법에 대한 직관적인 시각 자료 제공.
2) 개인 특성에 맞는 운동 방식이 달라서 개인 강습을 받지만, 해당 내용을 단기간에 체득하기까지는 어려움이 있음.
- 학습 내용에 대한 리마인드를 위한 노트 솔루션 제공
Java | SpringBoot | JPA | JPQL | QueryDSL | MySQL | Redis | AWS S3/EC2/CDN/CodePipeline |
---|
- Spring Data JPA, JPQL, QueryDSL을 사용하여 일대다, 다대일 관계에서의 다양한 상황의 DB 쿼리를 처리함
- 'N+1 문제' 대해서 fetch join을 사용하여 성능 개선함
- Optional을 사용하여 NullpointerException과 같은 오류를 예외처리함
- REST API에 대하여 학습하고 Swagger API를 사용하여 API 명세서를 작성하여 프론트 개발자와 협업함
- Swagger API, Postman을 사용하여 API를 개발하고 이를 문서화하여 프론트 개발자와 협업함
- 배포를 하기 위해 특정 키 값들을 암호화를 하여 배포하는 방식에 대해서도 찾아 @Jasypt 를 사용함
- 배포 환경을 고려하여 브랜치 및 properties를 나누어서 개발함
- 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을 간과해서는 안된다는 것을 깨달았습니다.