saltfactory's blog


GCD와 Block을 이용한 URL 이미지 비동기 로딩

서론

UITableView에서 각 cell 마다 이미지를 로드하거나 특정 시점이 아닌 비동기적으로 이미지를 로드하기 위한 방법이 필요할 때가 있다. 이미지 로드가 완료될때까지 기다렸다가 다음 프로세스를 진행하게 되면 UI가 멈추거나 인터렉티브한 프로그램을 만드는데 많은 제약이 생기기 때문이다. 이러한 이유로 이전부터 비동기 형식으로 이미지를 로드하는 방법과 예제가 블로그와 책에 소개가 많이 되어왔다. 이러한 비동기 방식으로 이미지 로드는 iPhone 로컬의 이미지를 로드하기보다 원격지에 있는 URL을 이용해서 이미지를 로드할때 그 필요성이 더 필요하다. 네트워크를 통해서 이미지를 가져온다는 것은 바이너리 이미지를 로드하는 시간보다 네트워크에서 데이터를 전송하는 시간이 더 많이 걸리기 때문이다. 만약 원격 이미지를 비동기 방식으로 로드하지 않게 되면 UI가 멈추어 버리기 때문에 사용자들은 앱이 죽었다고 생각하거나 답답해서 그 앱을 두번다시 사용하지 않을지도 모른다.

비동기 방식으로 이미지를 로드하는 예제들

  • http://developer.apple.com/library/ios/#samplecode/LazyTableImages/index.html
  • http://www.markj.net/iphone-asynchronous-table-image/
  • http://gazapps.com/wp/2011/06/29/asynchronous-images-on-ios/
  • http://avishek.net/blog/?p=39

위에서 사용하는 방법은 NSURLConnection을 이용해서 delegate method를 이용하는 방법을 보통 사용한다. delegate pattern은 작업 처리를 하는 객체에게 위임을하거나 비동기적으로 객체에 메소드를 호출할때 매우 유용한 방법이다. 하지만 delegate를 사용하면 delegate 메소드가 필요하게 되고 delegate 메소드 안에서 처리할 작업을 정의해 두어야 한다.

Continue Reading

CentOS에서 rpm 데이터베이스 문제로 yum을 사용할 수 없을 때

서론

CentOS는 enterprise 오픈소스 리눅스 서버이다. redhat의 서비스와 소프트웨어를 사용할 수 있다는게 가장 큰 강점이고 안정성 또한 훌륭한 서버이다. 학생들은 Fedora를 많이 사용하겠지만 실상 서비스를 운영하다보면 업데이트를 자주하는 운영체제보다는 안전한 운영체제가 더 좋기 때문에 한때 Oracle서버를 운영하기 위해서 CentOS를 이용했었다. 아직도 CentOS는 오픈 소스 서버로서 인기 있는 운영체제중에 하나이다. CentOS는 Ubuntu의 apt와 같은 패키지 관리 툴이 있는데 yum 이라는 것을 사용한다. apt도 sources.list에 리파지토리를 등록하여 사용하듯이 yum 또한 리파티토리를 사용해서 관련 패키지를 쉽게 다운받고 설치하고 업데이트하거나 삭제할 수 있다.

Continue Reading

Linux에서 접근 가능한 IP 제한과 리포팅하기

서론

서버관리자는 서버를 매일 모니터링을 해야한다는 것이 서버관리자의 가장 큰 의무 중에 하나라고 생각된다. 서비스의 정도와 다르게 비록 개발 서버라고 할지라도 서버라는 것이 존재한다는 것은 언제나 공격의 대상이되고 내가 직접적으로 나쁜 의도로 사용하지 않아도 다른 서비스에 공격할 수 있는 통로가 되기도 한다. 그래서 서버를 운영한다는 것은 사실은 큰 부담감을 가지고 있는 것이다. 그래서 가장 간단하면서도 강력한 보안 정책이 있는데 간단하게 설명하자면 특정 서비스에 특정 호스트만 접근하게 하거나 막을수 있는 TCP Wrapped Service라는 것이 있다. TCP Wrapper라고 검색하면 사용하는 방법들이 많이 검색이 될 것이기 때문에 간단하게 사용하는 방법에 대해서 설명을 하고자 한다. 이 포스트는 TCP Wrapper 를 사용하면서 자동적으로 리포팅 기능을 할 수 있게 하는 것이 목적이기 때문에 TCP Wrapper에 대한 보다 깊은 내용은 다른 블로그나 문서를 참조하길 바란다.

Continue Reading

rvm 사용시 ruby 1.9 설치 후 irb에서 한글 입력되지 않는 문제 해결

서론

LineCaceh 모듈은 디버깅이이나 예제용 프로그램 등 같은 코드가 여러번 사용될때 이것의 읽기 성능을 최적화 시켜주고 캐싱해주는 기능을 제공하는 모듈이다. LineCache의 RubyForge 사이트는 http://rubyforge.org/projects/rocky-hacks/linecache 이고 RubyGem 사이트는 http://rubygems.org/gems/linecache이다. Python에서도 LineCache 모듈이 존재한다. 연구실에서 사용하던 git 서버는 gitorious를 사용하여서 구축하였는데 업데이트 주기도 늦고 요즘 사람들이 많이 사용하고 있는 gitlab으로 git 서버를 구축하기 위해서 서버를 마이그레이션 하기로 마음 먹었다. gitorious를 완전히 엎어 버릴수 없고 이전 소스를 따로 운영해야할지도 모르기 때문에 gitorious는 건들지 말고 gitlab을 설치하려고 했다. 문제는 gitorious는 Ruby 1.8.x에서 동작하였는데 gitlab은 gitolite 기반에 동작하고 이것이 ruby-1.9.2를 최소로 요구하고 있다. 다시 말해서 동일한 서버에 Ruby VM이 두가지가 설치되어야 한다. 그래서 결정한 것이 RVM(Ruby Version Manager)을 사용하기로 했다. RVM은 쉽게 Ruby VM을 선택적으로 빠르게 스위칭할 수 있는 프로그램인데 아마 Ruby 개발자나 Rails 개발자라면 대부분 RVM을 사용하지 않을까 생각한다. Ruby는 Python보다 업데이트 주기가 상당히 빠르다. 그래서 다양한 Ruby 버전이 존재하게 되었다. 기존의 모듈을 사용하거나 모든 버전에 문제없이 돌아가는 Ruby 프로그램을 만들기 이해서 Ruby VM 여러개를 스위칭하며 사용해야하기 때문이다. RVM에 대해서는 따로 포스팅을 준비하도록 하겠다.

Continue Reading

Apple MacBook Pro 사용기 (개발자나 연구원이 맥을 사용하면 좋은 점)

서론

하브레인넷 부설 연구소의 개발 연구원으로 개발과 연구활동을하고 있습니다. 하이브레인넷(http://www.hibrain.net)은 지난 1996년부터 창원대학교 데이터베이스연구실에서 운영 하고 있는 교수/연구원/전문직공무원 채용정보사이트가 개설 5주년을 맞이하여 학술/연구/채용 포털사이트로 발전하기 위해 새로운 도메인으로 오픈한 사이트입니다. 그리고 하이브레인넷 부설연구소는 데이터베이스 연구를 기반으로 인터넷 신기술을 연구하여 하이브레인넷 서비스와 인터넷, 모바일, 클라이언트 서비스를 위한 연구 활동을하는 연구소입니다. 저는 이곳에서 개발연구원 막내로 연구활동을 하고 있습니다 ^^~.

오늘은 15인치 애플케어를 연장하면서 1년동안 맥을 사용면서 개발 연구원에게 맥을 사용하면서 좋았던 점을 포스팅하려고 합니다. (MS에 대한 반감을 가지고 포스팅하지 않는 것임을 미리 말씀드립니다. MS 제품군도 훌륭한 PC 운영체제라고 생각합니다.) 아래 사진은 오늘 Apple Core Protecion Plan을 구입한 기념으로 찍은 사진입니다. 이제 지난 1년 동안 MacBook Pro를 어떻게 활용했는지 간단하게 포스팅을 시작하겠습니다.

Continue Reading