1️⃣ 팀 프로젝트 어려운 점은 무엇이 있나요? 모아주세요!
오늘 백엔드+프론트 데브코스가 모여 프로젝트 의논하는 걸 보고 둘러보며 몇 가지 관찰되었습니다.
- (백둥이 기준) 배운 것처럼 자기소개, 개발 룰, 기능 명세, 스펙 등을 잘 정리하며 진행되는 팀도 있고,
- 서로 교착상태(DeadLock)이 되면서 진행에 어려움을 느끼는 팀들도 보입니다. 예시를 들면
- FE : 백엔드가 어떻게 구성되어있는지 모르니 어떻게 요청드려야할 지 모르겠다.
- BE : 프론트 파트에서 기능명세서를 주셔야 우리가 도와드릴 수 있을 것 같다.
이런 상황을 보고 (실제로 회사에서 같이 협업하시는) 우리의 백엔드 규현 멘토님과 프론트 지은 멘토님과 'FE+BE 플젝 첫 시작을 어떻게 풀면 좋을지?' 에 대해 가볍게 제시해주는 얘기를 나눠보기로 했습니다. 일정 상 특강을 잡긴 힘들 것 같아 녹화하여 전달드리겠습니다.
해서, 백둥이 프롱이가 프로젝트 시작에 어려움을 겪고있는 부분을 Slido에 모아주세요.
2️⃣ 아래엔 백엔드의 플랜비 리더와 함께하였던 내용을 떠올려보며, 팀프로젝트 초기에 신경써야 할 부분을 나름대로 간추려 보았습니다. 적다보니 길어졌는데 그래도 한 번 읽어보고 생각해보면, 백둥이 프롱이 여러분의 인사이트가 성장할 것 같습니다
팀결성
- 인사합시다!
- 교육 과정 전엔 뭘했었는지. 내가 쓴 글 TMI는 뭐가 있는지. 서로 Github, SNS 구경하기 등
- 팀원 간의 마인드를 파악하기
- 프로필은 알기 쉽지만, 마인드는 알기 어려워요.
- 내가 가장 재밌게 읽었던 글이나 comment 공유하기
- 예시 : 나는 어떻게 더 나은 프로그래머가 되었는가 - 번아웃을 한 번 겪고 나서, 압박과 부담을 떨쳐내고 싶다는 생각을 했어요!
- 팀장이 있기로 결정했다면 생각해볼 수 있는 팀장 기준(예시) 과 앞으로 팀장(PO)가 해야할 일 생각해보기
- 의견 충돌이 있을 때 누가 가장 중재를 잘 해줄까?
- 기술적으로 뛰어난 편인가?
- 어떤 기술에 특히 편향적이지 않고 이성적으로 생각하는가?
- 이 프로젝트에 진심인가?
- 말주변이 있는지 (어디 가서 프로젝트 소개도 하고, 발표를 하게 될 수도 있으니)
- 팀장 일을 하느라 코딩을 덜 하게 되어도 괜찮을까
프로젝트 이해하기
- 프로젝트의 이름(한국어명, 영문명)
- 프로젝트에 대해 정의하기
- 5문장/3문장/1문장으로 정의해보기
- 비슷한 서비스는 무엇이 있었고, 무엇을 배울 점이 있었고, 우리는 어떤 차별 점을 가져갈지
- 어떤 기능이 핵심 기능인지, 어떤 사람들이 사용할지
- 기능마다 화면은 어떻게 생겼을지 스케치 해보고, 동료들과 비교하기
- 프로젝트 더 깊게 상상하기
- 사용자의 어떤 action에 API call이 일어날지 -> 그 API spec은 어떻게 만들어져야할 지
- DB 테이블은 어떻게 디자인되면 좋을지
- 대략 코드가 어떻게 설계되면 좋을 지 스케치 -> 버그가 생길 수 있는 포인트 추측해보기
- 파생되는 기능은 무엇이 있을 지
- 피드백 해보기
- 구현이 어렵거나 오래걸릴 기능에 대해 어떻게 대처할 지
- Linear하게 늘어나는 데이터는 어떻게 표현할지, 페이지에서의 response size와 DB에서 limit는 어떻게 할지
- 검증 작업(validation)이 필요한 부분은 어디가 있을지
- 악의적 사용 막기, 데이터 일관성 확보(01012345678, 010-1234-5678)
- 실제 사례 : 2020 수능 성적 미리 확인
- 보안상 위험한 UX는 없을까? + reat limiting
- 로그인 시도 회수 제한, '비밀번호가 틀렸습니다'일 경우 id는 맞다는 게 확인됨 등
- 이메일 인증 방식, 소셜 계정 연동, 보안 코드(reCaptcha)
- 어떤 행동을 재시도하는데 필요한 타임 정책(SMS 인증 등) -> 불필요한 지출과 로드 제거
프로젝트 준비 과정
- Github 세팅
- repository 생성
- 작업 방식에 대한 의사결정
- 작업 관리에 대해서 어떻게 할건지. JIRA, Github Project+Issues, Notion, Trello, Asana
- 작업관리에 보편적이고 팀이 익숙한/원하는 기능이 있는지
- 작업별 assign, due, 우선순위 관리, 칸반 보드 등
- branch protection, forking workflow 중 어떤 방식으로 할 것인지.
- PR, Merge. 코드리뷰는 어떻게 진행할 건지
- 기술적인 의사결정
- API 디자인은 REST(대체로 정답), GraphQL 로 할 건지
- API 에서 사용할 데이터 직렬화 포맷은 XML, YAML, JSON(대체로 정답) 에서 무엇을 할지
- ArrayList, Map 등은 JAVA만 알아들을 수 있음. 다른 런타임에서도 알아들을 수 있는 형태로 약속해야함
- 기술 스택은 어떤지
- 완성후 이 프로젝트 어떤 기술스택이에요? 란 질문을 역으로 거슬러보면 쉬울수도...
- 팀에 익숙한지, 익숙하지 않다면 러닝커브를 감당할 수 있는지, 같은 과제를 해결하는 데에 지금도 일반적으로 사용되는 기술인지..(=구시대 기술은 아닌지)
- 인프라는 어떤 것을 할지(데브코스는 AWS 중 EC2 인스턴스만 지원 예정)
- DB는 RDB? NoSQL?