Skip to content

매일 반복되는 하루, 잠시 휴식이 필요할 때

Notifications You must be signed in to change notification settings

CommaProject/Comma-Back-end

Repository files navigation

Comma

Comma_Logo

매일 반복되는 하루, 잠시 휴식이 필요할 때

개요

COMMA, 콤마, 쉼표

comma( , )는 문장의 중간이나 낱말과 낱말 사이에 위치한다.

우리는 항상 같은 문장, 혹은 단어 안에 살아간다.

매번 같은 하루에 지친 우리는 작은 쉼표를 마련해 줄 무언가를 소망한다.

팀원 소개

이름 역할 링크
이준영 리더, 백엔드 개발 깃허브
박상진 백엔드 개발
이환주 프론트엔드 개발
이나연 프론트엔드 개발
황혜연 기획&디자인
경채원 기획&디자인
최재영 기획&디자인
노도균 기획&디자인

페이지 별 UI 디자인

로그인 페이지 메인 페이지
플레이리스트 편집 플레이리스트 상세
트랙 재생 플레이리스트 시간 설정
탐색 > 트랙 검색 탐색 > 가수 검색
마이 프로필 알람

기술 스택

Frontend

Backend

주요 개발 내용

3. 프로젝트 구조

image

4. 폴더 구조

comma-front-end
├── public
└── src
    ├── apis
    ├── assets
    ├── components
    ├── constants
    ├── hook
    ├── pages
    ├── stores
    ├── styles
    └── utils
comma-back-end
├── comma-submodule
└── src
    ├── docs
    ├── main
    │   ├── java
    │   │   ├── domain
    │   │   ├── global
    │   │   └── spotify
    │   └── resources
    └── test

5. ERD

  • user_tb, playlist_tb, track_tb, artist_tb를 중심으로 연관 테이블을 구성

image

Frontend

Atomic Design

  • 작업량이 많아지지 않을 것을 고려하여 보통의 Atomic(아주 작은)을 사용하지 않고 적절한 단위의 Component로 만들었습니다.

Custom hooks

  • 모든 API는 react Query를 사용했고 useMutation, uesQuery 등 Custon hooks을 사용하여 코드를 읽고, 쓰기 편하도록 구성하였습니다.
  • API이외에도 Page에 코드가 난잡해지지 않도록 필요시 Custom hooks를 이용하였습니다.

SSR

  • getStaticProps(Nextjs)를 활용하여 Rendering이 되기 전(pre-rendering)에 Navigation, Login Session 상태를 확인하는데 이용하였습니다.

PWA

  • Native개발에서 할 수 있는 알림기능을 활용하기 위해 PWA기술을 적용했습니다.

낙관적 업데이트

  • 좋아요, 알람 On/Off 같은 기능은 성공할 것이라는 것을 가정하여 미리 상태를 업데이트 후 서버에 API 요청을 진행했습니다.
  • 사용자의 경험을 개선하였습니다.

Backend

Spring Security

  • 권한에 따라 접근할 수 있는 API 를 분리했습니다.
- CSRF : disable
- password encryption : BCryptPasswordEncoder
- Session Creation Policy : STATELESS
- JwtAuthenticationFilter : before UsernamePasswordAuthenticationFilter.class

JPA & QueryDSL

  • 객체 중심 설계와 반복적인 CRUD를 Spring Data JPA 로 최소화 하여 비즈니스 로직에 집중합니다.
QueryDSL : 복잡한 JPQL 작성시 발생할 수 있는 문법오류를 컴파일 시점에 빠르게 찾아냅니다.

TDD & Spring RestDocs

  • 테스트 주도 개발 방법론을 이용하여 소프트웨어 품질을 향상시켰습니다.
  • 200 여개가 넘는 테스트 코드를 Red , Green , Refactor 사이클을 따라 작성했습니다.
  • Controller Test 에서 Spring RestDocs 를 이용하여 API 문서를 제작했습니다.

SSE ( Server Send Event ) & Spring Scheduler 푸시 알람

  • SSE 를 이용하여 사용자 푸시 알림을 구현했습니다.
  • 로그아웃 상태의 사용자에게 전송된 데이터는 제거 ( 유실 ) 합니다.
  • Spring Scheduler 를 통해 10분마다 특정 시간에 설정된 알림을 계속 조회합니다.
  • 단방향 통신을 이용하여 리소스 낭비를 최소화했습니다.

OAuth2.0 & JWT

  • 구글 & 네이버 & 카카오 소셜 서버를 이용해 불필요한 회원가입을 줄이고 , JWT을 이용해 사용자 인증 정보를 클라이언트에 보관합니다.
  • Access Token과 Refresh Token은 웹 브라우저 쿠키에 저장하며 httpOnly 옵션으로 보안처리 했습니다

CI/CD

  • Jenkins 를 이용하여 지속적인 배포를 구성 , Github Action 을 통해 지속적인 통합을 구성
  • Github Action 을 통해 테스트에 통과되지 않을 경우 Merge가 되지 않습니다.
  • 병합된 코드는 Jenkins WebHook 을 통해 AWS 에 호스팅됩니다.
  • AWS 서버는 프론트엔드 개발자가 테스트를 용이하게 하기 위해 가동했습니다.

협업 방법

  • Gather Town 활용 주 2~3회 온라인 회의
  • Notion 페이지 활용 회의록 및 컨벤션 정리
  • Jira 프로젝트 활용 2주 단위 스프린트 진행
  • Git, GitHub 활용 프로젝트 형상 관리

About

매일 반복되는 하루, 잠시 휴식이 필요할 때

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •  

Languages