소프트웨어 비즈니스라는 이전에 읽고서 요즘 다시 읽은 책이 있습니다.  개발자가 ISV(Independent Software Vender)라 불리는 소규모 소프트웨어 개발 업체를 운영하는 것에 관련해 전반적인 내용들을 설명한 책입니다.

소프트웨어 비즈니스
카테고리 컴퓨터/IT
지은이 에릭 싱크 (사이텍미디어, 2007년)
상세보기

이 책이 개발자들의 창업 성공률을 획기적으로 올려줄 수는 없을 것 같습니다. 하지만 준비사항, 아이템 선정, 마케팅, 세일즈등 개발자들이기에 창업에 앞서 간과할 수 있는 부분을 본인의 다양하고 재미있는 경험과 함께 읽기쉽게 설명하고 있습니다. 창업을 생각하지 않더라도 재미로 읽기에도 괜찮은 책 같습니다.

많은 개발자들이 30대로 들어서면서 미래에 대한 고민을 하게 됩니다. 그중 계속 개발자로 남기를 바라는 분들은 어려운 현실에서 더욱 고민이 많을 수밖에 없습니다. 한국에서는 순수개발자로 40/50대 롤모델로 삼을 분들이 그리 많이 알려지 있지 않기도 하고요.  요즘은 인식이 변하고 있어 나이에 그다지 연연하지 않고 개발만 할 수 있는 회사들이 있는 것 같지만, 아직 업계의 일반적인 상황은 아닌 것 같습니다. 그리고 이런 분위기의 회사가 늘어난다 하더라도 계속 개발자로 남아있기 바라는 사람들의 수요를 따라 갈 수는 없을 것 같습니다.

60대가 되어서도 개발을 계속 할 수 있는 가장 궁극적인 방법중 하나는 소프트웨어 업체를 직접 만들어서 운영하는 것입니다. 하지만 컴퓨터만 상대하던 개발자가 1인 기업이든 소형 ISV든 회사를 운영한다는 것은 매우 어려운 일입니다. 회사라는 울타리에서 나와 직접 계약을 하고 책임을 져야하며, 수익 또한 규칙적이지 않습니다. 흔히 사업을 한다고 하면 주변에서 대부분 말리는 이유가 있습니다. 위험하고 창업대비 성공률도 매우 낮습니다.

하지만 평생 개발만 하고 싶다면 극소수를 제외하고는 언젠가는 용기를 내어 선택해야될 순간이 올 것 같습니다.  이에 대비해 미리 치밀하게 준비만 해놓는다면 그리 무모한 일은 아닌 것 같습니다. 최근 애플의 앱스토어를 시작으로 온라인에서 직접 개발자(사)와 소비자를 이어주는 소프트웨어 스토어들이 많이 나온다는 것도 더욱 힘을 실어 주기도 하고요.

그리고 나이에 대해 중압감을 가지고 서두르실 것은 없습니다. 저도 30대 중반에 개발자로서 미래에 관해 가장 고민을 많이하고 그 시기에 회사를 나왔습니다. 40이 넘으면 노인네 취급 당해 아무것도 못할 것 같다는 생각을 했고, 40이 넘기전에 무엇 하나를 이루어 놓아야 된다는 부담감이 있었습니다. 하지만 주위는 변하는 것이 없는데 괜히 제 스스로 숫자에 연연해 조급했던 것 같습니다. 막상 그 나이가 되니 오히려 심적으로 더 편해졌습니다. 저보다 나이 많으신 실제 필드에 계신 분들도 많으니 송구스러워서 여기까지만 해야 되겠습니다.

평생 개발할 수 있는 여건에 집착하는 것은 개발이 재미있기 때문입니다. 재미있게 돈을 번다는 것은 정말 재미있습니다. 사실 더 재미있는 것은 배우기만하는 것인데, 이건 제 인생에서 향후 20년내에는 불가능할 것 같습니다. 개발자로 계속 먹고만 살수 있다면 이 부분은 영영 불가능해도 괜찮습니다.

AND

NSURLConnection을 이용하면 간단하게 해당 웹서버의 html, xml등의 내용을 쉽게 가져올 수 있습니다.

1. 연결
connection = [[NSURLConnection alloc] initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.cocoadev.co.kr/rss]] delegate:self];

[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];

대상 URL을 인자로 NSURLConnection을 생성합니다. 위는 이 블로그의 rss를 주소로 생성하는 예입니다. delegate는 self로 현제 오브젝트로 지정합니다. delegate로 지정된 오브젝트는 NSURLConnection의 delegate 메소드를 구현하고 메시지를 받을 수 있습니다.

UIApplication의 networkActivityIndicatorVisible을 YES로 하여 데이터 수신 시 좌측과 같이 상단 상태바에 인디케이터가 회전하는 에니메이션으로 사용자에게 데이터 수신중임을 알려줍니다. 기본값은 NO로 되어 있습니다.

2. delegate 메소드 구현
NSURLConnection 생성시 delegate로 지정된 클래스에서는 해당 이벤트 처리 메소드를 구현해야 합니다. 가장 자주 사용되는 delegate 메소드는 데이터 수신, 연결 종료, 오류발생등에 관련된 것들입니다.

1) 데이터 수신
* connection:didReceiveData:
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
   [receiveData appendData:data];
}
데이터가 수신될 때 불려지면 웹서버로 부터 받은 데이터가 NSData 형태로 넘어 옵니다. NSMutableData의 appendData 메소드를 이용하여 수신되는 데이터들을 차례대로 저장합니다.

2) 연결 종료
* connectionDidFinishLoading:
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
   NSString *str = [[NSString alloc] initWithData:receiveData
encoding: NSUTF8StringEncoding];
   NSLog(@"%@", str);
   [str release];

   [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
}
데이터가 모두 수신되어 웹서버와의 연결이 종료되었을 때 호출됩니다. 이곳에서 원하는 작업을 하거나 다른 오브젝트가 처리하도록 할 수 있습니다. 위는 NSData로 저장된 데이터를 NSString으로 변환하여 출력하는 예입니다. xml이라면 NSXMLParser를 사용하여 데이터를 처리할 수 있습니다.

3) 오류 발생
* connection:didFailWithError:
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
   NSLog(@"Connect error: %@", [error localizedDescription]);   

  [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
}
네트워크가 연결되지 않았을 경우등 오류가 발생하였을 때 호출되는 메소드 입니다. 해당 페이지가 없음을 나타내는 404 오류등은 이 메소드가 호출되지 않습니다.

AND

몇일전에 어플을 버젼업 하면서 큰 실수를 했습니다. UITableViewController를 UIViewController로 교체하면서 Edit 버튼을 클릭해도 테이블뷰에서 삭제모드로 변경이 안되는 버그를 확인 못하였습니다. delegate와 datasource 프로토콜의 필요한 메시지들은 다 구현이 되어 있는데 안되더군요.


가능하면 다시 UITableViewController로 돌아 가지 않는 방법을 찾아 보았는데, UIViewController의 setEditing 메소드를 이용하는 방법이 있었습니다. 사용자가 Edit/Done 버튼을 클릭할 때 불려지는 메소드인데 인자로 넘어오는 editing을 참고하면 테이블뷰의 에디트 모드가 UITableViewController일때와 동일하게 동작합니다.

- (void)setEditing:(BOOL)editing animated:(BOOL)animated {

    resultTable.editing = editing;

    [super setEditing:editing animated:animated];

}


조금 더 확인을 해봐야 겠지만 아직까지는 문제가 없는 것 같습니다. 기능도 몇개 없는데 귀찮아서 테스트도 안해보고 올렸다니 제 자신이 한심하네요.

AND