요구사항 - boostcamp-2020/IssueTracker-13 GitHub Wiki
요구사항
팀 요구사항
- 팀 전체의 활동을 위한 그라운드 룰을 정한다.
- 웹프론트/웹백엔드/모바일 저장소를 폴더로 구분하고, 팀에서 브랜치 관리 규칙을 정한다.
- 개발용 브랜치를 정해서 작업하고, 브랜치 내용을 readme 문서에 기록한다.
- 팀 전체가 협업해서 기획서 요구사항을 분석한다.
- 웹 백엔드, 프론트엔드 또는 앱 분야별 기능 요구사항 목록은 구글 스프레드시트나 위키에 통합해서 정리한다.
- 전체 기능 목록을 매주 단위 마일스톤으로 구분하고, 기능 목록을 각자 할 일 단위로 쪼개서 관리해야 한다.
- 해야 할 일, 하고 있는 일, 완료한 일을 시각화하기 위해서 깃헙에 있는 이슈관리, 프로젝트 도구를 활용한다.
프로젝트 협업 요구사항
- 프로젝트 협업은 짝 프로그래밍만 하는 게 아니다. 서로 어떻게 협업할 것인가 상의한다.
- 웹 또는 앱 분야 끼리는 협업 포인트를 만들어야 한다. 화면 단위 혹은 폴더, 기능 단위로 나눠서 분업하지 않아야 한다.
- 같은 분야 페어는 반드시 마일스톤 혹은 화면 단위로 협업하고 완성하고 난 이후 다음 단계(화면)를 진행한다.
- 더 이상 나눌 수 없는 작은 작업 단위로 할 일(TASK)을 나누고, TASK 단위로 분업한다.
- 만약 할 일을 작게 나누기 어렵거나 우선순위, 의존성이 있는 작업은 짝 프로그래밍을 권장한다.
- 할 일(TASK)을 나누는 것은 매일 혹은 마일스톤 시작 시점마다 진행한다. 프로젝트 초반에 3주 동안의 모든 할 일을 나누지 않아도 된다.
- 할 일 목록을 이슈로 등록하고 담당자가 관리한다.
Front-End
- React framework 기반으로 개발한다.
- 웹팩, 바벨설정을 직접 한다 (CRA등을 사용할 수 없다)
- 모든 React 컴포넌트 형태는 클래스 형태가 아니고, 함수 형태로 개발한다.(functional component)
- 상태 관리가 필요한 경우 useState 를 사용해서 관리한다.
- 스타일작업은 'css in js' 방식의 라이브러리를 사용한다.
- Routing
- React-router 라이브러리를 활용해서 주요 페이지에 대해서 routing처리를한다.
- 상태관리
- 상태관리는 Context API와 useState, useReducer를 활용한다 (Redux, Mobx 등 사용안함)
- action, reducer 부분을 별도 파일로 분리해서 관리하도록 한다.( 두 개는 한파일에 있어도 됨)
- reducer 함수는 순수함수로 만들어야 한다.
- reducer 함수에서 데이터 변경방식은 immutable 방식으로 처리해야 한다.
- 복잡한 상태변경 작업이 있다면, pipe, compose 방식의 함수형프로그래밍 기법을 활용해본다.
- 글자수 체크 구현은 커스텀 hook으로 개발
- debounce 기술활용(throttle 과의 차이에 대해서 학습)
- (선택)테스트코드
- useReducer 부분 또는 view component를 Jest를 활용해서 컴포넌트 단위에 대한 테스트를 진행한다.
Back-End
- 프론트엔드 및 모바일 기획서의 내용을 참고하여 개발한다.
- Node.js를 사용한다.
- MySQL을 사용한다.
- MySQL2를 사용할 경우 커넥션 풀과 mysql2/promise를 사용한다.
- [선택] Sequelize 등의 ORM을 사용해도 무방
- 프론트 및 모바일에서 필요한 API를 제공한다.
- Oauth의 동작방식을 학습하고 GitHub OAuth 연동이 되도록 구현한다.
- 다양한 방법을 사용해서 본문검색 기능을 구현해 본다.
iOS
- 모바일 기획서
- 기획서 내용을 보고 판단해서 어떤 뷰로 표현할지 결정한다.
- 이슈, 레이블, 마일스톤 화면은 TableView 대신 CollectionView를 활용한다.
- 테스트 가능한 구조를 만들고, 테스트 코드로 코드 커버리지를 높여야 한다.
- 기술적인 선택을 하는 경우는 장단점을 비교하거나 근거 자료를 함께 첨부하는 것도 좋다.
- 오픈소스를 패키지로 가져와서 활용해도 된다. 다만 오픈소스 라이센스를 표시하는 화면도 넣는다.
- 팀별로 매주 기술적인 도전꺼리를 구체적으로 1개씩 정합니다.
- 예) 다크모드를 지원하고, 자연스러운 애니메이션 효과를 적절하게 도입하겠다.
- 예) 코드스타일을 정하고, 클린 코드와 리팩토링에 집중해보겠다.
- 예) 직접 커스텀 뷰를 만들고 뷰 재사용을 위해서 다양한 방법을 도입하겠다.