기존 프로젝트에 대한 정보는 이곳에서 확인하실 수 있습니다.
2023.04.10(월) ~ 2023.05.19(금)
SSAFY 8기 2학기 자율 프로젝트
명규를 기준으로 프론트, 백엔드 신들이 모인 서울 5반 9조입니다.
- 강은진 - 팀장, BackEnd
- 이명규 - BackEnd, 인프라
- 이인재 - BackEnd
- 장지웅 - BackEnd
- 소지현 - FrontEnd
- 서철원 - FrontEnd
Django
프레임워크로 개발된 서비스를Spring Boot
프레임워크로 Migration을 진행하였습니다.MSA (Micro Service Architecture)
구조로 각 서비스를 독립적으로 개발하였습니다.- 실운영 서비스만큼의 트래픽을 주고, 성능을 개선하였습니다.
- 코드 중복, AI 처리 지연 감소도 주요 목표로 설정하였습니다.
- 새로운 기능을 추가하였습니다. (결제 시스템, 회원 관리, 유사도 검색 기능)
- 반응형 웹 개발을 통해 다양한 사용환경에 알맞는 UI/UX를 제공하였습니다.
TypeScript
적용을 통해 코드의 안정성과 유지 보수성을 향상시켰습니다.
1) 결제 시스템
- 소설 작성에 필요한 포인트를 결제하는 시스템
- 실 운영시 발생하는 트래픽 문제를 해결하기 위해 도입
Api Gate Way
에서Spring Security
및JWT 토큰
을 적용한 보안 처리- 기존의 Kakao 로그인 뿐만 아니라
Google Oauth2
로그인 추가
- 소설 내용을 검색하기 위한 기능
- 단순한 문자 검색이 아닌, 단어간의 유사도를 바탕으로 소설을 검색
- 소셜 로그인을 통한 회원관리 + 소설 작성 + 소설 CRUD 를 담당하는 Back- end 서버입니다.
- 모든 기능을 하나의 서버에서 관리하는
Monolithic Architecture
로 구성되어 있습니다.
회원(8011)
+소설(8012)
+결제(8014~8017)
+검색(8018)
총 7개의 서비스로 분할하였습니다.- 서비스 각각에 대한 엔드포인트는
APIGateway
에서 리버스 프록시로 접근하게 끔 개발하였습니다.
- 각각의 서비스를 독립적으로 개발 할 수 있어
GitLab
형상관리, 서비스 의존성,CI/CD
에서 유용합니다. - 배포 환경에서 장애 발생시, 모든 기능을 정지하지 않고도 수정이 가능합니다.
- 서비스의
추가
,삭제
,수정
등의 변경사항이 Monolithic 구조에 비해 용이합니다.
- Learning Curve가 큰 편이라 초기 개발 속도 저하가 우려됩니다.
- 분할한
Micro Service
에 대한 담당자들의 높은 이해가 필수적입니다.
- 현재 결제 서비스만
Kafka
를 사용한 DB 분할 및 부하 분산 시스템 구축되어 있습니다.- 나머지 6개 서비스들도
Kafka
를 통해 DB접근하는 MQ 기법을 적용하고자 합니다.
- 나머지 6개 서비스들도
Kubernetes
를 활용한 무중단 배포 도입 필요합니다MSA
의 CI/CD 장점인 빠른 빌드로 인해 버전 업데이트가 자주 발생합니다.- 잦은 업데이트에도 서비스의 중단 없이 배포하기 위해
Kubernetes
를 사용하려 합니다.
Repository
│
├── backend
│ │
│ ├── api_gateway
│ │ ├── src
│ │ │ ├── ...
│ │ ├── build.gradle
│ │ ├── ...
│ │
│ ├── eureka_server
│ │ ├── src
│ │ │ ├── ...
│ │ ├── build.gradle
│ │ ├── ...
│ │
│ ├── service_ai
│ │ ├── diffusion
│ │ │ ├── diffusion_ControlNet.py
│ │ │ ├── ...
│ │ ├── app.py
│ │ ├── caption.py
│ │ ├── gpt.py
│ │ ├── ...
│ │
│ ├── service_member
│ │ ├── src
│ │ │ ├── ...
│ │ ├── build.gradle
│ │ ├── ...
│ │
│ ├── service_novel
│ │ ├── src
│ │ │ ├── ...
│ │ ├── build.gradle
│ │ ├── ...
│ │
│ ├── service_payment
│ │ ├── core
│ │ │ ├── src
│ │ │ │ ├── ...
│ │ │ ├── ...
│ │ ├── item-service
│ │ │ ├── src
│ │ │ │ ├── ...
│ │ │ ├── ...
│ │ ├── order-item-service
│ │ │ ├── src
│ │ │ │ ├── ...
│ │ │ ├── ...
│ │ ├── order-service
│ │ │ ├── src
│ │ │ │ ├── ...
│ │ │ ├── ...
│ │ ├── point-service
│ │ │ ├── src
│ │ │ │ ├── ...
│ │ │ ├── ...
│ │ ├── build.gradle
│ │ ├── ...
│ │
│ ├── service_search
│ │ ├── app.py
│ │ ├── ...
│ │
│ ├── ...
│
├── frontend
│ │
│ ├── public
│ │ ├── fonts
│ │ │ ├── ...
│ │ ├── game
│ │ │ ├── ...
│ │ ├── icon
│ │ │ ├── ...
│ │ ├── img
│ │ │ ├── ...
│ │ ├── novel
│ │ │ ├── ...
│ │ ├── ...
│ │
│ ├── src
│ │ ├── api
│ │ │ ├── ...│
│ │ ├── components
│ │ │ ├── common
│ │ │ │ ├── ...
│ │ │ ├── game
│ │ │ │ ├── ...
│ │ │ ├── landing
│ │ │ │ ├── ...
│ │ │ ├── library
│ │ │ │ ├── ...
│ │ │ ├── login
│ │ │ │ ├── ...
│ │ │ ├── mypage
│ │ │ │ ├── ...
│ │ │ ├── novelintro
│ │ │ │ ├── ...
│ │ │ ├── novelread
│ │ │ │ ├── ...
│ │ │ ├── novelwrite
│ │ │ │ ├── ...
│ │ │ ├── payment
│ │ │ │ ├── ...
│ │ │ ├── search
│ │ │ │ ├── ...
│ │ ├── context
│ │ │ ├── ...
│ │ ├── hooks
│ │ │ ├── ...
│ │ ├── pages
│ │ │ ├── ...
│ │ ├── types
│ │ │ ├── ...
│ │ ├── App.css
│ │ ├── App.tsx
│ │ ├── App.test.tsx
│ │ ├── index.css
│ │ ├── index.tsx
│ │ ├── react-app-env.d.ts
│ │ ├── reportWebVitals.ts
│ │ ├── setupTests.ts
│ │
│ ├── ...
│
├── docs
│ ├── img
│ │ ├── ...
│ ├── ...
│
├── exec
│ │
│ ├── 포팅매뉴얼.md
│
├── README.md
├── ...