Spring Batch 용 pom.xml

Spring Batch 기반 application 구현시 튜토리얼에 언급된 대로 pom.xml을 작성하였더니 IntelliJ에서 제대로 build 되지 않았다.

2시간 가까이 pom.xml 문제인지, IntelliJ 문제인지 등으로 씨름 후, GitHub에 올라가 있는 Spring Batch 용 pom.xml을 참고하여 해결하였다. (튜토리얼이 틀린 듯)

Setting이나 Configuration 관련 문제는 Google이나 Stack Overflow, GitHub 등을 검색하면 어지간하면 해결할 수 있다.
왜 pom.xml 자체를 검색할 생각을 하지 못했는지 그게 더 궁금하다.

초간단 User Stories (사용자 스토리) 요약

‘User Stories Applied’로 유명한 Mike Cohn의 웹사이트에서 User Stories에 대해 잘 정리된 글을 발견하였다. (엄청 짧다)
이 정도로도 충분한데 대체 300페이지가 넘는 두꺼운 책은 왜 쓰셨는지.

아래는 그 짧은 글의 내 입맛대로 요약본.

User Story란?

실 사용자의 관점에서 작성된 해당 기능의 짧고, 간단한 설명.
아래와 같이 보통 작성한다.

As a _____, I want _____ so that _____.

예제를 보자

아래는 epics, 즉 아주 커다란 사용자 스토리의 예이다.

As a user, I can backup my entire hard drive.

당연히 이건 한 번의 iteration으로 끝낼 분량이 아니다. 따라서, 아래와 같이 여러 개로 쪼갠다.

As a power user, I can specify files or folders to backup based on file size, date created and date modified.

As a user, I can indicate folders not to backup so that my backup drive isn’t filled up with things I don’t need saved.

세부사항을 넣어야 한다면 어떻게?

일단 해당 사용자 스토리를 잘게 쪼개본다. 또는 “Conditions of satisfaction(CoS)” 항목을 추가한다.

CoS는 간단히 말해 high-level acceptance test로 볼 수 있는데, 아래 사용자 스토리 예를 보면 좀 더 명확해진다.

As a vice president of marketing, I want to select a holiday season to be used when reviewing the performance of past advertising campaigns so that I can identify profitable ones.

이렇게 작성하다보니 뭔가 추가적으로 적어주어야 할 것 같은 의무감 같은 것이 생겼다.
그래서 아래와 같이 CoS를 추가해서 세부사항을 언급해주었다.

  • Make sure it works with major retail holidays: Christmas, Easter, President’s Day, Mother’s Day, Father’s Day, Labor Day, New Year’s Day.
    Support holidays that span two calendar years (none span three).
  • Holiday seasons can be set from one holiday to the next (such as Thanksgiving to Christmas).
  • Holiday seasons can be set to be a number of days prior to the holiday.

누가 사용자 스토리는 쓰나?

누구든 상관 없다. product backlog를 관리하는 것이 PO의 의무이긴 하지만, PO가 반드시 사용자 스토리를 쓰란 법은 없다.

언제 쓰나?

프로젝트 기간 내내. 적어도 3 ~ 6개월 주기로 product backlog의 (재)작성, 수정 등의 작업은 필요하다.

사용자 스토리는 요구사항 정의서를 대체하는 것인가?

적어도 애자일 프로젝트에서는 사용자 스토리가 가장 선호되는 product backlog 양식이다.

“As a user, I want …” 부분을 실 요구사항에 대한 포인터로 사용하는 것도 좋은 생각이다. 즉 사용자 스토리는 Workflow diagram이나, 계산방법을 보여주는 Spreadsheet, 또는 팀이나 PO가 필요로하는 어떤 형태의 artifact도 가리킬 수 있다.

 

추가적으로, 아래 링크에서 조금 더 세부적인 내용을 확인할 수 있다.
여전히 짧은 글이지만 조금 더 많은 예제와 ‘INVEST’ 등의 사용자 스토리 작성 원칙들이 기술되어 있다.

Writing User Stories, Examples and Templates In Agile Methodologies

맘에 들지 않는 Visual Studio의 Editor

Visual Studio 새 버젼 출시에 앞서 개인적으로 가장 많이 바랬던 기능은 Editor의 개선이었다.

얼마 전 2017 버젼이 출시되었는데, 사실 C++ 쪽만 쓰고 있어서 개발 결과물에 대해서는 큰 바램이 없다.
그보다 프로그램 구동부터 종료 때까지 거의 대부분 Editor와 Output(Debug 시에는 둘 다)을 바라보는데 이 부분은 근 10년이 넘도록 변화가 없는 듯 하다.

매일 사용하는 JetBrains IDE나 Sublime Text는 그 자체로도 훌륭한 Tool이지만, 가장 맘에 드는 것 중 하나는 Editor/Console 화면이다.
테마 지정은 물론, 폰트와 줄간 크기를 내 입맛대로 조정할 수 있는데 – 예를 들어 PyCharm의 경우 Font 14, Line Space 1.1 – 이것만으로도 완전히 다른 환경에 온 듯한 느낌을 받는다.
CLion을 보면 심지어 Editor용 배경화면도 지정할 수 있는데 이건 좀 오버 같고.

왜 Visual Studio 팀은 이런데 신경을 안 쓰는지 모르겠다.
타 기능 개선에 비해 어려운 일도 아닐 것 같은데.

근시사회

이 책은 왜 우리 사회가 충동적이고 근시안적이 되었나에 대한 다양한 통찰을 준다.
미국의 사례를 중심으로 이야기를 하고 있는데, 요즘 트럼프 대통령 취임후 벌어지는 일들을 보며 지금이 바로 이 책을 읽기 적절한 시점이란 생각이 들었다.

먼저 1부에서는 왜 현대는 심각할 정도로 나 중심의 사회로 바뀌게 되었는지, 그리고 시장은 그에 대해 어떻게 반응했는지를 다룬다.

저자는 애플, 구글 등 개인용 첨단장비를 제공하는 업체들 대부분이 실제로 파는 것은 일종의 ‘생산성’, 즉 최소한의 노력으로 순간적 쾌감을 극대화하는 능력이라고 말한다.
이 생산성은 애덤 스미스나 경제학자들이 말하는 생산성 – 기아와 빈곤을 해결하고 효용의 극대화를 통해 생존 능력을 높여준 것들 – 이 아니라, 개인들의 욕망을 자극하는 기제機制이다.
우리는 매번 생산성이 높아지기를 기대하며 새롭게 출시되는 제품을 빠르게 낚아챈다.
충동 사회의 핵심에 놓인 것은, 언제 어디서든 효율성과 생산성을 높이려는 이런 자동 반사적 행동이다.

이런 일련의 개인 욕망 추구는 소비자 경제가 점점 득세하면서 심화되기 시작한다.
한 세기 전에는 대다수 경제활동이 우리 ‘외부’의 삶에서, 즉 물리적인 ‘생산’의 세계에서 일어났다. 우리는 물건을 만들었고, 농사를 지었으며, 어느 정도 수량 예측이 가능한 재화와 서비스를 만들었다.
지금은 정반대로, 우리의 경제규모는 엄청나게 커졌지만 대다수 경제활동은 ‘소비’ 영역에 집중돼있다. (미국의 경우 70%) 이러한 소비활동은 상당부분 자의적이어서, 필요가 아닌 우리 내부의 열망과 바람, 정체성과 은밀한 갈망, 불안과 지루함이 소비를 끌어내게 된다.
시장은 점점 이런 자아와 통합을 이루게 되는데, 포화 상태의 산업자본주의 경제에서 모든 생산을 포용할 수 있는 것은 자아의 끝없는 욕망뿐이기 때문이다.

시장이 줄기차게 생산하면서 우리는 자아 표출이라는 힘에 상당히 다가설 수 있게 되었는데, 저자는 이러한 통합이 궁극적으로 바람직하지 않다고 본다.
자아발견 및 정체성 탐구 자체가 잘못된 것은 아니지만, 그것들에만 너무 몰두하면서 ‘장기적인 사회적 필요’는 충족시키기 힘들어지게 되었기 때문이다. (건강보험이 대표적인 예이다)
이젠 사회적 목표나 책임감 같은 것은 제거하거나 최소화해야할 ‘비효율’로 본다. 당장의 이득에 비해 미래의 가치가 많이 떨어진다고 생각하기 때문이다.
이렇듯 손익에 집착하는 추세는 우리가 2008년 금융위기로 인한 경기 침체에서 벗어나 유례없는 기업 이익을 거두게 된 이유를 설명해준다. 동시에 노동자와 지역사회가 유례없는 불안에 떠는 이유 역시 설명해준다.

즉 저자는 효율성을 비난하는 것이 아니라 효율성 ‘이데올로기’를 비판한다.
‘언제나’ 최저 비용으로 최대 이익을 얻는 것을 목표로 해야 한다는 믿음은 잘못 되었다는 것이다.
하지만 이런 현재의 문화는 자아탐닉과 몰두를 어떤 치료가 필요한 인격적 결함으로 여기기는 커녕 하나의 라이프스타일과 ‘제품군’으로 칭송하고 정당화하고 있다.

2부 ‘깨진 거울’에서는 앞서 언급한 개인화의 문제를 다양한 측면에서 다룬다.

5장 ‘나홀로 집에’서 저자는, 사람들이 점점 자신의 취향에 맞는 공동체를 발견하기 쉬워지고 끼리끼리 모이면서 나라 전체의 사회적 결속을 떨어뜨린다고 지적한다.
이는 정치적 양극화의 심화로 이어지게 된다.

민주적 문화가 제대로 작동하려면 ‘계획에 없던 만남’에서 생기는 혼란과 어색함이 필요하다. 이런 만남에서 시민들은 ‘사전에 택하지 않은 것들 그리고 생각해 보지 않았거나 껄끄러운 주제 및 견해에 노출된다. 그렇지만 우리가 앞서 살핀 대로 계획에 없던 만남, 예기치 않은 생각들, 거슬리는 사람들은 우리가 맞춤식 삶과 경험에서 점점 걸러 내려는 대상들이다.


과거 미국인은 각자의 차이에 대처하는 법을 알았고 그러한 행동으로 공동체와 사회가 제 역할을 하고 온전히 유지되기 위해 필요한 공통분모를 지켰다. 그렇지만 지금은 의견을 수용하려는 최소한의 노력조차 자아 표출 욕구를 침해하는 것으로 본다. 그저 나와 성향이 같은 사람들과 소통하거나, 내 생각과 맞는 아이디어나 관점을 고민하는 것을 더 편하게 여긴다.
그렇지만 이는 해로운 습관이다. 일단 현실 세계든 가상 세계든 나와 다른 사람의 차이를 인정하지 않고 거리를 두기 시작하면 개별화 현상은 더욱 심해진다…
구성원의 생각이 비슷한 공동체는 더욱 극단적 성향을 띠면서 반대 의견을 잘 수용하지 못한다.

더 나아가, 소비자 경제에서 개인의 힘이 점점 커지게 되면 ‘동료와의 연대’조차도 딱히 유용하다고 보지 않게 된다.
이런 자기중심적 문화에 익숙한 시민들이 그림이나 시, 책을 접할 때 맨 먼저 던지는 질문은 ‘이 작품은 훌륭한가 저속한가’가 아니라 ‘나에게 어떤 도움이 되는가’이다.

6장 ‘노동자를 위한 나라는 없다’에서는 매우 심각해지고 있는 고용 환경을 다루며, 7장 ‘질병으로 치료되는 사회’는 미국 의료보험 제도의 근본적인 문제가 무엇인지 설명해준다.
몇가지를 옮겨보면,

… 오바마케어는 1980년대에 사라져야 했던 뉴딜식 경제 관리 정책으로 복귀하기 위한 수십 년 만의 첫 시도였다. 더 근본적으로 우리는 오바마케어에 대한 반응을 보면서, 더 큰 사회 문제의 해결을 위해 개인을 희생한다는 소중한 관념을 다시 평가해야 했다. 일각에서는 자기중심적 이데올로기와 과민 반응하는 소비자 경제에 수십 년간 길들여진 결과, 희생적이지 못한 개인이 사회정의 실현에 결정적 장애가 되었다고 주장하기도 했다.

… 현재 미국 의료 제도의 경제적 기여를 평가할 때 치료 결과가 아닌 치료 행위를 바탕으로 하기 때문에 소위 ‘질병이 주도하는 경기회복’이라는 황당한 이야기가 나오게 된다.
경기를 자극하려면 사람이 아파야 하고 그래야 경기가 나아지기 때문이다.

이런 비관적이고 절박한 상황에 대항하여 저자는 몇가지 제안을 하게 되는데, 그 핵심은 건강한 공동체를 만들어야 한다는 것이다.
구체적인 몇가지 방안으로,

정부의 적극적 시장 개입
정부는 사회적/정치적 우선순위에 따라 경제의 사회적 산물을 이동시킬 수 있는 수단(조세, 보조금, 규제 등)을 갖추고 있다.
지난 40년 간 우리는 시장의 결정에 맡김으로써 갈수록 단기적이고 부당하며 지속 불가능한 결과를 선호하는 부패한 시장을 만들어내게 되었다.
정부는 보다 적극적으로 시장에 개입해야 하며, 이와 동시에 근본적으로 경제의 목적지가 어디인지, 경제적 우선순위와 그 가치가 무엇인지 진지하게 논의해야 한다.

시장과 거리 두기
우리는 제조업을 키우고 금융업을 줄이기 위해 온갖 수단을 강구해야 한다.
금융 부문의 비대화가 낳는 실질적인 위험은 경제 변동성 같은 것이 아니라 금융 부문의 사고방식이 문화 전반에 침투하는 것이기 때문이다.

금융시장의 대형 투자자들은 각종 대인관계 서적에서 경고하는 성품을 모두 갖췄다. 바로 충동적이고 단기적이며 헌신성이 전혀 없는 모습이다.
그런 금융이 노동시장과 경제에 과도한 영향을 주는 현실에서 우리는 만사를 시장에 맡기면 안된다.

직원 교육을 강화하고 은행을 쪼개기
노동은 단순한 ‘비용’이 아니다. 유럽처럼 직원 교육을 강화해야 한다.
특히 이 모든 폐해의 중심에 있는 대마불사 은행들을 규제 가능한 더 작은 단위로 쪼개야 한다.

그밖에, 브랜드 정치를 지양止揚 하기, 끊임 없이 충동 사회의 패턴과 가치관을 밀어내고 내면의 소리를 듣기를 주장하며, 단기성과 이기심에서 벗어난 현실을 고려하는 질문을 자신에게 던지기를 강하게 권유하고 있다.

20170312_the_impulse_society

Perforce, Subversion, Git

Perforce(P4)를 처음 쓰기 시작할 때는 ‘이거 Svn의 유료 버젼 아냐..?’라는 좀 무식한 생각을 했다.
사실 개인적으로는 Git을 쓰고 있고 회사의 메인 프로젝트에서는 Subversion을 쓰던 중 또 다른 프로젝트에서 Perforce를 쓰게 된 터라 내심 여간 귀찮지 않았다.

그런데 계속 쓰다보며 든 생각은, 결국 쓰기 나름이라는 것이다.
즉 잘 쓰면 썩 훌륭한 툴이라는 것. 특히 Performance 측면에서는 여타 VCS 중 제일 좋은 것 같다.

수많은 논의가 이미 온라인 상에 있지만 그 중 아래 글들은 참고할 만 하다.

Perforce의 branching 개념은 Git에 훨씬 익숙한 나로서는 아직도 좀 이상하지만, 전반적으로 P4 + Swarm(Code Review Tool)은 사용하기에 상당한 매력이 있다.
특히 Code base의 덩치가 클 때는 아무래도 P4가 맞는 선택이 아닐까 싶다.

밀레니엄 1부: 여자를 증오한 남자들

시사 월간지 ‘밀레니엄’의 기자 미카엘은 거대 금융재벌 베네르스트룀의 음모로 곤경에 빠지게 된다. 이때 대재벌 방예르 가의 총수 헨리크 방예르가 미카엘에게 거액의 보수를 제안하며 방예르 그룹 내 감춰진 과거의 비밀을 조사해달라고 부탁한다. 천재 여성 해커 리스베트(사실 크래커에 더 가까운)가 합류하게 되면서 어두운 과거 뒤에 숨겨진 범죄가 점점 모습을 드러내게 된다… 는 이야기인데, 흡입력이 굉장하다.

동시에, 이렇게 모든 등장인물이 비호감인 소설도 드문 듯 하다. 특히 주인공 리스베트와 미카엘은 감정적으로 상당히 불안한 인물들인데, 의례 화내야 할 일에는 침묵하거나 별 감정이 없는 반면, 특정 주제에 대해서는 비정상적으로 흥분하고 반응하는 식이다.
그외 인물들도 실제에서는 별로 만나고 싶지 않은 불편한 사람들이고.

이것때문에 읽으면서 종종 짜증날 때도 있었는데 그럼에도 불구하고 미친 듯이 읽게 된 이유는, 낡고 색 바랜 과거의 미스테리를 첨단 디지털 방법과 구식 아날로그 방법으로 하나씩 풀어나가는 이야기의 흥미진진함 때문이다.
사실 범인이 누구냐보다, 막막하기만 한 수십년 전의 과거를 하나 하나 파헤쳐나가며 실마리를 발견해가는 모습이 훨씬 박진감 넘친다.

그리고, 이 책을 읽고 나서 스웨덴에 대한 묘한 선입관 생긴 것 같다.
별로 좋은 느낌은 아닌.

20170203_millennium_1

우주비행사의 지구생활 안내서

우주비행사가 쓴 자기개발서라고 봐도 될 듯 하다.

‘발사 준비’, ‘이륙’, ‘지구 귀환’의 총 3부로 구성되어 있으며, 로켓 탑승 및 발사, 우주에서의 생활 등 흥미진진한 이야기들은 대부분 2부, 3부에서 언급되고 있다. 하지만 제목 그대로 ‘지구 생활’에 도움되는 이야기는 1부에 대부분 있다.

최초의 캐나다 출신 우주인으로서 그는 화려한 경력을 갖게 되었지만, 그를 비롯하여 모든 우주비행사는 거의 대부분의 시간을 지상에서 ‘준비’하는데 사용한다고 한다.
그래서인지 성공에 대한 그의 정의는 소박하기까지 하다.

나는 우주비행사라면 할 법한 일들을 하려고 쭉 노력했지만, 그렇다고 악착같이 훈련에만 매달리지는 않았다. 혹시라도 우주에 갈 경우에 대비하겠다는 결심만큼, 하루하루를 알차고 즐겁게 보내겠다는 마음도 똑같이 단호했다. 여태껏 내 선택으로 인해 불행하게 지내왔다면 난 결국 도중하차하고 말았을 것이다. 내게 고난을 무릅쓰는 순교자의 유전자는 없으니까.

우주비행에 나의 자존감이나 행복, 나의 직업적 정체성 따위를 걸지 않았기에 하루하루의 일상이 즐거울 수 있었다. 두번째 비행임무를 완수한 뒤 다시는 우주로 나가지 못할 거라는 말을 듣고 지상에 머물렀던 11년 동안이나.

내게 성공이란 예전이나 지금이나 (물론 대단한 성취감을 느끼는 일이긴 하지만) 로켓을 타고 우주로 날아오르는 것이 아니다. 성공은, 우주비행으로 이어지든 아니든, 예고되지 않은 기나긴 여정 내내 자신이 하는 일을 즐기는 것이다. 훈련을 더 높은 어떤 목표에 이르는 준비단계로 여겨서는 안 된다. 그 자체가 목적이어야 한다.

물론 이런 식의 견해는 진부하거나 소극적으로 보일 수 있지만 작가는 평생동안 이런 마음가짐으로 실천하고 지금도 노력하고 있다는 점에서 그의 충고는 매우 현실적으로 와닿는다.
지향하는 바가 비슷해서 더 끌리기도 하고.

인상 깊었던 대목 몇가지를 더 옮기면,

우주비행에서 ‘자세’는 방향성을 가리킨다. 태양과 지구 또는 다른 우주선의 위치와 견주어 나의 우주선을 어디로 향하도록 할지를 가리키는 말이다. 자세를 제어하지 못하면 두 가지 일이 생긴다. 우주선이 공중제비를 돌기 시작하면서 승무원들이 정위치를 벗어나고, 우주선 또한 올바를 경로를 이탈한다. 시간이나 연료가 부족할 경우, 이로 인해 생사가 갈릴 수 있다. 이를테면 소유스 로켓 안에서 우리는 모든 출처에서 단서(잠망경, 다중 센서, 지평선)를 이용하여 지속적으로 자세를 모니터링하고 필요하다면 조정한다. 자세 유지는 임무를 성공적으로 수행하는 데 가장 기본이기 때문에 우리는 자세를 잃지 않으려고 만전을 기한다.
내 경험상 이는 지구에서도 마찬가지다. 궁극적으로 내가 바라던 경력상의 목표에 이르렀는지 아닌지를 판가름하는 것은 내가 아니다. 세상에는 내가 제어할 수 없는 변수가 수두룩하다. 하지만 단 한 가지는 내가 제어할 수 있다. 바로, 목표를 향해 나아갈 때의 자세다. 자세를 통해서만 든든함과 안정감을 느끼며, 옳은 방향을 향하고 있다고 확신할 수 있다.

— 2장, 자세를 유지하라

나로선 참 의아하다. 스승입네 하는 많은 이들이 사람들에게 승리의 모습을 눈앞에 그려보라고 강력히 권고하고는 거기서 끝인 것이. 어떤 이들은 좋은 일이 생기게 해달라고 오랫동안 열심히 기도하면 실제로 이루어지고, 반대로 부정적인 면에 집중하면 실제로 나쁜 일이 생긴다고 주장한다…
사실 문제를 예상해서 해결책을 찾는 것은 걱정하는 것과는 정반대의 일, 즉 생산적인 일이다. 마찬가지로 행동계획을 내놓는 것은 마음의 평안을 주므로 시간낭비가 아니다. 일어나지 않을 일을 준비하는 것이더라도 그 일이 위험성이 매우 높다면 그럴 만한 가치가 있다.

— 3장, 부정적 사고의 힘

사전계획은 지금의 나를 있게 해준 사람들에게 내가 그들을 각별하게 생각한다는 사실을 알리는 손쉬운 방법이다. 그때 그때 감사하는 마음을 표현할 기회를 번번이 놓친다면, 언젠가는 아주 화려한 축배로 가장 소중하고 가까운 사람들의 지지와 성원에 감사를 표한다해도 통하지 않는 순간이 올 것이다…
가족과 함께 보내는 시간을 우선해야지 내가 가족을 얼마나 소중히 여기는지를 가족도 알게 된다.

— 7장, 고요의 기지, 카자흐스탄

능력은 어느 정도 있지만 환경을 제대로 이해하지 못하면 플러스인 사람이 결코 될 수 없다. 기껏해야 제로인 사람이다. 하지만 제로인 사람이 나쁜 건 아니다. 문젯거리를 만들어 사람들에게 괜한 고생을 시키지 않을 만큼 유능하다는 뜻이다. 대단한 사람이 되기에 앞서 유능해야 하고 그 능력을 다른 사람들에게도 증명해야 한다. 안타깝게도 지름길은 없다.

‘제로’가 되는 것을 목표로 삼아도 기회는 얼마든지 찾아온다… 자존감이 있는 사람이라면, 배의 조타를 맡든 노를 젓든 둘 다 똑같이 중요하다고 여기는 법이다. 옷장을 정리한다고 해서 사람의 품격이 손상되진 않는다. 사실 그런 일도 즐기며 할 수 있다. 어떤 일로든 전체 임무에 이바지한다고 여긴다면 말이다.

— 9장, 목표는 제로

지금 그는 거창하고 눈부신 순간을 지나 사다리를 내려오고 있는 듯 하지만, 본인은 새로운 사다리를 오르기 위한 일련의 과정으로 생각하고 있다.

새로운 사다리를 오르기 위한 준비라는 말에 최근 나의 상황을 돌아보면서 깊은 공감대를 느낄 수 있었다.
작가의 말처럼, “날마다의 행동이 내가 어떤 사람이 될지를 결정하겠지.”

20170121_우주비행사의 지구생활 안내서

10 Things You Can Do in Your Daily Life to Improve Your Personal Development

원문은 여기.

다행히 많은 항목들은 이미 실천하고 있는 것들지만 여전히 부족한 부분이 있다.
그 세가지는 따로 표시 하였다.

1. Read about what you want to improve.

2. Find a mentor.

3. Reflect at the end of each day.

4. Create a strong practice regimen.

5. Find others to push you and train with.

6. Create a reward/punishment system.

7. Stay honest with yourself.

8. Find role models you can look up to.

9. Measure your progress.

10. Consistency is the key.