brunch

You can make anything
by writing

C.S.Lewis

by 스티브 Dec 16. 2019

팀 프로젝트 설계 2-서버 개발

서버 개발 참여

이번 프로젝트에서 나의 메인 역할은 프로젝트를 관리 하는 PM 역할 이었다. 하지만 다른 팀원과 더불어 서버 개발에도 참여 했다. 개발에 직접 참여 하면서  프로젝트 진척 상황을 지켜봐야 한다고 생각했기 때문이다. 그래서 러닝 커브를 줄일 수 있는 서버 개발분야에 참여했고, 매주 할당된 아웃풋에 기여 하였다. 그래서 서버 개발 분야에서 협업을 위해 논의하고 진행했던 사항들을 나열해보고자 한다.


코드 컨벤션 정의

개발 협업을 할 때 중요한 것 중 하나가 바로 코드의 일관성이라고 생각한다. 모든 사람이 본인과 동일한 소스 코드 패턴으로 개발한다면 본인의 스타일이 곧 규칙이기 때문에 문제가 되지 않는다. 그러나 두 명만 같이 일을 하게 되더라도 서로의 개발 스타일이 달라 다른 사람의 코드를 이해하는데 있어서 어려움을 겪는 일이 자주 발생하곤 한다. 그렇기 때문에, 일정한 규칙을 정해보기로 했고, 이러한 규칙으로 인해 코드 1페이지를 읽는데 1초라도 생각을 줄일 수 있다면 충분한 가치가 있다고 본다.

서버 개발에 앞서 아래와 같은 규칙들에 대해서 먼저 정의 하였다.   

함수, 변수, 클래스, 파일, 디렉토리 이름 규칙 정의

소스 코드 구조에 대한  정의


git 규칙   

각 팀원은 자신의 브랜치를 생성하고 소스 코드 개발 진행

작업이 완료된 브랜치는 매주 마스터에 Merge 진행

핫픽스, 간단한 디버그는 브랜치 없이 마스터에서 바로 커밋

merge 도중 conflict 발생시 conflict를 어떻게 처리했는지 commit 메세지에 기록을 남긴다.

매주 백엔드 회의시 코드 리뷰를 진행.


서버 인프라 구축

서버 구축을 위한 모든 인프라는 AWS 서비스 내에서 해결 하였다. 그리고 러닝커브, 서버 관리 최소화, 비용 측면에서 고려하여 다음과 같은 선택을 했다.


데이터 베이스 : RDS - MySQL


MySQL의 경우 참여한 개발자 모두 사용해본 경험이 있고 레퍼런스가 많기 때문에 단시간에 개발 하기에는 적합한 기술이라고 판단했다. 또한 서버 쪽에서 Lambda 와 Node.js 프레임워크 기술에 대한 학습이 필요한 인원이 있었기에 새로운기술을 시도해보기에는 부담을 크게 줄 것이라고 판단했다. 그리고 AWS의 RDS 는 데이터베이스 설정 변경, 백업 및 복구를 관리하는 측면에서 간편하다. AWS 콘솔 웹 페이지내에서 모든 부분을 설정 할 수 있기 때문에, 더 직관적으로 관리 할 수 있다는 장점이 있다.


HTTP, Socket 서버 구성: Lambda + API Gateway +Serverless framework


Lambda + API Gateway는 HTTP, Socket API 를 개발하기 위한 인프라로 사용하였다. 위 기술의 경우 EC2와는 달리 서버 운영에 대한 비용이 들지 않는다. EC2는 구축하고 이를 켜놓은 상태면 서비스 시간에 비례하여 요금이 부과되기 때문에 고정비용이 발생한다. 이에 반해 람다는 람다 내 구축된 함수를 클라이언트에서 호출할 때마다 사용되기 때문에 고정비용 없이 사용할 수 있다. 따라서 서비스 초기에 트래픽이 적은 상황이라면 람다가 훨씬 더 많은 비용을 아낄 수 있다. 그래서 서버 개발 팀원 1명을 제외하고는 처음 사용한 기술임에도 불구하고. 이에 대한 학습을 진행하면서 인프라를 구축하였다.


Serverless framework

Lambda 의 경우 개발 환경에서 서비스 환경으로 배포하는데 있어서 설정해야할 사항도 많고, 복잡도가 조금 있다. Serverless framework 는 이를 조금더 간편하게 해주는 역할을 한다. 로컬 환경에서 위의 프레임워크를 설치하고 간단한 명령을 통해 람다 함수를 배포하고 테스트 해볼 수 있다.


서버 프레임워크 - Node.js


Node.js 의 경우 자바스크립트 기반으로 되어 있어, 기술에 대한 진입장벽이 상대적으로 낮은 편이다. 서버 개발 팀원의 경우 2명이 Node.js 기반으로 회사에서 서비스를 하고 있고, 상대적으로 러닝커브가 짧은 Node.js를 선택했다.  개인적으로 내가 여태 사용해본 다른 언어(Java, PHP, Go )에 비해서는 쉬운 편이었다고 생각이 든다. 물론 자바스크립트라는 언어도 서비스의 복잡도가 증가할 수록  어려운 면도 있지만, 새롭게 배워야 한다고 했을 때는 레퍼런스도 많고 문법 자체가 심플하기 때문에 괜찮은 선택이라고 생각한다.


작가의 이전글 팀 프로젝트 설계 1- 문서관리
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari