WBS

1. WBS

  • Work Break-down Structure 의 약어.
  • 프로젝트 관리 및 시스템 공학 분야에서 프로젝트를 소규모 구성 단위까지 나누어 전달할 수 있는 구조. (위키피디아)
  • 프로젝트 목표를 달성하고 필요한 산출물을 작성하기 위해 프로젝트 팀이 수행해야 할 전체 작업 범위를 최상위 단계에서 하위 단계로 분할하여 정리한 것으로 계획 대비 진척을 관리하기 위한 일정관리 문서.


2. WBS의 역할

전체의 큰 업무를 분류하여 구성 요소로 만든 후에 각 요소를 평가, 일정별 계획, 그것을 완수할 수 있는 사람에게 할당해주는 역할을 수행.
이를 큰 틀로 나누어보면.

1) 프로젝트에서 수행할 업무를 파악 

2) 일정과 예산, 자원요구사항 
– WBS는 프로젝트의 작업에 대한 일정/예산을 산정하는 기초자료가 되며, 예상 못한 작업이나 누락된 작업들로 인한 일정지연 및 비용지출을 예방 할 수 있음.

3) 일정 계획과 산정 
– 직무할당표로 어떤 일을 누가 무엇을 가지고 먼저 할지를 정해야 하는 것을 도와줌

4) 전체일정 진행상황 파악 
– 팀원들도 자신에게 할당된 업무를 쉽게 파악할 수 있고, 
  이를 관리하는 PM도 작업 패키지를 체크 리스트로 사용해 어떤 작업이 완성되었고 어떤 작업이 남아 있는지를 알아볼 수 있음.

5) 프로젝트의 정보 추적 통제 
– 프로젝트 중간에 발생되는 이슈들에 대한 내용들을 WBS로 통제 관리 할 수 있음. (기획 의도 변경/추가, 연동 모듈 , 개발 중 이슈)

6) 고객, 팀 간의 의사소통 링크 
– 프로젝트의 모든 인원의 각 작업에 대한 세부작업과 담당자를 쉽게 식별할 수 있어 요구사항의 변경발생시 가장 먼저 체크해보아야 할 정도로 좋은 의사소통 도구로서 작용함.

3. WBS 작성방법

1) 프로젝트 전체를 큰 단위로 분할

2) 각각의 부분에 대해 좀 더 작은 단위로 분해하여, 계층적으로 구성

3) 프로젝트 WBS 작업 목록 정의
    보통 단계, 활동, 작업의 3단계 순으로 분류를 세분화하면서 작업 목록을 정의하는데 여기서 작업목록은 프로젝트에서 해야 할 일의 최소단위를 말함.

4) 작업을 수행할 담당자를 정의

5) 산출물 식별
    작업에서 생성되는 산출물들의 종류를 식별하고 고객에게 공식적으로 인도할 산출물은 별도로 정의.

6) 프로젝트 일정표 작성
     단계-활동-작업 등과 같이 하위 작업 목록이 식별되면 각 작업간의 선후행 관계를 검토하여 전체작업을 배열하고, 시작-종료 날짜를 지정함.

7) 일정 검토
     프로젝트 일정표 작성이 완료되면 이해 관계자 모두와 함께 검토하고 확정. 
     보통 이 과정 중에는 전체 작업 일정 중에서 하루라도 늦으면 프로젝트 오픈에 영향을 주게 되는 주요한 작업들을 확인하는 일을 중점으로 검토하며
     이 때 확인된 내용들에 대해서는 지원 인력 추가, 우선순위 조정, 작업 단위를 더 작게 분해하여 작업시간을 앞당기기 등 일정에 맞추기 위해 재배정.

4. WBS의 장점

  • 신규 프로젝트에 대한 사전 정보 제공
  • 프로젝트 수행의 작업 표준화를 통한 자료의 누적
  • 작업 단위별 비교 및 측정 가능

* 작성자의 성향, 선호하는 방법에 따라 다름. (PM, PL)
* 받아 보는 사람이 누구인가에 따라 다름. (고객사? )

본래 목적은 담당자, 예산 등 프로젝트에 들어갈 수 있는 자원들을 기입하여 해당 내용을 적극적으로 관리하고 투영하는데 있음.

하지만 프로젝트에 들어가면 프로젝트를 진행하는데 있어서 일정에 대한 부분만 보여주는 형태로 실제 WBS 의 목적과는 조금 멀어진, 계획에만 치중하는 모습을 많이 볼 수 있는데 이는 어떤 항목을 구체적으로 계획해야 하는지 모르거나, 항목을 알더라도 계획을 수립할 수 있는 사전 정보를 확보하지 못한 경우가 많기 때문.

그래서 착수/기획 단계에서는 전체적 가이드 라인만 잡고 산출물 작업 진행할 때 마무리하는 경우가 다수.

정렬(Sort)

단순 리스트를 정렬할때 보통 Collections.sort()를 사용한다. // 오름차순

ex)
ArrayList list = new ArrayList();

list.add("d");
list.add("c");
list.add("b");
list.add("a");

Collections.sort(list); 

출력 : abcd

하지만 개발을 하다보니 VO를 List에 담는 경우도 있는데~
이때 List를 Collections.sort()에 담아서 실행하게 된다면 어떤 기준으로 정렬할지 모르기 때문에 에러가 발생한다.

List list = memberService.getUserList();
Collections.sort(list); //에러 발생

이때 단순 정렬이라면 Comparable을 사용해도 되고, 다른 여러가지 조건을 더 주려면 Comparator을 사용하면 된다.
객체 정렬 Comparator : 기본 정렬 기준 외에 다른 여러 기준으로 정렬하고자 할 때 사용하는 클래스
[형태]
Collections.sort(객체, new Comparator<타입>(){
});

선언하고 compare 메소드를 구현하면 된다.

ex)
     Collections.sort(list, (o1, o2) → {
        if (o1.getNumber() > o2.getNumber()) return 1;
        else if (o1.getNumber() < o2.getNumber()) return -1;
        else {return 0;}
     });


참고 :
https://cchoimin.tistory.com/entry/%EA%B0%9D%EC%B2%B4-%EC%A0%95%EB%A0%AC-Comparator?category=827467

IS NULL, IS NOT NULL

NULL
– DB에서 NULL이 일반적인 값과는 다르게 취급된다.
– 아직 정의되지 않은 값.
– 0(숫자) 또는 공백(문자)과 다르다.
– 테이블을 생성할 때 NOT NULL 또는 PRIMARY KEY로 정의되지 않은 모든 데이터 유형은 널 값을 포함할 수 있다.
– NULL 값을 포함하는 연산의 경우 결과 값도 NULL이다. 모르는 데이터에 숫자를 더하거나 빼도 결과는 마찬가지로 모르는 데이터인 것과 같다.
– 결과값을 NULL이 아닌 다른 값을 얻고자 할 때 NVL/ISNULL 함수를 사용한다.
– NULL 값의 대상이 숫자 유형 데이터인 경우는 주로 0(Zero)으로, 문자 유형 데이터인 경우에는 블랭크보다는 ‘x’ 같은 해당 시스템에서 의미없는 문자로 바꾸는 경우가 많다.

IS NULL

-- NULL인 데이터
SELECT *
FROM test
WHERE score IS NULL;

IS NOT NULL

-- NULL이 아닌 데이터
SELECT *
FROM test
WHERE score IS NOT NULL;

IFNULL

-- NULL이면 0으로 치환.
SELECT IFNULL(score, 0) FROM test;

COALESCE

-- NULL이면 0으로 치환.
SELECT COALESCE(score, 0) FROM test;
IFNULL과 COALESCE 차이.
COALESCE() is in all the major databases, while IFNULL() isn't in SQL Server which uses ISNULL()instead. Performance should be no different. –  Hart CO Nov 12 '14 at 18:56
결과는 같지만. COALESCE가 모든 데이터베이스에서 사용가능하니 COALESCE를 권장한다.