ODO는 기존 텍스트 기반의 웹 블로그 플랫폼을 넘어 음성 서비스를 제공하는 플랫폼입니다. 글 요약, TTS(Text To Speech) 기능을 제공하며 서비스 내 상점을 이용하여 블로그 커스터마이징이 가능합니다. 마이페이지를 통해서 사용자의 목소리를 학습시키는 것이 가능하고, 글의 요약, 본문, 블로그 소개 글에 적용할 수 있습니다.
| 양권상 | 박상웅 | 안현영 | 홍윤기 |
|---|---|---|---|
@gwon477 |
@xxng1 |
@An-hyeonyoung |
@dbsrl1026 |
| PM | Backend | Frontend | Backend |
- 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 병목현상 최소화.
- 서비스내 기능을 중점으로 MSA 아키텍쳐 설계 완료.
- Spring Cloud, Eureka, Spring Config 데모 완료.
- 도메인별 ERD 재구성.
- 도메인별 디렉토리 주고 변경.
- 클라이언트/서버 API 호출 대상 변경









