케이크 위에 쌓이는 우정과 사랑, 생일날 열리는 나만의 롤링페이퍼 케이꾸! 👉 https://k-koo.kro.kr/
특별한 날, 특별한 기억을 케이꾸와 함께 만들어보세요! 🎂
생일에만 열리는 나만의 롤링페이퍼로 사랑과 우정이 담긴 축하 글을 받아보세요.
케이크에 편지를 더하고, 해마다 소중한 추억을 간직할 수 있는 편지함까지!
케이꾸가 전하는 작은 편지, 큰 설렘 – 지금 케이꾸로 잊지 못할 생일을 준비하세요.
- JWT, Cookie 이용
- Access Token, Refresh Token 검증 로직 구현
- 회원가입 직후 케이크 시트, 크림 색상 고르도록 로직 구현
- 언제든지 원하는 색상으로 수정 가능
- 케이크 조회시 올해 받은 편지 조회 구현
- 연도별로 보관된 편지 조회 구현, 윈도윙 적용
- 친구 케이크 조회시 장식초 고르기, 편지 작성 구현
- Web Worker를 활용한 푸시 알림 기능 구현
- 링크 공유 (카카오, 페이스북, URL 복사)
- 마이페이지 (회원 정보 조회/수정, 탈퇴, 로그아웃)
- 아이디, 비밀번호 찾기 (이메일 인증)
pnpm install
pnpm run dev
pnpm run build
pnpm run start
/////////////////////////////////////
// turborepo를 활용한 모노레포 구조 //
/////////////////////////////////////
KKOO
├── .github
├── .husky
├── apps
│ ├── client // 클라이언트
│ │ ├── config
│ │ ├── e2e
│ │ ├── public
│ │ ├── src
│ │ │ ├── apis
│ │ │ ├── assets
│ │ │ ├── components
│ │ │ ├── hooks
│ │ │ ├── pages
│ │ │ ├── store
│ │ │ ├── styles
│ │ │ ├── test
│ │ │ ├── utils
│ │ | ├── App.css
│ │ | ├── App.tsx
│ │ | ├── index.tsx
│ │ | ├── ModalPortal.ts
│ │ | └── firebase-messaging-sw.ts
│ │ ├── Dockerfile
│ │ ├── package.json
│ │ ├── playwright.config.ts
│ │ ├── tsconfig.json
│ │ ├── webpack.config.dev.js
│ │ └── webpack.config.prod.js
│ ├── server // 서버
│ ├── src
│ │ ├── models // Prisma CRUD 모듈 함수 모음
│ │ ├── routes // API 요청 수신, 응답 반환
│ │ └── service // 비즈니스 로직
│ ├── Dockerfile
│ ├── package.json
│ ├── tsconfig.json
│ └── .eslintrc.js
├── packages // 클라이언트, 서버 공통 모듈 or 구성 파일
│ ├── database // Prisma 클라이언트
│ ├── eslint-config
│ ├── jest-presets
│ ├── schemas // Zod 타입 정리
│ ├── types
│ ├── typescript-config
| └── utils
├── .dockerignore
├── .gitignore
├── docker-compose-cache.json
├── docker-compose.yml
├── nginx.conf
├── package.json
├── pnpm-lock.yaml
├── pnpm-workspace.yaml
├── README.md
└── turbo.json
flowchart TB
subgraph Client["Client (Browser)"]
React["React\n(TypeScript)"]
Zustand["Zustand\n(State Management)"]
ReactQuery["React Query\n(Server State)"]
React --> Zustand
React --> ReactQuery
end
subgraph BuildTools["Build & Tools"]
Webpack["Webpack"]
Babel["Babel"]
TypeScript["TypeScript"]
Jest["Jest/Playwright\n(Testing)"]
StyleComp["styled-components"]
end
subgraph CICD["CI/CD Pipeline"]
GHA["GitHub Actions"]
Husky["Husky"]
Docker["Docker"]
end
subgraph Server["Server Environment"]
Nginx["Nginx\n(Reverse Proxy)"]
Express["Express.js\n(TypeScript)"]
Prisma["Prisma ORM"]
end
subgraph Cloud["AWS Cloud"]
EC2["AWS EC2"]
S3["AWS S3"]
RDS["PostgreSQL\n(RDS)"]
end
subgraph Monitoring["Monitoring"]
Sentry["Sentry"]
end
Client -->|API Requests| Nginx
Nginx -->|Proxy| Express
Express --> Prisma
Prisma --> RDS
BuildTools -->|Build| Client
CICD -->|Deploy| EC2
Client -->|Error Tracking| Sentry
EC2 --> Nginx
S3 -->|Static Assets| Nginx
- github actions를 활용해서 지속적 통합 및 배포
- origin에 push할 경우,
husky를 활용해 테스트 코드, 포맷팅, 린팅 검사를 하고 통과될 경우 push에 성공한다. feature브랜치에서develop으로 Pull Request를 보내면, CI가 동작된다.develop에서main로 Pull Request를 보내면, CI가 동작되고 Merge가 되면, 운영 리소스에 배포된다.
Frontend (Web)
- 회원가입, 로그인
- 마이페이지
- 케이크 조회/생성/수정
- 편지 조회/생성 (올해, 연도별)
- 링크 공유
Server
- AWS EC2, S3 클라우드 환경 세팅
- Express.js 세팅
- Nginx 세팅
Devops
- CI/CD 구축 (Docker, Github Action)
- 서버 모니터링
etc
- 기획, 디자인
- 전체 기술 스택 선정
- 전체 아키텍처 구성
- 전체 개발 일정 및 이슈 관리







