Skip to content

현재 위치에 기반해 여러 가지 요소들을 생성하거나 상호작용하는 하이퍼 로컬 커뮤니티 SNS

Notifications You must be signed in to change notification settings

joonamin/Connectus

Repository files navigation

SSAFY 10기 자율 프로젝트



Connectus

함께하며 연결되는 우리, 홀로 느꼈던 감정들을 Connectus와 함께 나눠보세요!

기능 소개

1. 산책하기
 - 산책 시작을 눌러 경로/거리/시간을 기록한다.
 - 산책완료 후 자신의 기록을 모아볼 수 있다.

2. 방명록
 - 산책도중 해당 위치에 글과 사진을 남길 수 있다.
 - 사용자는 자신의 100m 내의 방명록만 무료로 읽을 수 있다.
 - 방명록에는 댓글/좋아요가 가능하다.

3. 피드
 - 하나의 산책도중 남겨진 방명록을 피드라고 한다.
 - 사용자가 남긴 방명록을 실시간으로 볼 수 있다.
 - 방명록의 사진만이 보이고 모든 내용을 보기 위해서는 포인트를 이용해야한다.
 - 혹은 '보러가기' 기능을 통해 해당 방명록으로 산책을 나갈 수 있다.

4. 경로 공유
 - 자신의 산책 기록 중 마음에 드는 경로는 공유할 수 있다.
 - 사용자든 타인의 경로를 보고 따라가기 기능으로 따라갈 수 있다.
 - 따라가기 활성화시 해당 경로를 지도에 오버랩 시켜준다.
 - 얼마나 많은 사람이 해당 경로를 따라갔는지 카운트를 세어준다.
5. 모여라
 - 사용자는 특정 위치에서 모집인원/모집시간/내용을 작성해 사람을 모을 수 있다.
 - 모여라 참여자는 특정 거리에 다가와 참여확정을 눌러 모임에 참여할 수 있다.

6. 마이페이지
 - 아바타 변경, 작성글 목록 등 활동 이력 관리 기능을 담당한다.

7. 업적
 - 사용자가 활동한 이력을 기반으로 업적을 부여합니다.
 - 산책/모여라/방명록/이벤트 등에 대한 참여 지표를 기준으로 업적을 부여한다.

8. 기록 요약
 - 자신의 월간 기록과 상세 기록을 볼 수 있다.
 - 자신의 기록을 "경로 공유" 페이지에 공유할 수 있다.



기술적 특장점

[기획/설계]
 - 정석적 기술 설계 절차에 따른 서비스 기획
 - 기존 데이터 중심 DB 설계가 아닌, 서비스 중심 도메인 설계를 진행

[Infra]
 - 각 DB와 서비스가 독립적인 물리 공간을 차지하도록 배포
 - 서비스 단위 빌드 및 배포 진행
 - 모든 DB(Redis, Milvus)와 Docker Container에 대한 GUI 컨트롤러 지원
 - 역할에 따른 AWS IAM 권한 계정 생성 후 지급
 - 모든 서비스 도메인 연결 완료
 - 9개의 서비스에 대한 자동 배포 및 헬스체크

[Backend]
 - Hexagonal Architecture 기반의 유연한 Microservice 구현
 - API Gateway, Service Discovery를 구현하여 부하 분산 및 확장성 추구
 - request sanitization을 이용한, API 호출 프로세스 개선
 - Vector DB를 사용하여, 부하가 큰 API에 대한 성능 개선
 - 추후 작성
 

[Frontend]
 - React Native를 이용한 모든 모바일 기기 지원 (iOS, Android)
 - 리엑트 쿼리 전역적 관리 통일/재사용 사이드 이펙트 능동적
 - zustand를 통해 가볍고 빠른 전역 데이터 저장 및 조회
 - 중요한 유저 정보는 암호화 하여 저장




🐣 Frontend

React Native 기반의 Application 개발

파일 구조

connectus
├── android
│   ├── app
│   │   └── src
│   │       ├── debug
│   │       └── main
│   │           ├── assets
│   │           │   └── fonts
│   │           ├── java
│   │           │   └── com
│   │           │       └── connectus
│   │           └── res
│   │               ├── drawable
│   │               ├── mipmap-hdpi
│   │               ├── mipmap-mdpi
│   │               ├── mipmap-xhdpi
│   │               ├── mipmap-xxhdpi
│   │               ├── mipmap-xxxhdpi
│   │               └── values
│   └── gradle
│       └── wrapper
├── assets
│   └── fonts
├── ios
│   ├── connectus
│   │   └── Images.xcassets
│   │       └── AppIcon.appiconset
│   ├── connectusTests
│   ├── connectus.xcodeproj
│   │   └── xcshareddata
│   │       └── xcschemes
│   └── connectus.xcworkspace
│       └── xcshareddata
├── src
│   ├── api
│   │   └── queries
│   ├── assets
│   │   └── markers
│   ├── components
│   │   ├── buttons
│   │   ├── containers
│   │   ├── event
│   │   ├── feed
│   │   ├── map
│   │   ├── my
│   │   ├── share
│   │   └── text
│   │       ├── body
│   │       ├── display
│   │       ├── headline
│   │       ├── label
│   │       └── title
│   ├── constants
│   ├── contexts
│   ├── hooks
│   ├── navigations
│   │   ├── root
│   │   ├── stack
│   │   └── Tabs
│   ├── screens
│   │   ├── auth
│   │   ├── event
│   │   ├── feed
│   │   ├── map
│   │   │   └── BottomSheet
│   │   ├── my
│   │   └── share
│   ├── store
│   ├── style
│   ├── types
│   └── utils
└── __tests__



실행 방법

1) React Native 프로젝트 경로로 이동

cd frontend/connectus/

2) 종속성 설치

npm ci

3) Android 패키지 빌드

빌드 결과물인 앱 번들 (.aab) 파일을 .apks 파일로 변환하는 데 Bundletool을 사용합니다

npx --yes react-native build-android --mode release
bundletool build-apks \
	--bundle android/app/build/outputs/bundle/release/app-release.aab \
	--output build/app-release.apks \
	--mode universal \
	--ks android/app/debug.keystore \
	--ks-key-alias androiddebugkey \
	--ks-pass pass:android

4) APK 파일 준비

unzip -d "build" "build/app-release.apks" universal.apk

5) APK 파일 설치

universal.apk를 설치합니다

adb install build/universal.apk




🐹 Backend

Spring Cloud를 통한 Spring Boot MSA 개발


서비스 흐름

순번 동작
[1] 클라이언트의 접근,
Spring Cloud Gateway를 이용해 모든 요청에 대한 단일 진입점을 노출하였습니다.
[2] Gateway는 Eureka 서비스에 요청
[3] 사용자의 접근 주소를 기준으로 선언 파일을 참조하여 접근할 Microservice에 대한 정보(포트 및 주소)를 반환
[4] Gateway는 반환받은 정보를 통해 최종적으로 서비스에 접근



서비스 구성

구성 역할
Spring Cloud 분산 시스템을 구축하고 운영하기 위한 일련의 프레임워크와 라이브러리를 제공
Netflex Eureka Microservice들의 주소, 포트, 연결 설정 값에 대해 정의하고 등록함
Spring Boot 각 Microservice에 대해 작성



서비스 역할에 따른 포트 구성

번호 서비스명 포트 비고
1 apigateway 8000 8761
2 discovery 8761 api.connectus.social:8761
접근 시 탐색된 서비스 정보 확인 가능
3 post 8101 방명록
4 gather 8102 모여라
5 spot 8103 위치
6 chat 8104 채팅
7 event 8105 이벤트
8 walk 8106 산책
9 user 8107 유저
10 likes 8108 좋아요



파일 구조

Hexagonal Architecture 이용에 따라 복잡한 구조를 지니게 됩니다.

각 서비스는 다음과 같은 구조를 따릅니다.

├─java
│  └─social
│      └─connectus
│          └─location
│              ├─application
│              │  └─rest
│              │      ├─controller
│              │      ├─request
│              │      └─response
│              ├─common
│              │  ├─config
│              │  ├─customannotations
│              │  └─type
│              ├─domain
│              │  ├─command
│              │  ├─model
│              │  ├─ports
│              │  │  ├─inbound
│              │  │  └─outbound
│              │  └─services
│              └─infrastructure
│                  ├─mariadb
│                  │  └─repository
│                  └─milvus
└─resources




🦄 Infra

독립 네트워크를 가진 DB 환경 조성 및 MSA 서비스 빌드


기술 특이점

항목 세부설명 참조
독립 공간의
구동
8개의 DB에 대해 각 포트로 구분하여 구동함
9개의 Spring Boot 서비스에 대해 포트로 구분되어 구동함
모든 서비스를 container 내부에서 동작시킴으로 서비스를 격리하였음
참조1
서비스
관리/감독
모든 DB(Maria, Redis, Milvus)와 Docker Container에 대한
시각화 및 GUI 컨트롤러 지원
참조1
참조2
AWS 권한별
계정 지급
역할에 따른 AWS IAM 권한 계정 생성 후 지급 참조1
전 서비스
도메인 접근
서비스 다운로드, Jenkins, DB, Spring 등에 대해 모두 도메인 부여 참조1




😏 팀원 소개

이름 역할
강민준 Backend
박찬영 Backend
서현석 Backend
이영욱 Frontend
이흔오 Frontend
황진주 Infra

About

현재 위치에 기반해 여러 가지 요소들을 생성하거나 상호작용하는 하이퍼 로컬 커뮤니티 SNS

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published