길지도 않고, 핵심적인 부분을 너무 잘 정리했습니다. 아이폰 개발하고 싶은데 대체 Object-C 가 뭔지 감이 안잡히는 분들에게 정말 괜찮은 핵심 요약입니다.

가서 보기

우연히 돌아다니다가 찾았는 데 정말 괜찮습니다.

톰 드마르코 , 팀 리스터 외 지음
박재호, 이해영 옮김

원제: Adrenaline Junkies and Template Zombies

요즘 개발하느라 바빴는데 회사에 굴러다니는 책을 보고 제목과 커버가 특이해서 한번 쳐다만 봤었는데, 원제를 보고 원제가 특이해서 읽게 됐습니다. 읽기에 부담되는 분량도 아니고 프로젝트를 진행하는 관리자 입장에서는 도움이 되는 글들이 많은 책이기에 쉬는 시간 짬짬이 읽었습니다. 그 와중에 공감 가는 내용들을 조금 정리해 봤습니다. 계속해서 프로젝트를 진행할 때 잊어먹지 말자는 의미로 말이죠. 책에 있는 내용을 똑 같이 적은 것도 있지만, 제 나름대로 재 해석을 하거나, 저의 감정을 덧 붙인 것들이 많습니다.

관리자는 보모다. 팀원들을 돌봐야 하는 것이다. 계속해서 지켜보고 무엇이 부족한지 찾아라. 불평분자는 대신 확실하게 제거를 해야 한다. 최악의 경우가 관리자가 직접 개발하는 것이다.

30일에서 90일 가량으로 목표를 나눠라. '50%만 하기' <-- 이딴건 없는거다. '기능을 세부별로 쪼개고, 그 기능을 언제까지 완료하는 것이다.' 라고 하는 것이다.

보고란 항상 수치를 동반해야 하며, 감정적 표현을 자제해야 한다.

후보선수를 마련하라. - 평소에 중요하다고 생각하던 업무를 절대 혼자 담당하게 하지 말라, 중요한 일을 혼자 맡는 친구는 오만해 지기 쉽고, 그 친구가 퇴사를 한다면 그 업무는 포기하게 되는 것이다 -

"도구 '사용' 비용은 도구 '구입' 비용보다 훨씬 더 비싸다.
 - 도로시 그라함 Dorothy Graham

미 해병대 군사 전략서 (Warfighting)
 - 지휘관이 결정을 내리고 공표할 때까지 하급자는 (자기 의견이 상급자와 다를지라도) 솔직하고 전문적인 의견을 제시해야 마땅하다. 하지만 지휘관이 일단 결정을 내리면 하급자는 자신의 결정인양 지지하고 따라야 한다.
('' 링컨의 내각 하고도 비슷하지요. 노예해방건에 대해서 공표전까지는 극렬하게 반대하다가, 링컨이 이일은 그만 논의 하고, 하는걸로 결정합시다. 하니까 모든 각료들이 불만이 있더라도, 노예 해방이 모두의 결정인양 전략을 세우고 실행했다는 사실

조직에 젊은 사람은 꼭 필요하다. '모두 젊어지자!!'  20 대가 필요한거니 대충 30대를 젊다고 생각하지는 말자..

일의 시작과 끝을 확실하게 정의 해야 한다. 일을 맡길 때, 그 일을 어떻게 평가해야 할 것인지까지 같이 기록하자. (피터 드러커 가 언급한 내용이기도 하다.. The Essential Drucker 에서)  의견 제시 - 현실에서 테스트 - 결과를 피드백해서 의사결정을 재수정  이러한 순서로 이루어 지며, 그렇기 때문에 가장 중요한 것이 '평가 기준' 이라 했습니다.

고객은 직접 보기 전까지 자신이 원하는 바를 알지 못한다... , 보고 나서야 아니라고 말한다.

사람들은 100% 주관식 질문을 싫어한다. - (사람들은 합리적으로 지정된 방향을 좋아하는 경향이 있다)

채용 과정에서 동료가 될 사람들이 지원자를 평가한다.

서로간의 의견 충돌이 자연스럽고 아주 전문가다운 현상이라 여길 때라야 관련자들이 '의사소통 개선' 이라는 미신에 매달리지 않고 증명된 '충돌 해결 기법'으로 관심을 돌린다.

설득의 심리학에도 나왔지만, 팀을 유연하게 뭉치게 할려면 '먹을것을 같이 먹는 행위' 가 좋다.  술은 노골적이게 되기 쉽고 술에 정신 팔려 친밀해지기 어렵다. 맛있는 음식을 같이 먹으며 친밀해져라. (책에 나온 내용을 변형했음..)

완벽은 더할 내용이 없을 때가 아니라 뺄 내용이 없을 때 도달하는 상태다.  - 앙투앙 드 생택쥐페리 (Antoine de Saint-Exupery)

프로젝트에서 흔히 발생하는 문제는 이해관계자들이 서로에게서 배워야 한다는 사실을 납득하지 못해서다. 즉, 제작자와 고객은 공동 교육이 필요하다. 서로가 서로에게 가르치고 배워야 한다.


많이 정리한 것 같지만, 또 평소에 잘 아는 것이라고 생각할 지도 모르지만, 다시금 되새겨 볼만한 관리 방식입니다.





저도 산전 수전 다 겪은 프로그래머 출신인지라 , 메모리 관리는 왠만하면 잘 지키는 편인데, object-c 는 자동으로 관리하는 것도 있고, 수동으로 지워줘야 하는 것도 있고, 클래스 함수들도 난립하는 터라 마구 마구 헷갈립니다.

예제로 시작하는 아이폰 개발

의 '부록' 에서 메모리 관리 팁을 설명하고 있어서 조금 정리했습니다. (부록이 참 잘 되어 있습니다..)

1. 블록 내에서는 alloc, retain, copy  의 수와 release, autorelease 의 수가 동일해야 합니다.

2.  factory 함수( 보통 class method 인 경우가 많습니다 )를 사용해 생성한 객체의 경우는 대부분 autorelease 로 반환됩니다. 따로 release 를 다시 할 필요가 없습니다.

3. 클래스의 인스턴스 변수들은 dealloc 메서드에서 다 release 해야 합니다.

이 시리즈는 항상 이런식입니다. ㅎㅎ


제가 좋아하는 Head First 시리즈 입니다. 처음 IT 기술에 접하려고 할 때, 이만한 책이 없습니다. 정말 간단한 지식만 가지고 있어도 바로 시작을 할 수 있게 해주니까요.

게다가 그 안에서 프로그램을 개발하는 방법론은 아주 훌륭한 Agile 방법론을 따르고 있습니다. 처음부터 좋은 버릇을 들이게 해주는 것이지요.

최근 몇편의 아이폰 개발 방법 책을 봤는데, 이 책은 심하게 기초적이긴 하지만 무엇부터 시작해야 할지 모르는 사람한테 아주 훌륭하게 '길'을 제공하고 있습니다.

원서로 봤습니다. 한글판이 나와 있는지는 모르겠네요. 물론 이 책도 주변 친구꺼 뺏아서 봤습니다...

출판사 책소개 보기
이 다중 뷰를 다루는 기술이 상단히 사람을 짜증나게 하는군요 -0- , 아예 인터페이스 설계를 다시 할까 생각중이긴 하지만 공부한다 치고 또 찾아 봤습니다.

요기 클릭

아주 훌륭하게 개념과 소스까지 전부 나열됐습니다. 그리고 납득이 가능하더군요. 뷰 컨트롤러 자체를 관리하는 appDelegate 에서 메시지 중재를 한다는 개념입니다.


결국 아이폰 또한 사용자 인터페이스를 신경 써야 하기 때문에, 화면 이동이 정말 중요합니다. 테이블 뷰를 쓰면 간단하지만 그걸 쓰지 않고 전환할 때, 특히나 인터페이스 빌더를 써서 편하게 만든 ViewController 간에 이동을 할 때는 여간 귀찮습니다.

그런걸 도와주기 위한 팁입니다.




Part1 이고요.




Part2 입니다.

당연히 제가 제작한 건 아닙니다..
왠만한 책들은 UITabBarController 에 대해서는 잘 다루고 있는데 , 이는 Root Controller 로 쓸만하지 세부적인 뷰에서 쓰기 적합하지 않습니다. 그래서 UITabBar 예제를 찾아보고 있었는데, 책에서는 잘 안다루더군요.

애플쪽에서 제공하는 샘플이 괜찮은 것이 있더군요.

여기클릭

전형적인 예제는 아니지만, 충분히 볼만은 하더군요. 아이폰 개발들 열심히 하세요.

저자: 에리카 세든
편역: 오형내, 김동현

출판사 소개 페이지 에 자세한 내용이 잘 소개 되어 있습니다.

예제로 시작하는 아이폰 개발 , 사실 저는 이 책을 사지도 않았습니다. 회사 동료가 산 책을 제가 필요해서
멋대로 읽기 시작했습니다. 아무것도 모르고 시작할 때는 그럴듯 해 보였습니다. 예제도 많고 코드도
친절하고 무엇보다 제 동기이자 친구인 '오형내' 이 친구가 번역을 했기 때문에 뭔가 더 뿌듯했습니다.

그런데 문제는 제가 이쪽에 내공이 전혀 없다는 것이 문제였지요. 아예 생 초짜인 저에게는 조금 안 어울리는
책입니다. 저도 프로그램 쪽에서 나름 오래 살았기 때문에 새 언어를 배울 때 필요한게 뭐인지는 적당히 알고
있습니다. (비록 최근 몇년간 딴일을 했음에도 불구하고 말이죠)

바로 "툴 사용법" 입니다. 툴 사용이 제대로 이루어지지 않으면 모든 프로그램을 전부 손으로 짜 줘야만
합니다. 어느정도 툴에 대한 이해도가 있고 언어에 대한 이해도가 높아지면 전부 손으로 짜는게 좋다고
하지만 생 초짜는 툴 배우기도 버겁습니다.

고수가 된다고 하더라도 툴로 쓰면 간단한 것을 나중에 손으로 코딩하고 있을수 만은 없겠지요. 그런 점에서
이 책은 저에게 버겁습니다. 더구나 설명 자체가 SDK 2.0 기반이더군요. (에.. 적어도 최근 3.0 기반은
아니였습니다. 물론 컴파일은 되고 실행이 되긴 하지만 말이죠)

정말 생 초짜를 위한 책이였다면, 프로젝트 만들고 개발툴 (Xcode 와 Interface builder - 특히 이놈)을
적절하게 사용해서 프로그램을 만드는 부분을 설명했다면 참 좋았겠지요. ㅎㅎ

물론 저 책이 나쁘다는 것은 아닙니다. 실제로 평가도 좋은 책이고요. '생 초짜'인 저에게는 안 맞았다는
것이지요. 생 초짜를 위해서 좋은 책은 따로 나중에 소개를 드리겠습니다.  그 책은 아주 흡족합니다.

결론은 형내야 미안해 ㅜ.ㅜ 입니다. 미안해서 책은 한권 사줄께.. 쿨럭
맥을 얼마전에야 샀습니다. 그런데 주문한 날 새로운 OS가 나오더군요. 그래서 맥을 산곳에 전화를 해서 새로운 OS (Snow Leopard) 가 나온 것을 알고 있다. 빨리 한개 보내달라고 했습니다. -ㅅ- 물론 그쪽에서는 정중하게 되묻더군요 "머리에 구멍이라도 나셨습니까? 손님?" 네 그렇습니다. 저는 진상짓을 제대로 하기 시작했습니다. 회사에서 재무 보는 친구가 제 등쌀에 못이겨서 전화기를 들고 이야기를 하고 있고 저는 옆에서 어떻게 하겠다는 협박만 알려줬습니다. 착한 제 친구는 (재무 보는 친구) 땀을 뻘뻘 흘리면서 저의 온갖 진상짓을 마이너한 버젼으로 항의를 하더군요. 결국 '걍 환불하고 조금 기다렸다가 새 OS 장착 되는거 확인하고 사겠다' 라는 아주 멋진 협박을 알아내서 이야기 했더니 그쪽에서 바로 '이거나 먹구 떨어져라' 라는 식으로 OS 업그레이드 비용을 통장으로 부쳐주더군요.

뭐 열심히 얻어낸 쾌거였기 때문에 즐거워 하면서 운영체제를 업그레이드 했지만 새로받은 OS 는 64비트 전용이라 기존의 OS 에서 설치했던 프로그램들이 충돌나는 것이 몇개 있었습니다. 예전에 제가 올렸던 [[예전 포스팅]] 같은 경우 말이죠.

항상 새로운 것이 문제입니다. 새로운 것을 그냥 쓰는 것은 사실 문제가 되지 않지만, 잘 쓰거나 또는 뭔가 사람들이 잘 안하려는 것을 할려고 할 때는 더욱 더 문제가 되기 마련입니다.

아이폰 어플리케이션 개발이 바로 그런것이라고 볼 수가 있습니다.  예전 버젼이라면 문제가 없겠지만 아이폰 OS 가 최신인 3.1.2 를 쓰면 문제가 되고, 개발하는 OSX 가 10.6 (즉 Snow Leopard)가 되면 문제가 되기 마련이지요. 이 두가지가 결부된다면? 아 끔찍합니다..

바로 이러한 짜증을 바탕에 두고 이 작업을 시작했습니다. 결국 논점은 그것입니다. 개인용 제작시 우리돈으로 대략 년당 12만원 , 상업용 제작시 우리돈으로 대략 년당 120만원 이돈을 아껴볼려고 하기 때문입니다. 제가 상업용을 제작할 것도 아니고, 그렇다고 제작한 것을 외부에 공개할 것도 아니고 그냥 간단하게 제작해서 제 아이팟 터치에 넣어서 가지고 싶은 것인데 너무 돈이 비싸지요. 즉 라이센스 작업은 나중에 공개할 때 해도 충분하다는 것입니다.

물론 쉬운 작업은 아니였습니다. 해놓구 보면 쉽지만 하기까지의 과정이 쉽지 않더군요. 물론 어려운 이유는 자료가 없어서 입니다. 정말 찾기 힘든 자료들과 된다고 쓰여져 있는데 안되는 것들 이러한 것들이 총체적으로 난항을 겪게 했습니다. 더러워서 돈 내고 받아볼까? 라는 생각까지 해봤습니다. ^^;;

아이폰 jailbreak 에 대해서는 굳이 설명 드리지 않겠습니다. 하는 법도 어렵지 않고 또 jailbreak 도 못하신다면 거기서 돈안내고 개발은 포기하시는게 정신 건강상 좋습니다. 제가 쓰는 방법은  blackra1n 이라는 툴을 쓰는것입니다. 지금까지 나온 방법중에서 가장 혁신적인 원버튼 해킹이 됩니다. 구글에서 'blackra1n'을 검색해보시면 바로 프로그램 뜹니다.

아이폰 (또는 아이팟 터치)이 '탈옥'이 됐으면 이제 개발에 들어갈 차례입니다. apple 의 Developer 사이트에서 iphone_sdk_3.1.2_with_xcode_3.2.1__snow_leopard__10m2003.dmg 를 다운 받습니다. 버젼과 OS 확인하시고 받으시면 됩니다. 이 글을 쓰는 당시는 저 버젼이 최신이였습니다. 그리고 바로 설치해 주시고요. 그러면 컴퓨터에 Xcode 3.2.1 버젼이 설치되었을 것입니다.

XCode 를 실행하고 다음 그림과 같이 "Create a new Xcode project" 를 선택합니다.

Welcome to Xcode

이런 툴을 공짜로 배포하는 애플이라니!! 하지만 인증서로 돈 계속 받으니 MS 가 나은건가?..



테스트할 것이기 때문에 프로젝트 종류는 아무거나 선택합니다.


Window-based Application

윈도우 베이스 어플리케이션으로 테스트



프로젝트 이름을 정하는 것입니다. 이거도 아무거나 선택합니다. 저는 "Crazy World" 라고 정했군요.


New Project

헬로 월드가 식상해서...



자 일단 컴파일을 해보면 Simulator 로는 잘 되는 것을 확인할 수 있습니다. 이제 Device - 3.1.2 로 바꾸고 컴파일을 해봅니다. 잘 컴파일이 되고 인스톨이 된다면 성공이겠지만. 당연히 안 될 것입니다. 


Device - 3.1.2

디바이스에서 프로그램을 돌릴꺼라는 이야기입니다.




정확히는 컴파일이 안될 것입니다. 일단 컴파일 부터 되게 만들어 보겠습니다.

참조: http://networkpx.blogspot.com/2009/09/compiling-iphoneos-31-apps-with-xcode.html

여기에서 참조하실 부분이 'I want to compile' 부분 입니다. 조금 정리를 하자면

1. 자체 제작할만한 인증서가 필요합니다. 인증서를 만드는 방법은 여기에서 인증서를 만드는 방법이 있습니다.  인증서 만들때 Name (이름) 을 'iPhone Developer' 로 만들어 주는 것만 확인하시면 됩니다.

2. 만들어진 인증서는 '로그인' 키체인에 존재해야 합니다. 절대 '시스템' 키체인이 아닙니다. 그리고 모든 사용자에게 신뢰하겠냐는 부분은 하겠다고 체크하셔야 합니다.

3. 인증서가 만들어졌으면 다음과 같은 작업을 해줘야 합니다.

   3-1. /Developer/Platforms/iPhoneOS.platform/Info.plist 파일을 열어서
   3-2. 46 번째 줄에서 XCiPhoneOSCodeSignContext 를 XCCodeSignContext 로 바꾸어 줍니다.
   3-3. 79 번째 줄에서 XCiPhoneOSCodeSignContext 를 XCCodeSignContext 로 바꾸어 줍니다.
   3-4. 파일 저장합니다.
   3-5. XCode 를 재시작합니다.

4. 이제부터 컴파일이 아주 부드럽게 될 것입니다.


그리고 그 다음부터 참조한 페이지에서 나오는 'I want to install and debug too' 부분은 열심히 따라 했지만 아이팟 터치만 두 세번 복원하고 안된다는 것만 확인했습니다. 모름지기 하는 방법이 복잡한 것 치고 좋은 방법이 없다는 것을 다시 한번 확인한 셈이라 볼 수 있습니다.참조 페이지를 쓰신 분은MobileInstallation.framework 을 안좋아 하신다는 것이 힌트가 되서 MobileInstallation.framework 방법으로 성공했습니다. 그 방법을 알아보기로 하지요. 매우 쉽습니다.

참조: http://www.iphonedownloadblog.com/2008/08/18/mobileinstallation-for-iphone/

위 참조 사이트에서 'MobileInstallation patch for iPhone 3.1.2 Firmware:' 부분을 참조하시면됩니다. 

1. 아이폰이나 아이팟 터치에서 Cydia 를 실행시킵니다.

2. 아래쪽 탭에 있는 'Manage' -> 가운데에 있는 'Sources' -> 상단 오른쪽에 있는 'Edit' 클릭 ->  상단 왼쪽에 있는 'Add' 클릭

3. http://cydia.hackulo.us 입력하시고 'Add Source' 버튼 클릭

4. 'Add Anyway' 버튼 클릭 후 안정적으로 추가되면 아이폰(아이팟 터치)을 리부팅 시킵니다.

5. Cydia 를 실행시키고 하단 탭의 'Search' 를 클릭하고 "AppSync for OS 3.1' 을 설치합니다. 그리고 리부팅을 다시 한번 해줍니다.

이제 정상적으로 컴파일이 되고 아이팟 터치에 인스톨까지 되는 것을 확인하실 수가 있습니다. 년당 12만원을 아주 손쉽게 아꼈군요..



2009년은 IT 개발 업체들에게 힘겨운 한 해가 될 것입니다. 요즘 영업 다니면서 들은 소식에 입각해서 분위기를
보자면.

첫째, 공공 사업쪽 떡이 줄었습니다. 반으로 줄었다느니, 아예 없어졌다느니 말은 많지만 반으로 줄 꺼라는
소식이 제일 많았습니다.공공으로 먹고살던 대형 SI들에게 심각한 타격이 되겠지요

둘째, 공공 사업으로 먹고 살던 대형 SI 들의 구조조정 소식이 들려오고 있습니다. 먹던 떡이 반으로 줄어
들었으니 기존에 먹던 입들을 줄이는 것이 당연한 결과가 될려나요? 구조조정을 단행한다고 보는 것이
맞습니다.

세째, 구조조정 이나 명예 퇴직하신 분들은 돈을 방았으니까 이 시간이 지나가기만을 기다리실 까요? 아시는
분들 계시고 능력 있는 분들 많으니 당연히 창업 하시겠지요?

네째, 창업하시는 분들은 개발자들을 어디서 구하실까요? 명실공히 내년 3월은 중소기업들의
무덤입니다. 무덤에 가버린 중소기업 출신의 단가가 싼 개발자들이 쏟아져 나올테니 세번째의 창업하시는
분들이 그분들하고 손을 잡고 회사를 차리시겠지요

다섯째, 대기업 출신의 영업력과 단가가 싼 개발자들을 보유하고 있는 신흥 회사들은 강점이 무엇일까요?
대기업 영업이 쉽습니다. 원래 대기업과의 관계도 있고 가격 경쟁력도 있습니다. 이 분들이 뛰어드는 시장은
급속도로 단가가 하락하기 시작 할 것입니다.

여섯째, 이 신흥업체의 등장으로 기존의 중견기업들 까지 수익에 타격을 받기 시작합니다. 영업도 힘들어 지고
가격 단가도 계속해서 하락합니다. 악순환의 시작입니다.

Survivor wins 라는게 내년의 표어라고 했나요? 살아남는 거 조차 힘들어 질 꺼 같지 않습니까? 종합해서
살펴보자면 시장이 작아지고 , 경쟁자는 갑자기 증폭하고 , 가격 경쟁이 치열해서 단가는 떨어지고  이러한
현상이 IT 전반에 걸쳐 이루어 질 것으로 예상됩니다. 안그래도 거칠고 힘든 인터넷 바다의 삶이 한층 더
힘들고 고될 것으로 보입니다.

이러한 상황에서 조그만 배에서 살아가는 우리는 현금을 축적해서 정말 독하게 살아가는 방법 말고는 답이 없을
듯 합니다. 올 12월 부터라도 전시체제를 가동해서 독하게 현금을 아끼고 조금 힘이 들더라도 회사 경영진부터
돈이 될 만한 것들을 찾아서 일을 할 터이니 , 모두 합심해서 거칠은 내년의 IT 계에서 살아남을 수 있도록
노력했으면 합니다.

개개인들도 무슨일이 생길 지 모르니 현금을 보유해서 언제 발생할 지 모르는 비상사태에 대비들 하시기
바랍니다. 술 좋아하시는 분들은 술을 끊고 차라리 온라인 게임을 결제하세요.

 

+ Recent posts