Giter Club home page Giter Club logo

healthmate-finder's Introduction

💪 healthmate finder 'Helparty'

"나의 헬스 친구 Helparty"

운동을 하는 사람들은 모두 헬스장을 가야겠다는 생각을 하지만 발이 떨어지지 않는 경험을 한 적이 있을 겁니다. 그리고 이럴 때 나랑 같이 다닐 친구가 있다면 좋을 텐데라고 혼자 생각하고 말았을 겁니다. 그래서 만들었습니다. 헬스 같이 할 동네 친구 매칭 시켜주는 서비스 'Helparty' 입니다!

프로젝트의 전체적인 구조

프로젝트 구조도 (2)

DB ERD

helparty erd

프로젝트 목표

  • 성능을 생각하면서 효율적인 코드를 작성하도록 노력하였습니다.
  • 객체지향 원칙을 따르며 확장성 있는 코드를 작성하고자 하였습니다.
  • 대용량 트래픽을 감당할 수 있는 인프라를 구축하고 안정적인 서비스를 만들고자 노력했습니다.
  • 협업을 한다는 가정하에 다른 사람들이 쉽게 알아볼 수 있도록 코드 작성하는 것에 유의하였습니다.
  • 고립된 테스트 코드 작성으로 다른 코드에 의존적이지 않은 테스트를 진행하였습니다.

사용 기술

  1. Java 11
  2. Spring Boot
  3. JUnit
  4. MySQL
  5. MyBatis
  6. Redis
  7. Jenkins
  8. Naver Cloud

프로젝트 중점 사항

  • GitFlow를 이용한 병렬적 개발 방식
  • 코드의 목적을 쉽게 알 수 있는 메서드 네이밍
  • 객체지향 코드 작성법으로 확장성 유지
  • 작성된 Layer에 고립시켜 의존적이지 않은 단위 테스트 작성
  • 반복되는 로직을 핵심 로직으로부터 분리 (feat. AOP, ArgumentHandlerResolver, Interceptor)
  • 젠킨스를 사용한 CI/CD 환경 구축
  • 하나의 클라우드 서버에 하나의 어플리케이션을 사용하여 높은 확장성 유지
  • 많은 사람들에 의해 중복될 페이지 조회에 Redis cache를 사용하여 성능 개선
  • Redis의 Session Server를 사용하여 Session 정합성 유지
  • Log4J2를 로그로 사용하여 서버의 부담 최소화
  • NginX의 Reverse-Proxy를 이용한 로드밸런싱 구현
  • DB Replication을 구현하여 DB 성능 향상
  • MySql쿼리의 실행계획 분석 후 쿼리튜닝을 통한 성능 향상

이슈 해결 과정

화면설계

kakao oven -https://ovenapp.io/view/ZmMg4lnHw2iVSxfO0UwY1NzTOkWoNsiZ/liSyR

Helparty 프로토타입

기능 정의

깃헙 플로우

healthmate-finder's People

Contributors

hamryt avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

hamryt saintyun

healthmate-finder's Issues

유저 타입에 따른 로그인 로직 다형성으로 구현

LoginService에 유저 타입에 따라 다른 로그인을 구현할시 중복적인 메서드가 선언되어지는 문제 발생.
-> 로그인 처리를 제네릭 타입을 통한 다형성으로 구현하고 LoginService에 있던 로그인 로직과 세션 관련 로직을 LoginService와 SessionService로 분리함

실패한 TestCase들 수정

  1. 운동시설 게시물 생성 후 게시물 ID를 부여해주는 것은 DB의 역할이기에 원시타입에서 Wrapper타입으로 바꾸어 ID가 Null이 될 경우를 대비하였습니다.
  2. loginGym_Success()에서 모킹해서 실제로는 사용하지 못하는 메서드를 호출한 것을 하드코딩으로 수정하였습니다.

Replication DB

성능 향상을 위한 Replicatin DB 구현

데이터 조회 -> Slave
데이터 삭제, 업데이트, 추가 -> Master

쿼리의 작업 내용에 따른 DataSource 분기

세션 키 변경

불필요한 로직을 없애고 코드를 간단하게 하기 위해 이메일에서 id로 세션 키 변경

일반 사용자 UserType에 User 설정

처음에 만들때 UserType을 설정 안한 문제로 일반 유저에게 타입을 부여.
피티 유저와 운동시설 관리자 유저, 일반 유저 타입을 구분하기 위한 유저 타입.

운동시설 관리자 로그인 API

운동시설 관리자인 유저를 위한 로그인 API를 개발합니다.
로그인 할 때마다 로그인 클래스에 유저 타입만 다르고 같은 패턴의 로그인 로직이 반복될 것으로 생각되어 다형성을 사용하여 구현하였습니다.

동행 게시물 삭제 API

해당 게시물을 삭제하련는 사용자의 세션을 검사하여 게시물을 만든 본인만이 삭제할 수 있도록 구현합니다.

운동시설 관리자 회원가입 API

자신의 운동시설을 웹에 업로드하고 홍보 및 관리하기 위한 운동시설 관리자로서의 유저를 위한 회원가입 API.
일반 사용자와 구분하기 위해 UserType 값을 Enum클래스로 만들어 관리합니다.

일반 사용자: 'USER'
운동 시설 관리자: 'GYM'
피티 관리자: 'PT'

운동시설 게시물 작성 api 수정

데이터 저장 체계 변경
gymboardDto를 사용하지 않는 점 수정, gymboard에서 product id를 갖고 있지 않고 product만 gymboard의 id를 갖고 있도록 수정

Jmx 사용

실행 중인 애플리케이션의 상태를 모니터링하고, 설정을 손쉽게 변경할 수 있게 하기 위해 Jmx 연동

Log4j2 로거 사용

로그 레벨을 표시해주고 멀티스레드로 구현되어있으며 gc free mode를 통해 성능 향상을 가능하게 해주는 Log4j2를 Helparty 로거로써 사용

Redis CacheEvict 적용

캐시 메모리의 효율성을 높이기 위해 캐시에 저장한 데이터의 삭제나 업데이트가 이루어질 시,
Cache Evict 실행

table 이름 수정

쿼리에 대문자로 적었던 table이름들을 모두 소문자로 변경

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.