저번에 한참 HHKB를 구입하고 싶어서 구입창을 몇번이고 열었다 닫았다 했는데 이미 레오폴드서 구입한 키보드가 있었다. 회사에서 사용했는데 아무래도 MS 키보드 레이아웃이라서 자주 안쓰게 되서 집에 가져와서 먼지를 배양하고 있었다. 이 키보드도 맵핑만 바꾸면 나름 HHKB 분위기로 사용할 수 있다는 얘기를 듣고 솔깃해서 Karabiner를 받아서 키맵을 설정해서 사용하기 시작했다. 그러고서 계속 혼용해서 쓰다가 어느 순간부터 레오폴드 키보드를 메인으로 사용하게 되었다. (드디어!)

Karabiner

엄청나게 강력한 키맵을 제공하는데 오픈소스로 개발되고 있다. 제공되는 설정 목록을 보면 대부분 시나리오에 맞는 키맵 설정이 존재한다. 정말 방대한데다 직접 커스텀해서 만드는 것도 가능한데 옵션이 너무 많아서 한참 찾다가 찾지 못한 부분은 직접 확장을 만들었다. 아마 내장된 확장이나 누군가 만든, 더 좋은 확장도 분명 있을게 분명한데 찾아서 적용해서 확인할 시간 많은 분은 찾아보는게 좋겠다. (찾으면 알려주세요..)

내 확장은 gist에 올려놨다.

  • 애플 키보드는 키맵 적용 안함
  • 애플 마우스/트랙패드는 키맵 적용 안함 (필요한진 몰라도)
  • 좌측 Ctrl을 Alt/Option으로
  • 좌측 Alt를 Cmd로
  • 우측 Ctrl을 Fn으로
  • F1~12를 애플 키보드 기본 기능으로

나름 해피해킹스러운 맵도 넣었다.

  • Fn + {1~=} 조합을 F1~12로 (이건 내장된게 의도랑 다르게 동작해서 커스텀으로 추가)
  • Fn + ;[‘/ 조합을 방향키로

화면 끄는 키가 없어서 이 키도 추가했다. Eject로 모니터만 끈다거나 슬립모드로 간다거나 하는 단축키를 쓸 수 있다.

  • F13(Print Screen)을 Eject로

HHKB의 꽃인 CapsLock 위치 키에 맵핑 하려면 Seil이 필요하다. 정말 HHKB 스타일로 만들려면 필수적이겠지만 기본 동작을 변경해야 하는 부분이 있어서 설치하진 않았다.

일반 키보드로 HHKB를 체험(?)해보고 싶다면, 또는 필요한 키를 변경하고 싶다면 강력하게 추천하고 싶은 앱이다.

5월은 여러가지 일이 있어 참 바빴던 달이라 이제서야 후기를 적는다. MelbJS은 매달 정기적으로 열리는 멜번 JavaScript 밋업이다. 멜번에서도 다양한 밋업이 정기적으로 열리고 있는데다 한결 같이 흥미로운 주제라 자주 가고 싶지만 끝나고 집에 가는 것이 애매해서 1년에 두어 번 정도 가지 못할 뿐더러 가더라도 막차를 타야해서 앞 세션만 듣고 나와야 하는 아쉬움이 늘 있다. 관심있는 주제도 있고 새로운 자극도 받을 겸 시간내서 참가했다.

Aconex 1

밋업은 매월 Aconex 오피스에서 진행하고 있다. 식당 공간을 다용도로 사용할 수 있도록 잘 만들어둬서 올 때마다 사무실이 생기면 꼭 이렇게 공간을 꾸며야겠다는 생각이 든다. 벽 한 켠은 칠판으로 만들어 둬 현재 이 회사에서 진행중인 프로젝트를 힐끔 살펴볼 수도 있다. (밋업을 가면 분위기라는게 있는데 Python 밋업은 학구적인 모임, JS 밋업은 힙스터 모임, .Net 밋업은 제2의 회사로 출근한 분위기다. 흐흐.) 스폰서가 많아 생맥주에, 피자에, 장소까지 풍성하다. 음식을 제공하는 행사마다 채식, 할랄 푸드를 먹는 사람을 위한 메뉴를 두는 모습이 참 보기 좋다.

Smarter CSS Builds with Webpack

envato의 개발자인 Ben Smithett의 세션이었는데 Webpack을 이용해서 CSS를 패키징하는 방법을 보여줬다. 패키징 자체는 크게 새로운 얘기가 아니었지만 컴포넌트 단위의 개발에서 CSS를 편리하게 적용할 수 있는 방법을 제시했다. 어플리케이션에서 실제로 필요하지 않은 CSS까지 전부 불러오는 것이 아니라 컴포넌트에서 필요한 CSS만 불러오는 형태로 작성해, 컴포넌트 단위 구성을 스타일까지 확장할 수 있게 된다.

물론 컴포넌트 단위로 사용하려고 하면 CSS도 컴포넌트 단위에 맞는 접근이 필요하다. CSS pre-compiler를 사용하게 되면 변수의 scope가 전역적으로 다뤄지기 마련이라 각 컴포넌트를 독립적인 css로 관리하는데 불편함이 있는데 각각 독립된 컴포넌트에서 필요한 변수셋을 불러오는 형태로 그 의존성을 분산할 수 있다.

컴포넌트를 더 컴포넌트답게 활용할 수 있게 하는 아이디어라서 더욱 마음에 들었던 세션이었다. react로 개발하고 있다면 살펴볼 만한 좋은 주제다. 전체 세션의 내용은 Ben Smithett의 블로그 포스트에서 확인할 수 있다.

React Native — One of these things is not like the other

Matt Delves의 세션으로 react native에 대한 전반적인 이야기를 다뤘다. 이전에 공식 문서 튜토리얼을 살펴봤을 때랑 많이 달라지지 않아 크게 새로운 이야기는 없었지만 flux 아키텍쳐에 대해 알게된 후 듣는 react native라서 기분이 새로웠다. 세션 중간에 Colin Eberhardt를 인용했는데 react에 대해 정확하게 표현하는 느낌이다.

“React는 사용자 인터페이스를 생성하는데 독창적이며 급진적인, 고수준의 함수형 접근을 도입했다. 간단히 말해, 어플리케이션의 UI는 단순히 현재 어플리케이션의 상태를 표현하는 함수 역할을 한다.”

“React introduces a novel, radical and highly functional approach to constructing user interfaces. In brief, the application UI is simply expressed as a function of the current application state.”

아직 구현되지 않은 view도 많고 부족한 부분이 있지만 계속 개선되고 있어서 더욱 더 기대되는 라이브러리다. 전체 발표 내용은 GitHub Repo.에 올려져 있다.

Aconex 2

요즘 쏟아지는 수많은 라이브러리를 다 써보지 못해서 늘 아쉬운 기분이 든다. 실무에서 사용하지 않고 있다면 개인 프로젝트로라도 진행해서 써봐야 이해도 되고 손에도 익는데 무언가 만들고 싶은 욕구가 덜해서 고민이 많다. 아무리 바쁘더라도 한 발자국 물러나면 별 일도 아닌 일인 경우가 너무나도 많은데 쉽지 않다. 여유를 다시 찾고 다시 재미있게 코드를 만들 수 있었으면 좋겠다.

지난 2월에 한국에서 구입했는데 다시 호주로 오기 전까지 배송이 안되서 결국 들고 오질 못했었는데 집에서 택배와 함께 보내줘서 이제야 개봉해보고 살펴보게 되었다.

라즈베리 파이는 영국의 Rasberry Pi Foundation에서 교육 용도로 개발한, 신용카드 사이즈의 컴퓨터로 USD 35달러라는 저렴한 가격에 판매하고 있다. 교육용 외에도 다양한 분야에서 활용하고 있어 보급형 개발보드의 새로운 세계를 열었다는 좋은 평을 받고 있다.

raspberry pi 2 model B

구입한 라즈베리 파이 2 Model B는 2015년 2월에 출시한 보드로 전 모델에 비해 업그레이드 된 모델이다. 사양은 다음과 같다.

  • Quad core broadcom BCM2836 CPU with 1GB RAM
  • 40pin extended GPIO
  • Micro SD slot
  • Multiple Ports: 4 USB ports, Full size HDMI, 4 pole Stereo output and Composite video port, CSI camera port & DSI display port
  • Micro USB power source

라즈베리파이 웹사이트 문서를 참고해 설치했는데 교육용 개발보드답게 문서화가 아주 잘되어 있어서 환경 구축에 큰 어려움이 없었다.

라즈베리파이 자체로는 사실 할 수 있는게 없어 몇 가지 부속이 더 필요하다. (요리사가 집 냉장고에서 대충 재료를 꺼내는 느낌으로) 내 부품 잡동사니에서 다음과 같은 부품을 찾았다. 다 가지고 있으면 본체만 구입하면 되겠지만 없다면 Starter Kit 같은 것도 판매하고 있다.

라즈베리 파이 2 Starter Kit 구입 링크

  • 8GB Micro SD, Micro SD reader (SKY라고 써져 있는데 이제 더이상 볼 수 없는 회사가 되어버렸다…)
  • iptime wifi USB (호주 처음 올 떄 가져왔으니 적어도 5년은 된 동글)
  • Micro USB 케이블
  • 흔한 이더넷 케이블 (랜선이라 부르는)
  • 애플 USB 충전기

다음은 라즈베리파이 웹사이트 문서에서 확인할 수 있는 내용으로 자세하게 보고 싶다면 문서를 참고하자. 이미지 세팅에는 mac 환경에서, 그 외에는 terminal SSH를 통해 라즈베리 파이에 접속해서 진행했다.

이미지 설치하기

먼저 사용하고 싶은 이미지를 라즈베리파이 웹사이트 다운로드 페이지에서 내려 받는다. 여기서는 Raspbian 이미지를 사용했다. zip 파일 압축을 해제하면 img 파일이 나오는데 이 이미지를 micro SD에 풀어준다. 그 img를 그대로 넣는게 아니라 명령어를 사용해서 넣어야 한다.

먼저 Micro SD를 SD 카드 어뎁터나 micro SD 리더기 등을 통해 맥에 연결한다. 그리고 터미널을 열어 diskutil list로 어느 경로로 마운트 되었는지 확인한다.

$ diskutil list
/dev/disk0
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *1.0 TB     disk0
   1:                        EFI EFI                     209.7 MB   disk0s1
   2:          Apple_CoreStorage                         999.7 GB   disk0s2
   3:                 Apple_Boot Recovery HD             650.0 MB   disk0s3
/dev/disk1
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:                  Apple_HFS Macintosh HD           *999.4 GB   disk1
                                 Logical Volume on disk0s2
                                 Unencrypted
/dev/disk2
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *2.0 TB     disk2
   1:               Windows_NTFS My Passport             2.0 TB     disk2s1
/dev/disk3
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *8.1 GB     disk3
   1:             Windows_FAT_32 Sky                     8.1 GB     disk3s1

내 경우는 /dev/disk3 인 것을 확인할 수 있었다. 이제 마운트되어 있는 디스크를 언마운트해야 한다.

$ diskutil unmountDisk /dev/<disk# from diskutil>
# 본인의 disk 번호를 확인 후 그 값을 넣어야 한다
# 예를 들면 diskutil unmountDisk /dev/disk3

그리고 이미지가 있는 경로에서 다음 dd 명령어로 이미지를 넣어준다.

sudo dd bs=1m if=/path/to/image.img of=/dev/<rdisk# from diskutil>
# 경로를 상황에 맞게 수정해야 한다
# 내 경우는 sudo dd bs=1m if=~/Downloads/2015-05-05-raspbian-wheezy.img of=/dev/rdisk3

원래 문서에서는 of=/dev/disk3로 입력하도록 하는데 disk는 버퍼로 인해 속도가 느리다고 한다. disk로 한참 기다려도 생각보다 오래 걸려 찾아보니 맥에서 disk는 정말 느리므로 rdisk를 활용하라는 글을 찾을 수 있었다. 입력이 다 끝났으면 micro SD를 라즈베리 파이에 연결한다.

라즈베리 파이 접속하기

모니터가 있으면 더 편하게 했겠지만 본체만 가지고도 충분히 기본 설정이 가능하게 잘 구성되어 있다. 라즈베리 파이에 Micro SD, 무선 랜카드, 그리고 초기 설정을 위해 사용할 이더넷 케이블(랜선)을 연결한다. 케이블 한쪽은 라즈베리 파이 본체에 반대쪽은 맥에 직접 연결(Direct Connection)한다. 그러고 나서 전원 usb를 꼽으면 초록색 빨간색 LED가 빤짝이며 부팅된다. 빨간색이 오래 켜져있으면 부팅이 완료된 것이다.

맥에서 터미널을 열어 ssh로 로그인한다.

$ ssh pi@raspberrypi.local
# password는 raspberry

기본적인 메시지와 함께 쉘이 뜨는 것을 확인할 수 있다. 다음 명령어로 환경 설정을 시작한다.

$ sudo raspi-config

1번으로 파일 시스템을 재설정하고 2번으로 사용자 비밀번호를 변경한다. 변경이 완료되었으면 Tab을 누르면 Finish를 선택할 수 있다.

wifi 설정하기

라즈베리 파이를 유선랜으로 연결해두는 환경이면 좋겠지만 내 방은 공유기랑 멀어서 wifi를 기본적으로 사용하도록 설정해야 한다. 내 wifi usb 동글은 충분히 낡아서 그런지 드라이버 설정 없이 바로 인식했다. 먼저 스캔을 한다.

$ sudo iwlist wlan0 scan

이제 랜카드가 스캔한 AP가 모두 출력되는데 연결하고자 하는 SSID를 확인하자. 그리고 /etc/wpa_supplicant/wpa_supplicant.conf에 ssid와 AP 접속할 때 사용하는 비밀번호를 입력한다. vim은 없고 vi가 있는데 nano를 써도 무관하다. 취향에 따라 사용하고 여기서는 nano로 적어둔다.

$ sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

이제 내용을 입력할 수 있다. ssid에는 AP명, psk에는 AP 비밀번호를 입력한다.

network={
    ssid="HARUAIR_AP"
    psk="goawayfreerider"
}

입력을 완료했으면 ctrl + x, y 그리고 엔터를 누른다. 이러면 자동으로 변경을 확인해서 wifi에 연결된다. 안되면 무선랜을 sudo ifdown wlan0으로 내렸다가 sudo ifup wlan0으로 다시 켜준다. 인터넷 연결 확인은 간단하게 ping을 활용할 수 있다. ping google.com을 입력했을 때 resolving host problem 같은게 나지 않고 정상적으로 핑을 주고 받으면 연결이 된 상태다. 이제 vim을 설치할 수 있다. 😀

wlan0이 연결이 되었으면 이제 이더넷 케이블은 제거해도 된다.

라즈베리파이 기본 호스트명 변경하기

만약 여러대의 라즈베리파이를 사용할 예정이라면 편의를 위해 호스트명을 변경해두는 것이 편리하다. 위에서 환경설정에 사용했던 raspi-config에서 8 Advanced Options를 선택하면 A2 Hostname 항목에서 변경할 수 있다. 다음은 이 간편한 방법을 두고 복잡한 과정으로 변경하는 방법이다.

두 군데를 수정하면 되는데 /etc/hostname 파일과 /etc/hosts 파일이다. 각각 파일의 역할이 궁금하면 구글에서 찾아보자.

$ sudo nano /etc/hostname

rassberrypi를 원하는 호스트명으로 변경한다. (변경 후에 저장하려면 ctrl + x, y 그리고 엔터.)

$ sudo nano /etc/hosts

가장 마지막 줄에 있는 127.0.1.1 rassberrypi에서 뒷 호스트명을 변경한 호스트명으로 교체하고 저장한다. 이제 다음 명령어로 변경사항을 반영하고 재부팅한다.

$ sudo /etc/init.d/hostname.sh
$ sudo reboot

재부팅하면 변경된 호스트명으로 접속할 수 있다.

new hostname

라즈베리 파이를 직접 사용해보니 그냥 일반 컴퓨터와 크게 다르지 않았다. 사양도 높은 편이라서 하드만 연결하면 NAS 용도로 충분히 사용할 수 있을 정도인데 왜 좋은 평을 받는지 충분히 이해가 되었다. 최근 IoT의 열풍도 그냥 나타난 것이 아니라 이런 작고 강력한 하드웨어의 든든한 지원 덕분이라는 것을 실감할 수 있었다.

어떻게 활용하면 오래, 재미있게 가지고 놀 수 있을지 생각해봤는데 요즘 Azure에서 IoT와 관련해 여러 서비스가 나오고 있어서 센서를 구입해 이 서비스를 이용해볼 생각이고 그리고 손으로 만질 수 있는 개발에 대한 로망이 있어 확장 실드와 모터를 구입해 servo control을 해보려고 한다. 웹과 연동되는 장난감을 만들 생각에 벌써 신난다. 😀

대부분 프로그램을 만족하고 사용하지만 불편하다고 느끼는 프로그램이 몇 있다.

Google Chrome

나는 크롬빠다. 하지만 요즘 메모리를 엄청나게 먹는 크롬을 깔 수 밖에 없다. 그 외에도 하나 있는데 Cmd + W를 한다는게 바로 옆에 있는 Q를 눌러 창을 전부 닫는 사태가 간혹 있다. 물론 크롬이 창을 잘 살려주기는 하지만 메모리 공룡이 된 이후 껐다 켜는데 생각보다 시간이 걸린다. Chrome에서 메뉴에 Chrome > Warn before quitting를 활성화 하면 창을 닫기 전에 경고를 준다는데 나는 동작하는 것을 본 적이 없는 것 같다. (발동 조건을 모르겠다. 될 때도 있고 안될 때도 있고.)

FileZilla

무료 FTP 프로그램으로 많은 사용자 정보를 저장해놓고 오랜 기간 사용하고 있다. 장점은 여러 플랫폼에서 사용이 가능하고 설정값을 플랫폼 상관없이 Export/Import 할 수 있다는 점이다. 여기에도 아쉽다고 느끼는 부분은 모든 단축키가 Windows 기준으로 되어 있어서 맥에서의 단축키를 바로 이용하지 못한다. 예를 들면 OSX의 Finder에서는 Enter로 파일명을 변경할 수 있지만 Filezilla에서 Enter를 치면 Windows 버전처럼 파일을 내려받게 된다.

MS Office for mac도 이도저도 아닌 애매한 단축키로 적응하는데 상당히 오랜 시간이 걸렸는데 FileZilla는 도무지 익숙해지지 않는다.

Adobe Photoshop CS6

개인 환경에는 Adobe CC를 사용하고 있지만 회사에서는 아직 CS6를 사용하고 있다. 강력한 사진/그래픽 도구로 사내에서 필요한 모든 디자인 작업을 Photoshop으로 해결하고 있다. 새로운 버전이 나와도 단축키는 거의 유지되는 편이라 크게 불편하지 않는데 CS6에서만 나타나는 이상한 문제점이 있다. 키보드를 영문이 아닌 한국어로 설정한 상태로 Photoshop을 실행하면 모든 단축키가 동작하지 않는다. 메뉴를 눌러 직접 종료를 한 후 영문으로 바꿔 다시 실행하면 되는데 이게 상당히 번거로운 작업이다.

처음에는 이 문제가 키보드 언어 선택이 이유라고 생각 해보지도 못했었다. 사용하다 보면 어쩌다 문제가 생기고 껐다, 켰다, 다른 작업을 하다가 다시 실행하면 문제가 해결되고 그랬었다.

Epson Scan

요즘 사진 촬영을 필름으로 주로 하는데 현상한 필름을 스캔할 때 Epson에서 기본적으로 제공하는 Epson Scan을 사용한다. 사실 이 프로그램은 2% 멀쩡하고 98% 부족한 프로그램이다. 일단 preset이 제대로 저장되지 않는다. 스캔 전에 preview를 하면 preset이 초기화되서 기본값으로 돌아가 매번 설정을 해줘야 한다. 그 덕분에 커브값을 설정한다거나 하는 과정은 스캔 후 후속 편집에서 하는데 그 덕분인지 관용도가 상당히 낮다. 그리고 일부 설정이 preset에 저장되지 않는다. Silverfast 구입을 고려하는 중이긴 하지만 비용이 상당히 커서 일단은 부족한대로 Epson Scan을 사용하고 있다. 이상하게 프린터, 스캐너 같은 하드웨어와 제공되는 프로그램은 한결 같이 불편한 사용자 경험을 제공하는 것 같다.


사소한 불편함이 전체적인 인상을 엉망으로 만들 때가 많다. 내가 만드는 서비스/웹사이트는 그런 일이 없도록 꼼꼼히 살펴봐야겠다.


이상한모임에서 진행하는, 다양한 주제로 함께 글을 쓰는 글쓰기 소모임입니다. 함께 하고 싶다면 http://weirdmeetup.herokuapp.com 에서 가입하시고 #weird-writing 채널로 오세요!

2014년에 다녀왔던 Global Windows Azure Bootcamp를 이번에도 다녀왔다. 작년에도 다녀 온 후기를 써야지 하고 쓰질 않았는데 이번엔 잊지 않고 적는다. Microsoft Windows Azure가 Microsoft Azure로 브랜딩이 변경되어 이번 행사명은 Global Azure Bootcamp가 되었다. 오늘 보고 들은 내용을 간단하게 정리한 포스트다. 들으면서 메모한 부분만 있어서 내용이 불친절 할 수 있다. MSDN이 있으면 좋고 없으면 Azure가 제공하는 Free Trial로도 충분히 둘러볼 수 있는 내용이다. GAB는 세계 각 지역에서 진행되고 있는데 아쉽게도 한국에서는 진행되고 있지 않는 것 같다.

함께 참석하기로 했던 모든 분들이 사정이 생겨 혼자만 참석하게 되었다. 9시 쯤 도착해서 티셔츠 받고 자리에 앉았다. 오늘은 ANZAC 데이라고 참전용사를 추모하는 호주 국경일이라서 키노트 시작 전에 관련 영상과 함께 추모 묵념을 했다.

시작 키노트에서는 간략하게 MS Azure에 대한 설명이 있었다. 현재 17개의 region을 제공하고 있고 region당 16개의 데이터 센터로 구성되어 있다고 한다. 데이터 센터 하나 당 풋볼 경기장, 보잉 747 2대 규모 정도 되어 물리적으로는 60만 대 가량의 서버가 있다고 한다. 현재 Azure에서 제공하는 서비스들을 소개했는데 지난번과 다르게 눈에 띄였던 부분은 Direct Access 였다. Azure의 VM을 사용하면 Azure를 거쳐 일종의 VPN과 같은 형태로 서버에 접속하게 되는데 이 경우 속도 등의 문제가 있었다고 한다. Direct Access는 지역 네트워크 제공자를 통해 지역 데이터 센터에 직접 접근하는 방식을 제공한다고 하는데 다른 곳에서 들어보지 못한 얘기 같아서 기억에 남았다.

그 외에도 다양한 서비스를 소개했는데 자세한 내용이 궁금하면 로드맵을 참고하라고 했고 Azure 관련 자격을 취득하고 싶으면 exam 70-532~4을 확인해보라고 한다. 늘 느끼는 것이지만 Azure 서비스는 전반적으로 브랜드 네이밍이 엉망으로 설명을 듣지 않고서는 정확하게 판단하기 어렵고 비슷한 서비스도 많아 복잡한 느낌이다.

이번 행사는 Developer Track과 IT Pro Track으로 구분해 각각 6개의 세션을 운영했다. 중간 중간 쉬는 시간까지 포함해 9시부터 5시까지 진행되었다. 장소는 Saxons였는데 Wifi가 자꾸 끊겨 인터넷이 연결 되어야만 하는 세션은 계속 새로고침 하고 기다리는 수 밖에 없어 아쉬웠다.

Azure App Services 1 – Websites and Mobile Services

깔끔한 새 azure portal과 함께 진행된 세션으로 Web App과 Azure Mobile App을 만들었다. 이전에는 훨씬 이상한 명칭이었는데 이제는 Web + Mobile 카테고리에서 쉽게 찾을 수 있다. 이 두 서비스는 PaaS로 ASP.Net MVC 프로젝트를 쉽게 올릴 수 있도록 돕는다. Azure Mobile App은 iOS, Android, Windows Mobile 등에서 백엔드로 사용할 수 있는 API를 쉽게 구성할 수 있도록 ASP.Net Web API로 만들어진 기본적인 코드를 제공한다.

Standard 이상의 요금 티어를 선택하면 Deployment Slots, Traffic Routing 등의 기능을 추가적으로 제공한다. 전자는 디플로이 할 수 있는 슬롯을 여러개 제공해 Staging과 Production 환경 구성을 돕는다. 후자는 이 PaaS 접근했을 때 어느 지역으로 연결해야 하는지 설정할 수 있다. 그 외에도 GitHub이나 Bitbucket도 지원하고 여러가지 세세한 설정이 많아져서 많이 편리해졌음을 알 수 있었다. 이 세션을 진행할 때 wifi 사정이 많이 안좋아 실습은 물론 진행까지 더뎌 아쉬웠다.

Getting started with Azure Operational Insights

Azure Operational Insights는 예전 Microsoft System Center Advisor 라는 이름으로 제공되던 서비스로 클라우드 기반의 분석 도구다. Windows 환경에서 사용할 수 있는 NewRelic라 볼 수 있는데 과거 System Center Operations Manager(SCOM)으로 확인할 수 있던 자료를 웹에서 바로 확인할 수 있도록 지원한다. MS Monitoring agent로 직접 접속하는 방법이 있고 SCOM 콘솔을 통해 접속하는 방법이 있다고 한다.

App services 2 Logic Apps and API Apps를 들을까 하다가 분석과 관련된 세션이라길래 가서 들었는데 생각과 많이 다르고 잘 알지 못하는 부분이었다.

Azure Storage Services

데이터를 저장할 수 있는데 사용할 수 있는 서비스인 Azure Storage Service는 Blobs, Tables, Queues, Files 4가지 방식으로 데이터를 저장할 수 있다. 이 4가지를 합쳐 account 당 500TB을 사용할 수 있고 azure 섭스크립션 하나 당 100 account가 허용된다.

  • Blobs: 사진, 음악, 비디오, 문서 등을 저장할 수 있고 여러 blob을 하나의 그룹으로 다룰 수 있도록 지원
  • Tables: noSQL과 같은 Key-value. 행 당 1MB이며 252개의 커스텀 어트리뷰트, 5개의 필수 어트리뷰트 지정 가능
  • Queues: 64KB 크기로 최소 1회 딜리버리를 보장
  • Files: 클라우드 기반 파일 공유 (Preview)

그리고 Document DB도 지원한다. Document-based NoSQL 이란 표현을 처음 들었는데 MongoDB 등이 Document DB라고 한다. 그 외에는 Azure Redis Cache도 지원한다. Azure에서 Storage Services 생성하면 예제 코드를 제공해서 쉽게 사용 가능하다.

누가 발표자에게 IaaS에 직접 설치하는 것에 비해 무엇이 장점인지를 물어봤다. 발표자가 ERP/CRM 관련 개발을 하는데 사용하고 있고 규모가 커져도 느려지지 않고 스케일링이 자유로워서 편리하다고 답변했다. 그 얘기를 듣고 좋은 서비스로 만들어서 괜찮은 API 레퍼를 제공해 사용자가 쉽게 사용할 수 있도록 만든 것은 박수칠 일이긴 하지만, 이 서비스가 아니고서 사용할 수 없는 형태라면, 서비스가 없어지거나 서비스 제약에 닿게 되면 생길 불편함도 염두해야 할 것 같다.

Building Apps Using Azure Active Directory

Azure Active Directory(Azure AD)를 적용해 만든 프로젝트를 시연했다. Azure AD는 기존에 있던 Active Directory를 온라인, 오프라인, MS에서 제공하는 오피스 365와 같은 클라우드 서비스, Azure AD 인증을 도입한 웹 어플리케이션 등에서 통합적으로 활용할 수 있도록 돕는다. 쉽게 설명하면 요즘 자주 보이는 페이스북 소셜 로그인 같은 기능을 Active Directory의 정보와 함께 사용할 수 있다는 뜻이다.(Single Sign On)

Visual Studio에서 ASP.Net Web Application 프로젝트를 생성하는 마법사에서 Change Authentication > Organizational accounts를 선택해 도메인 정보를 입력하면 바로 사용해볼 수 있다. 마법사를 사용하면 Azure AD 설정을 자동으로 생성해줘 기본적인 데이터를 입력하는 수고를 덜어준다. 이 구현은 wsfederation 프로토콜로 인증을 진행한다고 한다. Azure AD와 토큰을 주고 받고 토큰이 오면 사용자 정보를 사용할 수 있도록 바로 만들어준다.

OpenId로도 로그인이 가능하고 필요한 라이브러리는 다음과 같다.

Microsoft.Owin.Security
Microsoft.Owin.Security.Cookies
Microsoft.Owin.Security.OpenIdConnect

이 경우는 마법사가 제공하지 않는 방법이라 직접 개발해야 한다. ActiveDirectory 구현은 Microsoft.Owin.Security.ActiveDirectory를 활용할 수 있다.

다중 factor 인증도 지원한다. 시연에서는 전화, 문자 인증 두가지 방식을 보여줬는데 Azure AD와 연동도 깔끔한 SDK로 제공한다. 이 과정에서는 암호화를 위한 키를 필요로 했다. 이 기능으로 회원 인증과 같은 서비스를 활용할 수 있지 않을까 싶어 살펴봤는데 다중 factor 인증은 Azure AD 플랜 중 Premium에서만 제공하고 있었다. (사용자 당 $6 USD)

Azure AD의 예제는 Azure AD Samples 깃헙 페이지에서 확인할 수 있다.

Azure and Big Data

영화 Manhunt를 소개하면서 세션을 시작했다. 데이터를 수집하고 활용하는 일은 기존에도 있었지만 이전과 같은 접근으로 인사이트를 얻기에는 어렵기 때문에 더 방대하고 세세한 데이터를 수집해 가공/활용하는 방향으로 진화하고 있다고 한다.

최근의 추세는 Lambda Architecture로 데이터를 수집/가공을 한다고 한다. Batch layer, Speed layer, Serving layer 세가지로 구성된 이 아키텍쳐에 각각 필요한 라이브러리를 가지고 문장 분석을 하는 시연을 했다.

  • Batch layer: Storage (Hadoop, Azure Storage), Compute (Hadoop, Spark)
  • Speed layer: Storm, Spark Streaming, Azure stream analytics
  • Serving layer

Map Reduce로 Hortonworks 또는 Cloudera를 사용하는 방법과 HDInsight를 사용하는 방법이 있는데 시연은 HDInsight를 사용했다. HDInsight는 Hadoop as a service로 Azure Blob Storage에 데이터를 저장한다. HBase, Stork, Spark와 호환이 된다고 한다.

전반적인 라이브러리 추세를 다 설명한 덕분에 시간이 모자라 후반 시연은 진행하지 못했다. Hadoop은 많이 성숙했고 요즘은 Spark를 많이 사용한다고 한다.

IoT in Azure

다른 세션을 들으려고 했다가 자리 옮기기 귀찮아서 그냥 들었는데 재미있었다. Azure Event Hubs를 이용해 데이터를 수집하고 가공하는 것을 시연했는데 실제 사례를 기반으로 설명했다.

호주의 농장에서 트랙터와 같은 대형 장비를 사용하기 위해 오일 탱크를 가지고 있는데 이 탱크의 양을 수집해서 오일을 다시 주문해야 할 때 자동으로 주문하는 시스템을 개발했다고 한다. 호주의 네트워크 커버리지는 해안 지역 위주기 때문에 3G로 바로 전송을 할 수 없는 상황이고 현재로는 스마트폰이 다가가면 Bluetooth LE로 데이터를 수집하고 스마트폰이 3G 가능 지역으로 들어가면 그때 데이터를 클라우드로 올리는 방식으로 구현하고 있다고 한다.

Azure Event Hubs는 위와 같은 대량의 데이터 수집을 위한 이벤트 큐를 제공한다. 퍼블리셔가 허브로 이벤트를 보내면 이벤트를 Partition에 저장한 후 사용자에게 이벤트가 추가되었음을 호출한다. 파티션은 이벤트 규모에 따라 스케일링 할 수 있다. 사용자는 이 허브를 통해 변동값만 받는 형태로 구성되어 있고 허브에 쌓인 이벤트는 GC를 통해 자동으로 정리된다. 즉 허브가 앞에서 본 Batch layer의 Storage를 담당하고 사용자가 Compute를 하게 된다.

사용자의 구현은 event Process host model과 event receiver model로 구현할 수 있고 파티션 당 프로세서가 어떻게 배당되는가에 따라 구분된다. 후자는 각각의 파티션마다 receiver가 있는 형태고 전자는 여러 파티션이 하나의 프로세스에 배당되는 방식이다.

Event Hubs는 Azure에서 Data Analytics 항목에서 찾을 수 있다.

시연 중에 데이터 시각화에는 Power BI를 활용했는데 깔끔했다.

뒷얘기

작년에 했던 장소에 비해 좁고 Wifi 환경이 별로 좋지 않았다. 시연에 불편할 정도였는데 최소 발표자는 안정적으로 네트워크를 사용할 수 있는 상황을 제공해야 했다. 그래도 발표 사이사이 버퍼로 둔 시간이 커서 시간이 밀리거나 하진 않았다.

모닝티, 점심, 오후 간식 세번을 했는데 각각의 식단에서 글루틴 무첨가, 채식과 할랄 식단을 제공했다. 이제 이런 배려는 당연하게 느껴진다.

이번에도 행운권 추첨을 했는데 잘 모르는 프로그램 라이센스를 받았다. Azure Bootcamp는 항상 뽑히는 것 같은데 다음엔 DDD에서 서피스 프로 같은걸 받았으면 좋겠다. (만족할 줄 모르는 남자.)

Microsoft Virtual Academy를 대대적으로 홍보하고 있었다. 확실히 MS에서 열심히 밀고 있는 느낌이다. C# 관련 몇 강의를 수강해봤는데 내용도 괜찮고 재미있게 따라갈 수 있었다.


작년에 살펴본 Azure에 비해 훨씬 깔끔해졌고 세세한 서비스가 많아졌다. 여전히 서비스명이 복잡한 느낌이지만 새 포털에서 사용하면 쉽게 찾아서 사용할 수 있게 많이 개선되었다. AWS에 비해 free tier를 크게 홍보하지 않는게 각각 서비스마다 요금 책정 방식이 다르기 때문인 것 같다. 어떤 서비스는 기본이 무료고 어떤 서비스는 시작부터 비용을 청구해서 그런 것 같은데 Azure Websites나 Azure AD Free 등은 무료로 제공하고 있으니 살펴보는 것도 좋겠다.

다음에도 기회가 있으면 참석하고 싶다. 그때는 Azure도 사용하고 그래서 이것저것 물어볼 부분이 많았으면 좋겠다.

운영하는 사이트의 외부 유입을 확인하기 위해 Google Analytics를 기본적으로 설치하는 편이다. Google Analytics는 설치만 해도 유입 트래픽을 보기 좋게 정렬해서 보여주는 편이지만 좀 더 세부적으로 데이터를 구분하기 위해서는 몇가지 추가적인 작업이 필요하다. 웹사이트로의 외부 유입을 추적하는 경우에는 맞춤 캠페인(Custom campaign)을 활용해 필요한 데이터만 분리해 확인할 수 있다. 이 기능이 도움 될 만한 시나리오를 생각해보면 다음과 같다.

  • SNS에서 유입되는 트래픽 중 내가 직접 작성한 포스트로 유입된 트래픽만 확인
  • 광고를 내는데 이 광고로 들어오는 사람이 얼마나 되는지 확인
  • 뉴스레터에서 어느 링크를 클릭해 웹사이트로 유입되는지 확인

맞춤 캠페인 URL

맞춤 캠페인에 필요한 것은 맞춤 캠페인 URL이다. 이 URL을 통해 접속하면 URL에 포함된 매개변수를 활용해 분류할 수 있다. 맞춤 캠페인에서는 다음 5개의 매개변수를 활용해서 분류할 수 있다.

  • utm_source: 사이트로 트래픽을 보내고 있는 광고주, 사이트, 출판물 등을 식별 (예: Google, 도시검색, 뉴스레터4, 빌보드)
  • utm_medium: 광고 또는 마케팅 매체 (예: CPC, 배너, 이메일 뉴스레터)
  • utm_campaign: 제품의 개별 캠페인 이름, 슬로건, 프로모션 코드 등
  • utm_term: 유료 검색 키워드. 유료 키워드 캠페인에 대해 직접 태그를 추가할 경우 utm_term을 사용하여 키워드를 지정
  • utm_content: 같은 광고 내에서 유사 콘텐츠 또는 링크를 구분. 예를 들어 하나의 이메일 메시지에 두 가지 클릭 유도문안 링크가 있는 경우 utm_content를 사용하여 각각 다른 값을 설정하면 어떤 버전이 더 효과적인지 확인할 수 있음.

추후 편리하게 리포트를 확인하려면 일관성을 가지고 입력해야 한다. 예를 들면 대소문자를 섞어쓰지 않도록, 소스(source)와 매체(medium)를 혼동해 뒤바꿔 쓰지 않도록, 시즌별로 반복된다면 연월 등 규칙성이 있는 포맷으로 작성하는게 도움이 된다.

캠페인 URL 만들기

이 맞춤 캠페인 URL은 URL 작성도구로 쉽게 만들 수 있다. Google Analytics에서 결과를 확인하기 위해 이 도구로 맞춤형 캠페인 URL 예제를 하나 만든다.

URL 작성도구

Google Analytics에서 확인하기

작성한 주소를 통해 접속을 하면 Google Analytics 에서 해당 정보와 함께 수집된다. Google Analytics는 접속하더라도 정보 수집이 바로 반영되지 않아 디버깅 하기가 힘들었는데 이제는 실시간 접속을 확인할 수 있어서 예전보다 간편하다. 확인을 위해 위 URL 작성도구에서 연습으로 만든 맞춤형 캠페인 URL로 접속해서 창을 열어둔 채 다음 순서대로 Google Analytics에서 확인해보자.

  1. Google Analytics에 접속
  2. 자신의 사이트를 선택한 후
  3. 왼쪽 탭에서 **실시간(Real-Time) > 트래픽 소스(Traffic Source)**를 클릭

트래픽이 URL 작성도구에서 입력한 데이터와 함께 정상적으로 들어오는 것을 확인할 수 있다.

실시간 유입 확인

이렇게 유입된 트래픽은 **획득(Acquisition) > 캠페인(Campaigns) > 모든 캠페인(All Campaigns)**에서 종합된다.

모든 캠페인

직접 맞춤설정을 통해 맞춤 보고서를 만들어서 데이터를 확인하는 것도 가능하다. 더 자세한 내용을 확인하고 싶으면 맞춤 캠페인 – 웹로그 분석 도움말을 확인하자.

국가에서 특정 사이트를 직접적으로 차단/통제하는 경우1도 있고 배급 등 라이센스 문제로 국가 제한에 막혀 사용해보지 못하는 미디어 관련 서비스들도 있다. 이런 경우 VPN을 통해 해당 사이트 또는 서비스를 이용할 수 있다. (이러라고 만든 VPN은 아닌 것 같지만;)

물론 유료 VPN을 쓸 수 있지만 자주 사용하는 게 아니라면 비용이 좀 아깝다. 게다가 모든 트래픽이 해당 VPN을 경유하기 때문에 유료든 무료든 보안상 찝찝할 수 밖에 없다. 그래서 저렴하고 안전한 방식은 없을까 고민하다가 AWS의 EC2 Free tier를 활용해 VPN을 구성하는 방법을 찾게 되었다.

AWS에서 EC2 인스턴스 생성하기

AWS의 EC2를 생성 및 사용해본 적이 없다면 다음 글을 참고하자. 내 인스턴스를 생성할 땐 지역은 북미(N. Virginia), 설치 이미지는 ubuntu를 선택했는데 지역은 자신의 용도에 맞게 사용하면 되겠다.

VPN 설치하기

이제 생성한 인스턴스에 VPN을 구성할 차례다. Voodoo Privacy Project에서 제공하는 VPN 설치 쉘스크립트를 사용하면 간편하게 설치할 수 있다.

$ wget https://raw.githubusercontent.com/sarfata/voodooprivacy/master/voodoo-vpn.sh

쉘스크립트를 받은 후 IPSEC_PSK, VPN_USER, VPN_PASSWORD를 안전한 정보로 변경한다.

그다음 관리자 권한으로 설치하면 끝난다.

$ sudo bash voodoo-vpn.sh

맥OS에서 VPN 설정하기

다음은 VPN을 설정할 차례다. 시스템 설정 > 네트워크에서 다음과 같은 절차로 VPN을 생성할 수 있다. 먼저 네트워크 창에서 좌측 하단 + 버튼을 눌러 VPN을 추가한다.

Add new VPN at Network section

서버 주소는 ssh 접속할 때 사용한 주소(ec2-00-00-00-00.compute-1.amazonaws.com 같은 형식), Account Name은 위에서 변경했던 VPN_USER 값이다.

VPN Config

인증 설정 Authentication Settings... 버튼을 누른 후 나머지 설정들은 위에서 작성했던 VPN_PASSWORD, IPSEC_PSK 순으로 입력하면 된다.

VPN Config

그리고 모든 트래픽을 VPN을 통해 받을 수 있도록 고급 Advanced... 버튼을 눌러 Send all traffic over VPN connection을 체크한다. 여기까지 설정한 후 Connect 버튼을 눌러 VPN을 활성화하면 모든 과정이 완료된다.

VPN status in side bar

재빠르게 켜고 끌 수 있도록 사이드바에 등록하는 것도 팁.


EC2 서비스는 사용량에 따라 비용이 청구될 수도 있으므로 조금 주의깊게 보는 것이 좋다. EC2 Free tier 제공 범위를 넘는 트래픽을 만들면 EC2 요금을 내게 되니 유의하자. Free Tier는 월 750시간까지 해당이라 나는 그냥 켜둔 상태로 두고 있고 아직까진 사용량이나 트래픽으로 별다른 요금이 발생하지 않았다.

N 모 유명 스트리밍 서비스의 경우는, 스트리밍이 시작되고 나서 VPN을 꺼도 끊기지 않았다. 사용하지 않을 때는 VPN 접속을 끄면 된다. 물론 VPN 서버를 종료해도 되는데 이런 경우 다시 켰을 때 IP가 변경되어 설정을 변경해야 하는 번거로움이 있어 별로 추천하지는 않는다.

  • 중국의 예를 생각하고 적었지만 적고 나니 한국도 마찬가지. 
  • 얼마 전 처음으로 원격근무를 경험했다. 우리 회사는 상당히 유연한 근무 환경을 제공하고 있어서 꼭 참여해야 하는 미팅이 있는 경우가 아니고서는 원격근무가 가능하다. 지금까지 신청하지 않았던 이유는 근무 환경이 달라지는 것, 내가 집에서 쓸 수 있는 개발 환경이 회사에서보다 제한적이었던 상황이었기 때문에 한번도 이런 형태로 일을 해보지 않았었다. 이번엔 특이하게도 택배를 본인이 수령해야 하는(?) 부득이한 상황이라서 재택근무를 하기로 마음 먹었고 처음으로 집에서 일을 해보게 되었다.

    “집에서 일을 한다”는 생각보다 달랐다

    원격근무는 집에서 일을 하는 것이라고 막연하게 알고 있었지만 내 방 책상에 앉아서 컨퍼런스 콜을 하고 코드를 작성하고 이메일을 작성하고보니 “집에서 일을 한다”라는 문장이 이전과는 조금 다르게 느껴졌다. 그 전까지는 출퇴근을 하면서 조금이나마 전환 시간이 있어서 그랬는지 일과 내 삶이 명확하게 분리되었던 반면에 재택근무는 일상에 업무를 끌어다 놓는 과정으로 느껴졌다.

    업무와 삶이 뒤범벅 되는 일은 재택근무를 하게 될 때 경계해야 하는 부분 중 하나라고는 하지만 가장 이상적으로 일을 할 수 있는 환경을 만드는 일과 같다고 느껴졌다. 일과 일상에서 컨텍스트 스위칭이 빈번하게 일어날 수 있는 환경이라 그 둘이 명확히 분리해야 한다고 생각하는 사람에게는 분명 좋은 환경은 아닐 것이다. 반면 내 일에 더 몰입하고 싶다면 이보다 더 좋을 수가 없다. 아침부터 막히는 출근길, 환승 시간표, 주의력을 분산하게 만드는 수많은 인터렉션들(내 경우엔 SNS)을 마주할 수 밖에 없는데 그 복잡한 과정을 거치지 않고 책상에 앉기만 하면 일을 시작할 수 있어서 좋았다.

    공간 용도 변화

    이제는 당연한 말이지만 인터넷만 연결되어 있으면 어디서든 일을 할 수 있다. 예전에 비해 쉽게 사용할 수 있는 수많은 협업 도구들과 분산 버전관리 도구 덕분에 적은 리소스로도 충분히 업무가 가능해졌다. 우리 회사도 대부분의 코드를 gitlab에서 관리하고 있고 구글앱스와 trello를 활용해 협업하고 있고 컨퍼런스 콜은 skype를 사용하고 있어서 큰 문제 없이 업무를 볼 수 있었다. 이제는 정말 어디서든 인터넷만 가능하면 업무 처리를 할 수 있다. 이런 기술의 발전들이 전통적인 공간 개념을 허물고 있고 원격근무의 문제점도 같이 해결하고 있다.

    멜번은 임대 비용이 비싸서 여러 회사가 큰 오피스를 빌려 같이 공간을 공유해서 쓰는 경우가 꽤 많은 편이다. 우리 회사도 다른 두 회사와 함께 사무실을 공유해서 쓰고 있는데, 하나는 에너지 회사, 다른 하나는 금융 IT 회사다. 전자는 MS의 클라우드 서비스를 기반으로 모든 자료를 공유하고 있어서 잦은 출장에도 업무의 연속성을 유지하고 있고 후자는 VPN을 통해 업무 환경이 구성되어 있어 회사 직원들이 일주일에도 수 차례 시드니와 멜번을 오가며 일을 한다. 시간이 갈수록 더욱 쉽고 저렴하게 구축이 가능해진 업무 환경으로 사무실의 역할이 점점 무형적으로 변하고 있다는 점을 체감한다.

    새롭고 사소한 허들들

    사실 사소한 차이고 아직 경험이 많지 않기 때문에 마주하게 된 일들이지만 출퇴근 할 때 딱히 고민해보지 않았던 새롭고 작은 부분들을 볼 수 있었다.

    살고 있는 곳이 주택가라서 커피를 사 마실 수 있는 곳이 없었다. 처음이라 잔뜩 긴장해서 커피 없이도 하루종일 업무를 할 수 있었지만 반복되다보면 또 커피가 필요한 날이 올 것 같다. 회사 근처에 맛있는 카페에 길들여져 내 커피가 맛없다는 사실을 입이 기억하고 있어서 직접 커피를 내려 마시면 되는 일이지만 그건 또 맛이 없어서(정말 없다) 그렇게 좋은 해결책은 아니다. 겨우 하루 경험이라 은행에 다녀올 일이 없어서 그나마 다행이었지 내 주거래 은행은 커먼웰스인데 집 근처에 커먼웰스도 없다. 회사가 있는 곳들은 항상 집적되어 있기 때문에 식당, 은행 같은 편의 시설도 많이, 가까이 있기 마련이다. 한국처럼 인구밀도가 높아서 어디에서든 상가, 은행을 찾을 수 있는 상황이 아니라면 불편한 경우도 충분히 있음직 하다.

    5시 반에 퇴근을 하고나서 뭘 해야할지 막막했다. 평소에는 교통 상황에 따라 퇴근이 1시간에서 1시간 반 가량 걸리는데 이 시간이 갑자기 생겨나니 어색해서 어쩔 줄 몰라하다가 동네 산책을 하고 왔다. 생각해보면 아침에 일을 시작할 때에도 은근슬쩍 침대에서 뒹굴다가 컴퓨터를 열고 업무를 시작했었다. 아침, 저녁에도 더 효율적으로 시간을 관리한다면 평소에 퇴근하고 저녁 먹고 씻고나면 잘 시간이 되서 아무 것도 할 수 없던 상황보다 훨씬 유익하게 시간을 쓸 수 있으리라 생각된다. 내게도 부양하는 가정이 있다면 아이들과 더 시간을 보내준다거나 할 수 있지 않을까. 일과 일상의 전환에 소비되는 시간을 가용적인 영역 안으로 들어오게 되면 그만큼 쓸 수 있는 시간은 늘어나는데 이번 경험에서처럼 준비되지 않으면 결국엔 출퇴근 하면서 쓰는 그런 시간들처럼 쉽게 지나가버리는데 좀 더 체계적인 계획이 필요한 것 같다.

    그래서 원격근무

    겨우 하루의 경험으로도 이렇게 많은 차이를 느낄 수 있었는데 원격근무를 전사적으로 적용하고 있는 회사들은 어떻게 운영되고 소통하는지 궁금해졌다. 이미 실제로 많은 회사에서 원격으로 일하고 있고 그 과정을 공유하고 있다.

    • 워드프레스 개발사인 오토매틱도 몇 상주 인원 외에는 세계 곳곳에서 퍼져 각각의 공간에서 일을 하고 있다. b2라는 오픈소스 블로그가 더이상 개발되지 않자 이를 대체할 블로그를 오픈소스로 공동작업 한 것이 워드프레스의 시작이다. 모두가 원격으로 업무를 할 수 있는 이유가 아마 이런 배경이 있어서 그런게 아닐까 싶다.

    • Basecamp를 개발한 37Signals1의 원격근무 이야기는 Remote라는 책으로 출판되었다.(최근 위키북스에서 역서를 냈다.) 이 책에서는 원격에서 근무하는 것 자체가 의미를 가지는 것이 아니라 최고의 생산성을 가질 수 있는 장소를 제공하는 것에 의미가 있다고 이야기한다.

    원격근무가 양날의 검이란 것도 맞는 말이지만 인류사에서 따져볼 때 출퇴근하게 된 기간도 얼마 되지 않으니 출퇴근의 장단점을 더 생각해봐야 하지 않을까 싶기도 하다. 그리고 원격근무를 하는가 안하는가의 문제라기보다는 재택근무를 해도 문제가 없는 업무 환경과 여건을 만들 수 있는가가 더 중요한 부분인 것 같다.

    더 읽을 거리

  • 37Signals는 2014년 2월에 사명을 Basecamp로 변경했다. 
  • 요즘은 이와 관련된 웹서비스가 많이 있어서 별도로 프로그램을 설치할 필요 없이 쉽게 이용 가능하다. 다만 업로드할 수 있는 용량에 제한이 있는 경우가 많아서 로컬에서 사용할 수 있는 방법을 찾아봤다.

    PDF 파일의 정보를 확인하거나 추출하기 위해서 pdffonts를 사용할 수 있는데 과거엔 xpdf 라이브러리에 포함되어 있다가 현재에는 poppler 라이브러리를 설치해 사용할 수 있다. 이 라이브러리는 homebrew를 통해 쉽게 설치할 수 있다.

    brew install poppler
    

    폰트 정보를 알아내기 위해서는 다음과 같이 사용할 수 있다.

    pdffonts <파일명>
    

    이미지를 추출할 때는 다음과 같이 쓸 수 있다.

    pdfimages <파일명> <추출 경로>
    

    추출된 이미지가 ppm인 경우는 일반적으로 사용 가능한 포맷인 jpg로 변경해 사용 가능하다. 이 경우엔 imagemagick 라이브러리에 포함되어 있는 convert를 사용할 수 있다.

    해당 라이브러리가 설치되어 있지 않다면 역시 brew를 통해 설치할 수 있다.

    brew install imagemagick
    

    설치가 완료되었으면 다음과 같은 명령어로 일괄 변환할 수 있다.

    convert *.ppm image%d.jpg
    

    여기서 사용된 라이브러리들은 리눅스 패키지 매니저에서도 설치 가능하다.

    WordPress에는 기본적으로 Links라는 포스트 타입이 존재했었는데 WordPress 3.5 에서 제외되었다고 한다. 대부분의 사용자가 거의 이용하지 않는 기능이 되다보니 이런 결정을 내리지 않았나 싶다.

    그 이전 버전 사용자는 업그레이드 하더라도 해당 기능이 계속 유지되지만 신규로 설치한 경우는 다음과 같은 Links 항목을 관리자 화면에서 찾을 수 없다. 이 Links 항목을 보여주는 Link Widget(Blogroll) 또한 존재하지 않는다.

    3.5 이후 버전을 설치한 경우에는 Links가 존재하지 않는다.

    티켓 #21307에서 논의된 결과로 Link Manager 플러그인으로 분리되었고 3.5 이후 버전에서는 해당 플러그인을 설치해 사용할 수 있다.

    색상을 바꿔요

    눈에 편한 색상을 골라보세요 :)

    Darkreader 플러그인으로 선택한 색상이 제대로 표시되지 않을 수 있습니다.