안녕하세요 저는 테이스티팀의 백엔드 팀장 김지웅입니다. 이번 프로젝트에서 백엔드 파트를 맡은 팀원 및 역할 분배는 다음과 같습니다. 초기 프로젝트 환경을 구축하는데 있어서 가장 중요한 부분이 AWS를 활용한 개발 환경 구축 및 인증, 인가와 관련된 처리였기에 이 두 가지 작업을 위주로 하여 역할을 분배하였습니다.
프로젝트 시작 초기에는 기술 스택 및 프로젝트와 관련된 컨벤션을 정하였습니다. 어떤 기술을 사용할지 버전은 어떤 것을 사용할지에 대해 멘토님의 조언을 받아 결정하였고 구글에서 제공하는 자바 코딩 컨벤션을 사용하기로 결정했습니다. 이 과정에서 플러그인 중 하나인 CheckStyle을 도입하여 메인 소스코드와 테스트 코드에 작성된 코드들이 코딩 컨벤션에 맞는지 검사할 수 있도록 하여 팀원간 코드 스타일의 차이를 줄여 통일성 있는 코드를 작성했습니다. 이후에는 CI/CD 파이프라인 구축 및 프로젝트 인프라 셋팅을 하였고 기획서를 기반으로 ERD 설계 및 엔티티 모델링을 수행하였습니다.
이후에는 메뉴, 사용자 도메인 API 개발 및 문서화를 진행하였고 이후 핵심 도메인인 댓글과 검색 API를 개발하였습니다. 각 핵심 도메인의 API를 개발하여 Restdocs를 통해 문서화를 진행하였고 테스트 코드를 작성하였습니다. 각 핵심 도메인의 기능을 개발한 뒤에는 테스트 코드로 성공 케이스와 다양한 실패 케이스를 작성하였습니다.
그 다음 기간에는 리팩토링 및 API 고도화작업을 거쳤으며 클라이언트에서 요청하는 변경 요청 사항에 따라 API를 수정하고 서버에서 발생한 이슈 및 에러에 대응하는 기간을 거쳤습니다.
사용한 기술 스택은 다음과 같습니다. 스프링5를 위주로 스프링과 관련된 하위 프로젝트인 스프링부트, 스프링 시큐리티, 스프링 데이터 JPA, 스프링 RestDocs를 선정하였고 데이터베이스는 MySQL을 사용했습니다. 또한 동적 쿼리를 보다 수월하게 작성하기 위하여 QueryDSL을 도입하였고 빌드툴로는 그래들을 사용했습니다. AWS에서 제공하는 서비스 중에서는 EC2와 S3, Code Deploy와 RDS를 사용하였습니다. 또한 각 패키지 및 도메인 별 테스트 커버리지를 확인하기 위해 Jacoco를 도입했습니다.
다음은 저희 팀에서 구축한 CI/CD 파이프라인과 운영환경입니다. Git-flow 브랜치 전략을 도입함에 따라 각 feature 브랜치에서 기능 작성을 수행한 후 develop 브랜치에 PR을 보내게 되면 깃 허브 액션을 이용하여 빌드 및 테스트를 수행한 뒤 이를 압축하여 S3에 전송하고 전송된 압축 파일을 Code Deploy에서 EC2에 배포 요청을 하면 EC2 서버에서 jar 파일을 실행하여 프로젝트를 배포하였습니다.
운영 환경에서는 EC2 내부에서 도커 컨테이너를 사용하여 MySQL을 사용할 수 있도록 하여 운영 시 사용하는 데이터베이스인 RDS/MySQL과 환경을 동일 시 하여 개발 및 테스트 환경과 실제 운영환경에서 데이터베이스의 차이로 인해 발생할 수 있는 문제들을 방지하였습니다. 또한 이미지 업로드 기능이 필요한 도메인에서는 S3 파일 업로드 서비스 기능을 작성하여 해당 요청 파일들을 수월하게 관리할 수 있도록 하였습니다.
기획서를 기반으로 총 9개의 테이블 및 핵심 도메인을 도출하였습니다. 메뉴와 사용자 계정이라는 두 가지 핵심 도메인을 축으로 하여 어떤 기능이 작성될 지를 한 눈에 알아 볼 수 있습니다.
다음은 백엔드 협업 방식입니다. Github Issue를 적극적으로 사용하여 이슈 단위로 작업을 진행하였고 PR의 번호는 각 이슈에 배정된 번호를 기준으로 생성하였습니다. 모든 팀원들이 서로의 코드를 볼 수 있도록 이슈 번호를 팀원의 숫자로 나눈 나머지로 하여 리뷰어를 지정하였고 지정된 리뷰어가 남긴 코멘트를 반영하면 어프루브를 받아 디벨롭 브랜치로 머지할 수 있게 하여 잘못 작성된 코드가 디벨롭 브랜치에 반영될 수 있는 가능성을 최소화 하였습니다.
그 다음으로는 서버 모니터링 방식에 대해서 소개하겠습니다. EC2에 배포된 서버에서 발생하는 문제를 슬랙으로 받아볼 수 있게끔 하여 발생된 문제에 대해 신속에서 대처할 수 있도록 하였습니다.