Agile Android Software Development
- Etienne Savard
애자일 안드로이드 프로그래밍에 대해 번역본입니다. 번역과 관련한 문의는 http://mnworld.co.kr 혹은 shakejj@gmail.com로 부탁드립니다. 해당 글은 퇴고와 내용이 지속적으로 추가 될 예정입니다.
1장 : 기술에 대한 시각과 Agility
이번 챕터에서는 몇 년간 끊임없이 진화하는 IT필드 속에서 일을 하며 경험한 팁과 방법을 알려 줄 것이다. 팀에 도움이 되는 툴에 대해서도 이야기 할 것이다. 이야기 할 팁과 툴들은 안드로이드와 관련된 프로젝트에 국한 되는 것이 아니다. IT와 관련 된 모든 업무 과정에서 사용 및 응용이 가능한 이야기다.
기술시장 관찰하기
IT 컨설턴트로써 일을 하며 배운 것이 많다. 스스로 프로그래밍 능력이 뛰어나지 않은 것을 알고 있었기 때문에(새로운 것에 대해 아는 것을 좋아하고, 실패하는 것을 두려워 하지 않고 도전하는 것을 좋아하기 때문에) IT 컨설턴트라는 직업을 가지고 일을 했다. 물론 돈이 목적은 아니였다.
대부분의 개발자들은 IT 필드에 존재하는 다양하고 수 많은 기회를 포착해내기 힘들다. 매일 같은 패턴의 생활이 반복되고 안정적이기 때문이다. 이런 기회를 포착하기 위해서는 새로운 개발 언어와 개발 트렌드에 대해 연구하고 미래에 인기를 얻을 프로그래밍 언어를 찾아 습득해야 한다.
개발자에는 두 가지의 그룹으로 나눌 수 있다. early adopters 그룹과 fellowers 그룹으로 나눌 수 있다.
개인적으로 early adapters 그룹을 선호한다. 그리고 early adopters 그룹과 같은 팀이 되어 일을 하는 것을 좋아한다. 개발 팀에게 새로운 툴을 쓰자고 제안을 할 경우, early adopters 그룹의 개발자들은 fellowers그룹의 개발자들보다 적극적인 태도를 보인다. 즉 변화에 대한 반발이 적다. 다른 말로 풀이하면 early adopters 그룹은 툴에 의존하는 의존도가 낮다고도 해석할 수 있다. 여기서 '변화'란 마치 겨울의 눈이 녹으며 봄이 되듯이 거대한 변화를 의미한다. 이런 거대한 변화가 일어나면 두 그룹 모두 결국엔 받아들 일 수 밖에 없게 된다. 결과는 간단하다. 이런 변화를 따라가거나 혹은 받아들이지 못해 도태되거나 둘 중 하나이다. 블랙 베리가 이런 변화와 관련 한 좋은 예이다. 블랙 베리는 한 때 스마트폰 시장의 선두 주자였으나, 경쟁에서 도태되어 버렸다. 고객들에 의해 변화하는 흐름을 제대로 이해하고 받아들이지 못했기 때문이다. 현재 블랙 베리는 시장에서 어려움을 겪고 있고, 마이크로소프트도 모바일 시장에 뒤늦게 진입해 고전을 면치 못하고 있다. 한편, 구글이나 애플의 경우에는 ealy adopter 그룹으로 시장에서 큰 수익을 창출하고 있다. 구글과 애플은 스마트폰이 나오기 전에는 전혀 다른 시장에서 수익을 창출하던 회사였다. 하지만 두 기업 모두 스마트폰에 대한 기회를 엿보고 있었고, 변화를 빠르게 수용했기 때문에 시장을 리딩하는 기업이 되었다.
이런 변화를 받아들이는 것은 기업에게만 해당하는 문제가 아니다. 개발자인 당신도 IT 필드를 다양한 시각으로 폭넓게 관찰하면서 선두에 서야 한다. 그러면 과연 어떻게 해야 시간과 노력을 절약하면서 필드에 대한 시각을 키울 수 있을까?
우리에게는 다행히 툴이라는 좋은 수단이 있다. 대부분 이런 툴을 이용해 자동화시킬 수 있다. 툴을 사용함으로써 필드에 대한 정보를 수집하는 시간을 아낄 수 있으며, 기회들을 포착할 수 있는 시간과 노력을 줄일 수 있다.
이번 챕터에서는 툴을 사용해보고 IT 필드를 관찰하는 방법에 대해 이야기할 것이다. 어떻게 트렌드와 정보를 모을 수 있는지에 대해 다룰 것이다. 특히 안드로이드와 관련 된 주제로 초점을 맞출 것이지만 기술적인 부분은 안드로이드 외에 다양한 분야에서 공통적으로 사용할 수 있다.
무엇이 Hot 한가, 아니면 Hot 하지 않은가?
자주 사용하는 툴 중 하나는 TIOBE Index라는 툴이다. 이 툴은 개발과 관련 된 시장이 어떻게 돌아가는지에 대해 전체적으로 볼 수 있도록 도와준다. TIOBE Index는 매 달마다 유명한 웹사이트들에서 다양한 데이터를 수집하고 계산해서 보여준다. 매 달, TIOBE는 150가지가 넘는 프로그래밍 언어 중 인기순으로 보여주는 표를 제공한다.
이 책을 쓰는 시점에는 C Programming language(16.721%)가 1위이며, 그 다음이 얼마 차이 나지 않는 Java(14.140%)와 Objective-C(9.935%)로 순위를 지키고 있다. 3위 내에 두 언어가 모바일 프로그래밍 언어(Java, Objective-C)다. 놀랄 만한 일이 아니다. 모바일 산업이 급속도로 커지고 있고, 그에 따라 개발자 생태계가 함께 성장하기 때문이다. C언어가 왜 1위인지에 대해서는 한 번 고민하고 찾아보길 바란다.
IT 시장의 트렌드를 읽기 위한 다른 방법은 구인구직 사이트를 모니터링 하는 것이다. 새로운 일자리를 원하지 않더라도 말이다! 이 방법은 IT 시장에서 어떤 언어와 기술을 필요로 하는지 명백하게 보여준다. 이를 모니터링하기 위해 Job Aggregator(특정 정보들을 모아놓은 웹사이트 혹은 서비스)를 추천한다. 수 많은 구인 구직 사이트를 직접 찾으며 낭비되는 시간을 줄여주며, 주기적으로 메일로 오기 때문에 확인만 하면 된다.
나는 개인적으로 Indeed라는 Job aggregators를 추천한다. 이 서비스는 전 세계, 혹은 지역별, 도시 단위로 구인 구직 정보에 대해 알 수 있다. 간단한 쿼리로 훌륭한 검색결과를 보여준다. 예를 들어 안드로이드를 필요로 하는 구인 구직에 대한 알람을 설정해 놓으면, 관련 된 많은 정보들이 메일로 보내진다.
Indeed에서 알람을 설정하는 방법은 다음과 같다. Indeed에서 '안드로이드'로 검색을 하면, 검색결과가 나온다. 우측에 나오는 '취업 소식 활성화'를 클릭하거나, http://kr.indeed.com/my/alerts 의 주소로 접속하면, '취업소식 설정'이라는 페이지가 나온다. 이 곳에서 지역과, 검색어를 설정해놓으면, 이메일로 오게 된다.
이를 통해 원하는 지역의 검색어를 통해 어떤 기술이 인기를 끌고 있는지 알 수 있다. 여기서 조심해야 할 것은, 지역에 따라 차이가 있다는 것이다. 만약 당신이 Go 프로그래밍 언어의 직업에 대해 모니터링을 할 때, 미국에서는 해당 언어에 대한 직업 정보가 굉장히 많이 나타나지만, 캐나다나 유럽 등 타 지역에서는 비교적 인기가 없는 것을 확인 할 수 있다. 이런 결과가 의미 없다고 생각할 수 있지만 그렇지 않다. 이 결과를 통해 알 수 있는 것은 Go 프로그래밍 언어는 앞으로 유럽과 캐나다 등에서도 인기있는 언어가 될 것을 예측할 수 있다. 이렇듯 어떤 언어가 인기가 있는지를 확인하는 것은 중요한 일이다. 그 언어들 중 하나가 현재의 C언어처럼 영향력을 이끌 것이기 때문이다.
또 다른 한가지의 서비스를 소개한다. 이 서비스의 이름은, infoQ(http://www.infoq.com/)라는 서비스이다. 해당 서비스에는 infoQ Weekly newsletter에 등록하는 기능이 있다. 이 뉴스레터에는 개발과 관련한 다양한 주제들이 포함되어져 있다. InfoQ 는 또한 인터뷰와 동영상, 책 등 다양한 자료의 형태를 제공해준다. 나는 2006년부터 infoQ웹사이트에서 이 뉴스레터를 받아보고 있으며 흥미로운 뉴스를 끊임없이 제공해준다.
안드로이드 관찰하기
이전 섹션에서, IT 산업의 전반적인 정보를 얻는 팁을 이야기했다면, 지금부터는 좀 더 안드로이드에 초점을 맞춰 이야기하려 한다.
안드로이드에 대한 정보를 얻는 곳은 블로그, 포럼, 뉴스 등 굉장히 많다. 만약 이 모든 것을 읽으려 한다면 개발을 할 수 있는 시간이 전혀 없게 될 것이다! 그럼 어떻게 해야할까?
첫번째 방법은 Google Alert를 사용하는 것이다. Google Alert를 사용하면 키워드마다 새로운 정보가 있을 때 메일로 보내지도록 설정할 수 있다. 개인적으로는 개발을 하며 관심이 있는 다양한 키워드들을 최대한 세분화해서 각각 설정하기를 추천한다. Google Alert를 설정하려면 https://www.google.com/alerts 로 접속하면 된다. 만약 "Android"를 키워드로 적고 알람을 설정하게 되면, 매일 정해진 시간에 수없이 많은 뉴스 중 적절한 뉴스들의 헤드라인을 추출해 메일로 오게 된다. 키워드 검색을 좀 더 정확하게 하기 위해서는 "옵션 표시"를 누르면 된다. 수신 빈도와 출처, 언어, 지역과 개수에 대해 세부 설정을 할 수 있다. 옵션 표시의 기본값들을 유지하길 원한다. 특히 언어 부분은 기본값으로 유지하길 바란다. 당신의 지역을 자동으로 잡기 때문에 해당 지역에서 검색결과가 메일로 오게된다. 만약 언어를 영어나, 혹은 모든 언어로 받길 원한다면, 같은 쿼리의 Alert를 언어를 다르게 해서 하나 더 등록하는 것이 좋다. 또한 중요한 옵션 중 하나는 검색 결과의 타입을 "Only best results"로 바꾸어라. 이 것은 좀 더 중요도가 높고 검색어에 대해 정확도가 높은 결과를 추출할 수 있게 해준다. 하단에 미리보기를 통해 나오는 자료들이 마음에 든다면, "Create Alert"버튼을 눌러 완료한다. 자 이제부터 메일로 다양한 소스(블로그, 포럼, 뉴스 등)로부터의 검색 결과가 도착할 것이다. 따로 수고와 노력을 들이지 않아도 그저 메일에서 확인만 하면 된다.
Google Alerts는 안드로이드의 일반적인 뉴스들을 메일로 받을 수 있다. 만약 개발자의 시각에서(다음 안드로이드 버전의 기술이라던가 하는 정보를 찾고싶다면) 안드로이드에 대한 정보를 찾고 싶다면, 내가 가장 신뢰하고 정보를 찾는데 첫번째로 꼽을 수 있는 Android Weekly newsletter(http://androidweekly.net/)를 추천한다. 주 단위로 새롭거나 특이한 개발뉴스를 모아 메일로 받을 수 있는 서비스이다. 안드로이드 관련 유명 서비스들 중 하나이다. 현재 15,000명이 넘는 구독자들이 이 서비스를 통해 구독중이며, 그들 모두 안드로이드 개발자들이다!
다른 안드로이드 이메일 구독 서비스로는, Android Central(http://androidweekly.net/), Android Authority(http://www.androidauthority.com/newsletter/), Phandroid(http://phandroid.com/dev-newsletter/)가 있다. 그러나 대부분 구독 서비스들이 아마 Google alert를 통해 매일 받은 내용들이다. (Android Weekly는 그렇지 않다!) 이 구독 서비스들을 통해 메일을 받아보길 바란다. 언제든지 구독취소가 가능하니까.
마지막으로 정보를 얻을 수 있는 곳은, LinkedIn Groups이다. 안드로이드와 관련 된 많은 그룹들이 있으며, 링크드인 사이트에서 쉽게 찾을 수 있다. 많은 안드로이드 개발자들이 어떤 주제에 대해 이야기를 하는지 정보를 얻을 수 있다.
기술에 대한 시각을 새로이 하다
이렇게 정보들을 모으고 시각을 넓히는 것은 중요하다. 간과하지 말아야 할 것은 하나의 출처에서 나오는 정보만 보고 습득하지 말라는 것이다.
지금까지 시장의 현재와 미래에 대한 정보를 모을 수 있는 툴과 서비스에 대해 이야길했다. 나는 어떤 것이든 내 메일함에 정보들을 받는 것을 좋아하며, 메일을 받으면 시간을 가지고 꼭 읽고 분류하는 작업을 한다. 이렇게 얻은 정보들은 다양한 토론 포럼이나, 페이스북 페이지 같은 곳에서도 접할 수 있다. 나는 웹에 무질서하게 흩어져있는 정보들을 찾기 위해 노력해 왔으며, 궁극적으로 그 정보들이 나에게 찾아오게 하는 것(자동화 된 서비스를 이용해 메일로 받는 것)이 목표이다.
마지막으로 추천할 서비스는 StackOverFlow이다. 이미 잘 알고 있겠지만, 개발자들끼리 질문과 답을 하는 서비스이다. 만약 당신이 개발과 관련 된 질문을 올린다면, 전 세계의 수 많은 개발자들이 답을 해준다. 답을 얻은 경우 단순히 답을 얻기에 그치지 말고 질문에 대한 답을 꼭 자기 것으로 만들길 바란다. 자신의 질문 뿐 아니라 다른 안드로이드 개발자들이 질문과 답을 관찰하고 습득하는 것도 중요하다. 기술에 대한 시각을 키울 수 있는 방법으로 질문과 답이라는 방식이 가장 좋다고 확신한다. 아래는 정보를 얻을 수 있는 서비스들을 정리한 리스트이다. 이 리스트가 당신에게 크리스마스 선물만큼 의미있길 바래본다.
* TIOBE Index : http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
* Indeed : http://www.indeed.com
* InfoQ : http://www.infoq.com
* Google Alerts : https://www.google.com/alerts
* Android Weekly newsletter : http://androidweekly.net
* Andorid Central newsletter : http://www.androidcentral.com/newsletter
* Android Authority newsletter : http://www.androidauthority.com/newsletter/
* Phandroid newsletter : http://phandroid.com/dev-newsletter/
* LinkedIn Groups : https://www.linkedin.com/directory/groups
* StackOverflow : http://stackoverflow.com/
직업과 관련 된 가장 좋은 툴을 선택하기
오픈소스 옹호자는 이야기한다. 무료 소프트웨어를 사용하는 것이 좋다고!
왜냐하면 오픈소스는 직접 내부의 소스 코드를 볼 수 있고 코드의 퀄리티, 구조에 대해 개발자들이 진지하게 고민하고 발전해 나가기 때문이다. 오픈소스는 공개적인 저장소를 사용 하기 때문에 누구나 접근이 가능하다. 반대로 당신이 상업 소프트웨어를 사용할 경우에는 그 소프트웨어를 구매하든 구매하지 않든 소스코드에는 접근이 불가능하다. 이 두가지 구조를 모두 가지고 상업 소프트웨어지만 개발자 커뮤니티를 통해 소프트웨어의 개발을 허용하는 하이브리드 모델도 있다. 좋은 예는 IntelliJ IDE나 JetBrains와 같은 소프트웨어다. 구글 엔지니어들은 IntelliJ를 기반으로 Android Studio를 제작하기도 했다.
오픈 소스 커뮤니티는 수 많은 프로젝트로 구성된다. 불과 몇 년 전까지, Sourceforge.net은 오픈소스의 대표적인 서비스였다. 현재는 distributed version control systems(DVCS) (Mercurial 이나 Git과 같은) 서비스가 많은 사용자들을 확보하고 있다. 개발자들이 오픈 소스를 배포하기 위해 SourceForge보다 Git을 많이 사용하고 있다. 오픈 소스는 많은 사람들에 의해 사용 및 개발 되고 있으며, 다양한 프로젝트에서 적용되어 사용 되고 있다. 나는 상업 소프트웨어보다 오픈 소스가 많은 부분을 차지하고 있는 것이 옳고 그른지에 대해서는 논하고 싶지 않다. 옛날에는 오픈 소스가 아마추어 개발자들이 만들고 사용하는 것이라고 생각을 했다. 시간이 지나면서 많은 이들의 생각은 바뀌었다. 이런 변화는 소프트웨어를 개발하는 우리에게 중요하며 안드로이드 개발자 커뮤니티에 많은 영향을 미치고 있다. 이런 이유들로 인해 오픈소스 프레임워크 및 라이브러리들이 퀄리티가 좋아지고 있다. 덕분에 스타트 업들은 개발에 대한 예산과 리소스를 줄일 수 있게 되엇다.
그렇다면, "어떻게 하면 많은 훌륭한 툴과 오픈소스들 중 나에게 딱 맞는 것을 선택할까?"
'딱 맞는'의 정의를 내리자면, 나에게도 잘 맞는 툴이면서 다른 개발자에게도 잘 맞아야 한다는 의미로 정의를 내릴 수 있다. 이 책에서는 수 많은 툴에 대해 이야기 할 것이며 당신이 이 정의에 공감할수도 혹은 아닐수도 있다.
이번 챕터의 마지막에는, 당신은 기술적인 부분을 오픈소스에 사용하고 응용할 수 있을 것이다. 만약 TDD프레임워크를 현재 실무에 적용하고 있지 않다면, TDD프레임 워크에 대해 생각을 달리 가지게 될 것이다. 그리고 이런 방법들과 툴을 통해 당신이 도출해내는 아웃풋은 확연히 전과 달라질 것이다.
툴을 선택하는 데 도움이 되는 것들
이 책에서 선택한 몇가지 툴들은 "명확하며", 따로 분석이 필요 없다. 좋은 예제로는 Jenkins 가 있다. Jenkins는 continuos integration(CI) server와 관련 된 툴이다. Jenkins는 UI 대회에서 상을 탄 적도 없지만, 굉장히 거대하고 액티브한 사용자가 많다. CI 서버에 설치를 하면, Jenkins와 다양한 플러그인들을 통해 기능을 확장 할 수 있다. "명확하며"의 의미를 풀어보자면, 인기있고 신뢰성이 높은 '연간 보고서'를 참고했다. 참고했던 두가지의 리포트의 레퍼런스는 다음과 같다.
* Eclipse Community Report : http://www.eclipse.org/org/foundation/reports/annual_report.php
* The Java Tools and Technologies Landscape : http://zeroturnaround.com/rebellabs/java-tools-and-technologies-landscape-for-2014/
가트너와 같이 이런 리서치를 전문적으로 하는 회사도 있으며, 이런 리포트들은 유료로 구매해야 한다. (대부분 리포트들이 오픈소스보다는 상업용 툴에 초점이 맞추어져 있다) 이런 유료 리포트들을 구매하는 돈으로 차라리 클라우드 호스팅을 구매하고 당신의 랩탑의 SSD를 사서 장착하는 것이 훨씬 유익하다. 이런 툴을 찾기 위한 시간의 대부분을 시장을 선도하고 있는 오픈소스를 찾는 데 이용하라. Git과 같이 분산형 시스템을 갖춘 곳에서 찾아서 많은 이들이 사용하고 검증한 오픈소스를 사용하는 것이 낫다. 상업용 툴이 좋지 않다는 것이 아니라, 당신이 툴을 사용하며 문제가 생겼을 때 해결하는 과정이 더욱 빨라질 수 있기 때문이다. 그렇게 되면, 툴을 찾는 문제에 대한 해답을 얻는 데 들이는 시간을 줄여주고 코드를 짜는 시간이 더 많아지게 될 것이다.
오픈소스 평가하기
비슷한 툴 가운데서 어떤 정보와 방법을 통해 사용할 오픈소스를 정하고 평가하는지에 대해 이야기하려고 한다. 이미 널리 알려진 평가를 하는 방법론들이 있다. 그러나 대부분의 방법들에 대해 정확히 사용하는 것에 대해 이해를 시켜주거나 도움을 주는 이는 없다. 이를테면, 나는 Business Readiness Rating(BRR) 방법론을 영문에서 프랑스어로 2005년도에 번역을 한 적이 있다. BRR 방법론은 처음엔 굉장히 야심차게 출발했다. 이 방법을 통해서 오픈소스들을 통계를 통해 평가할 수 있다. BRR은 Navica의 Open Source Maturity Model을 개선했닫는 평을 받았다. 그러나 BRR은 널리 채택이 되지 않았고, 웹사이트 역시 "곧 업데이트"라고는 적어놨지만 오랜시간 업데이트가 되지 않았다. 하지만 구글에서 검색을 통해 RFC(비평을 받기 위한 메모 형식의 문서)나 템플릿들을 찾을 수 있다. 대기업의 경우 만약 당신이 어떤 기술이나 툴을 사용했을 때 사용한 정당성을 밝히기 위해 BRR같은 방법론들이 사용되고 있다. 예를 들어, 기업의 경우에는 새로운 툴을 사용하는 데에 기존에 사용하는 툴보다 더욱 저렴하거나, 혹은 더 좋은 경우 오픈소스를 적용하게 되는데, 이런 경우 방법론들을 통해 사용해야 하는 이유를 보다 명확하게 제시할 수 있다. 혹여나 오픈 소스 평가에 대한 것에 더 알고 싶다면, 위키피디아를 참조하기 바란다.
몇몇 이들이 BRR 템플릿을 다듬고, 실제로 사용되고 있다. 해당 템플릿들의 라이선스는 오픈소스 라이선스와 동일하다. 완성도가 높은 한가지 템플릿을 소개한다면 Smal의 Modele de selection OSS (Open Source Software Selection Model)을 소개하고 싶다. 다음 링크를 통해 무료로 템플릿을 다운로드 받을 수 있다. https://www.smals.be/fr/content/mod%C3%A8le-de-s%C3%A9lection-oss 해당 다운로드 링크 웹페이지의 아랫 쪽을 보면 템플릿을 다운로드 할 수 있다. (웹사이트는 프랑스어로 제작되어 있지만, 템플릿은 영어로 적혀있다) 템플릿을 보면 알겠지만 평가를 할 기준이 명확하게 제시되어 있기 때문에 평가할 기준에 따른 정보들을 통해 평점을 계산해 낼 수 있다. 일이 많거나, 혹은 혼자 리서치를 할 때에, 새로운 툴을 적용할 때에 사용할 수 있다.
다음 섹션에서 간소화 된 방법론인 Open Source Sofrware Selection Model(OS3M) - Smals에 대해 이야기 할 것이다. 이 방법론은 평가 해야 할 항목이 적고, 소규모의 팀에 알맞도록 설계되어 있다.
O3SM을 사용한 TDD Framework 선택하기
이전 챕터에서, 우리는 오픈소스 평가 방법론을 통해 평가하고, 사용할 새로운 툴을 정할지에 대해 이야기했다. O3SM의 목적은 비슷한 오픈소스 솔루션 중 알맞는 것을 고르기 위해 평가, 비교하기 위함이다.
첫 시작으로는 필요한 기능을 정의해야 한다. 필요한 기능이 지원되는 TDD Framework 의 목록은 다음 링크에서 참조할 수 있다. https://en.wikipedia.org/wiki/List_of_unit_testing_frameworks 해당 리스트에는 많은 언어와 플랫폼이 명시되어 있다. 안드로이드 플랫폼이 따로 명시되어 있지 않기 때문에, 안드로이드에 적용하기 위해서는 '자바' 섹션을 참고하길 바란다.
'옛글 > 번역본' 카테고리의 다른 글
애자일 안드로이드 프로그래밍 - 1 시작하며 (0) | 2015.03.29 |
---|---|
프로그래밍 Design Pattern 이해하기 - 10 스테이트 패턴 (0) | 2014.09.28 |
프로그래밍 Design Pattern 이해하기 - 9 이터레이터 패턴 & 컴포지트 패턴 <2> (0) | 2014.09.23 |
프로그래밍 Design Pattern 이해하기 - 8 템플릿메소드패턴 (5) | 2014.09.16 |
프로그래밍 Design Pattern 이해하기 - 7 어댑터패턴&파사드패턴 (2) | 2014.08.31 |