소프트 스킬 - 평범한 개발자의 비범한 인생 전략 71가지
존 손메즈 지음, .이미령.김태곤 옮김 / 길벗 / 2015년 11월
평점 :
구판절판


 


개발자가 개발 이외의 기술을 담은 책이라고해서 무슨 책인지 궁금했기에 책을 구매해서 읽어보게 됐다. 사실 결론부터 얘기하면 조금은 도움이 된 것도 있고, 조금은 불필요한 내용들도 있다. 한꼭지라도 나한테 도움이 된다면 그 책의 값어치는 충분하다고 생각한다.

내 자신도 개발 기술에 목메는 스타일이라 개발 이외에는 많은 부족함을 느낀던 찰라에 소프트스킬아라는 책이 나와 구매해 봤다.

소프트 스킬이란 소통, 협상, 리더십, 팀워크 등을 활성화 할 수 있는 기술이라고 말할 수 있다. 하드 스킬과 대비되는 용어로 무형의 기술이라 정량화하기 어려움이 있고 주관적이라 할 수 있다.


이 책을 읽으면서 가장 재미있던 부분은 저자 본인이 33세에 은퇴했던 과정을 솔찍하게 작성한 것이다. 본인은 사실 개발자면서 개발 이외의 방법으로 돈을 모아 은퇴를 목표로 생활해 왔다는 것이다. 특히 부동산 임대 사업에 올인하는 모습을 보고, 조금 황당함을 느꼈으며 결국 돈은 개발 저작 활동을 통해 벌었음을 봤을 때 웃음이 피씩하고 나왔다.

그리고 이 책을 통해 얻은 것이 있다면 정말 치열하고, 적극적으로 삶을 살아야 한다는 것이다. 인생의 목적이 돈이 되면 그것은 피곤한 일이지만, 나의 삶과 다른 사람의 삶에 활력소를 넣을 수 있다면 그것만큼 좋은 선택은 없을 것이라 생각된다. 나는 이 책을 통해 저자의 삶의 자세에 대해 높이 평가한다.

하지만 이 책 또한 자신의 돈벌이 수단으로 생각하는 것이 이 책의 최대 단점이라 생각한다.


더불어 여러분이 하고자 생각하는 일이 있으면 전투력(기)를 높이는 기술을 익히는 책이라 생각된다. 


댓글(0) 먼댓글(0) 좋아요(1)
좋아요
북마크하기찜하기 thankstoThanksTo
 
 
 
웹 엔지니어가 알아야 할 인프라의 기본
바바 토시아키 지음, 김병국 옮김 / 한빛미디어 / 2015년 7월
평점 :
장바구니담기


 


1) 웹 서비스에서 인프라의 역할

1. 웹 서비스 구축에 관련된 인프라 영역
요건 정의 -> 설계 -> 조달 -> 구축 -> 운용

인프라의 기술 계층 구조
7 : 애플리케이션 계층 (HTTP, FTP..)
4 : 전송 계층 (TCP, UDP)
3 : 네트워크 계층 (IP, ICMP)
2 : 데이터링크 계층 (Ethernet)
1 : 물리 계층 (RJ-45)

Infrastructure as a Service (IaaS) : 하드웨어, 네트워크, 코로케이션 (Amazon Web Services, Google Cloud Platform, Softlayer)
Platform as a Service (PaaS) : 애플리케이션 실행환경, 미들웨어, OS, 하드웨어, 네트워크, 코로케이션 (Heroku, Google App Engine, Engine Yard)

3. 인프라의 설계
3-1. 기능적 요건
 - 네트워크 이중화, 4000 접속이 가능한 SSL 오프로딩 기능, VRRP(Virtual Router Redundancy Protocol)에 따라 Active-Standby 구성이 가능한 로드밸런서, 1Gbps 48포트, 10Gbps 2포트, L2 스위치, 동시접속 80,000 세션에 대응하고 접속 소스당 사용량 제한이 가능한 방화벽, 로드밸런서 하위 웹서버 4대, 내부 네트워크는 외부 통신용과 서버 간의 통신용으로 분할

3-2. 비기능적 요건
 - 가용성 (가동율, 목표 복구 시간, 재해 대책), 성능/확장성 (성능 목표, 확장성), 운용/유지보수성 (운용 시간, 백업, 운용 감시, 정기 보수), 이행성 (이행 방식의 규정, 이행 스케쥴, 설비/데이터), 보안(가이드라인, 네트워크 레벨 제어, DoS공격 대책, 정보 유츌 대책, 사고 발생 시의 대응), 시스템 환경/생태 환경 (적합 규격, 기기 설치 규격, 환경 관리)

RAS : Reliability(신뢰성), Availability(가용성), Serviceability(유지보수성) - ISO/IEC27002

RASIS : RAS + Integrity(무결성), Security(안전성)
CIA : Confidentiality(기밀성), Integrity(무결성), Availability(가용성)

4. RAS 검토
가동률 = MTBF / (MTBF + MTTR)
MTBF = 누적 사용 시간 / 고장 횟수 (장애 발생 간격, Mean Time Between Failures)
MTTR = 누적 수리 시간 / 고장 횟수 (평균 복구 시간, Mean Time To Repair)

연간으로 환산한 초 수와 가동률로부터 정지 시간을 산출
86,400초(24시간) X 365일 X 0.01% (가동률 99,99%) = 3153.6초

MTTR이 4분인 경우 (MTBF 28일)
99.99% = 60 X 24 X MTBF / (60 X 24 X MTBF + 4)

MTTR이 18인 경우 (MTBF 125일)
99.99% = 60 X 24 X MTBF / (60 X 24 X MTBF + 18)

가동률을 높이는 방법
요소 각각의 가동률을 높인다 (서버용 부품 사용, 부품을 이중화, 요소 각가의 가동률 확인)
요소를 조합해 전체의 가동률을 높인다 (다중화 기술을 이용하여 가동률 높임)
적절한 프로비저닝으로 부하 문제를 피한다 (스케일업(서버 성능을 높이는 것), 스케일아웃(서버 수 늘리는 것))

다중화 구성 요소
Active-Active
Active-Standby (Hot Standby (즉시), Warm Standby (나름 준비 필요), Cold Standby (정지))

문서 작성 도구
Sphinx : sphinx-doc.org
Graphviz : www.graphviz.org
Blockdiag : blockdiag.com
Cacoo : cacoo.com

5) 웹 서비스 운용

1 : 시스템 감시의 기본

2 . 시스템 감시의 구현
감시툴
- Nagios : 감시 기능에 특화
- Zabbix : 감시 기능 외에 그래프화 기능도 있음
모니터링툴
- Cacti : 사용자 관리 기능이 있음. 풀형 데이터 수집
- Nackerel : SaaS형 서비스 감시도 가능
- Monit : 간단함. 사용자 관리 기능 없음. 풀형 데이터 수집
- GrowthForecast : 간단함. 사용자 관리 기능 없음. 푸시형 데이터 수집

시스템 감시 (Nagios: NRPE, Zabbix: Zabbix Agent)
- 외형 감시
- 내부 감시 - 서비스 가동 상황 감시(액티브 체크, 패시스 체크(SNMP Trap)), 시스템 리소스 감시

 감시 항목을 결정하기 위한 현재 상태 확인 방법
- 방화벽 설정 확인
iptable -nv -L
ss -lnp
ip6table -nv -L

- 프로세스 확인
ps aufx | grep -w 1380 | grep -v grep
yum whatprovides /usr/libexec/postfix/master

현재 상태 확인 결과로부터 감시 항목 만들기
a. 실행 프로세스 수를 확인
 - I/O 확인 : 서비스/관리 네트워크 입출력, 서비스/관리 파일 입출력
b. 외형 감시의 주요 항목
 - HTTP 응답 코드, 내용, 응답시간, 크기
 - HTTPS 응답 코드, 내용, 응답시간, 크기
 - POP, SMTP, FTP.. 동작여부, 메일 송수신, 파일 PUT/GET 등
 - HTTP 시나리오
c. 내부 감시의 주요 항목
 - CPU 사용률, 평균 부하, 디스크별 사용률, 디스크별 I/O 요구량, 디스크별 대기 시간, 네트워크 인터페이스별 트레픽 IN/OUT, 로컬에서의 HTTP 접속, 서비스에 사용할 프로세스의 감시, 시스템적으로 사용할 프로세스의 감시

3. 장애가 발생했을 경우의 대응 방법
a. 경보
b. 현상 확인
c. 1차 대응
lssh 파일명
#!/bin/bash
NOW=$(date +%Y%m%d_%H%M%S)
exec script -q -C "ssh $1" $1.$NOW.log

chmod a+x lssh
./lssh localhsot

export PS1="\D{%Y/%m/%d %H:%M:%S} $PS1"
export HISTTIMEFORMAT='%Y-%m-%d %T'

상황 확인용 명령어 일람
w
ss -lnp
ps aufx
df -h
top -b -d 1 -n 1
top -b -d 1 -n 1 -a
dstat -taf 1 10
mysqladmin processlist -verbose

로그 확인툴
fluentd

d. 경보 현상 및 다른 항목 확인하기
e. 사후 작업
f. 수습


6) 웹 서비스 운용 2

6.4. 실시간 모니터링 방법
 - 툴 : dstat, top, iostat (yum install dstat, yum install sysstat)

dstat
 - option : -t (일시), -l (평균부하), -m (메모리), -a (cpu, disk, network, paging, system), -f (디바이스별 표시), --output (csv), 1 (1초마다)
 - dstat -tlaf --output stat.csv 1 3600

iostat
 - option : -t (일시), -x (확장 상태), -n (NFS상태), 1 (1초마다)
 - iostat -txn 1

6.5 트러블 대응에 사용하는 모니터링 툴
 - tcpdump : 네트웍크 상태 파악 ( tcpdump -i eth0 -n port 80, tcpdump -i lo -n port 3306 )
 - strace, lsof : 프로세스 동작 확인 ( ps aufx | grep http[d] | head -3, strace-f -p 5377, lsof -p 5377 ) : 설치 ( yum install strace, yum install lsof )


7) 웹 서비스 튜닝 1 : 보틀넥을 찾는 방법

7.4 보틀넥을 찾는 방법 - 로그
- Apache에서 보틀넥 찾기
 httpd.conf : LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D"combined (%D로 총 소요시간)
- MySQL에서 보틀넥 찾기
 slow-query-log=NO
 slow-query-log-file=mysqld-slow.log
 long-query-time=10
(show global variables like 'long_query_time'; set global long_query_time=1; show global variables like 'long_query_time';)
- mysqldumpslow ( mysqldumpslow -t 3 -s t mysqld-slow.log )
 -s ORDER :al (평균 lock시간), ar (평균 송신 행의 수), at (평균 SQL 실행 시간), c (SQL 실행 횟수), l (lock 시간), r (송신 행의 수), t ( SQL 실행 시간)
 -h HOSTNAME : 조사 대상의 호스트 이름을 지정
 -t NUM : 정렬한 결과의 상위에서 NUM 갯수만큼 표시

7.6 보틀넥을 찾는 방법 - 애플리케이션 코드
 - XDebug : 애플리케이션 프로파일러 툴 ( sudo yum install php-pecl-xdebug, php.ini ([xdebug] xdebug.profiler_enable=1 )
 - KCachegrind, webgrind
  ls /tmp/cachegrind.out.*


8) 웹 서비스 튜닝 2 : 튜닝 레시피

8.1 포인트별 튜닝 레시피
- 요청 횟수와 데이터 전송량을 줄이는 방법
a) 요청횟수 줄이는 방법
 - 파일 결합 : CSS와 JavaScript의 파일 결합
 - CSS Sprite : 이미지를 하나로 집약
 - 패턴 이미지는 CSS로 구현
 - HTTP KeepAlive 유효화
b) 데이터 전송량 줄이는 방법
 - CSS나 JavaScript를 minify
 - 이미지 압축률을 높인다
 - 이미지 크기를 작게 한다
 - 데이터를 압축하여 전송
 - 정적 파일을 브라우저에서 캐시
 - CDN 사용

Grunt툴 사용하여 minify화 (http://gruntjs.com)
 - CSS 결합/minify ( grunt-contrib-cssmin https://github.com/gruntjs/grunt-contrib-cssmin )
 - JavaScript 결합 ( grunt-contrib-concat https://github.com/gruntjs/grunt-contrib-concat )
 - JavaScript minify ( grunt-contrib-uglify https://github.com/gruntjs/grunt-contrib-uglify )
 - CSS Sprite 작성 ( grunt-spritesmith https://github.com/Ensighten/grunt-spritesmith )

Grunt 설치 및 활용
- package.json
{
    "name": "myproject",
    "version": "0.0.1"
}
- 필요 라이브러리 설치
yum install npm ImageMagick GraphicsMagick cairo-devel libjpeg-turbo-devel
npm install grunt<cli grunt-contrib-concat grunt-contrib-uglify grunt-contrib-cssmin grunt-spritesmith --save-dev
- Gruntfile.js
module.exports = function(grunt) {
    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),
        cssmin: {
            compress: {
                files: {
                    'dest/min.css': ['css/*.css']
                }
            }
        },
        concat: {
            files: {
                src: 'js/*.js',
                dest: 'tmp/all.js'
            }
        },
        uglify: {
            dest: {
                files: {
                    'dest/min.js': 'tmp/all.js'
                }
            }
        },
        sprite: {
            all: {
                src: 'img/*.png',
                destImg: 'dest/sprite.png',
                destCSS: 'dest/sprite.css'
            }
        }
    });
    grunt.loadNpmTasks('grunt-contrib-cssmin');
    grunt.loadNpmTasks('grunt-contrib-concat');
    grunt.loadNpmTasks('grunt-contrib-uglify');
    grunt.loadNpmTasks('grunt-spritesmith');
    grunt.registerTask('default', ['sprite', 'cssmin', 'concat', 'uglify']);
};
- node-modules/.bin/grunt (실행)

OS의 CPU 사용률 낮추기
lowait 낮추기
- iotop로 I/O 체크 ( yum install iotop, iotop -P )
- ps로 status D 프로세스 확인

OS의 네트워크 사용량 낮추기 (백업)
rsync -az /data/backup/ remote.example.com:/data/backup/web/
tar zcfp - -C /data/backup . | ssh remote.example.com "cat - | tar zxf - -C /data/backup/web"
tar cfp - -C /data/backup -I pigz . | ssh remote.example.com "cat - | tar xf - -C /data/backup/web -I pigz"

Apache의 CPU 사용률 낮추기
pgrep -P 'cat /var/run/httpd/httpd.pid' | while read
echo 'ulimit -n 65535' | tee -a /etc/sysconfig/httpd

Apache의 메모리 사용량 낮추기
cow.py
#!/usr/bin/env python

import sys
import re

for pid in sys.argv[1:]:
    mem = {'Rss:': 0, 'Shared_Clean:': 0, 'Shared_Dirty:': 0}
    for line in open('/proc/%s/smaps' % pid, 'r'):
        line = line.rstrip('\n')
        parts = re.split('\s+', line)
        for k, v in mem.iteritems():
            if k in parts:
                val = int(parts[1])
                if parts[2] == 'kB':
                    val = val * 1000
                elif parts[2] == 'mB':
                    val = val * 1000000
                mem[k] = v + val
        shared_ratio = (mem['Shared_Clean:'] + mem['Shared_Dirty:']) * 100.0 / mem['Rss:']
    print 'PID %s shared %.2f%%' % (pid, shared_ratio)

ps aufx | grep http[d]
./cow.py 'pgrep -U apache'

Apache의 디스크 I/O 사용량 낮추기
httpd.conf (이미지와 같은 정적 파일 로그 출력하지 않도록 수정)
SetEnvIfNoCase Request_URI "\.(gif|jpeg|jpg|png|js|css|swf|ico)$"
nolog
CustomLog logs/access_log combined env=!nolog

BufferedLogs On (주의 필요)

애플리케이션 서버의 CPU 사용률 낮추기
Gargbage collector 조정
바이트코드 캐시 이용 (5.4 이전 : apc (Alternative PHP Cache), 5.5 이후 : OPCache)
yum install php-pecl-apc
php -i | grep apc.enabled

8.2 SQL 튜닝에서의 고속화
SQL 튜닝 툴
EXPLAIN, PROFILING

EXPLAIN : SQL 앞에 EXPLAIN을 붙여 실행 계획 확인 
 - possible_keys, key로 인덱스 확인
 - rows 행수 검사는 낮아야 한다
 - Extra항목에 Using filesort가 없어야 한다

PROFILING
SET PROFILING=1;
SQL 실행
SHOW PROFILES;
SHOW PROFILE FOR QUERY 1;

8.4 [DB] 스케일 아웃 구현의 예
HAProxy, Keepalived (LVS)



댓글(0) 먼댓글(0) 좋아요(1)
좋아요
북마크하기찜하기 thankstoThanksTo
 
 
 
좋은 아버지로 산다는 것
김성은 지음 / 소울메이트 / 2015년 8월
평점 :
절판


 


가끔 아들을 보고 있노라면 '나는 좋은 아버지인가'라는 물음을 갖게 된다.

골똘히 생각하다보면 별로 좋은 아버지가 아닌 것 같은 느낌도 들고 내가 잘못하고 있는게 아닌가하는 생각이 든다. 누군가 정답을 알려줬으면 하는 생각은 나만 하는 것일까?


이런 생각이 머리 속을 채울 때 쯤 이 책을 보게 됐다. 아버지를 위한 필독서라는 말에.. 잘 해보고 싶은 마음에..


이 책은 2부로 구성되어 있으며, 1부는 아버지 양육의 의미와 중요성을 논했고 2부에서는 좋은 아버지의 삶의 장애물에 관해서 논하고 있다.


아버지와의 애착과 정서를 소통하는 과정이 있어야 하며, 자아 존중감과 적절한 통제를 통해 아이가 성장해감에 따른 역경을 헤쳐나갈 수 있는 단초를 제공해야 한다고 저자는 말한다.

작게는 부부 관계를 잘 설정하여 살아가야 하며, 사회적으로는 이를 뒷받침해줘야 함을 강조하고 있다.


내가 살아온 궤적이 내 자식의 삶의 궤적에 영향을 주기 때문에 나의 과거를 뒤돌아보는 시간을 갖어야 한다. 내 삶을 반성해보고, (그렇다고 '내가 이렇게 살았으니, 너도 이렇게 살아라' 또는 '나와는 반대로 살아라'라는 식의 반성은 아니다.) 결국 내가 (삶의 궤적을) 바꿔야한다는 결론(나의 결론)에 도달하게 됐다. 모든 사람은 자석처럼 서로 공명하고 있는 것이기에 내가 바뀌면 다른이의 삶도 바뀌게 될 것이기 때문이다.


이 책을 읽으면서 조금 아쉬운 부분은 일반론에 그친다는 생각이 든다. 그래서 '나는 어떻게 해야 하는가'라는 물음이 다시 생겨남은 '어쩔 수 없는 나의 몫이구나'라는 결론에 도달하게 만든다. 아주 속 시원한 해답은 없음을 다시 한번 느꼈다.(인생에 정답이 없듯이 좋은 아버지도 정답이 없음을 깨달은 정도)

그래도 이런 책은 항상 내 마음을 따뜻하게 해주기 때문에..그래도 사람들에게 권해본다.


댓글(0) 먼댓글(0) 좋아요(1)
좋아요
북마크하기찜하기 thankstoThanksTo
 
 
 
잊지 않겠습니다
416가족협의회 지음, 김기성.김일우 엮음, 박재동 그림 / 한겨레출판 / 2015년 4월
평점 :
절판


우리 아이들 잊지 않기 위해 추천합니다.

댓글(0) 먼댓글(0) 좋아요(1)
좋아요
북마크하기찜하기 thankstoThanksTo
 
 
 
Android Security Internals 안드로이드 시큐리티 인터널 - 지금까지 접하지 못했던 깊이 있는 보안 안내서
니콜라이 옐렌코프 지음, 강권학 옮김 / 한빛미디어 / 2015년 6월
평점 :
절판


 


이 책을 읽으면서 몇일전 이슈가 됐던 5161부대(국정원?)에서 우회업체를 통해 이탈리아 해킹팀(RCS)에게 해킹프로그램을 샀던 일이 밝혀졌었다. 아니러니하게도 이 업체 또한 해킹을 통해 내부자료가 공개됐기 때문에 세상에 그 모습을 드러나게 됐다. 그 어느 때보다도 보안의 필요성이 대두되고 있는 현실을 보여준게 아닌가 싶다.

PC는 물론이고 스마트폰 또한 해킹에 노출되어 있으며, 외부에 공개되지 않은 해킹 기법을 통해 백신 등의 프로그램 또한 무력화하고 있는 현실이다. 스마트폰의 경우 음성 녹취 후 전달할 수 있으며, 영상/사진 등 내부 자료 등도 모두 외부로 가져갈 수 있다. 이로인해 한번의 해킹을 통해 제조사와 앱을 개발하는 개발사 모두에게 크나큰 위협이 아닐 수 없다.

보안 관련 책이 절실한 상황에서 이런 책이 나와 정말 위안이 되는게 사실이다.


 


이 책은 사실 시스템 보안 관련 책으로 어느정도의 하드웨어 지식(부트로더/커널)과 소프트웨어 지식(안드로이드 아키텍쳐)을 알고 있어야 읽는데 무리가 없다. (중급 이상의 지식이 요구된다.)


초반부에는 안드로이드 아키텍쳐에 관해서 간략하게 설명한 후 안드로이드 권한 모델에 대한 설명을 시작한다. 안드로이드는 샌드박스로 구동되기 때문에 최소한의 제한된 권한 모델을 사용한다. 앱과 시스템간의 상호작용을 위해 권한이 설정되며, 브로드캐스트, 서비스, 인텐트, 컨텐츠프로바이더 등 다양한 권한 설정 방법을 설명한다. 또한 패키지 관리를 통해 앱을 샌드박스 모델로 만들며, 사용자 관리를 통해 다중 사용자 접근 제어를 한다.

 


 


중반부에는 JCA 암호 제공자 아키텍처와 CSP에 설명하며, 네트워크 보안 (SSL, TLS, PKI)을 표준자바 보안 소켓을 통해 지원하며, WIFI, VPN, 앱 자격증명 저장소 등의 자격증명 아키텍쳐에 대해 설명한다. 또한 온라인 계정 관리에 대해서도 설명한다.

 


 


후반부에서는 디바이스 보안과 NFC 보안, 그리고 SELinux 대한 설명, 시스템 업데이트와 루트 접근  등의 하드웨어와 커널에 관련된 내용으로 마무리된다.

이중에서 안드로이드에 SELinux에 대한 설명은 보안 기능이 높은 제품(CCTV, 관제시스템등)에 포팅하면 좋은 대안이 될 것으로 보인다.

그리고 개인적으로 관심이 있는 NFC에 대한 설명은 앱을 개발하면서 주의해야 될 사항을 숙지할 수 있었다. (앱이 SE와 통신하기 위해 사용할 수 있는 API 설명과 HCE 구현 및 앱 구현에 대한 설명은 진행하는 프로젝트에도 도움이 되고 있다.)

 


기업에서도 앞으로는 보안에 대해서 더 많은 인력과 시간을 들이기 시작하고 있으며, 앞에서도 얘기했지만 한번의 실수가 기업의 존폐를 가를 수 있기 때문에 앱의 보안 인력이 요구될 것이며, 많은 연구 프로젝트들이 진행될 것이다.

안드로이드에서 제공하는 많은 보안관련 기능을 십분 활용하는 기회를 이 책을 통해 얻었으면 좋겠다.


댓글(0) 먼댓글(0) 좋아요(0)
좋아요
북마크하기찜하기 thankstoThanksTo