[1] 기획

  1. 만들 서비스를 구체화 시키고 이를 통해 성장하고자 하는 목표를 정하고 실제 서비스를 런칭하겠다는 마음으로 임하라
  2. 해당 서비스에 반드시 있어야만 하는 기능 정리하기
  3. 해당 기능들을 운영하기 위해서 어드민에 어떤 메뉴들이 필요한지 큰틀(1depth들 > 판매이력, 정산, 유저, 관리자 등...) 정하기
  4. 해당 메뉴들을 더 세분화해서 2depth 정하기 판매이력 > 제품판매 이력, 이벤트상품 판매 이력, 등...
  5. 해당 메뉴들을 더 세분화해서 3depth정하기 제품판매이력 > 목록페이지, 상세페이지, 수정페이지
  6. 각 페이지별로 필요한 기능 정하기 목록페이지 > 제품판매 전체목록 조회 기능, 검색 기능, 페이징 기능, 판매 이력 상세 조회 이동 기능 등...
  7. 개발 방식 선정하기
    1. 워터폴 or 에자일
    2. 워터폴 선정 시
      1. 기획에 필요한 문서들 정리하기
      2. 요구사항명세서, WireFrame, WBS, 기능정의서, 테이블정의서, API명세서, 단어사전 등에서 내가 사이드 플젝에서 반드시 필요하다고 생각되는 문서들은 정리하는 것도 좋음
        1. 있는 것과 없는 것은 큰 차이가 존재
        2. WBS가 산정되면 일정에 맞춰서 개발 진행
    3. 에자일 선정 시
      1. Sprint, Epic, Task, Backlog 만들기
        1. Sprint별 기간 선정
        2. 스프린트에서 구현할 서비스를 Epic으로 제작
        3. Epic을 만들기 위해 필요한 작업 내역 Task로 만들기
        4. 이번 Sprint 외에 구현해야 할 내용들이 생각나면 Back Log로 남기기
        5. Sprint 완료 후 feedback 진행
          1. 완료된 것들에 대한 내용을 Sprint Feedback 문서로 정리
          2. 미흡한 부분에 대한 내용들을 Back Log로 넘기기
          3. 다음 Sprint에서 진행할 Task를 Back Log 및 기획 내용을 보고 다음 Sprint에 Task로 등록 후 다시 Sprint 진행
          4. 이번 Sprint에서 특정 Epic 구현 완료 시 Epic에 대한 Feedback 진행
            1. 기존 내용에서 이슈가 있다면 이슈 내용 기입
            2. Back Log로 다른 작업을 진행해야 하면 Back Log에 내용 남기기

[2] 개발환경구성

  1. Language 및 Framework 선정 :
    1. Front
      1. Local, Dev, Prod 각 환경별 ENV 파일 구성
      2. 환경 결정 필요
        1. SPA로 제작 시 각종 Config 구현
        2. html, script, css를 통한 레거시 환경 개발 시 각각을 어떻게 관리할 것인지 고민 필요
      3. 위 환경 결정 시 적절한 가이드가 확보되기 어려우면 google에서 내가 구현하고 싶은 환경에 맞는 Boilerplate를 확인해보는 것도 방법
        1. Ex) Vue3 Boilerplate라고 검색하면 쫘라락 나오는 것을 확인 가능
    2. API
      1. Local, Dev, Prod 각 환경별 yml(java) 또는 properties(java) 또는 ENV(python) 파일 구성
      2. Filter
      3. jwt token 인증 서비스 구현(즉, 로그인 시 token 발급)
      4. 2FA 그러니까 Two-Factor(OAuth2) 인증 구현
        1. 로그인 시 2차 인증하는 로직 구현
        2. 요새는 password가 없어지는 추세 대신 2차 인증이 대두되고 있음
      5. Global Exception Handler
      6. 공통 ResponseDTO 제작
        1. API서버 통신 시 반드시 이 양식으로 Response가 Return되도록 공통 제작
    3. DB
      1. 개발 DB, 운영 DB 따로 구분하여 구성(운영은 나중에 배포하기 전에 만들면 됨)
      2. 배포 시 필요한 SQL문은 따로 모으기(각종 테이블관련 DDL문, 공통 테이블 Row Insert문, 최고 관리자 계정 Insert문 등 서비스를 운영하기 위해 최소한 필요한 데이터들의 Insert문)
  2. Infra 선정(혼자할 것이면 개발 완료 후 배포 전 고려할 내용)
    1. 개발과 운영을 어디서 할 것인지 구분 필요
      1. 개발환경은 굳이 트레픽을 고려해서 비싼돈 주고 안 해도 괜찮음
      2. 다만 추후 성능테스트(스트레스테스트)가 가능하도록 유연하게 변경할 수 있는 환경을 구성하는 것이 중요
    2. 대략적인 종류
      1. local PC
      2. NAS
      3. Cloud(추천 - 어차피 요새는 써봤는지 안 써봤는지 많이들 물어봄)
        • 여러 업체에서 인정하는 Cloud Service = AWS but 굳이 그럴 필요는 없음(비싸)
        • Asure나 Vultr 같은 것도 존재하니 여러가지 확인 후 선택
    3. Computing Service
      1. AWS EC2 같이 컴퓨팅 Spec을 고정하여 서버를 대여 방식
      2. AWS ECS 같이 사용한 만큼 비용을 지불하는 방식 (Docker 사용할 거면 이거 좋음 - 다만 좀 비쌈)
    4. CI/CD 툴 선정
      1. Cloud 사용 안 할 시 보통 Jenkins 사용
      2. Cloud 서비스들은 Github WebHook 지원하는 Pipeline들이 있을 것임
    5. Network 선정
      1. 도메인명 구매(1~2년에 2만원정도함)
      2. 레거시 Network 설정은 본인 경험이 전무함 AWS 기준으로 생각해보면 대략적으로 아래와 같음
        1. VPC
        2. Subnet
        3. Gateway 선택
        4. Router(Auto Scaling이 필요하냐 안 하냐에 따라 Router도 다르게 선정 필요)
        5. Fire Wall 설정
    6. Key관리 서버 또는 Secrets Manager 사용 고려
      1. 암호화 키를 보관하기 위해 어떤 식으로 처리할 것인지 결정 필요
  3. Docker를 활용한 Computing 환경 구성
    1. 본인 PC가 Linux환경이라면 필요 없을 수도 있지만 아니라면 Docker를 활용해 Linux환경에서 서버를 띄우는 경험을 해보는 것도 좋음
    2. 이는 Cloud 환경 또는 NAS 환경 등에서 용의하게 사용할 수 있음

[3] 다른 누가 시켜서 하는 것이 아니기 때문에 천천히 진행해도 꼼꼼하게 개발하자

  1. 이유있는 개발 진행하기
    1. 위에서 개발을 하기 위한 개발 방식을 선정하였으므로 우리는 이에 맞는 개발을 진행할 것이다 아무거나 막 만들고 싶다고 만들지 말고 철저하게 계획하고 만들어라
  2. Git Commit 시 명확한 근거를 가지고 Commit 하기
    1. 예를 들어 예자일 방식 선택 시 Task별 번호를 앞에 적어서 해당 Task를 처리하기 위해 작업했다는 이력을 남기는 것
    2. 즉, 난 이걸 걍 막한게 아니라 지금 계획하에 필요한 기능들을 제작 중이다 뭐 이런 느낌?
  3. 꾸준하게 하기
    1. 성과를 바로 못낼 수도 있고 이번주는 회사일이 바빠서 못했을 수도 있지만 포기하지 말기