Skip to content
/ amadda Public

개인 일정 관리를 위한 캘린더 서비스

Notifications You must be signed in to change notification settings

pp-pppp/amadda

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

아맞다(AMADDA)

일정 관리 및 공유를 위한 캘린더 서비스

  • 개인의 일정을 캘린더 뷰 스케줄러를 통해 관리한다.
  • 친구 관계인 사람을 일정에 함께 할당하여 캘린더에 동일한 일정을 생성하고 공유한다.
  • 일정별로 개인화된 설정을 적용한다.
  • 사용자의 설정에 따라 사용자에게 일정 및 서비스 관련 알림을 전송한다.

포팅 매뉴얼

팀 소개

profile

주요 기능 및 구현 화면

전체 기능 스크린샷 모아보기

SNS 인증 및 회원가입

카카오 로그인
회원 가입

카카오 인증 후 신규 회원 가입을 할 수 있습니다. 이미 회원이라면 아래의 캘린더 화면으로 이동합니다.

일정 관리

전체 일정 조회

전체 일정을 캘린더 뷰로 조회할 수 있습니다.

미정 일정 조회

스케줄이 정해지지 않은 일정을 따로 모아볼 수 있습니다.

일정 작성 1

일정에서 참가자 모두가 공유하는 옵션입니다.

일정 작성 2

일정 중 개인화가 가능한 옵션입니다.

일정 상세 조회

일정을 상세 조회할 수 있습니다.

일정 댓글

일정에 참여자 모두가 댓글을 달 수 있습니다.

친구 관리

친구 목록 조회

친구 목록을 조회할 수 있습니다.

친구 검색

사용자를 검색해 친구 신청을 할 수 있습니다.

친구 그룹 추가

친구를 묶어 그룹으로 만들 수 있습니다.

알림

알림 수신 및 목록 조회

알림을 수신하고 목록을 조회할 수 있습니다. 친구 신청/친구 결과, 일정에 대한 알림 등을 수신할 수 있습니다.

알림 설정

특정 알림을 무시할 수 있습니다.

프로젝트 목표 및 중점 고려 사항

Frontend

프레임워크

  • Next.js의 SSR, Client-side Data Fetching의 적절한 활용을 통한 UX 최적화

상태 관리

  • SWR, Zustand, Context API의 활용을 통한 서버 상태 및 클라이언트 상태의 개념 이해

스타일링

  • Vanilla Extract의 pure css 생성을 통한 웹 페이지 성능 향상 (zero-runtime css-in-js)

협업

  • Storybook을 통한 문서화 및 컴포넌트 관리
  • Webpack Module Federation, 모노레포 (Turborepo)를 통한 도메인 단위의 프로젝트 관리 경험

Backend

Java 17

  • Record를 사용한 간결한 DTO 제작

TDD

  • JUnit5Mockito를 이용한 TDD, 테스트 코드 작성 후 기능 구현
  • 레이어별 유닛 테스트 및 통합 테스트 작성 (프로젝트 전체 361개)
  • 테스트 환경 통합으로 테스트 컨텍스트 감소 (87개 → 9개)
  • 외부 Kafka 서버에 의존하지 않고 EmbeddedKafka를 이용해 독립적인 테스트 환경 구축

Kafka

  • Kafka Producer와 Consumer를 사용해 메시지 큐로 알림 기능 구현
  • 다수의 Consumer를 두어 동일한 이벤트를 여러 프론트엔드 서버(Next.js)에서 처리

Infra

환경 구축

  • Docker multi stage build를 통한 빌드 최적화
  • Docker compose를 통한 컨테이너 오케스트레이션
  • Jenkins를 통한 지속적 통합 및 배포
  • DB 서버 설정, Docker volume 연결
  • SpringBoot 서버 설정 및 빌드 최적화
  • Turborepo + Module Federation 지원 및 원격 캐시 서버 적용

네트워크

  • EC2 방화벽 및 ufw-docker를 활용한 인바운드, 아웃바운드 규칙 관리
  • Nginx 설정 및 HTTPS SSL 적용
  • Domain 연결을 위한 DNS 설정

기술 스택

Frontend

  • 코어: TypeScript, React, Next.js
  • 상태 관리: SWR, Zustand, Context API
  • 스타일링: Vanilla-Extract
  • 테스트: Storybook
  • 빌드 및 프로젝트 관리: Webpack(Module Federation), Turborepo
  • 로깅 및 모니터링: Sentry

Backend

  • 코어: Java 17, Spring Boot, JPA/Hibernate, Gradle
  • DB: MySQL, AWS S3(file)
  • 알림: Kafka
  • 테스트: Junit5, Mockito, H2
  • 로깅: SLF4J

Infra

  • 플랫폼: AWS EC2
  • OS: Ubuntu
  • 환경 구축: Docker/Docker Compose
  • 네트워크: NginX
  • 파이프라인: Jenkins

아키텍처 및 설계

전체 시스템 아키텍처

시스템 아키텍쳐

ERD

ERD

Convention

1. Branch

main - develop - feature/create-schedule

브랜치명 내에서는 /(slash)-(hyphen)만 사용

2. Commit Message

[type(소문자)]: 한글로 작성

  • feat : production code 작성
  • fix : production code 오류 수정
  • refactor : production code 리팩토링
  • comment : 주석 변경
  • docs : 문서 작업
  • test : 테스트 코드
  • chore : production code 변경 없음 (remove, rename 등등…)

3. Pull Request

4. Code Review

  • Pn Rule
  • Example: P1) 리뷰 내용
  • P1) 꼭 반영해 주세요 (Request changes)
  • P2) 적극적으로 고려해 주세요 (Request changes)
  • P3) 웬만하면 반영해 주세요 (Comment)
  • P4) 반영해도 좋고 넘어가도 좋습니다 (Approve)
  • P5) 그냥 사소한 의견입니다 (Approve)

About

개인 일정 관리를 위한 캘린더 서비스

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published