LG 34인치 곡면 시네뷰 모니터(34UC97) 사용기

하이엔드급 IT기기는 항상 가격대비 성능이 좋지 않다는 생각을 갖고있어서 최고가 제품은 거의 사지 않는편이다. 하지만 이번에 구매한 34인치 곡면 21:9 시네뷰 모니터(34UC97)의 경우에는 보는 순간 돈이 아깝지 않겠구나 라는 생각이 들어서 예약판매가 145만원이라는 가격임에도 불구하고 크게 고민하지않고 질러버렸다. 컴퓨터앞에서 코딩도 많이하고 영상 시청이나 그래픽 작업 등 다양한 작업을 많이하는지라 작업 환경이 넓어질수록 작업효율을 더 올릴 수 있을거라 생각했고 그만큼 내시간을 아낄 수 있다면 투자비용이 아깝지 않다고 생각되었다. 제품 자체의 스펙은 LG전자 공식 제품소개 페이지나 가격 비교 사이트 다나와의 제품 비교 페이지에 잘 소개되어 있으니 자세히 다루지 않고 실제 사용했을때 느낌 위주로 리뷰 및 소개해보려고 한다. ...

2014년 10월 1일 · 3분 · 612단어

코코아팟(CocoaPods) 젠킨스(Jenkins) 설정 연동

 코코아팟(CocoaPods)을 사용하게 될경우 프로젝트(.xcproject)기반에서 워크스페이스(.xcworkspace) 기반으로 변경된다. 이때 젠킨스(Jenkins)에서 기존 프로젝트 기반 설정을 그대로 사용할경우 기본 프로젝트는 잘 컴파일되지만, 연결된 Pods 프로젝트가 업데이트 및 컴파일이 되지 않아서 -lPods 링크 에러(link error)가 나는데. 이때 Jenkins에서 CocoaPods을 잘 인식할 수 있게 할 수 있는 설정방법을 공유하고자 한다. 설정 방법 기존에 프로젝트 기반으로 빌드설정이 되어있던 젠킨스 빌드설정 페이지를 열고, Build 섹션에서 “Add build step” 버튼을 눌러서 Execute shell 항목을 추가 후 pod install 명령어 입력 ...

2014년 7월 23일 · 1분 · 125단어

HTTP Cache 튜토리얼

HTTP Cache 튜토리얼 HTTP를 이용하는 어플리케이션을 개발하다보면 효율적인 네트워크 송수신을위해 서버/클라이언트에서 캐쉬(cache)를 이용하는것이 필수적이다. HTTP를 이용할때 어떤식의 캐쉬방식이 있는지, 어떤 종류의 캐쉬들이 있는지, 어플리케이션 개발에있어서 상식적으로 알고있어야 할 내용들을 정리해보았다. 캐쉬의 종류 캐쉬의 위치에 따라 다음과 같이 분류가 가능하다.1 Browser cache 웹브라우져 혹은 HTTP요청을 하는 클라이언트 어플리케이션들이 내부적으로 갖고있는 캐시이다. Proxy cache 실제 서버가 있는곳이 아닌 네트워크 관리자에의해 네트워크상에 설치되는하는 캐시다. 일반적으로 큰회사나 ISP의 방화벽(firewall)에 설치된다. shared cache의 일종으로 많은 수의 사용자들에 의해 공유되어 사용되며, 레이턴시와 트래픽을 줄이는데 매우 도움이된다. Gateway cache(reverse proxy cache) 네트워크상에 설치되지 않고 실제 서버의 관리자에의해 설치 및 운영된다. 실제 서버의 앞단에 설치되어 요청에대한 캐쉬 및 효율적인 분배를 통해 서버의 응답 성능을 좋게하고, scalable하게 만들어 준다. 로드밸런서 등을 사용해서 실제 서버가 아닌 gateway cache로 요청을 reroute한다. CDN은 이런 gateway 캐시를 유료로 제공해주는 서비스라고 볼 수 있다. 기본적인 캐쉬 동작 방식 응답 헤더의 캐쉬가 캐쉬 하지말라고 지정되어있는 경우 캐쉬하지 않는다 ...

2014년 7월 17일 · 5분 · 944단어

allocWithZone: 의 의미

어떤 클래스에 대해 NSCopying 프로토콜을 구현하다보면 allocWithZone: 이라는 메서드에 맞닥뜨리게된다. 객체의 경우 힙(heap)에 할당되는데, 이 힙을 zone으로 나누고 해당 zone별로 메모리를 할당 및 관리하여 메모리 파편화를 막는데 도움을 주기위해 존재하는 메서드이다. 하지만 최근 런타임관련 알고리즘이 많이 효율적으로 변경되어서 굳이 zone을 사용하지 않아도되며, ARC로 바뀌면서 아예 zone을 사용하지 말라고 다음과같이 설명하고있다.1. You cannot use memory zones. There is no need to use NSZone any more—they are ignored by the modern Objective-C runtime anyway. ...

2014년 7월 15일 · 1분 · 77단어

오토레이아웃 IB(Interface Builder)에서 다루기

제약조건(constraint) 설정 하나의 뷰를 선택 – 해당 뷰와 슈퍼뷰와의 관계 설정가능, 선택된 뷰 자체의 제약사항 설정가능 두개 이상의 뷰를 선택: 선택된 뷰들간의 관계 설정가능, 선택된 뷰들의 공통제약사항 설정가능(ex: equal width) IB왼쪽의 ViewTree화면이나 IB 화면에서 에서 하나의 뷰를 선택 후 컨트롤 키를 누르고 드래그하여 다른 아이템을 선택하면 두 아이템 관계를 설정 가능. IB에서 최상위 view를 선택한 후, 오른쪽 속성창에서 orientation, top bar, bottom bar 유무 등 옵션을 조정하여 실제보이는 형태를 실행하지 않고 시뮬레이트 가능. ...

2014년 7월 15일 · 1분 · 164단어

상수 포인터(constant pointer)와 상수를 가리키는 포인터(pointer to constant)

C문법에서 const 키워드가 포인터에대해 사용될때 키워드의 위치에따라 의미가 매우 달라진다. 상수포인터와, 상수를 가리키는 포인터 변수 두가지가있으니 주의해서 사용해야한다. 상수 포인터(constant pointer) 문법: int * const myValue; 포인터 변수가 갖고있는 주소 값을 변경 불가능 포인터 변수가 가리키는 주소에 존재하는 값을 변경하는 것은 가능 Objective-C에서 키값을 정의하는데 많이 사용되는 패턴이다. 예): NSString *const kCustomKey = @“myKey”; 상수를 가리키는 포인터(pointer to constant) 문법: const int * myValue; 포인터 변수가 갖고있는 값은 마음대로 변경 가능 ...

2014년 7월 14일 · 1분 · 80단어

iOS 고급 오토레이아웃(auto layout)

본 글에서는 기본적인 오토레이아웃 튜토리얼들에서 잘 다루지 않는 커스텀 뷰에 오토레이아웃(auto layout)을 적용하는 방법과, 전반적으로 레이아웃 시스템이 어떻게 동작하는지를 중심으로 설명해보도록 하겠다. 오토레이아웃의 종류나 기본적인 적용방법들은 다른 좋은 튜토리얼들이 많으니 다루지 않을 예정이다. AutoLayout Programmatically 사용하기 개인적으로 오토레이아웃을 사용할 때도 인터페이스빌더를 되도록이면 쓰지 않으면서 코드만로 작성하는 방법을 선호한다. 애플에서 제공하는 NSLayoutConstraint 의 경우 가독성이 매우 떨어지는 단점이 있고, 이를 보완하기 위한 Visual format language 가 있지만, 이 또한 아주 직관적인 편은 아니며 문자열을 그대로 사용하기때문에 오타의 위험성도 존재한다. 이래저래 알아본 결과 Masonry라는 라이브러리가 그나마 가장 직관적이면서 가독성이 좋아 오토레이아웃 제약조건 코드를 작성할때 만족하며 사용중이다. Swift에서 사용을 원한다면 동일한 사람이 개발한 SnapKit을 사용하면 된다. ...

2014년 6월 18일 · 6분 · 1128단어

Cocoa Binding Controller Keys

코코아 바인딩 컨트롤러의 경우 최소한의 코딩만으로 model값이 변화할때 view와 model 사이의 싱크를 맞춰주는 역할을 한다. 애플에서 제공하는 각 클래스별 바인딩 가능한 키값들은 다음 문서 에서 확인하면 되고, 본 글에서는 자주 사용하는 바인딩 컨트롤러들의 상속구조를 살펴보고, 각각의 컨트롤러들에 어떤 키/경로 값을 설정할 수 있는지 정리해 보았다. 바인딩 컨트롤러 상속구조 NSController -> NSObjectController NSController -> NSObjectController -> NSArrayController NSController -> NSObjectController -> NSArrayController -> NSDictionaryController NSController -> NSObjectController -> NSTreeController NSController -> NSUserDefaultsController NSObjectController canAdd canRemove isEditable selectedObjects selection NSArrayController arrangedObjects canAdd canInsert canRemove canSelectNext canSelectPrevious filterPredicate isEditable selectedObjects selection selectionIndex selectionIndexes sortDescriptors NSDictionaryController arrangedObjects canAdd canInsert canRemove canSelectNext canSelectPrevious isEditable selectedObjects selection selectionIndex selectionIndexes sortDescriptors NSTreeController arrangedObjects canAdd canAddChild canInsert canInsertChild canRemove isEditable selectedObjects selectedNodes selection selectionIndexPath selectionIndexPaths sortDescriptors NSUserDefaultsController hasUnappliedChanges values

2014년 6월 14일 · 1분 · 121단어

MacOS 10.10 & iOS 8 새기능 익스텐션(Extensions) 개념 잡기

기존의 OS X나 iOS에서는 custom URL Scheme을 이용하거나 custom pasteboard(번들 seed ID를 동일한경우만 가능) 등을 이용하여 어플리케이션 간에 데이터를 **‘전달’**하는 것만 가능했다. 즉, A라는 앱에서 B라는 앱으로 데이터를 전달한 후 B앱으로 컨텍스트가 전환된 후 그 데이터를 받아서 추가적인 화면을 보여주거나 처리를 할 수는 있었지만, 아예 앱간 컨텍스트 전환 없이 A앱 내부에서 B앱이 가진 기능을 바로 사용하는 것이 불가능했다. 하지만 이번에 새로운 OS에 “익스텐션(Extensions)” 이라는 이름으로 이것을 가능하게 해주는 기술을 애플에서 공개했다. 앱간에 정보를 주고받으면서 앱 to 앱으로 전환이 일어나는 것 자체가 사용자에게 있어서는 불편이었기 때문에 이러한 익스텐션 기능이 잘 적용되면 사용자 경험 자체가 많이 좋아질 것으로 예상된다. (사용자에게 있어서는 앱전환이 일어나지 않는것으로 보이지만, 실제로 기술적인 관점에서 봤을때 익스텐션 자체는 실행중인 앱과는 다른 독립적인 프로세스인 것에 주의) ...

2014년 6월 14일 · 6분 · 1074단어

수정배포된 CSS/JS 파일 캐시 방지

웹사이트를 운영하다보면 웹사이트의 디자인이나 프론트엔드 동작을 바꾸기 위해서 CSS 또는 javascript 파일을 수정하는 일이 종종 생기게 된다. 이때 수정된 파일을 서버로 배포하더라도, 기존 웹사이트를 이용하던 유저의 브라우저 캐쉬때문에 수정된(fresh) 파일을 다운로드 하지 않고 캐쉬를 이용하게되어 웹사이트가 깨져보이게되는 경우가 있다. 사용중인 웹서버에서 특정 파일에대한 캐쉬설정을 적절히 바꿔서 Http Response Header에 캐쉬관련 지시자나 E-Tag 등이 잘 포함되게 설정해주면, 브라우저에서 expired 된 캐쉬가 사용되는 것을 적절히 막을 수 있지만, 직접 웹서버를 운영하지 않고 웹 호스팅서비스를 이용하는 경우 쉽지 않은 일이며, 정확하게 설정되지 않을경우 브라우저마다 미묘하게 동작이 달라서 원하는 결과를 완벽하게 얻지 못할때도 있다. ...

2014년 6월 8일 · 2분 · 284단어