생일

예쁜 우리 지은이 한 번 보고 가세요.

6월 9일은 내 생일이다. 나는 생일을 거의 챙기지 않아서 그냥 지나가는 경우가 대부분인데 어제는 어쩌다보니 친구들이랑 생일을 보내게 되었다.

UIScrollView 사용할 때 키보드 자동으로 닫기

UIScrollView 또는 이 뷰를 상속 하는 뷰(UITableView, UICollectionView 등)의 서브 뷰가 퍼스트 리스폰더 일 때, 해당 뷰를 드래그 할 때 키보드를 닫는 방법을 설정 할 수 있다.

UIScrollView에 keyboardDismissMode 프로퍼티가 있고, 이 값을 원하는 값으로 변경하면 된다.

기본값은 none이고 onDrag로 설정하면 드래그를 시작하면 무조건 키보드를 닫으며 interactive로 설정하면 키보드를 끌어서 닫을 수 있고 위로 당기면 취소할 수 있다.

UITableView의 셀에 텍스트 필드를 넣어서 사용자 입력 폼을 만들때 사용하면 편리하다. iOS 7.0 이전에는 직접 구현해서 만들어서 사용했는데 매우 편리하다.

특정 크기와 색상을 가지는 UIImage 객체 만들기

그냥 플랫한 이미지가 필요한 경우가 있는데(내비게이션 바의 쉐도우 이미지를 설정 한다거나?), 이때마다 이미지 리소스를 넣기는 귀찮으니 코드로 이미지를 만들어 보자.

코드

UIColor와 CGSize를 매개변수로 받는 convenience 생성자를 익스텐션으로 추가하고, 매개변수를 사용하여 이미지 컨텍스트를 만들어서 이미지 객체를 만들어서 초기화 한다.

진짜 언젠가는 쓸모가 있다…가뭄에 콩나듯

2017년 회고

2017년 회고를 왜 2018년에 쓰냐구요? 어쩌라구요…

2016년 8월에 전역해서 12월에 현재 회사에 입사하고, 회사에서 첫 일 년을 보냈다.

1월이 시작되자 마자 미국의 스타트업 지원 프로그램 참가와 현지분과 같이 진행중인 프로젝트가 있어서 미국으로 출장을 약 한 달간 갔다.

돌아오자마자 2월은 MWC 2017 참여를 위해 바르셀로나로 떠났고(유럽은 정말 예쁘다) 정말 바쁜 연초를 보냈다.

전에도 중국은 한번 나간적이 있었는데 이렇게 해외를 많이 나가게 될 줄은 몰랐다.

이후에는 거의 매일 미국과 화상으로 회의를 하면서 프로젝트를 진행했고 6월에 다시 WWDC 행사 참여를 위해 미국으로 떠났다.

재건축때문에 30년동안 살던 집에서 이사를 했고 아이유 콘서트도 다녀왔다! 조카는 하루하루 귀여워 지고 있으며 운전면허도 발급받은 것 같다.

첫 예비군도 했고 미국 계좌도 만들었다!

개발자니까 일단 기술적으로는 Swift를 조금더 심도있게 사용할 수 있게 되었고 Swift를 사용한 TDD 스터디와 Swift를 사용한 백엔드 서비스 개발도 해보았다.

Docker 클러스터 환경도 구축하고 블로그 서버도 이전했다. 이외에도 node, Spring, JavaScript, Java, Kotlin 같은 것들은 틈틈히 공부하고 있다.

많은 것들을 새로 경험하고 새로운 만남이 있었고 헤어짐도 있었다. 개인적으로 크게 성장했던 한 해라고 평가할 수 있다.

2018년은 기술적으로 성장하는 해가 되었으면 한다.

WWDC 2017을 다녀와서

왜 2018년에 2017년 글을 쓰냐구요? 어쩌라구요.

회사에 입사하고 한 달 뒤에 미국 출장도 다녀오고 MWC 2017 참가 때문에 바르셀로나 출발 준비를 하는 중에 페이스북에 글을 하나 올렸다.

사실 WWDC에 가고 싶다는 글은 거의 매년 쓰는 편이라 저 때도 생각없이 그냥 썼던걸로 기억한다. 시간은 흘러 3월이 되어 WWDC 참가 신청을 받는 메일이 왔고, 마침 회사에서 해외 컨퍼런스에 사용할 수 있는 돈이 있다고 하여 신청하게 되었다.

애플 세계 개발자 회의는 언제부터인가 참가신청이 늘어나면서 무작위로 선발하여 참가자를 받기 시작했는데, 우리 회사는 3명이 개발자로 등록되어 있어서 일단 모두 신청해보기로 했고 그 중 한명이 당첨되었다.

그 분이 나에게 티켓을 양도해 주었고(같은 팀 한정으로 양도가 가능하다.) WWDC 2017 행사를 참가할 수 있었다.

출발

직전에는 유나이티드 항공을 타고 갔었는데, 그다지 유쾌한 경험은 아니었다. 그래서 이번에는 회사에서 국적기로 항공권을 준비한 것같다.

기내식은 비빔밥이지!

도착

도착하자마자 마중나온 대표님 지인분과 만나서 한동안 지낼 집으로 이동해서 짐을 풀고 티켓 체크인을 위해 행사장으로 출발했다.

행사장 정문에서 직원분이 찍어주셨다.

행사가 시작하고 티켓을 받을 수도 있지만 줄이 엄청 길고 새벽부터 대기하는 분도 많기 때문에 행사날 받을 생각을 하면 기조연설을 보지 못할 수도 있다. 나는 행사 바로 전날 체크인 장소가 닫기 직전에 도착해서 체크인을 할 수 있었다.

이런 굿즈도 받을 수 있었다.

처음에는 저 뱃지들이 뭔가 했는데, 행사를 진행하면서 여러가지 다른 종류의 뱃지들을 나누어 주더라. 나중에는 자기가 수집하지 못한 뱃지를 찾기위해 광고하는 사람까지 등장, craigslist에 매물로 올리는 사람도 있었다.

이런 것들이 길마다 붙어있었다.

아직까지는 내가 WWDC에 왔다고 크게 느끼지 못하고 있었다.

첫째 날

출입증과 함께

대충 시작 시간에 맞추어서 출발하면 될 꺼라고 생각하고 천천히 출발했다. 하지만…

사람이 정말 많았다. 입구에서 두 블럭을 지나서까지 줄이 있었다. 다행히 기조연설 시작전에 들어갈 수 있었고 팀쿡도 멀리서 봤다!

첫 날은 세션이 별로 없다. 기조연설이 끝나고 핵심 정리 쯤이라고 볼 수 있는 Platforms State of the Union 세션을 듣고 점심을 먹었던 것 같다. 오후에는 새로 발표한 디바이스들을 체험 하는 세션이였던 것 같다. 홈 팟과 아이맥 프로를 체험, 공식적으로 외장 그래픽 카드 킷을 지원하게 되었고 VR 콘텐츠도 맥에서 체험할 수 있게 되었던 걸로 기억한다.

둘째 날

둘째 날의 시작은 미셸 오바마의 세션으로 시작했다. 미셸 오바마를 이렇게 가까이에서 보게 될 줄은 영어 실력이 그렇게 좋지는 않아서 많이 알아 듣지는 못 했지만 재미있는 세션이였다.

미셸 오바마님!

특별 세션을 제외하고 둘째 날은 일반적인 세션들만 들어갔다. 그리고 애플에서 주는 음식이 죄다 맛있었다…

간식이 엄청 맛있다.

점심으로 제공되는 음식들은 뭐랄까 건강해지는 맛이다.

이런 느낌의 점심을 제공 받았다.

셋째 날

셋째 날은 특별한 행사는 없었고 기술 세션들만 참여했다. 캘리포니아 날씨는 언제나 좋다.

넷째 날

이날은 bash 행사가 있었던 날로 기억한다. bash는 세션이 끝나고 저녁에 맥주와 음식이 제공되고 밴드가 와서 즐기는 행사였던 것 같은데 나는 그날 저녁 회사에서 하는 회의가 있어서 참여하지 못했다. bash 출입 밴드를 받기는 했지만…

너에게 맥주 권한을 허가한다..

마지막 날

WWDC 2017 끝!

5일에 걸쳐 행사가 끝이 났다. 일반인들은 키노트에만 관심이 있을 것이고, 나는 iOS 개발자라서 개발 세션을 현장에서 들을 수 있어서 좋았다. 물론 세션만 듣는 것은 행사가 끝나고 나중에 개발자 홈페이지에서 볼 수 있으니까 크게 이점은 없다.

하지만, 현장에서 애플 엔지니어에게 질문을 할 수 있는 구역이 있고 버그 같은 것은 애플 엔지니어에게 말하면 그 자리에서 이슈로 등록해주었다. 새로 추가한 기술을 현장에서 바로 사용해보고 이해가 되지 않는 부분은 애플 엔지니어에게 물어 볼 수도있다.

올 해도 WWDC 2018 참가 신청 메일이 왔다. 올 해도 갈 수 있으면 좋겠지만 회사 사정이 그렇게 좋지만은 않아서…

굿즈 모으세요 굿즈…

Let’s Encrypt Wildcard 인증서 발급받기

블로그를 다시 만들면서 기존에 사용하던 Let’s Encrypt 일반 인증서를 와일드카드 인증서로 변경했다.

Let’s Encrypt

Let’s Encrypt는 무료로 인증서를 발급해주는 곳이다. ACME 프로토콜을 사용해서 인증서를 발급 받을 수 있으며, Certbot과 같은 클라이언트를 사용하면 인증서를 쉽게 발급 받고 갱신할 수 있다.

ACME v2 부터 와일드카드 인증서를 지원하기 시작했다.

와일드카드 인증서는 기본 도메인을 포함하여 하위 서브 도메인에 무제한 사용 가능한 도메인으로 일반 인증서보다 유용하게 사용 가능하다.

클라이언트

ACME v2에 호환되는 클라이언트(ACME v2 Compatible Clients) 중 Let’s Encrypt에서 권장하는 Certbot(Certbot >= 0.22.0)을 사용할 것이다.

Certbot을 사용하여 와일드카드 인증서를 발급 받기 위해서는 작성일 기준으로 DNS 플러그인을 사용해야 한다. 메뉴얼 모드 또한 dns 챌린지를 지원하는데 ACME v2에 호환되는지는 확인하지 않았다.

나는 DigitalOcean의 DNS를 사용중이므로 certbot-dns-digitalocean 플러그인을 사용했다. 해당 플러그인들은 아직 certbot-auto로는 설치되지 않으며 Docker를 사용하여 플러그인을 사용할 수 있다.

Docker 이미지 만들기

Docker Hub에 Certbot 이미지가 등록되어 있지만 해당 이미지는 플러그인이 포함되어있지 않다. 그래서 플러그인이 포함된 이미지를 별도로 만들어야 한다.

먼저 Certbot 소스코드를 내려받고 certbot-dns-digitalocean 하위 폴더에 Dockerfile이 있으므로 이미지를 빌드한다.

발급받기

certbot-dns-digitalocean 플러그인을 사용하기 위해 DigitalOcean API Token을 발급받고 digitalocean.ini 파일로 저장한다.

이제 앞서 빌드한 이미지를 사용하여 인증서를 발급 받을 수있다. 기본적으로 Certbot은 ACME v1 서버를 사용하므로 –server 옵션으로 ACME v2 엔드포인트를 설정하고 –dns-digitalocean–dns-digitalocean-credentials 옵션으로 플러그인을 설정한다.

 

Certbot을 실행하고 각 단계를 진행하여 바인드 된 경로에 인증서를 발급받을 수 있다. 이때 기본 도메인을 포함하고 싶다면 *.domain.com, domain.com에 대한 인증서를 발급받아야 한다. *.domain.com에 대한 인증서만 발급받으면 기본 도메인은 포함하지 않게 된다.