백엔드 발표 내용 정리
4_7__.pdf
vllo.mov
- MVP
- 추가적으로 환경 구축 및 회원 관련 기능은 함께 진행하였다.
- 기술 스택
- 채팅 서버(Node.js)와 스터디 매칭 서버(Spring)를 분리하여 구축하였다.
- 채팅 기능이 필요한 시점에 채팅 서버와 연결시키는 방식으로, 다음과 같은 기술 스택을 사용하였다.
- 개발환경 구성도
- 주로 보여지는 Spring 서버는 다음과 같은 구성도를 갖는다.
- EC2 프리티어를 두개 사용하여, 한개(Host1)은 CI/CD용 Jenkins 서버 및 테스트 서버로, 다른 한개(Host2)는 배포용 서버로 사용중이다.
- DB는 RDS의 MySQL을 사용하고 있다.
- DB 스키마
- DB 스키마는 다음과 같다.
- 다양한 기능을 구현하다 보니, 생각보다 무척 복잡한 DB 구조를 갖게 되었고, 향후 NoSQL의 사용이 더 효율적인 부분을 구분하여, DB를 분리 및 재구성하고자 한다.
- 촉박한 개발기간
- 개발기간이 무척 촉박했기 때문에, 요구사항 명세서 직전까지는 변하지 않을 기능인 회원가입 및 게시글 작성의 프로토타입을 개발해 두었다.
- 이후 요구사항 명세서가 작성 된 뒤, 우선순위가 높은 순으로 API를 개발하기 시작했다.
- 이후 화면 디자인 및 프론트엔드 개발에 맞춰. 부족한 부분 및 적용시 에러사항을 고치며 유지보수를 진행했다.
- DB 서버 분리로 인한 데이터 이분화
- 단일 서버일 경우 서버의 부담이 심할 것을 우려하여, 채팅 서버와 스터디 서버를 나누게 되었다.
- 이에 사용자 데이터의 관리 및 스터디와 그룹 채팅의 정보를 동기화 시키기기 위해 양 서버간 API를 통해 데이터 동기화를 진행하고 있다.
- 같은 대칭키를 사용한 JWT를 사용하며 허가되지 않은 접근을 제어하고 있다.
- CI / CD 환경구축
- 서버의 다운타임 최소화 및 보안을 위해 Jenkins의 여러 기능을 학습하고, 배포 서버에, NGINX를 함께 사용하며 배포를 자동화 하게 되었다.
- 다양한 기능
- 서비스의 기능이 무척 많아, 50개 가량 기능을 제공하는 API를 제작하며, 코드가 방대해지며, 코드들도 수정하는 과정에 있어서 어려움을 느꼈다.
- 이를 통해 팀 프로젝트에서의 코드 리뷰 및 코드 리펙토링의 필요성을 느낄 수 있었다.
사용 스택
CI/CD : Jenkins
Server : EC2, RDS
통신 : NGINX [HTTPS], REST API[Swagger]
프레임 워크 : Spring Boot
보안 : Spring Security, JWT
DB : MySQL