- 반려동물을 처음 키우는 사람들도 편하고 쉽게 관련 정보를 얻고 관리할 수 있도록 하자는 목표로 개발을 시작하게 됨
- 반려동물에 대한 실종 신고, 소통 등의 부가적인 기능을 활용할 수 있도록 하며, 반려동물에 대한 풍부한 정보에 쉽게 접근할 수 있도록 함
- 사용자들이 쉽게 접근할 수 있는 환경을 위해 앱 개발 선택
- Flutter: 프레임워크
- Dio: API 통신 라이브러리
- Provider: 전역 상태 관리 라이브러리
- Spring Framework
- Spring Boot: 스프링 기반 프레임워크
- Spring Cloud: MSA 구성 지원 프레임워크
- Ubuntu + Nginx: 서버 컴퓨터 환경
- MySQL: 기본 데이터베이스
- AWS RDS: 클라우드 데이터베이스
- Firebase (+ RabbitMQ): 알림 기능을 위한 데이터베이스
- Spring Data JPA + QueryDsl: Type ORM 기술
- Docker: 배포를 위한 컨테이너 가상화
- RabbitMQ (Message Queue): 데이터 동기화
- Jenkins (CI/CD): 자동화 배포
- 모니터링
- Prometheus + Grafana: 통계 시각화 툴
-
Eureka Server
- MSA 환경에서 각 서비스간의 로드밸런싱 및 각 서비스의 네임을 등록하여 Gateway에서 네이밍으로 접근이 가능하도록 해주는 미들웨어 서버
-
Gateway Service
- 각 서비스로의 라우팅 담당 및 보안과 인증을 담당하여 접근에 대한 제어 가능
- Gateway Filter로 JWT 검증과 잘못된 접근에 대한 Exception 처리를 담당함
-
User Service
- 유저가 각 서비스로 접근할 수 있도록 토큰 발급 & 재발급 및 유저 정보를 관리하는 서비스
- 유저의 정보를 저장 & 수정할 수 있고, 회원탈퇴나 로그아웃과 같은 기능도 여기서 이루어짐
- Spring Scheduler를 통해 매일 자정마다 탈퇴 후 7일 동안 접속이 없으면 관련 데이터 삭제하는 로직 실행
- Profile Service의 알림 기능에 필요한 FCM 토큰을 로그인 시점에서 로그아웃 때까지 관리함
-
Community Service
- 게시글을 올리거나 애완용품에 대한 리뷰를 작성하는 등 각 유저간 소통을 위한 서비스
- 게시판은 3가지 타입으로 분류되고, 각 게시판에 대한 CRUD 가능
- 리뷰는 카탈로그에 따라 생성 & 조회 & 삭제가 가능
- 커뮤니티는 조회 시 페이징 처리를 통해 무한 스크롤 가능하고, 리뷰는 키워드나 사진 유무에 따른 필터링이 가능
- 게시글은 좋아요와 댓글 작성 기능이 있고, 리뷰는 추천과 비추천 기능이 있음
-
Profile Service
- 유저의 애완동물 정보 및 일정을 관리하는 서비스
- 펫들의 정보를 저장 & 수정 & 삭제할 수 있음
- 일정관리를 위한 달력 기능을 제공
- 일정과 알람은 반복주기를 통해 예방접종 등의 반복되는 스케줄을 자동 일정 설정을 제공
- 알람은 스케줄러를 통해 RabbitMQ의 delayTime 플러그인으로 설정된 알람시간에 맞춰 Firebase의 Cloud Message(FCM) 기능을 통해 알림을 전송
-
AWS S3 Service
- 유저가 업로드하는 모든 종류의 이미지 파일들을 AWS S3 공간에 업로드하고 관리하는 서비스 (프로필 사진, 애완동물 사진, 게시글 사진 등)
- Feign Client를 통해 거의 모든 서비스들에게 사진 저장 & 삭제 및 다운로드 링크 출력 등의 서비스를 제공함
-
Kakao 소셜 로그인 구현 (User Service)
-
SelectScreen & RegisterScreen
-
VideoPlayerScreen & MainScreen
-
CalendarScreen (Profile Service)
-
PostScreen (Community Service)
-
ReviewScreen (Community Service)
-
InquiryScreen
- 서버 모니터링
Grafana
- Prometheus와 함께 사용되는 시각화 대시보드 도구로 수집한 지표를 조회한 데이터를 사용자의 요구에 맞게 확인할 수 있음
시스템을 여러 개의 독립적인 서비스로 분리하는 과정 → 각 서비스의 개발, 배포, 관리에 대한 복잡성으로 서버 구축의 난이도가 향상
→ 복잡성을 관리하기 위해, Docker
와 Jenkins
를 사용하여 각각의 마이크로 서비스를 컨테이너화하고, 지속적인 통합 및 지속적인 배포를 수행함을 목표로 개발
- 높은 확장성
MSA 방식에서는 각각의 서비스가 독립적으로 배포 및 업데이트가 가능 → 시스템 전반에 대한 유연성을 극대화, 개별 서비스에 필요한 변경사항을 신속하게 적용 → 백엔드 개발 과정에서 유연성이 크게 향상
- 장애 격리의 이점.
각 서비스가 독립적으로 운영 → 한 서비스에서 발생한 문제가 다른 서비스로 퍼져가는 것을 방지할 수 있음 → 전체 시스템의 안정성을 보장, 각 서비스를 고립시켜 개별적으로 트러블슈팅을 할 수 있는 환경을 제공
이렇게, MSA
는 우리 팀이 더 유연하고 안정적인 시스템을 만드는 데 큰 도움을 주었음