Skip to content

반려견을 키우는 사용자가 서로 정보를 교환하고, 경험을 공유하며 도움을 주고받을 수 있는 플랫폼입니다

License

Notifications You must be signed in to change notification settings

waveofmymind/Puddy_BackEnd

 
 

Repository files navigation

PUDDY💙

전문가 기반 반려동물 질의응답 중심의 커뮤니티 서비스

image

PUDDY 서비스 바로가기

현재 360*740에 최적화되어있습니다. (갤럭시S8+)

퍼디는?

퍼디(Puddy)는 'Pet'과 'Buddy'의 합성어로,

반려견을 가족과 친구처럼 소중하게 생각하는 의미를 담고 있습니다.

반려견의 주인이 서로 정보를 교환하고, 경험을 공유하며 도움을 주고받을 수 있는 플랫폼입니다.

또한, 인증된 전문가들을 통해 궁금증을 해결할 수 있습니다.

기술 스택

BackEnd

  • Java 17
  • Spring Boot 2.7.9
  • Spring Security
  • Gradle
  • JPA
  • Querydsl
  • S3
  • AWS RDBMS
  • MySQL
  • Redis
  • GCP Ubuntu 20.04
  • Docker
  • Jenkins

시스템 아키텍처

image

ERD

puddy-erd-0419

API 명세서

단위 테스트 및 통합 테스트

image

트러블 슈팅 및 기술적 도전


  • 도메인 설계에 대한 고민: 전문가 프로퍼티를 효과적으로 관리하기 위해 사용자와 전문가 도메인을 분리하여 데이터 중복을 줄이고, 확장성을 높이며, 각 도메인의 책임을 명확히 하였습니다.

    도메인 설계에 대한 고민

  • 연관관계를 고려한 JPA N+1 문제 개선하기: 프로젝트를 진행함에 따라 다양한 도메인이 얽히게 되었고, 그에 대한 연관관계를 다시 수립하고 조회 쿼리 수를 8개를 3개로 줄일 수 있었습니다.

    연관관계를 고려한 JPA N+1 문제 개선하기

  • Redis 캐시를 사용한 Refresh 토큰 관리하기: JWT 인증으로 사용했던 Refresh 토큰을 RDB에서 관리하는 것을 Redis 캐시를 사용함으로써 자원 관리의 효율성을 높이고 응답 속도를 개선했습니다.

    Redis 캐시를 사용한 JWT 리프레시 토큰 관리하기

  • 조회수 동시성 문제 해결하기: 퍼디 프로젝트에 조회수와 좋아요 수에 대한 동시성 문제를 해결하고 JMeter를 통해 검증했습니다.

    조회수 필드에 대해 동시성 문제 해결하기

  • 프로젝트 리팩토링: 레이어 패턴으로 설계했던 퍼디 프로젝트는, 레이어간 DTO를 공유하거나, 구체적인 클래스를 의존하여 DIP를 위배하는 문제가 있었습니다. 이에 대해 구현체를 직접 의존하지 않도록 하여 확장에 용이하도록 변경했고, 레이어간 DTO를 구분해서 결합성을 낮출 수 있었습니다.

  • 무중단 CI/CD 배포 환경 구성: 개발 과정에서 변경 사항이 있을 때마다 직접 실행을 했던 불편함을 개선하고자, 젠킨스, 도커를 사용해서 클라우드 환경에 자동으로 배포할 수 있는 환경을 구성했습니다.

회고


첫 프로젝트 마무리

회의록


팀 프로젝트시 진행했던 회의에 대한 기록 페이지입니다.

About

반려견을 키우는 사용자가 서로 정보를 교환하고, 경험을 공유하며 도움을 주고받을 수 있는 플랫폼입니다

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Java 99.9%
  • Dockerfile 0.1%