Category Archives: 허접프로그래머

아이폰 어플리케이션 개발을 위한 책 소개

보고 싶은 책은 전세계 아마존에서라도 구매해주는 회사에 다니고 있는 관계로 보고 싶은 책은 원없이 볼수 있는 상황이니 제가 본 책을 몇가지 소개해 드릴려고 합니다.

저도 이쪽 분야를 전혀 모르는 상황에서 시작했기 때문에 전혀 모르는 초짜가 이 책들을 봐왔다고 생각하고 적어보겠습니다.

아마도 이글을 보시는 분들 또한 처음 시작하시는 분들이 대부분일테니깐요.

사실 저도 모든 책을 정독한 상황은 아니니, 그냥 참고사항 정도로만 생각해 주시면 되겠네요.

– Cocoa Programming for MAC OS X
사용자 삽입 이미지

당시에는 아이폰 개발책이라고 해봤자 한글로 되어있는 책이 존재하지 않았습니다. 하지만 이 책의 맨 뒤에 아이폰 개발이 조금(?) 나와있다고 하여 사보게 되었습니다.

하지만 실제로 이 책은 매우 볼만한 책입니다. 이 책을 보면서 맥용 어플리케이션을 우선 개발해 보시는걸 추천해 봅니다.

실제로 맥용 어플리케이션이나 아이폰 어플리케이션이나 XCode IDE사용법이나 개발 모두 거의 동일합니다.

Interface Builder나 MVC(Model-View-Controller)혹은 Target-Action의 개발 방법에 대해 공부하기엔 좋습니다.

뒤쪽의 아이폰에 대한 내용은 사실 기대하기에 무리가 좀 있습니다. 하지만 맥에서 하는 개발조차 서툰 시점에서는 이 책은 매우 좋은 책임에 틀림이 없습니다.

– 예제로 시작하는 아이폰 개발
사용자 삽입 이미지
두번째 한글로 나온 책입니다. 실제로 이책은 해외에서 엄청나게 많이 팔린 책의 번역서 입니다.

사실상 아이폰 개발에 대한 국내 첫 서적이죠.

그래서 엄청 많이 팔렸을꺼 같습니다. 책의 저자도 다음의 TV팟을 개발하신 분입니다. 실제로 노하우가 쌓인 분의 번역서죠.

이 책의 장점은 문서화 되어있지 않은 컨트롤들에 대해 꽤 많이 소개되어집니다. 그리고 무엇보다 한글로 되어있습니다.

또한 뒤쪽의 Objective C에 대한 간략한 소개가 나온 부분은 매우 좋았습니다. 처음 접하는 분들의 경우에는 retain count나 GC에 대한 궁금증이 많이 생기실꺼 같은데 설명이 잘 나와있습니다.

하지만, 제가 남이 공들여 번역한 책을 두고 이런말을 해도 되는지 모르겠는데, 저에게는 이 책이 크게 도움이 되지 못했습니다.

우선, 책의 원 저자가 오래전에 쓴 책인거 같은데 베타시절의 SDK를 가지고 책을 썼습니다. 애플이 제안하는 개발가이드를 따르지 않고 자신의 스타일대로 개발하는 성향도 강합니다.

솔직히 이 책을 번역할때 예제코드를 한번씩 실행해 보셨는지 궁금합니다. 처음 해보는 사람입장에서 보면 이 책을 가지고 무엇을 만들어 내기에 매우 어렵습니다.

왠지 한글로 되어있지만 무언가 무미건조한 번역기가 번역한 느낌을 받았습니다. 그리고 번역하지 않아도 되는 부분을 무리하게 번역한듯한 인상을 받았습니다.

지금 당장 기억나는게 애드혹 배포쪽을 보는데 도저히 읽히지 않는달까요, 따라하고 있지만 무언가 책내용을 해석하면서 따라해야 한다고 할까요.

실제로 한글로 된 책이었지만 초보 입장에서는 너무 따라가기 어려운 번역이었다고 생각합니다. 그래도 현재 책을 사실려는 분들께는 선택의 여지가 없죠^^

– Beginning iPhone Development
사용자 삽입 이미지
번역된 책을 샀음에도 개발에 어려움이 많아 구매한 책입니다. 이건 원서입니다만 매우 훌륭한 책입니다.

실제로 이 책을 보며 매우 큰 도움이 되었습니다. 책의 구성이나 배치도 훌륭하고 영어를 크게 잘 몰라도 보는데 어려움이 없을정도로 소스코드가 목적이 명확하게 제시되는 것 같습니다.

실제로 현재 위키북스에서 한글화중입니다. 이제 곧 출간 될꺼 같네요. 번역이 어떻게 되었을지 궁금합니다.

UINavigationController와 UITableView등을 사용할 때 매우 많은 도움이 되었습니다. 좋은 책입니다.

– iPhone SDK
사용자 삽입 이미지
오라일리에서 나온 iPhone SDK책입니다. 이책은 바이블적인 성격이 강한 책입니다.

특정 컨트롤들에 대해 간략한 예제를 쭉 나열하는 식으로 책이 구성되어있습니다.

하지만 이 책이 특히나 마음에 드는 점은 예를 들면 UIButton으로 버튼을 만들때 스타일이 여러가지가 있는데 그런 스타일들을 모두 나열하여 설명하고 있습니다.

하지만 조금만 더 생각하자면 XCode – Documentation 에 들어가면 볼 수 있는 수준의 책이라는 말도 됩니다.

하지만 책이 매우 가볍고 간단한 참고용으로 좋습니다. 하지만 개발시에는 오히려 안보게 되더군요.

– Professional iPhone and iPod touch Programming
사용자 삽입 이미지
이 책은 웹 개발에 대한 책입니다. 거의 총망라 되어있더군요. HTML과 CSS그리고 Canvas등의 내용을 포함하고 있습니다.

아이폰용 웹페이지를 만드신다면 꼭! 보셔야 할 책인듯 합니다. 사실 저도 이 책을 회사 퍼블리셔분을 위해 주문하였습니다.

모바일 사파리용 사이트를 개발중이시라면 추천, 어플리케이션 개발에는 전혀 관련 없는 책입니다.

– Programming in Objective-C 2.0
사용자 삽입 이미지
이 책은 Objective C에 대한 모든게 나와있다고 볼만한 책입니다. 이렇게 나와서 두께가 안보이지만 꽤 두꺼운 책입니다.

정말 다른 책에서 쉽게 볼 수 없는 Objective C에 대한 모든 내용이 나와있습니다.

보통의 책에서는 대충 개발하는 방법에 대해 나와있다면 이 책에서는 각각의 클래스별로 예제를 곁들어 설명하고 있습니다.

또한 맥과 아이폰에서 제공하는 프레임워크에 대해서나 메모리 관리에 대해서도 매우 상세하게 나와있습니다.

일종의 바이블, 옆에 두고 보기에 매우 좋은 책입니다.

ProxyAJP를 이용한 Apache2 + Tomcat 연동시 중대한 보안 문제

– 2010.08.03 추가
아래에 쓴글은 정상적으로 작동하지 않으며 다음의 방법이 보안을 위한 정상적인 방법입니다.


ProxtRequests 설정을 Off로 변경 :
외부 요청이 차단됨, 이후에도 ProxyPass, ProxtPassMatch등 정상 사용 가능


– 기존의 글

기존에 다음과 같은 ProxyAJP를 이용한 Apache2와 Tomcat의 연동법에 대한 글을 썼었습니다.

Proxy AJP + mod_rewrite를 이용하여 Apache 2.2 + Tomcat 완벽 연동하기
Apache 2 Proxy AJP를 이용한 호스팅 환경에서의 완벽 연동

하지만 위의 방법들에 중대한 보안 문제가 있다는 것을 알게 되었습니다. 어느 순간부터인가 서버에 엄청난 트래픽이 유입되더군요.

저는 단순히 DDOS공격인줄 알았습니다. IP는 정체를 알수 없이 전세계에서 들어오더군요. 사실상 끝나기를 기다리며 내 서버에는 사실상 영리목적의 사이트가 없는데 무엇이 목적일까 고민하게 되었습니다.

우선 쌓이는 로그가 매우 특이한것을 알수 있었습니다. 로그는 대충 다음과 같은 형식이었습니다.

[code]202.109.175.224 – – [17/Apr/2009:21:17:39 +0900] “GET http://www.dfwater.com/Index.asp HTTP/1.1” 503 28 “http://www.dfwater.com/” “Mozilla/4.0 (compatible; MSIE 6.0; Windows 5.1)”
84.16.227.121 – – [17/Apr/2009:21:17:35 +0900] “GET http://www.google.com/ie?q=puts+inurl:?p%3D&hl=en&num=100&start=200&sa=N HTTP/1.0” 302 335 “http://www.google.com/ie?q=puts+inurl:?p%3D&hl=en&num=100&start=200&sa=N” “Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)”
64.91.72.166 – – [17/Apr/2009:21:17:39 +0900] “CONNECT 205.188.251.26:443 HTTP/1.0” 200 – “-” “-“
61.160.211.12 – – [17/Apr/2009:21:17:36 +0900] “GET http://www.kiss888mu.cn HTTP/1.1” 500 3847 “http://www.baidu.com” “Mozilla/4.0 (compatible; MSIE 6.0; Windows 5.1)”
118.69.166.3 – – [17/Apr/2009:21:17:39 +0900] “GET http://69.147.112.211/config/isp_verify_user?l=mmg&p=0011 HTTP/1.0” 200 26 “-” “-“
208.70.78.177 – – [17/Apr/2009:21:17:36 +0900] “GET http://www.google.com/ie?as_q=inurl:/guestbook.html+tampa+fl+gay+life+and+dating&num=100&hl=en HTTP/1.0” 302 355 “http://www.google.com/ie?as_q=inurl:/guestbook.html+tampa+fl+gay+life+and+dating&num=100&hl=en” “Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.8b2) Gecko/20050224 Firefox/1.0+”
78.30.203.105 – – [17/Apr/2009:21:17:39 +0900] “GET http://inmarket73.ru/forum/index.php?s=fb2bade970f814c6d66c67f414a2328b&act=Reg&CODE=image&rc=35f728107e6ae6292a22c4e6f16634ac&p=3 HTTP/1.0” 200 68 “http://inmarket73.ru/forum/index.php?act=Reg&CODE=image&rc=7f430230e31d334872d1b5136a57b9ce&p=1” “Mozilla/4.0 (compatible; MSIE 6.0; AOL 9.0; Windows NT 5.1)”
94.76.199.2 – – [17/Apr/2009:21:17:36 +0900] “GET http://superschurke.de/comments/feed/ HTTP/1.1” 404 809 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)”[/code]

로그가 좀 지저분 합니다만 형식이 다음과 같다는것만 보시면 됩니다. 요청이 GET 메서드 이후에 http로 시작하는 것을 알수 있습니다. 그것도 전혀 쌩뚱 맞은 도메인과 호스트에 요청을 합니다.

이것이 왜 이상하냐면 보통의 브라우저는 요청을 할때 다음과 같이 합니다. theeye.pe.kr/index.html의 요청이 있다면 DNS에 질의 하여 theeye.pe.kr 도메인의 호스트 IP를 알아낸 이후에 그곳에 접속하여 GET /index.html 과 같은 방법으로 요청을 하게 됩니다.

위와 같은 방법은 마치 여의도에 가서 “롯데월드가 어딧나요?” 라고 물어보는 꼴이 되는 것입니다.

왜 저런 요청이 자꾸 들어오는 것인지 궁금하여 서버에 다음과 같이 테스트를 해보았습니다.

[code]telnet theeye.pe.kr 80
GET http://www.naver.com[/code]
자, 상식적으로 잘못된 요청이라고 나와야 하지만 정상적으로 페이지가 출력됩니다. 아니 왜 내 서버에서 엉뚱한 사이트의 요청을 처리해 주는 것이지!?

이제 여의도에 가서 “롯데월드가 어딧나요?” 라고 물었더니 상대방이 자기 차에 태워 롯데월드에 데려다 주었습니다.

친절한 사람이군요;;; 근데 문제가, 이걸 악용해서 소문이 나서 세상의 모든 사람이 이 친절한 사람에게 와서 자신이 가고싶은 곳이 어딧는지를 물어본다는 것이 문제가 됩니다.

서버가 엉뚱한 요청을 받아 대리 요청후에 결과를 되돌려 주는 문제는 일전의 Proxy설정의 잘못이었습니다.

ProxyAJP설정을 별다른 보안 절차 없이 설정하게 되면 이 세상 모든 http 요청의 IP세탁 시스템으로 둔갑되어질 수 있습니다.

이문제를 해결하기 위해서는 간단하게 Proxy 요청은 로컬호스트에서만 가능하게 설정하시면 됩니다.

[code]<Proxy *>
Order Deny,Allow
Deny from all
Allow from localhost
</Proxy>[/code]
간단하게 해결되었죠? Proxy 설정을 하시고 서버를 운영하시는 분들은 다른 호스트로의 요청을 해보시기 바랍니다.

에러없이 요청이 정상처리 된다면, 이제 표적이 되기전에 설정을 조금 손보시기 바랍니다.

첨언 : 추가로 로그들을 쭉 분석해 봤는데, 위와 같은 방법을 사용하는 이유는 특정 사이트의 검색요청을 계속하여 검색랭킹을 올린다거나, 추천사이트의 어뷰징 혹은 사이트 페이지뷰를 높이는데 사용되어지는 듯 싶습니다.