좋은 글 대사전

저자
좋은글연구회 엮음 지음
출판사
북씽크 | 2011-12-15 출간
카테고리
자기계발
책소개
마음긍정을 위한 아름다운 희망글, 좋은글의 모든 것, 현대인들이...
가격비교


사람마다 추구하는 이상이 다르다. 설득을 위해서는 상대의 이상이 무엇인지 파악하는 것이 중요하다.

자바 웹 프로그래밍을 하면서 ORM을 당연하게 사용해왔는데,

안드로이드에서 SQLite DB 프로그래밍을 하려니.. ORM 쓰던게 습관이 되어있어서인지

귀찮은 점이 한두가지가 아니네요.


먼저 ORM에 대해 간략하게 소개하자면 Object Relational Mapping으로 객체와 릴레이션(RDB의 테이블)간에 매핑을 해 주는 역할을 합니다. 쉽게 말하자면 Book 이라는 객체가 있다면 이 객체를 ORM을 통해 RDB에 넣거나(Insert), 가져오거나(Select), 지우거나(Delete), 고칠 수(Update)도 있고, 기본적인 CRUD 외에도 스키마를 다루거나 조인 연산등 RDB의 기능을 객체지향적으로 다룰 수 있도록 도와줍니다.



ORM

이미지 출처 : 4 Benefits of Object-Relational Mapping (ORM)


SQLite를 대상으로 하는 안드로이드 기반 ORM 라이브러리를 몇개 찾아보았습니다. 아래와 같은 것들이 있네요.

  1. ActiveAndroid(https://www.activeandroid.com/)
  2. SqliteORM(https://github.com/kremerk/SqliteORM/wiki)
  3. ORMLite(http://ormlite.com)
  4. Storm(https://code.google.com/p/storm-gen/)
  5. Green Dao(http://greendao-orm.com)
  6. Sugar ORM(https://github.com/satyan/sugar)


글 제목에서도 알 수 있지만 Sugar ORM이 간단하게 쓰기에는 쉽게 쓸 수 있도록 되어있네요. 모두 사용해 볼 수는 없어서 각 라이브러리들의 Getting Start에서 사용 방법을 눈으로만 살펴봤는데, DB 핸들링 관련 코드를 만들기 위한 Generater와 사용을 위한 라이브러리가 따로 있는가 하면, 빌드 패스에 이것 저것 추가하고 설정도 하는 것도 있고, 이래 저래 사용하기 복잡해서 좀 귀찮아도 그냥 Helper 구현해서 쓰고 말지 하는 생각이 드는 것들이 대부분이었네요. (사실 새로운 걸 익힌다는 것에 대한 귀찮음이 맞지만요 :D )


어쨌거나 Sugar ORM이 개중에서는 가장 쓰기 쉽도록 되어있네요.

간략하게 사용 순서를 풀어보면

1. 안드로이드 프로젝트 libs 폴더에 라이브러리를 추가한다.

2. 매니페스트에 Application 클래스를 설정한다(보통은 설정되어있지 않고 디폴트로 사용합니다.)

3. 매니페스트에 meta-data 태그를 이용하여 4개의 프로퍼티를 추가한다.

4. 쓴다.






코드로 써 봐야 아는 것에 구구절절 글을 늘어놓는 것 보다 백문이 불여일견 백견이 불여일행이라 하였으니 해보도록 하겠습니다. 개발 환경은 Windows 7, Eclipse Indigo + Android SDK Plug-in입니다.


가장 먼저 Sugar ORM GitHub 다운로드 페이지에서 라이브러리 파일을 다운로드 받습니다.

https://github.com/satyan/sugar/blob/master/dist/sugar-1.1.jar

(글을 쓰는 13.03.04 기준 7개월 전에 업데이트 되었네요)


그런 다음 이클립스를 켜고 새 안드로이드 애플리케이션 프로젝트를 생성해 줍니다.



프로젝트 이름이나 패키지는 본인의 입맛에 맞게 설정하시면 되겠습니다.

다만 Package Name은 기억해 두도록 하세요. 저는 nnoco.example.sugar 로 기본 패키지 경로를 정했습니다.

나중에 Manifest.xml 파일에 속성값으로 쓸 일이 있습니다.


Next -> Next -> ... Finish를 하면 프로젝트가 짠! 하고 만들어졌습니다.


ADK 플러그인 버전에 따라서 libs 폴더를 자동으로 생성해주기도 하고, 없는 경우도 있는데요, libs 폴더는 기본적으로 안드로이드 패키지에서 라이브러리가 있는 클래스패스로 인식을 합니다. 외부 라이브러리 파일의 경우 이곳에 복사하시면 클래스패스에 따로 추가하지 않으셔도 자동으로 잡히게 됩니다.

따라서 프로젝트 루트에 libs가 없는 분은 libs 폴더를 하나 추가해주시면 되겠습니다. 그럼 아래와 같은 프로젝트 구조가 보이게 됩니다. (환경에 따라 조금씩 다를 수 있지만 여기서는 libs 폴더만 있으면 됩니다.)



그럼 저 libs 폴더 안에 프로젝트를 만들기 전에 다운로드 받은 sugar-1.1.jar 파일을 복사해서 넣어줍니다.




여기까지 되었다면 이제 Manifest.xml 파일을 편집해 보겠습니다.

해야할 것은 Custom Appication 클래스를 지정하는 것과, meta-data의 추가입니다.


<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="nnoco.example.sugar"

    android:versionCode="1"

    android:versionName="1.0" >


    <uses-sdk

        android:minSdkVersion="8"

        android:targetSdkVersion="15" />


<!-- Custom Application 지정 -->

    <application

        android:name="com.orm.SugarApp"

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name"

        android:theme="@style/AppTheme" >

        <activity

            android:name=".MainActivity"

            android:label="@string/title_activity_main" >

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />


                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

        <!-- 메타 데이터 추가 -->

        <meta-data android:name="DATABASE" android:value="sugar_example.db"/>

        <meta-data android:name="VERSION" android:value="2"/>

        <meta-data android:name="QUERY_LOG" android:value="true"/>

        <meta-data android:name="DOMAIN_PACKAGE_NAME" 

                      android:value="nnoco.example.sugar"/> <!-- 본인의 패키지로 설정-->

    </application>


</manifest>



저렇게 두 부분만 (라인으로는 5줄!) 추가하면 사용할 준비는 끝입니다.

이제 사용 해보도록 하겠습니다. 만들고자 하는 엔티티는 다음과 같습니다.



간단합니다. 책 엔티티로 제목(title)과 저자(author)를 가지고 있습니다.

여기에 맞는 모델 클래스를 만들어야겠죠? 원하는 위치에 Book 클래스를 하나 만들어보도록 하겠습니다.

모델 클래스를 만들 때 Sugar ORM을 사용하면 하나의 제약사항이 있습니다. SugarRecord를 상속해서 구현해야 한다는 점과, Context를 매개변수로 받는 생성자가 필요합니다. 사실 SugarRecord를 상속 받는 건 제약이라기 보다 편의쪽에 가깝다고 봐야겠네요.




public class Book extends SugarRecord {

private String title;

private String author;


public Book(Context context) {

super(context);

}


public Book(Context context, String title, String author) {

super(context);

this.title = title;

this.author = author;

}


public String getTitle() {

return title;

}


public void setTitle(String title) {

this.title = title;

}


public String getAuthor() {

return author;

}


public void setAuthor(String author) {

this.author = author;

}

}


Context 객체를 받는 생성자와 title, author를 포함해서 받는 생성자, getter/setter를 만들어준 모습입니다.



여기까지 되었으면 메인 액티비티로 이동해서 onCreate 메서드에서 간단하게 테스트를 해보도록 하겠습니다.

// Book 인스턴스 생성

Book book = new Book(this, "논어", "공자");

        

// DB에 저장

book.save();

        

// 수정

book.setTitle("論語");

book.save();

        

// DB로부터 ID 가져오기

long id = book.getId();

        

// ID를 이용해서 객체 가져오기

Book foundBook = Book.findById(Book.class, id);

        

// 로그로 확인

Log.d("Found Book Info", foundBook.getTitle() + ", " + foundBook.getAuthor());

        

// 삭제

book.delete();


api는 참 쉽죠? save()는 없다면 생성하고, 있다면 수정합니다. delete()는 삭제구요.

static 메서드에는 find(...), 나 findById(...)과 같이 select의 기능을 하는 메서드가 있고,

listAll(...) 테이블의 모든 레코드를 가져와 리스트로 반환하는 메서드,

deleteAll(...) 과 같이 테이블의 모들 레코드를 삭제하는 메서드가 있습니다.


이외에도 1:1 관계의 표현, 1:N관계의 표현등에 대한 내용이 있지만 간단하게 소개하는 글이므로 여기까지 쓰도록 하고

더 자세한 내용은 Sugar ORM의 위키를 통해 확인하실 수 있습니다.(http://satyan.github.com/sugar/getting-started.html)


레이아웃을 어느정도 만들어서 EditText 뷰에 속성값을 넣고 추가하고 리스트뷰에서 보여주고 하는 식으로 하려다가 단순한 기능 때문에 오히려 다른 부분(리스트뷰 어댑터 만들고, 이벤트 추가하는 등의)의 작업이 많아지면 의미없는 일이라고 생각하여 그 부분은 제외하였습니다. 

리스트 뷰를 사용하여 DB내용을 확인하는 예제는 첨부하여 올리니 확인하실 분들은 다운로드 받으셔서 확인하시면 됩니다.


Android ORM Test.zip





HTTP 요청 메시지

Full request = 

요청 라인(Request-Line) : <요청 메서드> <요청 URI> <HTTP 버전>

일반헤더(General-Header)

요청헤더(Request-Header)

엔티티헤더(Entity-Header)

CRLF

엔티티본문(Entity-Body)


HTTP 메서드 종류

OPTIONS

GET - REST API에서 자료를 조회하는 기능

HEAD

POST - REST API에서 자료를 생성하는 기능

PUT - REST API에서 자료를 생성/수정하는 기능 (없다면 생성)

DELETE - REST API 자료를 삭제하는 기능

TRACE

CONNECT


HTTP 응답 메시지

Full-Response =

상태라인(Status-Line) : <HTTP 버전> <상태 코드><이유문구> CRLF

일반헤더(General-Header)

응답헤더(Response-Header)

엔티티헤더(Entity-Header)

CRLF

엔티티본문(Entity-Body)\


URL의 구성요소

scheme://<user>:<password>@<host>:<port>/<url-path>?query_string$fragment_id

Scheme : 'http', 'ftp'와 같이 프로토콜을 나타낸다

Host : DNS의 인터넷 주소 규정에 따라 서버를 가리킨다.

Port: TCP 포트번호를 나타낸다. Http 프로토콜의 경우 별도 포트번호를 명시하지 않는다면 디폴트는 80

Path : 구체적인 자원의 위치

Query : 서버에서 작동하는 애플리케이션에 전달되는 매개변수

Fragment id : 참조 또는 자원의 상세한 부분을 의미


논어 (한글판+한문, 영어판)

저자
공자 지음
출판사
더클래식 | 2012-07-30 출간
카테고리
인문
책소개
고전 속에 미래가 있다!고전은 인류가 오랫동안 쌓아 온 소중한 ...
가격비교



죄와 벌(완역본)

저자
도스토예프스키 지음
출판사
하서 | 2008-05-31 출간
카테고리
소설
책소개
러시아의 대문호 도스토예프스키의 대표작『죄와 벌』완역본. 4년간...
가격비교


'그렇다! 인간의 힘으로 못할 일은 하나도 없는데 그저 겁 때문에 아무것도 못하는 것이다.' 8p

BDD는.. 또 어떤 개념인거지..?


TDD 관련 책을 읽다보니 TDD에서 한 보 더 진보한 형태의 개발 방법론이라고 하는데,

국내에는 관련 서적이 보이질 않는다.

BDD 공식 위키를 통해 공부를 해야 할 듯하다.


Behaviour-Driven Development (BDD) is an evolution in the thinking behind TestDrivenDevelopment and AcceptanceTestDrivenPlanning.


It brings together strands from TestDrivenDevelopment and DomainDrivenDesign into an integrated whole, making the relationship between these two powerful approaches to software development more evident.


It aims to help focus development on the delivery of prioritised, verifiable business value by providing a common vocabulary (also referred to as a UbiquitousLanguage) that spans the divide between Business and Technology.


It presents a framework of activity based on three core principles:


Business and Technology should refer to the same system in the same way - ItsAllBehaviour

Any system should have an identified, verifiable value to the business - WheresTheBusinessValue

Up-front analysis, design and planning all have a diminishing return - EnoughIsEnough

BDD relies on the use of a very specific (and small) vocabulary to minimise miscommunication and to ensure that everyone – the business, developers, testers, analysts and managers – are not only on the same page but using the same words.


For people familiar with the concept of DomainDrivenDesign, you could consider BDD to be a UbiquitousLanguage for software development.


It must be stressed that BDD is a rephrasing of existing good practice, it is not a radically new departure. Its aim is to bring together existing, well-established techniques under a common banner and with a consistent and unambiguous terminology. BDD is very much focused on “Getting the words right” and this focus is intended to produce a vocabulary that is accurate, accessible, descriptive and consistent.

http://behaviour-driven.org/



http://www.jbehavior.org 는 BBD의 프로세스를 진행할 수 있도록 지원하는 툴인듯 하다.

이곳에서 설명하는 절차는 아래와 같다. 



TDD학습을 언넝 끝내놓고 DDD와 BDD를 함께 배워봐야겠다.



관련 서적


Behavior Driven Development

저자
Evander Luther 지음
출판사
Acu Publishing | 2011-06-17 출간
카테고리
과학/기술
책소개
-
가격비교

Test Logiciel: Test Unitaire, Test D'Intgration, Visual T Sharp, Test de Performance,Behavior Driven Development, Mock, Squale

'머리가 뛰다' 카테고리의 다른 글

오늘의 WPF, Kinect 관련 이슈  (0) 2013.11.24
책갈피 대신 책갈피 줄  (0) 2013.03.06
Redmine 설치기  (0) 2013.02.16
Phonegap create 오류  (0) 2012.11.25
구글느님 다 해쳐드세영.. ㅠㅠ  (0) 2012.11.06


아침 30분

저자
다카시마 데쓰지 지음
출판사
티즈맵 | 2010-05-30 출간
카테고리
자기계발
책소개
하루 중 가장 중요한 시간은 잠자긴 전 30분과 아침 30분실천...
가격비교



<돈 잘버는 사람은 머리를 어떻게 쓸까?> - 오마에 겐이치

"나는 경영자 앞에서 내 의견을 하나로 압축해 '이건 이렇다'라고 프레젠테이션을 한다. 이때 백해무익한 것이 Bu(그러나, 하지만), Howerver(그렇지만)라는 반응이다. '그렇지만 그런 기획으로는 영업부의 반발이 심할텐데요', '하지만 그 가격으로 맞추기란 쉬운 일이 아니죠' 하고 말해봐야 건설적인 대화가 되지 않는다. 이러한 자세는 프레젠테이션뿐만 아니라, 각종 업무 현장에서 마이너스로 작용할 수밖에 없다." 13p



간사이 한 대학의 유명한 여교수? - 이름이 나오지 않음

인간의 세 가지 유형

- 그만두자,하지 말자, 가지 말자의 '말자말자족'

- 가볼까, 입어 볼까, 해볼까의 '볼까볼까족'

- 해보고 싶다, 물어보고 싶다, 먹어보고 싶다, 가보고 싶다의 '싶다싶다족' 14p

서울로 올라와 연수를 받은지 반년하고 조금 넘는 시간이 지났다.

2단계 프로젝트 처음 기획기간에는 그간 느껴왔던 문제점과 함께 연수 자체에 회의를 느끼고 있었다.

반년이라는 시간에 비해서 이곳에서 얻은게 없다는 생각이 지배적이었다.

생각이 많아지면서 다시금 이곳에서 지내는 동안 '나는 어떠했는가?' 라는 질문을 던져보고 얻은 결론은

'내가 열심히 하지 않았다.'였다.


내 지난 일과들을 조금만 상기해봐도 나는 시간을 매우 허투루쓰고 있다.

가령 오늘의 유머사이트에서 주구장창 유머글을 읽는다던가, 페이스북에서 다른 사람들은 어떻게 지내는가를 보는데도 많은 시간을 허비하기도 하고, 수면 시간은 비슷한데 매번 늦게 자고 늦게 일어나니 하루가 짧게 느껴지기도 하고 제 시간에 해야 할 일들을 제 때 하지 못하고 놓쳐버리는 경우가 많았다.

웃긴 얘기지만 늦게 자고서 점심 때 두시 전에 일어나서 맥런치를 먹어야겠다라고 생각하곤 그리 생각을 한 이후로 여지껏 못먹고 있다.

어쨌거나 내가 열심히 하지 않은 것, 시간을 비효율적으로 쓰는 것들을 고치려고 나를 바꾸기 위한 책읽기를 나흘 전부터 시작했다. 책을 읽기로 마음을 먹고 처음으로 읽은 책이 48분 기적의 독서법이었던 것은 참 잘 된 일이라 생각한다.

그 책을 시작으로 우선은 습관과 관련된 책, 자기계발과 관련된 책들을 읽고 있다.

아직 몇 권되지 않는 책을 읽었지만 재밌는 사실은 분야가 다른 책들임에도 공통된 이야기를 많이 하고 있다는 것이다.

예를 들자면 상투적으로 보일지 모르지만 '책을 많이 읽어라'와 '폭 넓게 두루 지식을 섭렵한 제너럴리스트generalist가 되어라', '의식보다는 무의식을 살려라', '시간은 평등하지만 관리하기에 따라서 효율은 다르다' 등등이다.

48분 기적의 독서법을 비롯하여, 개발 방법론 책인 애자일 마스터에서도, 전뇌학습법에서도, 잠자기 전 30분 습관에서도  같은 주제로 썼다고 생각이 들만큼 비슷한 이야기들이 많이 나온다.

내 행동과 습관과 생활에 변화가 필요하다고 생각해서 먼저 시작한 것은 책읽기와 행동을 기록하는 것.

즉, 어떤 활동에 얼만큼의 시간을 소비하고 있는지를 기록하는 것이다. 내 필요에 맞춰 앱을 만들다가 이내 귀찮아져서는 이미 나와있는 앱들을 찾아보니 많은 수의 시간 관리 앱이 있었고, 그 중 라이프 로거라는 앱을 설치해서 사용하고 있다. 시간관리나 행동관리와는 다른 맥락이지만 돈을 쓰고도 도무지 어디에 그렇게 많은 돈이 들었고, 왜 이리도 빨리 줄어드는지 이유를 찾을 수 없다가 가계부를 쓰고서는 자신이 쓰는 돈이 어느 쪽으로 많이 나가는지 인식하게 되고 낭비가 많은 부분을 알게 될 수 있듯이 행동관리 역시 내가 낭비하고 있는 시간이 무엇인지 그 행동을 할 때만 인식하던 것(놀면서도 사실 걱정하면서 논다. 지금 이거 하고 있을 시간이 아닌데 하며)을 기록을 통해 보다 정확히 인지하고 낭비하는 시간을 줄이고 효율적으로 사용할 수 있다.

아직은 시간 낭비가 된다는 것을 알면서도 하는 것들이 있지만 차츰 줄여가면서 보다 효율적으로 시간을 쓸 수 있게 나를 변화시켜야겠다.

'마음이 뛰다' 카테고리의 다른 글

이기적이다.  (0) 2013.03.08
경비아저씨께서 책을 빌려주셨다.  (0) 2013.03.06
결혼해도 똑같네 23화  (0) 2012.12.07
첫 눈하곤 상관없는 나에 대한 감상 -_  (0) 2012.12.07
비자연스러운 감정  (0) 2012.12.07

이클립스 안드로이드 레이아웃에 EditText 뷰만 넣으면 아래와 같은 예외가 발생하면서

java.util.LinkedHashMap.eldest()Ljava/util/Map$Entry;

Exception details are logged in Window > Show View > Error Log

GUI 화면에서는 제대로 레이아웃이 보이지 않는 문제가 발생했다.


모놀로그님의 글을 통해 1차적인 문제는 해결했으나, EditText에 멀티라인이 적용되지 않는 것이다.


scrollHorizontally="false" 속성을 추가해 보기도 하고

singleLine="false" 로 해보기도 하고

lines="5" 와 같이 line 수를 하드코딩도 해보았으나 모두 적용이 되지 않는다.


1차적인 해결 방법은 EditText에 inputType="textNoSuggestions" 속성을 추가하는 것이었고, 그로 인해 파싱 오류는 없어졌다. 허나 textNoSuggestion 속성값은 IME의 엔터키에 엔터를 완료로 바꾸는 것이라(좀 더 정확히는 사전 기반의 단어 추천을 하지 않게 하는 기능이나 외부적으로는 IME에 완료 버튼을 나타나게 함) EditText 뷰 자체가 싱글라인으로 인식이 된다.


혹시나 싶어 inputType 속성의 값을 textMultiline으로 하니 원래 지정한 대로 scrollHorizontally 속성으로 수평 방향 스크롤도 없어졌으며 Gson에서 pretty print로 얻은 JSON 스트링도 정상적으로 줄바꿈이 되어 표시가 된다.


그러나 파싱 오류는 다시 발생해서 레이아웃 확인을 Graphical Layout에서 확인할 수는 없게 되었다.

textNoSuggestions 말고 근본적인 파싱 오류의 원인을 찾아봐야겠다.





참고 : inputType 속성 값에 대한 특성은 서동규님의 블로그 글에서 확인할 수 있음


애자일 마스터

저자
조너선 라스무슨 지음
출판사
인사이트 | 2012-02-22 출간
카테고리
컴퓨터/IT
책소개
애자일 마스터: 프로젝트 인셉션, 추정과 계획 그리고 실행『애자...
가격비교



같은 공간에서 일하기

같은 공간에서 일하는 팀은 일을 더 잘 하게 되어있다. 질문이 나오면 빨리 답을 얻을 수 있고, 문제가 생기면 그 자리에서 해결할 수 있다. 팀원끼리 교류할 때 생기는 문제도 훨씬 적고, 서로 간에 믿음도 훨씬 빨리 생긴다.

...

분산된 공간에서 일하는 팀이 같은 공간에서 일하는 팀과의 차이를 메우기 위해서 할 수 있는 일

프로젝트 초반에 모든 팀원을 한자리에 모일 수 있는 경미를 마련하는 일이다. 비록 며칠이더라도, 서로를 알아가면서 농담하며 식사를 함께 하는 동안, 각기 개성 있는 팀원들이 효율적인 하나의 팀으로서 더욱 단단한 결속력을 갖출 수 있게 말이다.

그 후로는 비록 각지에 흩어져 있더라도, 여러가지 의사소통 도구들을 이용해 팀원들 간에 소통을 지속한다면, 마치 한곳에서 서로 함께 일하는 것과 같은 기분을 느끼게 될 것이다. 15p



애자일 팀을 구성할 때 알아야 할 팁

제너럴 리스트를 찾아라

애매모호한 상황을 개의치 않는 사람을 찾아라

제멋대로 행동하는 사람이 아닌,팀 플레이어를 찾아라 30p



인셉선

어떤활동이나 단체를 시작, 설립하는 단계라는 사전적 의미를 갖고 있다. 쏘트웍스에서는 인셉션을 프로젝트 초기단계에 고객과 개발팀이 서롤르 알아가는 과정을 갖는 일정한 기간(주로 1~2주)을 일컫는다. 34p



대부분의 프로젝트가 실패하는 이유

이루어진 적 없는 합의가 이루어졌다고 믿는 성급한 가정이 대부분의 프로젝트가 실패하는 이유.

-> 현명한 선택을 하기 위해 목표, 비전, 프로젝트의 현재 상태에 대하 다른 팀원들과 소통하기

-> 이해관계자가 적절한 결정을 내릴 수 있도록 프로젝트에 관해 그가 알아야 할만한 정보 제공하기. 35p



인게이지먼트(engagement)는 고객과의 좋은 관계를 유지하고 서로를 더 잘 알아가기 위해 하는 활동을 일컫는데, 이는 프로젝트가 시작하기 전/후를 포함하여 프로젝트가 진행 중일 때도 지속적으로 일어난다. 현재 그 고객과 프로젝트를 하고 있지 않더라도 인게이지먼트는 언제든 진행될 수 있는 일이다. 36p



인게이지먼트나 프로젝트 초기에 질문을 하면그게 무엇이든 별로 잃을 게 없다. 인게이지먼트나 세일즈 초반에 어려운 질문(껄끄러운 질문)을 하라.

- 팀의 프로젝트 경험이 얼마나 되니까?

- 이런 작업을 해본 적이 있습니까?

- 예산은 얼마나 배당되어 있나요?

- 프로젝트는 누가 지휘합니까?

- 애널리스트 둘에 개발자가 서른 명 있다는 데 문제가 없을까요?

- 객체 지향언어를 사용해 본 경험이 없는 주니어 개발자들로 이루어진 팀으로 애자일 방법론을 사용해서 레거시 메인 프레임 시스템을 루비온레일스로 재구축해 본적이 있습니까? 36p



인셉션 덱

- 우리가 왜 여기에 모였을까?

- 엘리베이터 피치

- 제품의 광고를 직접 디자인해 보기

- NOT 리스트

- 프로젝트와 관련된 다양한 사람들과 알고 지내기

- 해결책 보여주기

- 야근거리

- 규모 정하기

- 우선순위 정하기

- 미리 알아야 할 비용 37p



>> 재밌게도 어제 읽은 '48분 기적의 독서법'과 이 책은 분야가 전혀 다른 책임에도 불구하고 사람에 있어서는 제너럴리스트를 지향한다.





한 팀 내에 우리가 어디로 가야 하는지,우선순위는 무엇인지,다음에 해야할 일이 무엇인지에 대해 다른 생각을 가진 여러 명의 이해당사자가 존재해서는 안된다.

그래서 여러분은 그 이해당사자들의 대표가 누구인지 분명히 알아야 한다. 이 말은 대표 외의 사람들은 아무런 의견도 내지 말아야 한다는 뜻이 아니라, 다양한 의견을 수렴해 최종적으로 선택을 하는 사람이 누구인지 알아야 한다는 것이다. 76p



단위 테스트는 피드백을 즉각적으로 준다.

단위 테스트는 회귀테스트 비용을 극적으로 낮춰준다.

단위 테스트는 디버깅 시간을 획기적으로 줄여준다.

단위 테스트는 우리가 자신 있게 배치할 수 있게 도와준다. 192p



기술적 부채란 임기응변, 난도질, 복사해 붙이기 같이 우리가 생산성과 일정이라는 미명 아래에 코드 베이스에 저질러 놓은 죄악들이 오랫동안 누적된 결과다. 200p



단위 테스트와 리팩터링, 이 둘은 소프트웨어의 설계가 빈약해 생기는 고민을 깨끗하게 해결하는 무기다. 209p



애자일 선언

프로세스와 도구보다 개인과 상호작용을

포괄적인 무너보다 제대로 작동하는 소프트웨어를

계약 협상보다 고객과의 협력을

계획에 따르기보다 변화에 대한 대응을 236p

Individuals and interactions over processes and tools

Working software over comprehensive documentation

Customer collaboration over contract negotiation

Responding to change over following a plan



애자일의 12가지 원칙

1. 우리가 가장 우선시하는 것은 신속하고 지속적으로 가치 있는 소프트웨어를 고객에게 전달함으로써 고객 만족을 이루는 일이다.

2, 뒤늦게 요구사항이 바뀌더라도 즐겁게 받아들여라. 애자일 프로세스는 고객이 경쟁에서 우위에 서도록 변화를 활용한다.

3,. 작동하는 소프트웨어를 몇 주 혹은 몇 달마다 고객에게 전달하라.주기는 짧을 수록 좋다.

4. 프로젝트 기간동안 업무 전문가들과 개발자들은 매일 함께 일해야 한다.

5. 의욕이 가득한 사람으로 팀을 구성하라. 그들에게 필요한 환경과 지원을 아낌없이 하고 난 후에는 이들이 맡은 바 일을 완성할 것이라고 믿어라.

6. 개발 팀 내의 누구에게든 가장 정확하고 효과적으로 정보를 전달하는 방법은 그 사람과 직접 대면하면서 이야기하는 것이다.

7. 작동하는 소프트웨어는 프로젝트의 진척을 알 수 있는 주된 척도다

8. 애자일 프로세스는 지속가능한 개발을 장려한다. 후원자나 개발자, 사용자들은 언제까지고 일정한 보폭을 유지할 수 있어야 한다.

9. 탁월한 기술력과 훌륭한 설계에 끊임없이 주목하는 것이 기민함을 향상시킨다.

10. 단순함, 하지 않아도 되는 일은 최대한 안 하게 하는 기교, 이것이 핵심이다.

11. 최고의 아키텍처나 요구사항, 디자인은 자기조직화된 팀에서 나온다.

12. 팀은 정기적으로 더욱 효과적으로 일할 수 있는 방법을 숙고하고, 그에 따라 행동을 조율하고 조정한다. 236p



1. 2013. 3. 7 12:50 AM



+ Recent posts