Jun 26 2007

Base64 인코딩

분류: Dev.Programming 태그: ,, Heart @ 1:11 오후

Trackback : http://dev.heartsavior.net/archives/95/trackback/

Base64란 모든 8비트 문자를 64개 문자로 표시하기 위한 인코딩/디코딩 방법으로,
64개 문자는 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ 이다.
(패딩을 위해 = 를 추가로 사용한다.)
위의 문자들로 표현하는 이유는 저 문자들이 어떤 문자 셋에도 포함되어 있기 때문이다.

문자 셋에 제한되지 않고 특수문자가 +와 /, =만 쓰이기 때문에 다양한 활용이 가능하다.
URL 쿼리 스트링에도, SQL 쿼리문에 포함되는 데이터로도 사용 가능하며, 용량이 길어지는 단점을 제한다면 간단한 암호화에도 활용할 수 있다.(처음에 찾아보게 된 이유도 이것 때문)
가장 많이 쓰이는 곳은 아마 MIME 타입의 메일 본문이 아닐까 싶다.

원칙은, 문자열을 비트로 전부 변환하여(이 때, 한 글자는 8비트) 6 비트 간격으로 끊어준다는 것이다.
이 때, 전체 문자열을 6 비트로 표현하기 위해 문자열 3 바이트를 4 바이트로 표현한다.
(8 비트와 6 비트의 최소공배수가 24비트, 3 * 8 = 4 * 6 = 24 bit)

예를 들어 “ABCD”를 Base64 인코딩하면,

1) 2진수 변환 : 01000001 01000010 01000011 01000100
2) 6비트씩 묶음 : 010000 010100 001001 000011 010001 000000 <= 마지막에 0이 모자르면 채움
3) 10진수로 바꿈 : 16, 20, 9, 3, 17, 0
4) 숫자를 위의 문자의 인덱스로 보고 해당하는 문자를 찾음(0부터 시작).
구하면 QUJDRA 가 됨
5) 문자열 3 바이트를 4 바이트로 표현하여야 하는데 결과가 6 바이트이므로,
8 바이트에 맞추기 위해 패딩 2 바이트를 = 로 붙임. 즉 최종 결과는 QUJDRA== 이 됨.

Base64에 대한 자세한 설명 및 예시는 아래를 참고하자.

@ 영문 위키피디아 - Base64


Jun 13 2007

Man-Month와 사칙연산

분류: Dev.Think 태그: ,, , , Heart @ 12:38 오전

Trackback : http://dev.heartsavior.net/archives/96/trackback/

새로운 개발을 진행하거나 유지보수 개발을 하게 되면 가장 먼저 나오는 이야기는 ‘인력 계산’ 일 것이다.
이 인력 계산으로 단가가 결정되고, 인력이 할당되며, 일정이 수립되기 때문이다.

개발자/PM이면 다들 아는 단위가 Man-Month이다.
말 그대로, 한 사람이 한 달을 일했을 때의 생산량을 의미하는 단어이다.

보편적으로 쓰는 단위가 이렇다보니 결국 인력 계산은 단순히 ‘n Man-Month’로 뭉뚱그려지기 마련이다.
특히 유지보수 개발은 더더욱…

하지만 개발자의 생산량 개인 편차는 상당한 차이가 있다.
보통 고급 인재가 일반 인재의 5배 정도 생산량이 있다는 이야기는 책이나 돌아다니는 이야기에서 어렵지 않게 접할 수 있다.
(스펙이나 경력에서 그다지 차이가 나 보이지 않는 경우에도 실제로는 두배 이상의 차이가 나는 경우도 많다.)

Man-Month는 그 점을 간과하는 단위이다. ‘일반적인’ 한 사람을 가상으로 세우는 것이다.
‘일반적인’ 한 사람을 가상으로 만들고 실제로 일할 사람의 생산량을 가상의 사람과 비교하여 그 비율을 곱해야 정상적인 Man-Month가 나오지만, 이 과정이 제대로 지켜지는 경우는 드물다.
보통은 산정하는 사람의 주관적인 기준이 작용하거나, 이른바 ‘갑’의 요구사항대로 쥐어짜는 경우가 다반사이다.
실제로 개발하는 사람에 따라 들쑥날쑥하다기 보다는 산정하는 사람의 기준에 맞춰진다는 게 아이러니이다.

근데, 이를 더 복잡하게 하는 것들이 있다. 바로 Man-Month에 사칙연산을 가하는 경우이다.

가령 9 to 6로 운영되는 회사에서 야근에 철야까지 고려해 Man-Month를 2로 나눠버리는 경우라던지, 2 Man-Month니까 두명 넣으면 2로 나눠서 1 Man-Month가 된다던지…

그냥 수학적으로 보면 일리가 있지만, 사실 이렇게 계산하는 것 자체가 말이 되지 않는다.
사이드 이펙트, 즉 부수효과가 전혀 고려되지 않았기 때문이다.

후자의 경우에는 Man-Month가 가지는 단점이 약간 더 커진다. 한 명을 ‘일반적인’ 기준과 맞춰야 하는 것이 아니라 두 명을 맞춰야 하니…
그래도 이건 조금 용인할 만 하다. Man-Month라는 단위를 쓴다면 어차피 감수해야 하는 것인데…

정말 위험한 계산은 전자의 경우이다.
바이오리듬이나 컨디션, 기타 등등 개발에 영향을 끼칠 수 있는 수많은 것들이 생산량에 포함되어 있다.
근데 하루 가용시간을 늘리면서 Man-Month를 줄일 때, 위와 같은 ‘중요한’ 요인들은 계산에서 제외되기 일쑤이다.

오래 머리를 쓰고 몸을 굴릴 수록 효율성은 급격히 떨어진다.(사람에 따라 그 시간의 격차가 있을 뿐이다.)
또한 사람의 컨디션을 회복하는 유일한 방법은 휴식뿐이다.
전자의 경우 이 두 가지 중요한 사실이 무시되는 것이다.
사람이 로봇이 아닌 이상은 저 계산은 언제나 틀리다.

하루에 8시간씩 공부하던 사람에게 억지로 16시간을 공부시킨다고 그 사람이 공부를 두배 더 잘하게 될 것이라고 생각하는 사람은 없다. 효율성을 생각하기 때문이다.
IT 개발 또한 머리를 쓰는 일이기 때문에 효율성이 중요함은 당연한 이야기이다.

Man-Month를 수식인 양 계산하는 것은 그만큼의 효율성도 가져오지 못할 것은 물론 장기적으로 사람을 지치게 만들어 회의감에 따른 생산량 하락 또는 심한 경우 전직을 유발할 수 있다.
(국내 개발자에 대한 분위기, 또는 시선이 극도로 좋지 못한 첫번째 이유가 이것이라고 생각한다.)

단기적인 안보다는 장기적인 혜안을 바라보고 Man-Month 쥐어짜기가 사라지는 그 날이 오길 이 나라의 개발자로써 빌어 마지 않는다.


Jun 04 2007

IT 전공자에게만 산업기능요원 자격 - 듣던 중 반가운 소식

분류: Dev.Think 태그: ,, Heart @ 2:03 오전

Trackback : http://dev.heartsavior.net/archives/97/trackback/

@ IT 전공자에게만 산업기능요원 자격

(참고로 전 산업기능요원 현역 복무중입니다. 아랫 포스트에서도 아마 언급을 했을 것입니다.)

이제야 좀 제대로 된 해답을 제시받고 있다고 할까요…

지금까지 자격을 인증하고 있었던 국가 기관 자격증… 정보처리 기능사/산업기사/기사…
무용지물인건 알 만한 사람들은 다 알 것입니다. 말 그대로 페이퍼입니다.
생판 모르던 분들 대상으로 학원 3개월 과정 정도? 될 것 같네요.
(뭐, 사실 3개월이나 걸리나 싶지만… 전공자는 일주일 이상 공부하면 평소에 전공공부 안한겁니다.)

국가 IT 자격증의 대표주자격인 자격증이 이 모양이니… 자격증으로 실력을 인증하기는 일단 틀렸고,
그렇다고 회사에 실력에 대한 면을 그냥 맡겨버리자니 옛날부터 지금까지 이런 비리가 있어 왔고…
그나마 생각할 수 있는 대안인 것이죠.
국가에서는 IT 전공자로 1차적으로 걸러내고(무엇보다 비리를 겨냥한 거름) 회사에서 2차적으로 쓸만한 사람을 채용하도록 기회를 준다면, 비리도 예방하고 회사에 채용권리도 있고 서로 괜찮은 것 같습니다.

이것도 어떻게 보면 특단의 조치입니다. 왜냐면, 비전공자 분들 중에서도 프로그래밍을 잘할 수도 있기 때문이죠. 하지만, (개인적인 생각이지만) 전 이것을 고려하더라도 잘 했다고 생각합니다.

산업기능요원 3년은 프로그래머 했는데 전공은 회계, 경영 등…
멀티플레이어가 되시겠다는 걸 말리고 싶지는 않지만… 거리가 먼 전공을 둘 다 잘하는 사람은 흔치 않습니다.

3년이란 시간이 짧은 시간은 결코 아니고, 일반적인 군 입대-제대 과정과도 이제는 기간 차가 꽤나 나는 상황인데, 굳이 첫 사회생활을 자신의 전공과 상관없는, 앞으로 하지 않을 것으로 시작할 필요는 없지 않겠습니까?

마지막으로 조금 수정을 바란다면, 전기/전자 관련 학과는 임베디드에 한하여 가능하게 한다면 괜찮은 해답이라고 생각합니다.(혹시 임베디드는 산업기능요원에서 전기/전자 분야가 따로 있던가요?)

설마 대학 간판, 학과까지 바꿔가면서 병역비리가 일어날 것인지… 아무튼 재밌어지네요.