'강좌'에 해당되는 글 3건

  1. 2016/01/29 글뻥 Go 언어 강좌 1
  2. 2011/03/23 글뻥 UML기반 개발강좌 3 - 기능점수견적
  3. 2011/03/14 글뻥 UML기반 개발강좌 1 - 말나온김에 시작한 UML (2)

Go 언어 강좌 1

Developer/GO 2016/01/29 18:46

미국와서 취직도 안되고, (사실 지원도 1월 이후로 안하고 있어요 ㅋ)
하던차에 Google 느님들이 만드신 Go 언어를 독학하고 있는데...
이 언어 대박입니다!

제가 대박이라 하는 이유는...
- 자바와 같은 멀티 OS기반입니다.
- 코드가 간결합니다.
- C같은 Native compile이 됩니다.
- 별도 VM을 돌리지 않습니다.
- Node.js 나 PHP 처럼 웹서버에 탑재되는게 아니라, 웹서버를 만들고 컨텐츠를 작성할 수 있습니다.
- C와 연동이 됩니다.
- iOS / Andoroid 다됩니다. 참고 : http://www.sitepoint.com/ios-and-andro ··· th-go%2F
- library도!!! https://talks.golang.org/2015/gophercon-go-on-mobile.slide#1


이정도면 배워둘만 하지 않을까요?

앞으로 많은 회사들이 Go로 서버 만들거 같은 느낌이 드네요.
그래서, Unity3D와 Go로 서버만드는 걸 목표로 공부하면서, 과정을 남기려 합니다.

1. 설치
저는 윈도우와 OSX를 사랑하기 땜시, 그냥 윈도우에서 실행할 수 있는 Go를 다운로드 받았습니다.
공식사이트 : https://golang.org/
다운로드 : https://golang.org/dl/

윈도우는 다운로드 후 실행하면 끝!

2. 설치확인
- 윈도우 10기준으로 좌측하단 "웹 및 Windows 검색" 입력창에 cmd 입력, 명령 프롬프트 실행
- 그 이하에서는 직접실행 창에 cmd.exe 입력후 엔터
- 시커먼 명령 프롬프트 창이 열리면 "go"라고 입력해서 실행되는지 확인

* 실행결과

사용자 삽입 이미지

3. 에디터 선정
Visual Studio에서도 plugin을 설치하면 "Go"언어 지원을 받을 수 있지만,
저는 Notepad++을 사랑하기 때문에 이걸 기준으로 설명합니다.

다른 에디터 지원 목록 : https://github.com/golang/go/wiki/IDEsAndTextEditorPlugins
Visual Studio 사용자는 여기로 : https://marketplace.visualstudio.com/items?itemName=lukehoban.Go

- Notepad++ : https://notepad-plus-plus.org/ 에서 다운로드
다운로드후 실행하면 설치 끝.

이제 Notepad++가 "Go"를 인식할 수 있도록 Plugin을 설치할 차례입니다.
(그냥 해도 되지만, Syntax highlight와 Function, Auto Complete 기능은 기억력 감퇴중인 늙은 개발자에게 필수죠)

- Plugin : https://github.com/chai2010/notepadplus-go

다운로드 후에 압축해제하고
- userDefineLang.xml 파일을 "%AppData%\Notepad++" 폴더에 복사
- 먼저 "%AppData%\Notepad++\functionList.xml"파일을 열어두고, 압축파일에 있는 "functionList.xml"파일을 열어서 해당 XML코드를 복사해서 아까 열어둔 원본 functionList.xml 파일 안에 <parsers>~</parsers> 안에 붙여 넣기
- 압축파일에 있는 go.xml 파일을  "{Notepad++에 설치경로}\plugins\APIs"에 복사
- userDefineLang.xml 파일을 열어서 "<NotepadPlus>"와 "</NotepadPlus>" 테그 부분에 주석 처리 (<!-- //-->) 된 부분을 주석 해제후 저장
- Notepad++이 실행중이라면 종료후 재실행

4. Hello World 작성
Notepad++에서 다음과 같이 코드 작성
package main
 
import "fmt"
 
func main() {
    fmt.Printf("hello, world")
}


* 산뜻하게 Syntax highlight 까지 적용
사용자 삽입 이미지

확장자는 ".go"로 임의 폴더에 저장

5. 실행
해당 소스가 있는 폴더로 이동후

go run helloWorld.go 실행
사용자 삽입 이미지

6. Native 빌드
위의 경로에서
go build helloWorld.go 실행후 helloWorld.exe 실행
사용자 삽입 이미지


7. 한글코딩해보기
모국어로 코딩할 수 있는 환경을 사랑합니다! (C# 빠가 된 이유중 하나입죠...)
현대 언어니까 당연히 UTF-8로 코딩해봐야 하지 않을까요?

package main
 
import "fmt"
 
func main() {
    초기화();
}

func 초기화() {
    fmt.Printf("안녕하세요?");
}


근데 Notepad++로 작업하면 이렇게 한글이 작게나와 불편합니다.

사용자 삽입 이미지
이건 Notepad++의 상단 메뉴 "설정"에서 "스타일" 클릭하시고...
다음 메뉴처럼 변경하면 간단히 해결됩니다.
사용자 삽입 이미지
* 짜잔~!
사용자 삽입 이미지
이제 아까와 같이 실행 해봅시다.
사용자 삽입 이미지
이 아이는 착한 아이입니다. 설마 Native compile 안될까봐 해봤습니다.
사용자 삽입 이미지

8. 함수 확장해보기
한글 함수가 되는걸 확인했으니 이제 함수형태를 확장 해보겠습니다.

package main
 
import "fmt"
 
func main() {
    인사하기(5); 
}

func 인사하기(_x int) {
    if _x%2 == 0 {
        fmt.Printf("안녕하세요?");
    } else {
        fmt.Printf("아님 말고");
    }
    if _x > 0  { 
        인사하기(하나씩까기(_x));
    } 
}

func 하나씩까기(_x int) int {
    _x = _x - 1 ;
    return _x;
}


흔하디 흔한 재귀함수입니다.
(영어로 재귀함수를 뭐라 부르는지 몰라서 인터뷰때 "재귀함수 적용할까?" 물어 보지 못한게 한이 되어 앞으로 꾸준히 사용할겁니다. 엉엉 T_T)

사용자 삽입 이미지
여기서 신기한건
- fmt.Printf 와 같이 메소드명 첫글자가 대문자이면 Public 타입 (외부 엑세스 가능)
(한글 코딩하면 규칙에 위배되니 여기까지만 한글 코딩할께요.)
- fmt.Printf 대신 fmt.Println 사용하면 행 자동 바꿈.
- 타입을 항상 뒤에 둔다는 것.
- Function이 다음과 같이도 정의될 수 있다는 것.
func 테스트기능(_x int) (int, int) {
    return 0, 1;
}




다음에는 웹서버 한번 만들어 봅시다.

2016/01/29 18:46 2016/01/29 18:46

어제에 이어 UML기반의 개발강좌 3편이다.
오늘 할 이야기는 Activity Diagram을 뽑고 Function Point와 연동하여 견적내기이다.
먼저 다음 포스트를 읽고 오자.

[기능점수견적 산정강좌 바로가기]

기능점수 견적을 요점정리하면 다음과 같다.

1. 기능점수는 기능을 가지고 도출할 수 있다.
2. 기능점수는 디자인 등 부가적인 부분에 대해 견적할 수 없다.
3. EI/EQ/EO, ILF/EIF 만 무슨 의민지 알면 기능에 대한 도출은 쉬울 것 같다.

암튼 UML로 이러한 견적을 뽑아 내려면 EI/EQ/EO, ILF/EIF를 도출해야 한다는 결론이 나온다.
그런데 내가 도출한 USE CASE에는 아무것도 보이지 않는다. 그냥 기능만 있지 그 안에 무슨 내용이 어떻게 오고가는지가 없다.
이럴때 쓰라고 있는게 Activity Diagram이다.
즉, Activity Diagram은 Use CASE를 분해해서 표현하는 그림으로 하나의 기능을 세밀하게 쪼게는 역할을 맡고 있다.
물론 내가 사용하는 설계 방식에서는 Activity Diagram은 Class Diagram으로 전개시키는 역할도 맡고 있다. 이건 다음시간에 삺펴보고 암튼 Use CASE 하나를 잡고 쪼게보자.

나는 "경로를 안내받는다"라는 녀석을 선택했다. (왜? 네비게이션은 안내받으려고 사는거 아니었나요?)

1. USE CASE중 "전원을 연결한다"는 "전원을 조작한다"와 중복되므로 삭제했다.

사용자 삽입 이미지

2. 오른쪽 Model Explorer에서 "경로를 안내받는다" Use CASE를 선택하고 마우스 우클릭하여 Diagram을 추가하자.
사용자 삽입 이미지

3. 이름을 USE CASE와 구분하기 위해 "//"를 추가하여 "//경로를 안내받는다"로 변경하였다.
사용자 삽입 이미지
4. 이제 "ToolBox"에 뜨는 Diagram이 다음과 같이 바뀐다. 역시 쓰는 넘만 쓰니까 다 자세히 알필요는 없다.
사용자 삽입 이미지
"ActionState"는 Method가 되는 녀석이다. 어떤 의미인지는 나중에 예제로 표현해 보겠다.
그리고 InitialState, FinalState는 시작과 끝이고 Decision이라는 넘은 분기이다.
나머지는 선이니까 생략.
한가지 주의할 점은 Activity Diagram을 그리는데 Use CASE를 뒤엎을 각오를 해야 한다는 것이다.
이게 무슨 의미인지 "경로를 안내받는다." Activity Diagram을 한번 보도록 하자.
사용자 삽입 이미지
위의 Activity가 과연 사용자 입장에서의 Activity인가? 뭔가 혼자 돌고 있는 그림이라면 Use CASE를 너무 작게 쪼겐것이다.
그렇다면 사용자의 입력을 기다리기 위해 "목적지를 입력한다"라는 녀석과 "경로를 안내받는다"라는 녀석을 합칠 필요가 있다.
따라서, USE CASE를 다시 조정했다.
사용자 삽입 이미지
몇몇 USE CASE를 날려버렸다. 가장 핵심적인 기능부터 접근했기 때문에 가능한 빠른 판단이다.
이제 Swimlane을 사용자 까지 포함시켜서 "경로를 안내받는다"라는 USE CASE를 Activity Diagram으로 전개시킬 준비가 된것이다.
다음은 그 결과이다.
사용자 삽입 이미지

이제 위와 같이 한 이유를 설명하겠다.
첫째, 이렇게 사용자를 포함시킬 수 없다면 그것은 요구사항이 아니다. 따라서, 개별 요구사항을 합쳐서 요구사항을 크게 만들어야 한다.
둘째, 반대로 지나치게 클수 있다. 이경우 인수시험계획을 만들기 어렵다. 지나치게 커서 시험항목이 보이지 않는 것이다. 이경우는 쪼게야 한다.
무엇보다 가장 큰 이유는 위와 같이 요구사항을 Activity Diagram으로 테스트 할 수 있다는 점이다.

아무튼 각각의 ActionState들은  Method와 동일하다고 가정하고 Method에서 사용할 Entity와 부가설명을 달아보자.
사용자 삽입 이미지
이제 내 눈에는 그럴싸하게 보인다.
Method는 총 11개가 도출되었고 Entity도 다수 도출되었다.
물론 네비게이션 전문가가 보기에는 빠진 기능이 많을 것이다. 어차피 빠진건 검토하면서 다시 넣으면 될일이고 현재 생각할 수 있는 기능은 다 들어간 것같다.

업무상 꼬이는 부분도 없으며 요구사항 그자체로는 완벽하다.
아무튼 이제 견적을 한번 때려보자.
- 초기화는 단순 입력만 이니 EI/ILF
- 목적지이름조회, 목적지주소조회는 EQ/ILF
- 주소목록선택, 목적지목록선택은 EI/ILF
- GPS좌표를 획득하는건 외부 시스템 연동으로 EIF
- 경로획득은 ILF
- 현재좌표획득은 EIF
- 음성안내는 EQ/ILF
- 현재지도갱신 EQ/ILF
- 안내종료는 EQ/ILF

이상 대충 뽑았다.
따라서 기능점수 견적은 다음과 같이 작성되어야 한다.
- EI : 8
- EQ : 4
- EO : 0
- ILF : 7
- EIF : 2

하여 결론적으로 간이 견적표는 다음과 같이 나온다. (위에 기능점수 견적산정 링크에서 다운로드 받으세요.)
사용자 삽입 이미지

총 FP점수는 110.9점이 도출된다.
보정계수와 원가산정표로 가서 나머지 보정을 하자.
먼저 기능점수의 복잡도로 "평균복잡도"를 선정했다. 물론 네비게이션 만드는게 쉬운일은 아니겠지만...
사용자 삽입 이미지
규모보정계수는 300점 미만이므로 그대로 두고...
어플리케이션 유형 보정계수는 통신제어용(GPS)이므로 비율을 100% 해줬다. (합계는 100%여야 한다.)
사용자 삽입 이미지
언어는 알아서 하면 되고... 품질/특성 보정계수는 다음과 같이 설정했다.
사용자 삽입 이미지
결과적으로 89,929,418 원의 원가가 발생하고 여기에 이윤 25%를 붙여서 총 112,411,773원의 견적이 완성된다.
물론 여기에 디자인비용, 각종 직접비용은 생략되었으니 이건 알아서 넣자.
사용자 삽입 이미지

이것으로 Activity Diagram으로 USE CASE(요구사항)을 테스트하고 견적을 내는 단계까지 완료.
다음에는 Activity Diagram으로 인수시험CASE를 만들어 보자.

ps. 띰띰해서 그려본 현재 적용한 개발 프로세스
사용자 삽입 이미지

중요한게 바로 요구사항 Pool이다.
요구사항이 들어오면 즉시 실행하는게 아니라 일단 Pool에 넣어둔다.
(왜냐하면 감정을 최대한 없애기 위한 조치이다. 훗날 냉정하게 바라보면 불필요한 기능을 구현하느라 시간을 다 소모했던 경험이 있다면 반드시 적용하자.)
프로젝트 협의체에서는 얼마나 완료되었는지 시연하고, 이슈를 해소하기위해 정책을 정리하고, 요구사항 Pool을 뒤져서 개발우선순위를 조정한다. 우선순위가 조정된 개발범위중 상위 몇개를 골라서 구현지시를 하면 개발팀은 분석설계후, 코딩하고 단위테스트를 진행한다. (Visual Studio는 단위테스트를 자동생성해줘서 권장. 아마도 이클립스도 자동으로 만들어 주는 Plugin이 있을것 같음)
이후에 Build하고 통합테스트라는 테스트를 거친뒤에 개선요구사항과 버그 수정사항을 다시 Pool에다 넣어둔다.
잠깐의 휴식을 가진뒤에 다시 처음부터 우선순위 먹이고... etc etc..

암튼 UML은 이중에서 분석설계서 및 테스트 계획서에 사용됨.
빌드 테스트 결과는 HUDSON을 활용하자.

2011/03/23 14:22 2011/03/23 14:22
TAG ,

일전에 약속한 UML기반의 개발강좌를 하나씩 열어보고자 한다.

먼저 다음의 USE CASE는 내가 사용하고 있는 개발프레임워크이다. (그중 직접적인 부분만 발췌한것이므로 부가적인 요소는 다음에 기회가 되면 또 한번 이야기해보겠다.)

사용자 삽입 이미지


복잡하지만 프로젝트 관리자입장에서 서술하면 제일 먼저 USE CASE를 그린다.
한가지 주의할 점은 USE CASE는 "고객(사용자)" 입장에서 작성되어야 하며 이렇게 작성된 USE CASE는 3가지 용도로 변형되어 사용된다.

1. 견적서 (기능점수활용)
2. Activity Diagram 등의 분석/설계 문서
3. 사용자 테스트 혹은 인수시험이라도 불러지는 System TEST CASE

즉, 내가 2008년부터 주구장창 사용하고 있는 개발 관리의 근본은 바로 "USE CASE"로 USE CASE의 화살표가 맞고 틀리고는 내게는 커다란 의미가 없다.
이게 중요하다.

다이어그램을 보고 흐름을 알 수 있을 정도로만 작성할 뿐 절대적인 규칙에 맞춰 작성하지 않는 것이 핵심이다.
단지 다른 사람에게 보여주고 다른 사람이 이해할 수 없다고하면 그때 다듬는다.

표현할 수 없는 부분은 Memo를 활용해서 부가적인 설명을 달아 놓으면 그만이다. 이걸 그리는데 담배 한대피고 온 시간까지 총 20여분이 걸렸다.
(왜? 대충 그리기 때문이다. ㅋ)

일단 위와 같이 전개된다는 것만 숙지하고 다음 시간에는 USE CASE를 그리는 방법 (표준이 아니라 내가 사용하는 방법)을 설명하고자 한다.
따라서, 본 강좌는 다음과 같은 순서로 진행할 것이다.

1. USE CASE
2. USE CASE를 활용한 견적서 작성(규모산정 중심)
3. USE CASE를 활용한 System TEST CASE 도출
4. Activity Diagram 전개
5. Class Diagram & Sequence Diagram 도출
6. Unit TEST CASE 도출

이상 6개 항목으로 진행하고자 한다.
그리고 나머지 부분은 따로 시간이 되면 (언젠가는 되겠지...?) 또 한번 썰을 풀어보고자 한다.

그리고 앞으로 사용할 예제 프로젝트를 다음과 같이 선정했다. (강사 맘이다.)

3D Navigation Device 제작

헐퀴.. 그냥 스마트 TV만들기나 뱅킹시스템 사용이나 아니라면 전세계약 시스템 같은걸 선정할걸 그랬나? -_-?
암튼 이것도 강사 맘이다. (배째시라...)
그리고 나아가 어떻게 Agile 프로세스를 적용하면서 Iteration을 나눠야 할지도 그간의 고민을 같이 풀어보겠다.

ps.
행여 본 강좌를 보고 Diagram의 기호 사용법이 틀렸다는 둥 이상하게 그렸졌다는 둥의 이야기는 하지말자.
문서를 만드는데 스토리 텔링이 중요하지 맞춤법, 띄워쓰기 틀렸다고 지적하기 시작하면 아무것도 못한다. 오류가 스토리 텔링에 심하게 영향을 끼치지 않는다면 그것으로 그냥 족한것이다.

ps2.
본 프레임워크는 2008년부터 2011년까지 몇개의 프로젝트를 통해 다듬어진것이다. 더 좋은 방법도 있지만 프로젝트의 문서를 아주 빠르게 만든다는 차원으로 접근해주길 바란다. 그리고 왜 문서를 개발이전에 만드는지도 후에 중간 중간에 썰을 풀겠다.

* 본 강좌는 StarUML을 통해 진행합니다.

2011/03/14 14:01 2011/03/14 14:01