2014년 11월 27일 목요일

리눅스 설치 후 초기 설정

SSD 128GB 를 하나 구입하면서, 어느 용도로 사용할까 하다가 Ubuntu 14.10을 설치했다.
초기 설치 후에 했던 일들이다. 차후에 재설치 시 참고하기 위해 작성!한글 키 입력은 별도의 설정을 해주지 않았는데도 잘 동작한다.

1. 저장소 설정

    /etc/apt/sources.list에 KAIST mirro ftp로 설정

2. SSD 최적화 설정

    http://ioriy2k.pe.kr/archives/7062 참고
    /etc/fstab
    위 블로그를 참고하여 SSD partition에 대한 Mount Option 조절
    
    TRIM 설정 - SSD 수명 연장을 위하여 가능한 Write 동작을 줄이기 위해 OS에 의해 삭제 명령이
    실행된 Data Block을 실제로 삭제하지는 않고 SSD에 알리는 기능.
    /etc/cron.weekly/fstrim
    TRIM 명령어를 cron의 weekly 실행 명령어에 등록해둔다.

    /etc/rc.local
    I/O Scheduler NOOP으로 설정(특별한 스케쥴링 없이 I/O 요청이 들어오는 대로 동작 수행)

3. vim, vundle, NERDTree 설치

    https://blog.ansuchan.com/install-vundle-and-nerdtree/ 참고
    Vundle은 vim 플러그인 관리를 쉽게 해주는 모듈이다.
    NERDTree는 vi에 탐색기를 달아주는 플러그인.
   

4. vimrc 설정, Bash prompt format 변경

    ~/.vimrc 설정


    ~/.bashrc 에 prompt format 정의
    export PS1="\e[1;37m[\e[36m\D{%Y-%m-%d %H:%M:%S}\e[37m] \
    [\e[32m\u\e[31m@\e[33m\h\e[37m] \e[34m\w\e[m\n\$ "
   

5. java, nodejs 설치

    gcc, python은 있는데, 없어서 설치

6. Unity Tweak Tool

    우분투 소프트웨어 센터에서 Unity Tweak Tool 설치
    workspace switcher 켬
    Fonts 설정
    - Default font : 나눔바른고딕 11
    - Monospace font : 나눔고딕코딩 13
    - Document font : 나눔바른고딕 11
    - Window title font : 나눔바른고딕Bold 11

7. GRUB 설정 - Window 멀티부팅

    sudo update-grub

2014년 8월 22일 금요일

입사 후 경험한 것들

부서에 배치 된 후 접하게 된 것들은 아래와 같다.

Linux
Perforce
QuickBuild
Jenkins
Vagrant
Docker
Odin
ReviewBoard
Protex
Shell Script
Python
Gradle
Groovy
Webkit
Chromium

리눅스를 임베디드 수업 때 몇 번 사용했던 경험 외에는 정말 기초적인 명령어 밖에 몰랐으나, 이제는 아주 초보적인 수준은 넘은 것 같다. 왜 개발에 리눅스가 편리한지 설명할 수는 없지만 새삼 느끼게 된다. 리눅스를 사용하면서 익숙했던 윈도우의 GUI가 이제는 불편해지면서, CUI 환경과 vi editor의 편리함을 느끼게 됐다. 마우스를 사용하기 위해 키보드에서 손을 떼야하는 것이 줄어들었다는 것이 가장 큰 차이인데, 이것이 정말 큰 차이라고 생각한다. 큰 프로젝트를 관리하는 것이 아니라 파일 몇 개를 수정하면서 가볍고, 키보드만으로 모든 것을 해결하는 vi editor가 처음에는 익숙하지 않아 불편했지만 이제는 다른 IDE 보다 신속하고, 효율적으로 작업할 수 있어 정말 좋다.

버전 관리 시스템의 경우 대학교 4학년 2학기에 동아리 세미나로 git를 준비했었는데, 회사에 와서는 분산형 버전 관리가 아닌 중앙집중방식의 Perforce를 사용하게 됐다. 처음에는 git에 대해 알고 있던 얄팍한 지식 때문에 조금 헷갈린 점도 많았다. 그리고 막연히 분산(Distributed)이라는 단어가 무조건 더 좋다는 개인적인 선입견도 있었기에 Perforce를 사용하는 것이 많이 불편했다. 지금은 중앙집중이든, 분산형이든 장단점이 있고 버전 관리 시스템이라는 것 자체가 대단한 것임을 느끼며, 편리한 것임을 인지하게 됐고 어느 정도 익숙해졌다.

ReviewBoard를 통해서는 개발자간의 code review를 통해 프로젝트의 source를 양질로 관리하고, 개발자간 의사소통을 하는 방법을 어렴풋이 익힐 수 있었다.

QuickBuild를 통해 Perforce의 shelve 기능을 이용하여 local에서 build하는 것이 아니라 좋은 하드웨어를 가진 서버에서 build를 시키고, submit 전에 미리 build test를 할 수 있게 됐다. 그리고 Jenkins라는 CI(Continuous Integration) tool을 이용하면서, 프로젝트를 지속적으로 자동으로 build하며 안정성을 높일 수 있는 지속적 통합(?) 툴을 알게 됐다. 직접 내 컴퓨터를 jenkins의 node로 설정하고, job을 생성하여 build를 해보기도하고, 이 가운데 vagrant를 통해 가상 머신을 node로 이용해보기도 하고, docker를 이용해보기도 했다.

Shell script, python을 접하면서 기존의 compiler를 이용한 언어가 아닌 interpreter를 이용한 언어를 이용하게 됐는데, 내가 알고 있던 c, c++, java와는 전혀 다른 매력을 발견할 수 있었다. 손쉽게, 즉각적으로 debugging을 해볼 수 있고, 특히나 반복적인 작업의 자동화 tool을 제작하는 것에는 필수적인 것이었다. 내가 좀 더 학교를 다니는 동안 컴덕후였더라면 이런 강력한 기능들을 미리 체험하고 좀 더 성장하지 않았을까하는 아쉬움이 있다.

그리고 Gradle build system을 이용하면서 단 한 번의 build를 통해 해상도, 모델별로 여러 apk를 추출하고, task를 통해 build를 관리하는 방법도 맛볼 수 있었고, gradle script 수정을 하면서 Groovy도 살짝 맛볼 수 있었다. 여전히 Gradle에서 task의 initialization, configuration, execution 단계와 dependencies를 설정하는 것은 굉장히 까다롭고 짜증난다. 망할 up-to-date.

chromium과 webkit 이는, 앞으로 계속 공부해야 할 것들이다.

참 갈 길이 멀고, 모르는 것이 너무 많다. 그래서 막막하고 평생해도 끝나지 않는 학습 요구에 부담스럽기도 하지만, 그래서 좋다. 공부할 것이 끝이 없다.