실제 현업에서 개발프로젝트를 진행하는 부분들을 작은 마이크로 단계로 나누고, 해당 단계에서 학습자 관점에서 필요한 정보 및 목표 도달 지점들을 정리 하였습니다.

일반적인 교육기관에서는 각 단계 진행시 필요한 선수지식등을 함께 공부 하도록 가이드 하는것이 학습자가 빠르게 성장하는데 도움을 줍니다.

각 단계 진행시 스프린트 방식으로 명확한 기간과 아웃풋을 명시 하고 시작합니다.

현업에서 일정이라는 부분이 틀어 지게 되면 , 아주 큰 금전적인 손해가 발생 하는 부분을 명시 해 줍니다. 학습자들은 프로젝트 진행시 해당 부분을 명확히 하여, 현업과 동일한 환경에서 모든 생각과 행동을 하도록 학생이 아닌 직장인으로 프로젝트를 할 수 있도록 가이드 합니다.

우당탕탕개발기, 하계인턴들의 경험기.. 등을 참고 해 보시면 됩니다.
모두 아래와 같은 단계로 코칭된 결과들 입니다.

0.기본적인 인덱스는 다음과 같습니다.

  1. 문제정의 ( 요구사항 분석 )
  2. 문제별 해결 시퀀스 정의
  3. 시퀀스 다이어그램 작성 & phase-0 작성
  4. 개발 환경 구성하기
  5. 코딩컨벤션 제작
  6. 집중코딩시간
  7. 코드리뷰 & 점검
  8. 집중코딩시간
  9. 코드리뷰 & 리팩토링
  10. QA
  11. 배포단계 & 오픈
  12. 전체리뷰

각 단계별로 의미 / 결과물 / 실행방법 / 학습 목표 라는 부분으로 정리를 하였습니다.

서비스 개발을 진행하면서 개발팀별로 각 단계가 스킵되는 경우도 있습니다.
혹은 기존에 프레임워크에 맞게 시퀀스 개발 방법이 정형화 되어 있는 경우도 있습니다.
일반적인 서비스가 진행중인 회사들은 대부분의 레거시시스템이 메인 BM을 담당하고 있을것이고, 추가적인 새로운 부분에 대해서 위의 단계를 새롭게 진행 혹은 기존 룰을 그래도 적용해서 개발이 이루어 집니다.

어디까지나 전체 개발경험을 위한 마이크로 단계 교육에 초점이 되어 있습니다.
추가 되었거나 수정에 대한 의견이 있으시면 언제든지 적극적으로 주시기 바랍니다.

1. 문제의 정의 ( 요구 사항 분석 )

  • 서비스의 목적을 설정합니다. 
  • 해결하고자 하는 명확한 목표를 정의 합니다

결과물

  • 한문장으로 정의 되는 문제 해결 목표

예)
문제 : 카뎃의 학습 진행이 너무 느리다.

문제인식 및 해결 목표 :
– 블랙홀로 빠지기 전 학습에 대해서 독려하고, 스스로 리스크를 관리 할 수 있도록 도와 주는 알림서비스 개발 합니다. .
알림을 받은 학생들을 자신의 상태를 한번 더 점검 할 수 있습니다..

실행방법
  – 집단 지성을 이용해서(구성주의) 문제에 대한 정의 및 해결 방법을 공유 합니다. 

  • 구글 문서도구 ( 스프레드시트 )를 이용해서 구성원들이 함께 문제를 정의 해 봅니다.
  • 문제에 대한 간단한 해결 방법에 대해서 정리를 합니다.
  • 화이트보드를 이용해서 자신의 문제 해결 방법에 대해서 구성원들에게 설명하고, 동의 및 합의점을 찾아 봅니다. 

단계목표

  • 자신의 생각을 정확히 전달하는 훈련을 하게 됩니다. 
  • 집단 지성의 힘을 알게 됩니다.
  • 같은 주제에 대한 다양한 생각을 알게됩니다..
  • 화이트보드를 이용해서 논리적인 생각의 정리과정을 익힙니다.

( 우당탕탕 및 하계인턴 결과물 캡처 )

2. 문제별 해결 시퀀스 정의

  • 실제 실행 방법을 나열해 봅니다. 
  • 도출한 실행 방법이 1단계(문제정의)에서 정의한 문제 해결에 부합되는지 확인 해 봅니다.

결과물

  • 문제별 해결 방법 순서를 작성합니다.

예) 
주요문제 :
매번 수동으로 api를 돌려 찾아내어 그 학생 정보를 이메일 등으로 보낼 필요가 있음

목적
지정된 시간에 자동으로 api를 사용해 블랙홀 대상자를 찾아내어 이메일을 보냄

문제해결을위한 방법 :
– 문제 해결 포인트 :
메일을 받은 학생이 블랙홀에서 탈출하는 카운트를 확인 해서 카운트가 줄어드는 부분을 확인 하고 싶습니다.

1. 메일에 들어가는 내용을 정리 해야 합니다. 
2. 메일 포맷을 디자인 해야 합니다. 
3. 메일 서버는 무엇으로 해야 하나요?
4. 메일 수신후 답변을 받을 것인가요?
5. 메일 보내기 전 후에 대한 리포팅은 어떻게 준비 해야 되는걸까요?

문제해결 시퀀스
1. 데이터를 수집한다.
2. 데이터를 정리한다. 
3. 메일 발송 포멧을 선택한다.
3-1 메일 발송 포멧은 몇개가 필요하지? 
3-2 메일에 들어갈 내용은 어떻게 될까요?
3-3 메일에 이미지는 들어가나요?
3-4 HTML 타입으로 지정되나요
4. 메일을 발송한다. 
4-1 메일 발송은 언제 하지?
4-2 메일은 수동 | 자동 ?

5. 등등등.. 계속 

( 우당탕탕 및 하계인턴 결과물 캡처 )

실행방법
집단 지성을 이용해서(구성주의) 문제에 대한 정의 및 해결 방법을 공유 합니다. 

  • 구글 문서도구 ( 스프레드시트 )를 이용해서 구성원들이 함께 문제를 정의 해 봅니다.
  • 문제에 대한 간단한 해결 방법에 대해서 정리를 합니다.
  • 화이트보드를 이용해서 자신의 문제 해결 방법에 대해서 구성원들에게 설명하고, 동의 및 합의점을 찾아 봅니다. 

단계목표

  1. 자신의 생각을 정확히 전달하는 훈련을 하게 됩니다. 
  2. 집단 지성의 힘을 알게 됩니다.
  3. 같은 주제에 대한 다양한 생각을 알게됩니다..
  4. 화이트보드를 이용해서 논리적인 생각의 정리과정을 익힙니다.
  5. 요구사항에 대한 구체적인 실행 방법을 시퀀스 별로 정의 합니다. 
  6. 시퀀스별 필요한 데이터를 유추할 수 있습니다. 
  7. 데이터베이스의 정규화 과정을 진행 할 수 있습니다.

3. 시퀀스 다이어그램 작성 & phase-0 선정

  • 문제해결 단계를 시퀀스 다이어그램으로 도식화 해 봅니다. 
  • 시퀀스별로 필요한 데이터, 발생하는 데이터를 분리 정리 합니다. 
  • 전체 개발에 기준이 되는 스캘렐톤 시퀀스를 선택합니다.
    선택된 시퀀스를 phase-0 선정합니다.
    해당 시퀀스를 기준으로 BM(비지니스모델링)의 구조를 잡습니다.

( 로그 : 시퀀스로그, 시스템로그 )

결과물

  • 시퀀스 다이어그램
  • 매핑데이터
  • 로그데이터

==> 데이터 시퀀스 드리븐이 가능한지 확인하는 부분이 필요합니다.
( 서비스 -> 서비스시퀀스 -> 서비스데이터 -> 데이터 시퀀스 드리븐 )

실행방법

  • 화이트보드를 이용해서 다이어그램을 작성해 봅니다. (집단지성)
  • 순서도 , 그래프 제작 툴을 이용하여 정리된 문서를 그림으로 정리 합니다. 
  • 각 시퀀스별에 필요한 데이터를 추출하고 테이블로 구현을 해 봅니다.
  • 로그 테이블에 저장정보, 타입등을 생각해 봅니다. .

단계목표

  • 데이터를 추출하고 사용법을 고민해 봅니다.
  • 운영과 서비스 두 부분을 모두 고민해 봅니다.
  • 운영의 관점에서 서비스개발위한 로그에 대한 부분도 정의 해 봅니다.
  • 로그 분석에 대한 고민도 해 봅니다. 

선수지식
1. DB
1-1 정규화 과정
1-2 테이블 생성
1-3 RDBMS
1-4 NoSQL
1-5 DB 구성 관련 샤딩, 백업, 이중화 등

2. Log
2-1 Log Setting
2-2 파이프라인
2-3 분석
2-4 인포그래픽

3. 배치 및 자동화
3-1 배치 및 자동화를 통한 분석 데이터 활용
3-2 분석 시퀀스 –> 서비스 시퀀스로 연결 작업

( 우당탕탕 및 하계인턴 결과물 캡처 )

4. 개발환경 구성하기

  • 목적 프로그램과 가장 잘 맞는 언어를 선택, 언어별 framework 선택 합니다.
  • 선택되지 않은 언어와 framework에 대해서도 이유를 작성합니다. 
  • DB, NoSQL, CDN, storage , Server, apache, nginx, 등등 여러가지를 고려하면서 각 각의 특징에 대해서 학습을 이어갑니다. 

결과물

인프라, 언어, 개발방법론 등 선택에 합의 점에 대해서 정리를 합니다.

 예시) (국민대 하계인턴 정리 캡처)

실행방법

  • 자료조사를 진행합니다. 
  • 경험치 및 학습을 고려한 선정이유를 추가 합니다. 
  • 엑셀 및 문서도구를 활용하여 구성원들의 의견을 취합합니다. 

목표

  • 언어별, framework 별, 프로젝트에 가장 잘 맞는 부분을 이해합니다. 
  • 기간 및 구성원들의 능력치를 기반 전체 일정을 산출해 볼 수 있도록 합니다. 
  • 구성원들의 러닝커브에 대한 부분들을 확인 해 봅니다. 

5. 코딩컨벤션 제작

  • 여러명이 작업을 하지만 1명이 작업한것처럼 보여야 합니다. 
  • 가독성을 올리고, 작업속도를 빠르게 하기 위함입니다. 
  • 버그 탐지 및 개발에 대한 질을 높일 수 있습니다. 

결과물

  • 코딩컨벤션에 대한 문서를 작성합니다. 

실행방법

  • 자료조사를 진행합니다. 
  • 엑셀 및 문서도구를 활용하여 구성원들의 의견을 취합합니다. 
  • 유연한 사고력을 바탕으로 개발 과정에서 수정도 가능하다는 부분을 열어 두고 이야기 합니다. 

단계목표

  1. 여러사람이 함께 코딩하는 방법을 배우게 됩니다. 
  2. 사소한 부분으로 인해서 발생하는 리스크를 사전에 예방할 수 있습니다. 
  3. 각자의 코딩 스타일을 스스로 검토하고 고쳐 나갈 수 있습니다. 

6. 집중 코딩 시간

  • 스프린트 방식으로 진행합니다. 
  • 정해진 시간에 정해진 목표 만큼 명확히 도달 할 수 있도록 phase 를 나누고 실천합니다. 
  • git , 이슈트레킹 등 서로간의 협업을 원활하게 하기 위한 도구들도 함께 점검을 합니다.

7. 코드리뷰 및 점검

  • 처음 개발이 진행된 후 빠르게 스켈렐톤 코드들을 점검합니다
  • 특히 주니어들은 프레임워크를 사용해서 개발이 되지만 , 막코딩에 가까운 방법으로 개발이 진행되기에 기준이 되는 코드 구조를 잡아 주는것이 좋습니다. 
  • ERD를 보면서 해당 개발 하고자 하는 서비스의 구조에 적합한 부분인지도 확인 해 봅니다. 
  • 빠른 시간에 기본 구조를 잡아서 확장이 이루어 지는 부분에서 최대한 노이즈가 없도록 작업을 진행합니다. 

8. 집중 코딩 시간

  • 스프린트 방식으로 진행합니다. 
  • 정해진 시간에 정해진 목표 만큼 명확히 도달 할 수 있도록 phase 를 나누고 실천합니다. 
  • git , 이슈트레킹 등 서로간의 협업을 원활하게 하기 위한 도구들도 함께 점검을 합니다.

9. 코드리뷰 & 리팩토링

  • 코드양이 충분히 모이고 나면 진행합니다. 
  • 코드양이 많아 지면서 반복적인 코드를 라이브러리로 새롭게 생성, 가독성 및 개발 속도를 올릴 수 있도록 합니다. 
  • 개발 환경과 QA 환경을 고려한 데이터 접근에 대한 부분을 config 로 세팅 하도록 합니다. 
  • QA 시 시퀀스에 더미로 제공해야 되는 지점들을 찾아서 더미 프로세스를 세팅합니다.
  • 단 , 이때 데이터 시퀀스와 서비스 시퀀스의 프로토콜은 변경되는 부분이 없어야 합니다.

개발이 진행된 언어 및 프레임워크에 준해서 리팩토링에 대한 내용을 다함께 이야기 나눠 보는것이 좋습니다.

10. QA

  • 오류 탐지
  • 성능확인
  • 시퀀스별 오류 탐지 코드를 확인 합니다. 
  • 오류 확인후 수정까지 어느정도의 시간과 단계가 들어 가는지 체크합니다. 

nGrinder , pinPoint 등 툴의 사용법에 대해서 자료 조사를 부탁 합니다.
( 예) 우하한형제들 기술 블로그 https://woowabros.github.io/experience/2018/05/08/billing-performance_test_experience.html )

11. 배포 & 오픈

  • 실서비스 setting 
  • 코드 배포에 대한 시퀀스를 만들어 봅니다. 
  • 자신의 코드가 실서비스에 전달하는 과정에 대해서 생각해보고 방법을을 정의 해 봅니다. 
  • 배포 주기 및 버전 관리는 어떻게 하는 것이 좋은지 확인 해 봅니다. 

CI / CD 에 대한 세미나를 통해서 배포 및 실서비스를 어떻게 운영할 것 인지에 대한 내용을 논의 해 봅니다.

12. 전체리뷰

감사합니다.

작성자 : 이호준 멘토 ( hojun.lee@innoaca.kr )