[1] 기획
- 만들 서비스를 구체화 시키고 이를 통해 성장하고자 하는 목표를 정하고 실제 서비스를 런칭하겠다는 마음으로 임하라
- 해당 서비스에 반드시 있어야만 하는 기능 정리하기
- 해당 기능들을 운영하기 위해서 어드민에 어떤 메뉴들이 필요한지 큰틀(1depth들 > 판매이력, 정산, 유저, 관리자 등...) 정하기
- 해당 메뉴들을 더 세분화해서 2depth 정하기
판매이력 > 제품판매 이력, 이벤트상품 판매 이력, 등...
- 해당 메뉴들을 더 세분화해서 3depth정하기
제품판매이력 > 목록페이지, 상세페이지, 수정페이지
- 각 페이지별로 필요한 기능 정하기
목록페이지 > 제품판매 전체목록 조회 기능, 검색 기능, 페이징 기능, 판매 이력 상세 조회 이동 기능 등...
- 개발 방식 선정하기
- 워터폴 or 에자일
- 워터폴 선정 시
- 기획에 필요한 문서들 정리하기
- 요구사항명세서, WireFrame, WBS, 기능정의서, 테이블정의서, API명세서, 단어사전 등에서 내가 사이드 플젝에서 반드시 필요하다고 생각되는 문서들은 정리하는 것도 좋음
- 있는 것과 없는 것은 큰 차이가 존재
- WBS가 산정되면 일정에 맞춰서 개발 진행
- 에자일 선정 시
- Sprint, Epic, Task, Backlog 만들기
- Sprint별 기간 선정
- 스프린트에서 구현할 서비스를 Epic으로 제작
- Epic을 만들기 위해 필요한 작업 내역 Task로 만들기
- 이번 Sprint 외에 구현해야 할 내용들이 생각나면 Back Log로 남기기
- Sprint 완료 후 feedback 진행
- 완료된 것들에 대한 내용을 Sprint Feedback 문서로 정리
- 미흡한 부분에 대한 내용들을 Back Log로 넘기기
- 다음 Sprint에서 진행할 Task를 Back Log 및 기획 내용을 보고 다음 Sprint에 Task로 등록 후 다시 Sprint 진행
- 이번 Sprint에서 특정 Epic 구현 완료 시 Epic에 대한 Feedback 진행
- 기존 내용에서 이슈가 있다면 이슈 내용 기입
- Back Log로 다른 작업을 진행해야 하면 Back Log에 내용 남기기
[2] 개발환경구성
- Language 및 Framework 선정 :
- Front
- Local, Dev, Prod 각 환경별 ENV 파일 구성
- 환경 결정 필요
- SPA로 제작 시 각종 Config 구현
- html, script, css를 통한 레거시 환경 개발 시 각각을 어떻게 관리할 것인지 고민 필요
- 위 환경 결정 시 적절한 가이드가 확보되기 어려우면 google에서 내가 구현하고 싶은 환경에 맞는 Boilerplate를 확인해보는 것도 방법
- Ex) Vue3 Boilerplate라고 검색하면 쫘라락 나오는 것을 확인 가능
- API
- Local, Dev, Prod 각 환경별 yml(java) 또는 properties(java) 또는 ENV(python) 파일 구성
- Filter
- jwt token 인증 서비스 구현(즉, 로그인 시 token 발급)
- 2FA 그러니까 Two-Factor(OAuth2) 인증 구현
- 로그인 시 2차 인증하는 로직 구현
- 요새는 password가 없어지는 추세 대신 2차 인증이 대두되고 있음
- Global Exception Handler
- 공통 ResponseDTO 제작
- API서버 통신 시 반드시 이 양식으로 Response가 Return되도록 공통 제작
- DB
- 개발 DB, 운영 DB 따로 구분하여 구성(운영은 나중에 배포하기 전에 만들면 됨)
- 배포 시 필요한 SQL문은 따로 모으기(각종 테이블관련 DDL문, 공통 테이블 Row Insert문, 최고 관리자 계정 Insert문 등 서비스를 운영하기 위해 최소한 필요한 데이터들의 Insert문)
- Infra 선정(혼자할 것이면 개발 완료 후 배포 전 고려할 내용)
- 개발과 운영을 어디서 할 것인지 구분 필요
- 개발환경은 굳이 트레픽을 고려해서 비싼돈 주고 안 해도 괜찮음
- 다만 추후 성능테스트(스트레스테스트)가 가능하도록 유연하게 변경할 수 있는 환경을 구성하는 것이 중요
- 대략적인 종류
- local PC
- NAS
- Cloud(추천 - 어차피 요새는 써봤는지 안 써봤는지 많이들 물어봄)
- 여러 업체에서 인정하는 Cloud Service = AWS but 굳이 그럴 필요는 없음(비싸)
- Asure나 Vultr 같은 것도 존재하니 여러가지 확인 후 선택
- Computing Service
- AWS EC2 같이 컴퓨팅 Spec을 고정하여 서버를 대여 방식
- AWS ECS 같이 사용한 만큼 비용을 지불하는 방식
(Docker 사용할 거면 이거 좋음 - 다만 좀 비쌈)
- CI/CD 툴 선정
- Cloud 사용 안 할 시 보통 Jenkins 사용
- Cloud 서비스들은 Github WebHook 지원하는 Pipeline들이 있을 것임
- Network 선정
- 도메인명 구매(1~2년에 2만원정도함)
- 레거시 Network 설정은 본인 경험이 전무함 AWS 기준으로 생각해보면 대략적으로 아래와 같음
- VPC
- Subnet
- Gateway 선택
- Router(Auto Scaling이 필요하냐 안 하냐에 따라 Router도 다르게 선정 필요)
- Fire Wall 설정
- Key관리 서버 또는 Secrets Manager 사용 고려
- 암호화 키를 보관하기 위해 어떤 식으로 처리할 것인지 결정 필요
- Docker를 활용한 Computing 환경 구성
- 본인 PC가 Linux환경이라면 필요 없을 수도 있지만 아니라면 Docker를 활용해 Linux환경에서 서버를 띄우는 경험을 해보는 것도 좋음
- 이는 Cloud 환경 또는 NAS 환경 등에서 용의하게 사용할 수 있음
[3] 다른 누가 시켜서 하는 것이 아니기 때문에 천천히 진행해도 꼼꼼하게 개발하자
- 이유있는 개발 진행하기
- 위에서 개발을 하기 위한 개발 방식을 선정하였으므로 우리는 이에 맞는 개발을 진행할 것이다
아무거나 막 만들고 싶다고 만들지 말고 철저하게 계획하고 만들어라
- Git Commit 시 명확한 근거를 가지고 Commit 하기
- 예를 들어 예자일 방식 선택 시 Task별 번호를 앞에 적어서 해당 Task를 처리하기 위해 작업했다는 이력을 남기는 것
- 즉, 난 이걸 걍 막한게 아니라 지금 계획하에 필요한 기능들을 제작 중이다 뭐 이런 느낌?
- 꾸준하게 하기
- 성과를 바로 못낼 수도 있고 이번주는 회사일이 바빠서 못했을 수도 있지만 포기하지 말기