ODO는 기존 텍스트 기반의 웹 블로그 플랫폼을 넘어 음성 서비스를 제공하는 플랫폼입니다.
글 요약, TTS(Text To Speech) 기능을 제공하며 서비스 내 상점을 이용하여 블로그 커스터마이징이 가능합니다.
마이페이지를 통해서 사용자의 목소리를 학습시키는 것이 가능하고, 글의 요약, 본문, 블로그 소개 글에 적용할 수 있습니다.
Front : JS, HTML, React, styled-components, Nginx
Back-end : SpringBoot : v3.xx, Spring Security, FastAPI
DataBase : Mysql, Redis
버전 및 이슈관리 : Github, Github Issues, Github Project
협업 툴 : Notion, JIRA, Google Sheet, Slack
서비스 배포 환경 : 가천대학교 On-Promise Cloud
디자인 : Figma
전체 개발 기간 : 2023-09-07 ~ 2023-12-27
UI 구현 : 2023-09-14 ~ 2023-10-31
기능 구현 : 2022-11-01 ~ 2022-12-24
구현 내용을 세부적인 tasks로 분할하고 스프린트를 진행했습니다.
GitHub Projects와 Issues를 사용하여 진행 상황을 공유했습니다.
주간회의를 진행하며 작업 순서와 방향성에 대한 고민을 나누고 Jira를 통해 진행상황을 공유했습니다.
📦src
┣ 📂main
┃ ┣ 📂java
┃ ┃ ┗ 📂com
┃ ┃ ┃ ┗ 📂odo
┃ ┃ ┃ ┃ ┣ 📂server
┃ ┃ ┃ ┃ ┃ ┣ 📂Inventory
┃ ┃ ┃ ┃ ┃ ┣ 📂application
┃ ┃ ┃ ┃ ┃ ┣ 📂comment
┃ ┃ ┃ ┃ ┃ ┣ 📂common
┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂config
┃ ┃ ┃ ┃ ┃ ┣ 📂domain
┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂authcode
┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂client
┃ ┃ ┃ ┃ ┃ ┣ 📂dto
┃ ┃ ┃ ┃ ┃ ┣ 📂image
┃ ┃ ┃ ┃ ┃ ┣ 📂infra
┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂oauth
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂config
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂google
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂authcode
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂client
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂dto
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂kakao
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂authcode
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂client
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂dto
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂naver
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂authcode
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂client
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂dto
┃ ┃ ┃ ┃ ┃ ┣ 📂post
┃ ┃ ┃ ┃ ┃ ┣ 📂presentation
┃ ┃ ┃ ┃ ┃ ┣ 📂profile
┃ ┃ ┃ ┃ ┃ ┣ 📂store
┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂domain
┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂repository
┃ ┃ ┃ ┃ ┃ ┗ 📂voicefile
┃ ┃ ┃ ┃ ┃ ┣ 📂dto
┃ ┃ ┃ ┃ ┃ ┣ 📂repository
┃ ┃ ┃ ┃ ┃ ┗ 📂service
┃ ┃ ┣ 📂resources
┃ ┃ ┗ 📂webapp
┃ ┃ ┗ 📂upload
┗ 📂test
┗ 📂java
┗ 📂odo
┗ 📂server
┗ 📂Inventory
System Archtecture
가천대학교 On-Promise 클라우드에 배포를 진행했습니다.
하나의 public 서브넷과 두개의 private 서브넷으로 VPC를 구성했습니다.
Disaster Recovery 를 고려해 kr-central-2-a, kr-central-2-b 두개의 가용영역으로 나눠 배치해 데이터센터 재난 상황과 같은 사고에 대비되도록 하였습니다.
인터넷 게이트웨이를 통해 VPC 내부로 접근합니다.
Public Subnet 내에 가상환경을 구성하고 Nginx를 사용해 정적페이지를 출력합니다.
가용성 유지를 위해 외부 로드벨런서(Nginx)를 이용해 부하분산을 하도록 했습니다.
내부 로드벨런서를 둬서 Private Subnet에서버로 들어가는 부하를 분산시켰습니다.
연산량이 가장 많은 읽기(R) 요청만 처리하는 Slave DB와 나머지 요청(C,U,D)을 처리하는 Master DB를 분리하여 전체 DB를 구성하였습니다.
Master와 Slave는 Mysql replication을 통해 데이터의 변경 이벤트가 발생되면 변경 사항을 Slave DB에 반영해 동기화를 맞춥니다.
Redis를 사용해 인증/인가에 필요한 토큰을 관리합니다.
GitLab과 Jenkins를 활용해서 배포 파이프라인을 구축했습니다.
배포과정을 확인하기 위해 Jenkins와 Slack을 연동했습니다.
Slack을 통해 배포의 성공여부를 확인할 수 있도록 했습니다.
H.Y.Ahn.mp4
S.W.Park.mp4
ODO는 글을 읽어주는 음성서비스를 제공합니다.
Y.G.Hong.mp4
사용자의 목소리를 학습시킬 수 있습니다.
게시글의 요약, 본문 블로그 방문 인사말 등에 음성을 적용이 가능합니다.
상점과 인벤토리 기능을 통해 원하는 디자인과 기능을 구매하고 사용여부를 결정할 수 있습니다.
웹 블로그 서비스의 인증/인가, 글 작성, 댓글, 대댓글 작성, 개인 정보 수정 등이 가능합니다.
demo.mp4
TTS서비스 모델 학습에 필요한 명확한 데이터 양 확인 필요.
서버 부하 최소화 방안 고려 ex) 내부 로드벨런서 고도화, 이미지 저장 주최 클라인트로 변경, 쿼리 리팩토링.
DB 병목현상 최소화.
Web Application Server MSA
서비스내 기능을 중점으로 MSA 아키텍쳐 설계 완료.
Spring Cloud, Eureka, Spring Config 데모 완료.
도메인별 ERD 재구성.
도메인별 디렉토리 주고 변경.
클라이언트/서버 API 호출 대상 변경