Skip to content

큐시즘 27기 밋업데이 8attery 조의 SeeSaw 서비스 서버 레포지토리입니다.

Notifications You must be signed in to change notification settings

9uttery/SeeSaw-Server

Repository files navigation

✳️ SeeSaw, 시소 ✳️

image

일과 삶 사이의 균형 찾기, SeeSaw

나를 이루는 가치를 중심으로
일과 삶을 바라볼 수 있도록 하는 기록 서비스, 시소(SeeSaw)

시소는 일과 삶 사이의 균형을 찾아주는 서비스입니다. 자신을 객관적으로 점검하고, 프로젝트를 정성적으로 기록하며, 가치를 중심으로 일과 삶이 하나의 방향으로 나아가 균형을 찾을 수 있도록 돕습니다.

시소는 '나'를 아우를 수 있는 가치를 바탕으로 일과 삶을 같은 방향으로 정렬하여, 가치를 향해 나란히 나아갈 수 있도록 합니다. 또한 프로젝트를 주기적으로 돌아보며 처음의 목표, 처음의 마음가짐으로 꾸준히 프로젝트에 임하며 마무리할 수 있도록 합니다. 마지막으로 나의 에너지를 객관적으로 파악하며 본인이 감당 가능한 일의 수준을 점검하고, 일상 속 사소한 실천을 통해 에너지를 충전함으로써 지치지 않고 나아갈 수 있도록 합니다.


🔋 8attery(에이터리)

팀명 : 8attery (에이터리)

8조와 Battery의 합성어. 배터리의 어원인 “같은 기능을 하는 조직의 모음”과 “유저에게 에너지를 제공”하는 배터리가 되고 싶다는 희망을 담았습니다.

R&R

분야 이름 포지션
기획 김민혜 📈 서비스 기획(서비스 정책 확립, 비즈니스 모델 구축)
기획 김서연 🔍 서비스 기획(와이어프레임 작성, UX writing)
기획 박주아 📋 서비스 기획(서비스 정책 확립, 비즈니스 모델 구축)
기획 양예인 🔐 서비스 기획(와이어프레임 작성, 랜딩 페이지 테스트)
개발 이안진 🔦 iOS 화면 UI 구현, 서버 연동
개발 정태우 📱 iOS 화면 UI 구현, 서버 연동
개발 김민근 💻 DB 및 API 구축, 서버 배포
개발 한호정 🖥️ DB 및 API 구축, 서버 배포
디자인 한지원 📢 프로젝트 매니징, 서비스 디자인

🔎 목적 및 필요성

1️⃣ 목적

1. 워커홀릭 실태

  • 워커홀릭(Workholic)이란, '일과 생활 사이의 균형을 상실하고 강박적으로 일에 매몰되는 현상'을 지칭하는 말로, '과잉적응증후군', '일 중독' 등으로 불립니다.
  • OECD의 2021년 통계에 따르면 연간 노동시간이 다른 나라에 비해 많아 한국인이 외국인보다 더 많은 시간 일하고 있음을 알 수 있습니다.

2. 일과 삶의 균형에 대한 수요

  • 워라밸(Work-life balance)이란 일과 삶의 균형을 지칭하는 말로, '업무 시간과 그 외의 개인 시간을 명확히 구분하자'라는 취지로 쓰이며 '시간의 균형'을 의미하는 경우가 많습니다.
  • 워라하(Work-life harmony)란 일과 삶의 조화를 지칭하는 말로, 일과 삶을 완전히 분리하기보다는 직업과 삶이라는 두 가지 영역 모두에서 만족감을 이끌어내는 라이프 스타일을 의미합니다.

📍 따라서 본 서비스는 '시간의 균형'만 강조했던 기존의 워라밸 개념을 확장해 '가치의 균형을 지향하는 서비스를 제공하고자 합니다.

3. 자체 필드 리서치를 통해 파악한 대학생의 수요

  • 프로젝트 경험이 있는 20대 이상 369명을 대상으로 프로젝트 수행 양상에 관한 설문조사를 진행했습니다.
  1. 일 몰입: 일에 대한 극단적인 투자를 뜻합니다.
  2. 일 강박: 일을 하지 않고는 안 된다는 강한 내부적 압박감을 뜻합니다.
  3. 1점(매우 아니다)부터 5점(매우 그렇다)으로 리커트 5점 척도를 사용하였고, 점수가 높을 수록 해당 구성요인이 강력하게 작용한다고 해석하였습니다.
KakaoTalk_Photo_2023-05-26-05-33-19
  • 자체 필드 리서치 결과, 대학생은 모두 일 몰입, 일 강박 양상이 높게 나타났습니다.
  • 일 몰입과 일 강박 모두 3점(보통이다)보다 오른쪽에 많이 분포하고 있어 20대 대학생의 프로젝트 수행에 있어 일 몰입, 일 강박이 실제로 만연하다는 것을 알 수 있었습니다.

2️⃣ 문제점

워커홀릭을 겪고 있는 사람은 다음과 같은 문제를 경험합니다.

[문제 1] 무엇을 위해 일하는지 생각하지 않고 일 자체에만 몰두함

  • 바쁘게 일하지만 지금 하고 있는 일의 목적을 상실하는 경우가 많습니다.
  • 특히 청년 세대의 경우 자아실현적 일의 의미를 찾지 못하는 사람이 많습니다.

📍 따라서 어떤 목적 의식을 가지고 어떤 방향으로 자신의 일과 삶을 설계해 나갈지에 대해 점검하는 시간이 필요합니다.

[문제 2] 일을 가장 우선해 신체적/정신적 건강, 인간관계 등 다른 생활 영역을 신경쓰지 못함

  • 여가,운동 부족으로 개인의 신체적/정신적 건강에 부정적인 영향을 끼치고 있습니다.
  • 가족관계, 사회적 관계에 무관심하고 미숙해져 관계 문제를 야기하고 있습니다.

📍 워커홀릭을 겪고 있는 사람들의 문제를 해결하기 위해서는 일에서의 가치와 삶 전반에서의 가치를 모두 아우르는 가치를 설정하고, 이를 꾸준히 돌아볼 수 있게 하는 서비스가 필요합니다.

3️⃣ 필요성

시소의 경쟁사로 정의되는 기존 기록 서비스는 다음과 같은 문제점을 가지고 있습니다.

1. 객관적 데이터 기록 서비스

  • Garmin 웨어러블 기기를 통해 건강 정보를 제공하는 Garmin Conncet 앱은 배터리 기능을 통해 유저의 신체적 에너지를 정량적으로 보여줍니다.
  • 하지만 배터리 증감 기준과 내역을 공개하지 않아 다수의 유저가 측정 기준에 의문을 가지고 있습니다.
  • 또한 웨어러블 기기를 통해 수집되는 정량적 데이터를 바탕으로 신체적 에너지만 나타내어 삶 전반의 가치와 주관적 요소를 반영하지 못합니다.

2. 주관적 텍스트 기록 서비스

  • 자체 리서치 결과에 따르면, 유저들은 텍스트 기반의 주관적 기록 서비스를 사용할 때 다음과 같은 페인 포인트를 느꼈습니다.
    • 모아 보기 힘들어서 회고 이후, 자주 열람하지 않음
    • 줄글로 정리하기 번거롭고, 템플릿을 직접 제작하는 것이 어려움

📍 현재 객관적인 데이터 기록에서 시작하여 주관적인 텍스트 기록까지 이어지는 기록 서비스가 부재한 상황입니다. 삶 전반의 가치와 에너지를 모두 반영하고, 언제 어디서든 간편하게 기록 및 열람할 수 있는 기록 서비스가 필요합니다.


👀 사용자 정의

시소의 목표 타겟은 일과 삶 중 어느 한 쪽에 치우치지 않고, 일과 삶을 연결 지어 균형을 찾고자 하는 대학생입니다.

1. 여가시간의 필요성은 인지하고 있으나 충분히 갖지 못하는 사람

  • 대학생 129명을 대상으로 리서치를 진행한 결과, 평상시 프로젝트 외의 활동(여가, 취미 활동 등)에 시간을 할애할 필요성을 못 느낀다는 답변이 적었기 때문에 여가 시간의 필요성을 느끼고 있음을 파악했습니다.
  • 하지만 평상시 프로젝트 외의 활동보다 프로젝트에 할애하는 시간이 길다는 답변에 긍정적인 답변이 나타난 결과를 통해 여가 시간의 필요성은 느끼고 있으나 여가시간을 충분히 갖지 못한다는 문제점을 도출할 수 있습니다.

2. 프로젝트를 통해 배운 것을 인생의 성장으로 연결 짓지 못하는 사람

  • ‘청년세대는 자신의 발전에 일의 의미를 두고 있으나, 그것이 자신의 꿈, 사명과는 아직 거리가 있다고 볼 수 있다.’ 라는 전문가의 의견처럼, 여러 학생들이 프로젝트 진행 중 또는 종료 후에 관련된 회고를 진행하지 않아 프로젝트를 통해 배운 것을 인생의 성장으로 연결 짓지 못한다는 문제가 있습니다.

📊 목표 사용자

앱 다운로드 건 수 7.7만 건(수익시장의 13.8%) 확보를 시작으로, 점차 시장을 넓혀갈 예정입니다.

TAM SAM SOM
전국 대학생 하나 이상의 프로젝트에 참여하는 대학생 프로젝트에 강박감을 느끼는 대학생
247만명 106만명 56만명

TAM 전국 대학생 수 2,457,354만명

SAM 대학생 중 43.1%가 하나 이상의 프로젝트에 참여함 : 1,059,120명

SOM 프로젝트에 참여하는 대학생 중 37.2%가 프로젝트에 강박감을 느끼고 있음 : 558,156명


💡 서비스 소개

'나'를 이루는 가치를 중심으로
일과 삶을 바라볼 수 있도록 하는 기록 서비스, 시소(SeeSaw)

개요

KakaoTalk_Photo_2023-05-26-05-35-00

  • 시소(SeeSaw)의 핵심 가치는 Align, Review, Remind로, 유저가 일의 가치와 자신이 추구하는 가치의 괴리에서 오는 공허함을 줄이고, ‘나의 삶의 가치’ 라는 큰 틀 안에서 프로젝트와 삶이 동행할 수 있도록 얼라인을 맞추는 것이 목표입니다.
  • 얼라인을 맞춰나가기 위해선 목표를 설정하고, 목표를 향해 달려가는 과정 속에서 끊임없이 점검하는 절차가 필수적입니다.
  • 따라서 시소는 ‘가치’를 목표로 설정하고, 프로젝트와 삶을 ‘가치’ 중심으로 바라보고 점검할 수 있는 흐름을 제공하여 일과 삶이 하나의 방향을 향해 나아갈 수 있도록 도와줍니다.

핵심 기능

1. ValueLog: 가치 설계도

  • 프로젝트와 일상 속에서 각각의 가치를 실현한 내역을 확인할 수 있습니다.
  • 최근 5년 간 설정한 가치와 가치 실현 내역을 확인할 수 있습니다.

2. ProjectLog: 프로젝트 회고

  • 프로젝트 기간, 강도, 관련된 가치, 목표를 설정함으로써 프로젝트별 회고를 진행할 수 있습니다.
  • '상시 회고'와 '오늘의 질문'을 통해 프로젝트를 진행하며 느꼈던 생각과 감정을 상시 기록할 수 있습니다.
  • 설정한 프로젝트 기간에 따라 진행되는 ‘중간 회고’와 ‘마지막 회고’를 통해 프로젝트와 삶을 연결 지어 되돌아볼 수 있습니다.
  • 프로젝트가 종료된 후, 유저가 작성한 회고를 바탕으로 프로젝트별 리포트를 제공합니다.

3. LifeLog: 에너지 배터리

  • 자신의 에너지 상태를 파악할 수 있는 배터리 잔량을 확인할 수 있습니다.
  • 유저의 수면시간과 활동량 데이터를 바탕으로 에너지 배터리가 충전/소모 되어 자신의 전반적인 에너지 상태를 확인할 수 있습니다.
  • 유저가 설정한 가치와 관련된 실천을 할 경우, 에너지 배터리가 충전되어 바쁜 일상 속에서도 중요한 가치를 잊지 않게끔 도와줍니다.

📊 서비스 비즈니스 모델

[Phase 1] 광고료 수익

  • 광고 업체의 배너 광고를 앱 내 노출하여 광고료 수익을 얻습니다.

[Phase 2] 프리미엄 구독 상품

  • 프리미엄 구독 상품을 통해 수익을 창출하고, 유저 편의성을 제공하여 충성 고객을 확보하고자 합니다.
  • 프리미엄 구독 상품을 통해 제공되는 기능은 다음과 같습니다.
    1. 앱 내 배너 광고 제거
    2. 고급 프로젝트 리포트 제공
    3. 프로젝트별 회고록 문서화 다운로드
    4. 마이페이지 내 키워드 검색 기능

[Phase 3] 플랫폼 사업으로의 확장을 통한 수수료 수익

  • 회고 모임, 북 클럽과 같이 소규모의 커뮤니티의 수요가 높아지는 시장 트렌드를 고려하여 시소는 비슷한 가치를 추구하는 유저들이 모일 수 있는 커뮤니티 플랫폼으로의 도약을 시도합니다.
  • 서비스를 적극적으로 사용하는 유저를 대상으로 커뮤니티 내 모임 개설 권한을 부여합니다.
  • 모임 개설 유저는 하나의 가치를 설정하고, '일과 삶의 균형'에 대한 자신의 노하우와 지식을 공유할 수 있는 모임을 개설할 수 있으며, 일반 유저는 참가비를 지불하고 모임에 참여할 수 있습니다.
  • 유저들간의 네트워킹을 통해 서로의 삶에 긍정적이고 의미있는 관계를 만들어나갈 수 있도록 돕습니다.

🎨 디자인 무드보드

KakaoTalk_Photo_2023-05-26-05-32-57



🔍 System Architecture

image


💻 Technology

  • iOS
    • Xcode Swift
    • SwiftUI AlamoFire KeychainSwift HealthKit
  • Server
    • IntelliJ IDEA Java Springboot Spring Security Shell Script JWT Gradle Swagger
    • Spring Data JPA QueryDSL
    • MySQL Redis RDS ElastiCache AWS Lambda Amazon CloudWatch Hibernate
    • GitHub Actions EC2 Docker Nginx
  • Co-working Tool
    • Notion Jira Postman Slack

🐾 기술 스택 선정 이유

  • 유저 입장에 편한 회고가 가능하도록 하기 위해 접근성을 높이고자 했고, 이를 위해 언제나 간편하게 접근할 수 있는 모바일 앱을 선정하였습니다. 일반적인 PC 웹이나 모바일 웹에서는 구현하기 힘든 푸시 알림 기능, 그리고 스마트폰 내에 기본으로 제공되는 건강 API가 사용 가능하다는 차별성이 있습니다.

📘 iOS 선정 이유

  • Xcode는 iOS 앱 개발에 필요한 모든 도구와 기능을 통합한 IDE로, Apple 로그인을 위한 AuthenticationServices, HealthKit 등 다양한 프레임워크 이용이 간편합니다.
  • SwiftUI는 native platform의 기능과 퍼포먼스를 최대한 활용할 수 있고, 선언적인 문법으로 코드 가독성이 우수합니다. @State, @Binding, @ObservableObject 등 상태 관리를 위한 state property를 사용해 값의 변경, 데이터 전달 및 상호작용을 단순화할 수 있습니다.
  • Alamofire는 URLSession을 활용한 라이브러리로, Swift에서 네트워킹 작업을 수행하기 위한 간단하고 직관적인 API를 제공하여 직접 구현하는 것보다 빠르고 편리하게 작업할 수 있습니다.
  • Keychain은 iOS 앱의 Sandbox 환경 내에서 동작하는 데이터 보안 메커니즘으로, 외부에서 Keychain에 직접 액세스할 수 없습니다. 앱의 중요한 데이터, 인증 토큰 등을 Keychain에 저장함으로써 앱의 보안성을 향상시킬 수 있으며, KeychainSwfit library를 이용해 간편하게 accessToken과 refreshToken을 Keychain에 저장하고, 안전하게 이용할 수 있습니다.

📗 Server 선정 이유

  • IntelliJ는 Spring Boot 개발을 위해 필요한 모듈과 기능을 간편하게 사용할 수 있는 IDE입니다.
  • Spring Boot는 Spring framework를 간편하게 사용할 수 있게 해주며 RDBMS와의 편리한 연동, 라이브러리의 버전 관리 자동화 등으로 Java 기반 애플리케이션 서버 개발에 특화되어 있습니다.
  • Spring Security를 사용하여 JWT 기반 사용자 인증 관련 필터를 구축하였습니다.
  • Spring Data JPA를 사용하여 연동한 RDBMS에 간편하게 접근하고, 필요 시 JPQL과 QueryDSL fetch join을 사용하여 N + 1 문제를 해결하였습니다.
  • Slf4j와 logback-spring.xml 파일 설정을 통해 배포된 서버에서 로그를 파일에 저장하도록 구현했습니다.
  • OpenId Connect는 OAuth 2.0에서 확장된 인증 프로토콜이며, 소셜 로그인 시 API 호출 횟수를 약 절반 가까이 줄일 수 있는 장점을 가지고 있습니다. 따라서 OpenId Connect를 사용하여 애플 로그인 및 카카오 로그인을 구현하였습니다.
  • 일반적인 데이터를 안전하게 저장하기 위해 대표적인 RDBMS인 MySQL을 사용했고, 이를 AWS RDS를 통해 배포하였습니다.
  • 매일 자정마다 DB에 insert, update 쿼리를 수행하기 위해 pymysql을 이용해 작성한 쿼리 파일을 Lambda에 업로드하고, EventBridge의 규칙에 따라 Lambda를 실행하도록 구현하였습니다.
  • 로그인 과정에서 발급되는 JWT인 Access Token과 Refresh Token 중 Refresh Token을 캐싱하여 사용자가 빠르게 Access Token을 재발급 받을 수 있게 하기 위해 Redis를 사용하였습니다. JWT로 구현된 Access Token은 탈취 당하더라도 유저 정보는 안전하지만, 이를 그대로 활용하여 로그인할 수 있기 때문에 만료 시간을 짧게 설정하고 Refresh Token을 이용하여 사용자의 불편을 줄였습니다. Redis에 Refresh Token과 Request IP를 저장하여 Refresh Token 탈취에 대비했으며, 배포에는 AWS ElastiCache를 사용하였습니다.
  • JAR 파일을 배포하기 위해 환경설정이 간편한 AWS EC2를 사용하였습니다.
  • 무료로 사용할 수 있으며 비밀 값을 Repository Secret에 넣어 안전하게 관리할 수 있는 Github Actions를 사용하여 CI/CD를 구현했습니다.
  • CI/CD 구현 및 컨테이너화를 위해 Docker를 사용하였습니다. Docker Compose를 통해 빌드된 JAR 파일 및 nginx를 EC2 상에 컨테이너를 생성해 배포하였습니다.
  • 서버의 자원을 더욱 효율적으로 사용하기 위해 nginx를 사용하였습니다.

ER Diagram

image

🔖 Naming Rules

Swift

  • SwiftLint
  • Variable: lowerCamelCase 복수는 -s
  • Function: lowerCamelCase 동사원형으로 시작
  • Enum
    • Name: UpperCamelCase
    • case: lowerCamelCase
  • Struct, Class
    • Name: UpperCamelCase 이름 앞에 prefix 붙이기 않기
    • property, method: lowerCamelCase
  • Delegate: protocol 이용
  • Protocol: 구조를 나타내면 명사, 능력(무언가 할 수 있음)은 형용사

Java

  • Class & Interface: UpperCamelCase
    • Class 이름은 일반적으로 명사, 명사구
    • Interface 이름은 명사, 명사구도 되지만 형용사, 형용사구도 됨
  • Package: Lowercase 복합단어 사용 금지
  • Method & Parameter: LowerCamelCase
    • Method 이름은 동사, 동사구
  • Constant: UpperSnakeCase
    • 모두 대문자로 밑줄(_)로 각 단어 구분
  • Non-constant field names & Local variable: LowerCamelCase
  • Camel case: defined
    • 구를 일반 ASCII로 변환하고 어퍼스트로피 제거
    • 단어로 나누고 공백과 나머지 구두점으로 분리
    • 각 단어를 UpperCamelCase로 표시하거나 첫 단어 제외한 각 단어는 LowerCamelCase
    • 모든 단어를 단일 식별자로 결합

🗂️ Commit Convetion

<type>(<scope>): <short summary>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>

📌 Type

commit 명 commit 뜻
Feat 새로운 기능 추가
Fix 버그 수정
Docs 문서 수정
Style 코드 포맷팅, 세미콜론 누락, 코드 변경이 없는 경우
Refactor 코드 리펙토링
Test 테스트 코드, 리펙토링 테스트 코드 추가
Chore 패키지 매니저 추가
Build 빌드 관련 파일 수정
CI CI 설정 파일 수정
Pref 성능 개선
Design UI 디자인 변경
Add 파일 추가
Rename 파일 혹은 폴더 이동, 이름 수정
Remove 파일 삭제

📌 Short Summary

  • 명령문, 현재 시제, 첫 글자 소문자, 마지막에 마침표(.) 넣지 않기

📌 Body

  • 명령문, 현재 시제, 변경한 이유와 변경 전과의 차이점 설명

📌 Footer

  • Breaking Changes
    • 변경점 (description of the change)
    • 변경 사유 (justification)
    • 마이그레이션 지시 (migration instructions)
  • Referencing Issues
    • Closes #123, #245, #992

🐬 Git Flow

About

큐시즘 27기 밋업데이 8attery 조의 SeeSaw 서비스 서버 레포지토리입니다.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published