DelFood 서버(CI/CD서버를 포함한 모든 서버)는 비용 문제로 2020-04-23일 이후로 비활성화하였습니다.
DelFood
전국에 있는 배달음식점과 소비자를 연결하는 중개 플랫폼 서버 입니다.
Rest API형 서버로써 클라이언트는 프로토타입으로 제작하여 서버 공부에 좀 더 집중할 수 있도록 하고 있습니다.
자세한 구현 내용은 PR에서 확인하실 수 있습니다. Business Rule, 기술적인 문제에 대한 해결 방법은 WIKI에서 확인할 수 있습니다.
프로젝트의 전체적인 구조
- github hook을 받아 Jenkins에서 CI/CD를 진행합니다.
- 모든 서버는 Naver Cloud Platform에 올라가 있습니다.
- 구동중인 서버 : Main Delfood Server, Redis Server, MariaDB Server
- public IP는 Main Server에만 할당되어 있습니다.
프로젝트의 주요 관심사
공통사항
- 지속적인 성능 개선
- 나쁜 냄새가 나는 코드에 대한 리팩토링
코드 컨벤션 - Google code Style을 준수
- STS Check Style 플러그인을 적용하여 코드 컨벤션을 유지
- 링크 https://google.github.io/styleguide/javaguide.html
성능 최적화 - 서버 부하를 줄이기 위해 캐싱 서버 적극 활용
- DB서버와의 통신을 최소화(당연한 이야기지만 N+1 쿼리를 지양)
- 인덱스와 쿼리 튜닝을 활용
- 비동기를 활용하여 빠른 시간 내에 외부 API 호출
그 외 - Project Wiki를 참고해주세요!
브랜치 관리 전략
Git Flow를 사용하여 브랜치를 관리합니다.
모든 브랜치는 Pull Request에 리뷰를 진행한 후 merge를 진행합니다.
메인 브렌치인 Develop에는 아직 많은 내용이 merge되지 않았습니다. 현재 개발 진행사항을 확인하고 싶다면 PR를 확인해주세요.
DelFood PR : https://github.com/f-lab-edu/food-delivery/pulls
- Master : 배포시 사용합니다. 아직 배포단계에 이르지 않아 Master 브랜치에 내용이 없습니다.
- Develop : 완전히 개발이 끝난 부분에 대해서만 Merge를 진행합니다.
- Feature : 기능 개발을 진행할 때 사용합니다.
- Release : 배포를 준비할 때 사용합니다.
- Hot-Fix : 배포를 진행한 후 발생한 버그를 수정해야 할 때 사용합니다.
브랜치 관리 전략 참고 문헌 - 우아한 형제들 기술 블로그(http://woowabros.github.io/experience/2017/10/30/baemin-mobile-git-branch-strategy.html)
- Bitbucket Gitflow Workflow(https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow)
테스트
- Mockito Framework를 활용하여 고립된 테스트 코드를 작성
- Jenkins CI를 적용하여 테스트 자동화
- 협업하는 동료의 소스코드에 서로 테스트코드를 작성하여 서로의 소스코드를 알 수 있도록 하고 있습니다.
성능 테스트
NGrinder를 설치하여 테스트하고있습니다.
사용 기술 및 환경
Spring boot, Maven, Mybatis, Redis, Docker, MariaDB, Jenkins, Java8, Naver Cloud Platform
Wiki
https://github.com/f-lab-edu/food-delivery/wiki
Wiki에 기술 이슈에 대한 고민과 해결 방법을 포스팅한 개인 블로그의 url이 포함되어있습니다.
CI
Jenkins : 서버 운영을 종료하였습니다.
Naver Cloud Platform(Cloud server)를 사용하고 있습니다.
PR시마다 자동 Build 및 Test 적용
비로그인 상태로도 확인이 가능합니다.
CD
Docker 이미지를 제작하여 배포합니다.
CI 서버에서 빌드 완료시 Shell script가 작동하여 빌드된 이미지가 docker hub에 저장됩니다.
Push 완료시 Delfood 메인 서버에서 docker hub에 올라간 이미지를 받아 실행시킵니다.
## Database - MariaDB
cafe24 web hosting 서비스를 사용하고 있습니다. - Redis
docker 컨테이너를 사용하고 있습니다.
화면 설계
kakao oven - https://ovenapp.io/view/OI44WSGwSZRSMcyiveGcSWGvw38YKizI/bco8b