Search
Duplicate

그랜파

1. 개 요

프로젝트 명: 독거노인-대학생 홈 쉐어링 플랫폼 ‘그랜파’
개발 기간: 2023. 06. 19 ~ 2023. 11. 02
인력 구성: 5명
소속
성명
포지션
부산대학교/디자인학과
배명환
디자인
부산대학교/미디어커뮤니케이션학과
이창희
기획
경상국립대학교/컴퓨터공학과
장동호
백엔드 개발
경상국립대학교/컴퓨터공학과
김희영
프론트엔드 개발
경상국립대학교/컴퓨터공학과
최유경
프론트엔드 개발

2. 서비스 소개

“독거노인과 대학생의 홈쉐어링을 중개하는 플랫폼 '그랜파(GrandPartner)’”

- 제11회 K-HACKATHON 최우수상(한국컴퓨터정보학회장상) 수상 -
‘그랜파’를 통해 독거노인에게는 외로움을 해소하고, 고독의 굴레에서 벗어날 수 있는 기회를, 대학생에게는 학교와 가까운 위치의 주거 공간을 저렴한 가격으로 확보할 수 있는 기회를 제공한다. 기존 지자체가 진행하는 홈쉐어링 사업의 단점을 보완하여 독거노인과 대학생 모두가 만족할 수 있는 홈쉐어링이 이루어질 수 있도록 한다.

3. 기술 스택

COMMON
Swagger
Figma
Notion
FRONT
Kotlin
BACK
NestJS
MySQL
DEPLOY
GCP
Docker
Nginx

4. 시스템 아키텍처

5. 기획 과정

Loading PDF…

6. 기술적 고민

6.1. DB 설계

이전에는 데이터베이스를 꼼꼼히 설계하지 않고 바로 코딩을 시작하여 많은 문제가 발생했었다. 데이터의 중복, 비효율적인 데이터 조회, 비정규화된 데이터 구조 등 여러 문제들이 프로젝트의 성능과 유지보수성을 저해했다. 이번 프로젝트에서는 상향식 데이터베이스 설계 방법을 통해 각 엔티티의 역할과 관계를 명확하게 정의하였다.
상향식 방법으로 엔티티를 설계하는 과정은 다음과 같다.
1.
기획안을 보며 모든 키워드를 뽑아낸다.
2.
뽑아낸 키워드를 행위데이터로 나눈다.
a.
행위와 데이터는 각각 행위 엔티티, 실체 엔티티로 매핑된다.
3.
2-a에서 설계한 엔티티에 관계를 매핑한다. (관계 = 속성)
속성이 필요한 이유는 엔티티 간의 조인(join)을 하기 위해서이다.
상향식 설계 방법은 초기에 시간이 더 걸리지만, 장기적으로 봤을때 프로젝트에 큰 도움이 되었다.

6.3. 카카오 REST API를 활용한 로그인 구현

카카오 REST API를 사용하여 안드로이드 클라이언트와 NestJS 서버를 연동하여 로그인 기능을 구현하였다.
클라이언트-서버 간의 카카오 로그인을 처리하는 다양한 방법이 존재했는데, 우리 팀에서 선택한 방법은 다음과 같다.
1.
안드로이드 클라이언트에서 사용자가 카카오 로그인 버튼을 클릭하여 카카오 인증 서버로 카카오 액세스 토큰을 요청한 뒤, 발급 받은 액세스 토큰을 서버로 전송한다.
2.
NestJS 서버에서는 클라이언트로부터 전달받은 카카오 액세스 토큰을 카카오 인증 서버로 보내 사용자 정보를 조회한다.
3.
사용자 소셜 ID를 데이터베이스 조회하여 기존 사용자 여부를 확인한다.
4.
데이터베이스에 동일한 소셜 ID가 존재한다면, 새로운 서비스 액세스 토큰서비스 리프레쉬 토큰을 발급한다.
a.
만약 존재하지 않는다면, 카카오로부터 받은 사용자 정보를 클라이언트에 넘겨준 다음 회원가입 API로 요청을 하게 한다.

6.4. Swagger를 활용한 커뮤니케이션

이전 프로젝트에서는 개발자 간의 협업을 위해 API들을 노션이나 엑셀에 설명을 작성해서 커뮤니케이션을 진행했다. 이 방식은 API 스펙이 변경될 때마다 수동으로 문서를 업데이트 해야 했기에 변경 사항이 즉시 반영되지 않아 최신 정보를 확인하는 데 어려움이 존재했다. 또한, 작성하는 사람마다 표기 스타일이 달라 문서 형식이 일관되지 않아 가독성이 크게 떨어졌고, 서로 다른 형식의 문서로 인해 이해와 해석에 혼선이 발생했다.
이번 프로젝트에서는 Swagger를 활용해 API 문서를 자동으로 최신 상태로 유지하고, 통일된 형식으로 가독성을 챙겼다. 이를 통해 기획자-프론트엔드 개발자-백엔드 개발자 간의 원활한 커뮤니케이션을 도모했다.

7. 시연 영상

로딩까지 조금만 기다려주세요!

8. 성과

  제11회 K-HACKATHON 최우수상(한국컴퓨터정보학회장상) 수상