2012년 6월 25일 월요일

안드로이드 EditText 주민등록번호 뒤6자리 자동 * 입력



String strCollectAmount1="";//보험료addComma에 사용되는 data
String strCollectAmount2="";//주민번호addComma에 사용되는 data



I_CARD_OWN_CD2.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
System.out.println("s>>>>>>>>>>>>>>"+s);
if(!s.toString().equals(strCollectAmount2)){
if(s.length() > 0){ //주민번호 m_temp_OwnNum[1]에 입력
if(s.length() == m_temp_OwnNum[1].length()+1){
m_temp_OwnNum[1] += s.charAt(s.length() -1); 
System.out.println("하나씩"+m_temp_OwnNum[1]);
}else{
m_temp_OwnNum[1] = s.toString();
System.out.println("한번에 "+m_temp_OwnNum[1]);
}
}else{
m_temp_OwnNum[1] = "";
}
strCollectAmount2 = Util.juminChange(s.toString());//뒷자리 임시 (*들어감)
I_CARD_OWN_CD2.setText(strCollectAmount2);
Editable e = I_CARD_OWN_CD2.getText();
Selection.setSelection(e, strCollectAmount2.length());
}
if(I_CARD_OWN_CD2.length()==7){
Data.setI_OWNER_NO(m_temp_OwnNum[0]+m_temp_OwnNum[1]); // 주민번호 저장
System.out.println("setI_OWNER_NO>>>>>>>>>>>>>>"+Data.getI_OWNER_NO());
}
}

@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {}

@Override
public void afterTextChanged(Editable s) {}
});







/**
* 주민번호 뒷자리 '*' 표 처리

* @param value
* @return
*/
public static String juminChange(String value) {
String juminBefore_value = value;
String juminAfter_value = "";


if (juminBefore_value.length() <= 0)
return "";


for (int i = 0; i < juminBefore_value.length(); i++) {
char temp = juminBefore_value.charAt(i);


if (i >= 1) {
temp = '*';
}


//System.out.println("chart(" + i + ") ----> " + temp);


juminAfter_value += temp;
}


return juminAfter_value;
}

안드로이드 EditText 입력 할 때마다, 콤마 자동 추가


String strCollectAmount ="";   // --> 입력할때마다 문자가 채워지므로 첨엔 "" 해도 된다.

// EditText 입력 할 때마다, 콤마 자동 추가
final EditText f230_REALMONEY_TD = (EditText) findViewById(R.id.f230_REALMONEY_TD);
f230_REALMONEY_TD.setInputType(InputType.TYPE_CLASS_NUMBER);


f230_REALMONEY_TD.addTextChangedListener(new TextWatcher() {
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}


public void onTextChanged(CharSequence s, int start, int before,
int count) {
// 숫자가 추가되었을때에 Comma를 추가해준다.
if (!s.toString().equals(strCollectAmount)) {
// 숫자에 Comma를 추가해주는 메소드 호출
strCollectAmount = Util.makeStringWithComma(s.toString()
.replace(",", ""), true);
f230_REALMONEY_TD.setText(strCollectAmount);
Editable e = f230_REALMONEY_TD.getText();
// 커서의 위치가 현재 입력된 위치의 끝쪽에 가게 해야 한다.
Selection.setSelection(e, strCollectAmount.length());
}
}


public void afterTextChanged(Editable s) {
}
});


/**
* 문자열에 통화적용을 위해 컴마를 표기한다.

* @param string
*            통화적용을 위한 문자열
* @param ignoreZero
*            값이 0일 경우 공백을 리턴한다.
* @return 통화적용이 된 문자열
*/
public static String makeStringWithComma(String string, boolean ignoreZero) {
if (string.length() == 0) {
return "";
}
try {
if (string.indexOf(".") >= 0) {
double value = Double.parseDouble(string);
if (ignoreZero && value == 0) {
return "";
}
DecimalFormat format = new DecimalFormat("###,##0.00");
return format.format(value);
} else {
long value = Long.parseLong(string);
if (ignoreZero && value == 0) {
return "";
}
DecimalFormat format = new DecimalFormat("###,###");
return format.format(value);
}
} catch (Exception e) {
e.printStackTrace();
}
return string;
}

2012년 6월 22일 금요일

안드로이드 StartForActivityResult 쓰는 방법


[Activity A 사이드]
private static final int B_ACTIVITY = 0;

public void onCreate(){
...
Intent a_i = new Intent(this, B.class);
startActivityForResult(a_i, B_ACTIVITY);
...}

public void onActivityResult(int requestCode, int resultCode, Intent intent){
super.onActivityResult(requestCode, resultCode, intent);

switch(requestCode){
case B_ACTIVITY: // requestCode가 B_ACTIVITY인 케이스
if(resultCode == RESULT_OK){ //B_ACTIVITY에서 넘겨진 resultCode가 OK일때만 실행
intent.getExtras.getInt("data"); //등과 같이 사용할 수 있는데, 여기서 getXXX()안에 들어있는 파라메터는 꾸러미 속 데이터의 이름표라고 보면된다.
}
}
}

[Activity B 사이드]

Bundle extra;
Intent intent;

onCreate(){
...
extra = new Bundle();
intent = new Intent(); //초기화 깜빡 했다간 NullPointerException이라는 짜증나는 놈이랑 대면하게 된다.
...

extra.putInt("data", 1);
intent.putExtras(extra);
this.setResult(RESULT_OK, intent); // 성공했다는 결과값을 보내면서 데이터 꾸러미를 지고 있는 intent를 함께 전달한다.
this.finish();
}

2012년 6월 21일 목요일

Java에서 CharSequence 를 String 으로 변환하는 방법

String s = "a string";
CharSequence cs = new StringBuffer("a string");
String s2 = cs.toString();
System.out.println("s.equals(s2): " + s.equals(s2));
System.out.println("s == s2: " + (s == s2));

2012년 6월 19일 화요일

안드로이드 간단한 AlertDialog 띄우기


(예시)


new AlertDialog.Builder(D131.this)
.setMessage("취소하시겠습니까?")
.setPositiveButton("아니오", new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
})
.setNegativeButton("예", new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
_gData.setD_FinishFlag(true);
finish();
}
});






맨날 까먹는다..;;
버튼 하나씩만 클릭되도록 만들기


"동의" 와 "동의안함" 과 같은 버튼이 있는 경우, 
selector로 on과 off 두개의 이미지를 입히게 됨


1. "동의" selector

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/yes_on" android:state_pressed="true"/> 
    <item android:drawable="@drawable/yes"/> <!-- default -->
</selector>




2. "동의안함" selector

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/no_on" android:state_pressed="true"/> 
    <item android:drawable="@drawable/no"/> <!-- default -->
</selector>





onClick 이벤트 시 "동의"가 눌러지면 "동의안함"이 안되도록 
(반대의 경우도 같은 방식으로) 만들어야함



case R.id.f300_button4: // 동의
((Button) findViewById(R.id.f300_button4)).setBackgroundResource(R.drawable.yes_on);
((Button) findViewById(R.id.f300_button5)).setBackgroundResource(R.drawable.no);
m_sAgreeFlag = true;
break;
case R.id.f300_button5: // 동의 안함
((Button) findViewById(R.id.f300_button5)).setBackgroundResource(R.drawable.no_on);
((Button) findViewById(R.id.f300_button4)).setBackgroundResource(R.drawable.yes);
m_sAgreeFlag = false;
break;

아 왜 항상 setBackgroundResource가 생각이 안날까..;;

2012년 6월 18일 월요일

자바 int -> char 변환

예를 들어 int a = 1 이라고 했을 때
char형으로 형변환하는 것이 아닌 문자 1로 바꾸는 방법

Java 공부를 하다가 int 값을 "문자열"로 변경하는 방법은 인터넷에서 검색이 많이 되는데
유독 int값 그대로를 문자로 바꾸는 방법이 안나와서 약 15분간 삽질하다가 알아낸거라 
잊지 않기 위해 포스팅을 합니다.

java.lang 패키지의 Character 클래스의 메소드로 forDigit()가 있습니다.
API문서에서 정의하는 forDigit()의 설명을 보면

public static char forDigit(int digit, int radix)

Determines the character representation for a specific digit in the specified radix. If the value of radix is not a valid radix, or the value of digit is not a valid digit in the specified radix, the null character ('\u0000') is returned.

The radix argument is valid if it is greater than or equal to MIN_RADIX and less than or equal to MAX_RADIX. The digit argument is valid if 0 <=digit < radix.

If the digit is less than 10, then '0' + digit is returned. Otherwise, the value 'a' + digit - 10 is returned.


예제를 들어 설명하자면

  1. int a = 1;  
  2. char c = a;  
  3. System.out.println(c);  
  4.   
  5. 결과 : ^A  

를 할 경우 c의 값을 출력하게되면 ASCII값 1에 해당하는 ^A가 됩니다.
하지만 forDigit() 사용하게되면 문자 1에 해당하는 ASCII 코드 값인 49를 반환하게 됩니다.

  1. int a = 1;  
  2. char c = Character.forDigit(a, 10);  
  3. System.out.println(c);  
  4.   
  5. 결과 : 1  



갑자기 왜 뜬금없이 int형을 문자형 char로 변경하는 것에 관심을 가지게 되었냐면

  1. FileOutputStream fos = new FileOutputStrea("test.txt");  
  2. for(int i = 0; i < 10; i++)  
  3. {  
  4.     fos.write(i);  
  5. }  

test.txt에 0에서부터 9까지 기록하게 하기위함이었는데
막상 결과는 다르게 나와서 해결하려고 보니............


안드로이드 EditText 키보드 강제 내리기 올리기


액티비티가 처음 실행되었을 경우,
또는 EditText에 어떠한 값을 입력한 후 이벤트 발생 버튼을 누르기 위해선 키보드가 내려간다.
이때 이벤트 처리가 완료 된 후 다시 자동으로 키보드를 올려주고싶을때 사용.

반대로 키보드를 없애는것도 가능하다.

  ---------------------------------------------------------------------------------------------------------

EditText mTitle = (EditText)findViewById(R.id.etTitle);
 
InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
 
//키보드를 띄운다.
imm.showSoftInput(mTitle, 0);
 
//키보드를 없앤다.
imm.hideSoftInputFromWindow(mTitle.getWindowToken(),0);

--------------------------------------------------------------------------------------------------------



지식관리시스템 (KMS) 이란?


KMS?
지식관리그리고 지식경영은 피터드러커 (Peter Drucker)가 그의 저서  3의 물결에서 지식의 중요성을 강조하기 시작한 이래로 의미있는 자원으로서 관라의 필요성이 증대되기 시작하였습니다국내의 경우지식관리시스템(Knowledge Management System)이 주목을 받기 시작한 것은 IMF 막바지 무렵이었는데요대형 정리해고로 수많은 인력이 회사를 떠나게 되면서 그들이 가지고 있던 지식자원도 함께 떠나고 기업의 지식자원이 소실된다는 점에서 대량 정리해고의 문제점을 지적하기도 했습니다비단 IMF와 같이 대량 정리해고가 필요한 상황이 아니더라도 지식관리의 중요성은 기업의 일상속에서 지속적으로 발견되곤 합니다가령 생산관리업무를 총 담당하고 있던 김대리가 일주일 이상의 병가를 냈다면일반적으로는 관리자 없이 그동안 해오던 식의 업무를 지속하게 되며심한 경우생산관리 업무 자체가 멈추어 버리는 경우도 허다합니다이러한 현상은 생산관리에 대한 대부분의 지식이 김대리에 집중되어 있기 때문입니다특히 관련 지식과 노하우가 김대리의 머리속에만 존재하고 있다면 더더욱 김대리의 장기적인 부재를 대체할 방법이 없게 됩니다이러한 상황을 미연에 방지하고또한 부재중인 인적자원을 효율적으로 빠르게 대체할 수 있으면서도 김대리만 알고 있는 생산관리와 관련된 노하우를 모든 사람들이 공유할 수 있도록 하기 위한 시스템이 바로 지식관리시스템(KMS) 입니다.
하지만 그렇다고 지식관리 시스템이라고 해서 수억원이 들어간 IT솔루션을 떠올린다면 굳이 그런 것 만은 아닙니다지식관리시스템을 구성하는 IT 솔루션의 예로는 다음과 같은 것들이 있습니다.

l  인터넷 (지식검색서비스)
l  MIS( Management Information System)
l  전자도서관
l  E-MAIL

KMS가 어떤것인지 눈치를 채셨나요? KMS의 실체를 알고나면 사실 너무 평범한 시스템들이어서 오히려 맥이 빠져버립니다. KMS 전문가들은 KMS는 특정 시스템을 지칭하는 말이 아닌회사정책에 가깝다” 고들 표현하곤 합니다미국의 경영학자 Tom Davenport 역시, “지식관리 프로젝트의 2/3 이상의 노력을 비기술적인 부분에 투입해야 한다만약 1/3이상의 노력을 기술구현에 쏟는다면 사실상 KMS 운영에 필요한 컨텐츠조직문화동기부여등을 무시하게 될 수 있다.”라고 언급했습니다사실, KMS를 하려고만 하면 게시판 한 두개만 가지고도 할 수는 있습니다그것을 뒷받침 해주는 회사정책이 어떤 상황이냐그리고 회사 임직원들의 사고방식이 어떠하냐에 대한 질문이 오히려 더 중요한 셈입니다.

WHY KMS?
그렇다면지식관리시스템은 왜 필요한 것일까요일반적으로 기업들은 지식을 체계적으로 관리하고그것을 바탕으로 지식경영을 완성하기 위하여 지식관리시스템을 도입하곤 합니다여기에서 지식관리란, “기업의 목표달성을 위하여 조직 내외에 산재해 있는 지식을 획득하고 조합하여 체계적으로 공유시키는 제반 행위를 말합니다지식관리에 관하여 자주 인용되곤 하는 가트너그룹에 의하면 지식경영이란 기업의 지적 자산을 생성채집구조화접근 및 사용을 하기 위한 관리방법론으로데이터베이스문서업무규정 및 절차뿐만 아니라 직원들 머리속에 담겨있는 전문지식이나 경험들까지 포함하는 것이다” 라고 하였습니다확실히지식이란 것은 특정폴더나 서류박스 안에 담겨있는 것은 아니죠위로 CEO로부터 아래로 청소부에 이르기까지 전 임직원의 머리속에 담겨있는 것이 지식노하우입니다이것을 꺼내어 체계적으로 공유하고자 하는 것이 바로 지식관리입니다그리고 지식경영이란, “지식관리활동을 기업의 비즈니스에 연결함으로써 어떠한 가치를 창출해 내는 일련의 과정을 말합니다결과적으로 말하자면기업이 지식관리시스템을 도입하는 이유는 개개인의 머리속에 담겨있는 지식과 노하우를 꺼내어 체계적으로 공유관리하고그것을 이용하여 기업만의 고유한 가치를 창출하기 위함이라고 볼 수 있습니다.


일본의 유명한 경영학자 노나카 이쿠지로는 기업이 관리하여야 할 지식을 Tacit Knowledge(암묵적 지식)와 Explicit Knowledge(분명한 지식)로 구분하고기업구성원이 가지고 있는 Tacit Knowledge Explicit Knowledge으로 전환하여 공유하여야 한다고 강조하였습니다. Tacit Knowledge는 문서화되지 않은 지식들을 말하는데주로 개인적인 경험숙련도기업문화신념가치 등등을 포함합니다. Tacit Knowledge는 개인의 무의식에 깊이 관여하여 개개인의 행동패턴에 큰 영향을 끼치기도 하며 전문성을 띠고 있으므로보다 깊은 수준의 지식을 포함하고 있다는 특징이 있습니다반면에 쉽게 학습하거나다른 사람에게 전달하기 어렵다는 단점도 포함하고 있습니다. Explicit Knowledge의 경우주로 문서화된 지식들을 말하는데주로 문서데이터매뉴얼프로그램 등등을 포함합니다. Explicit Knowledge는 개인적이라기 보다는 기업구성원 전체와 관련된 지식의 성향이 강하며학습하거나 지식의 공유가 수월하고 장기적인 보관에 용이하다는 장점이 있는 반면에원치 않는 사용자가 취득한 경우 보안문제가 발생할 수 있으며또한 지식을 문서에 기록해야 하므로 Knowledge의 생성이 번거롭다는 단점이 있습니다.





 
그렇다면 기업들은 KMS를 왜 도입하려고 하는 것일까요대한상공회의소의 발표자료에 따르면기업들은 주로 KMS를 통하여 효율성 및 생산성의 향상 (51.7%)과 기업가치증대(12.8%)를 기대하고 있다고 합니다또한 기업들이 중점적으로 관리하고 있는 지식의 종류로는 경험이나 노하우(42.4%)’가 압도적인 비중을 차지하고 있는 것으로 나타났습니다반면신기술동향(17.3%)이나 연구개발(11.3%)등은 가장 낮은 점수를 받아, KMS가 단순히 자료를 공유하기 위한 시스템인 것은 아니라는 사실을 반증하고 있습니다결론적으로 볼 때기업들은 KMS를 통하여 업무자료보다는 개개인이 보유하고 있는 경험과 업무노하우를 공유하려 하고 있으며그 결과로 업무 효율성과 생산성의 향상을 기대하고 있다고 판단할 수 있습니다.
    
(참조자료 : http://www.edaily.co.kr/news/NewsRead.edy?newsid=01692486579849576&SCD=DC21&DCD=A00203)

KMS가 없으면?
그렇다면 KMS가 도입되어 있지 않은 기업의 현실은 어떨까요? KMS에 대하여 준비를 하고 있지 않은 수많은 기업들의 경우 약 90%이상의 지식과 노하우가 Tacit Knowledge로 임직원들의 머리 속에 보관되어 있는 것으로 보여집니다또한 업무처리방식이 매뉴얼을 통하여 체계적으로 정리되어 있지 않은 채구두방식으로 업무의 인수인계가 이루어지고 있는 경우가 많습니다때문에 갓 입사한 신입사원이 배정된 업무를 습득하는 데에만도 6개월 이상의 긴 시간이 소요되곤 합니다  
또한 대부분의 팀이 팀원을 타이트하게 운영되고 있어 (1 1부문 담당해당 인력을 잃게 되면 업무에 큰 차질이 생길 수 있습니다실제로 1997년도 IMF 당시정리해고와 함께 기업들마다 소실된 경험지식이 상당히 많은 것으로 알려진 바 있습니다얼마전에 만난 모 중소기업 사장님도 저에게 직원이 한명이라도 그만둔다고 말하는 순간 타격이 크다” 라고 말씀하시더군요이러한 현상 역시 개개인이 알고 있는 노하우와 업무관련 지식들이 KMS 데이터베이스로 백업되어 있지 않았기 때문입니다현재, KMS를 가지고 있지 않은 대부분의 기업들 (특히 중소기업)의 인력구조는 직원의 손실과 함께 상당히 많은 양의 경험데이타를 잃게 되어 있습니다물론 직급이 높을수록 더욱 손실률이 커집니다. 
KMS의 부재는 임직원의 업무에도 큰 불편을 주곤 합니다대부분의 노하우가 인트라넷에 공개되어 있지 않아직원들은 사소한 질문들도 모두 직접 동료들에게 전화를 걸어 물어보거나 자료가 필요할 때마다 담당자에게 자료를 요청해야 하는 상황이 발생하곤 합니다대답을 해주는 당사자의 입장에서는 같은 질문의 전화를 수십차례 받을 수 밖에 없는 입장이며전화를 걸어야 하는 직원은 정확하지 않은 정보에 답답함을 느낄 수 밖에 없습니다.

또한, KMS를 시행하지 않은 상당히 많은 중소기업들은 공유된 네트워크 폴더나백업시스템등을 활용하지않은 채 업무관련 데이터를 개인PC에 보관하고 있는 것으로 나타났습니다. 이것은 업무데이터가 공유되지 않고 있다는 것을 의미합니다. 더욱이 데이터를 보유한 해당 직원이 회사를 떠나거나 노트북이 고장나게 되면 데이터 전체를 잃게 될 가능성이 크기 때문에 매우 위험합니다.
게다가 업무내용이 명시되어 있지 않기 때문에 특정 업무의 담당자가 누구인지, 혹은 누가 어떤 업무를 하는지 파악하기가 쉽지 않습니다. 또한 직원 대부분이 스마트폰을 보유하고 있음에도 불구하고 스마트폰을 커뮤니케이션 도구로 사용하고 있는 경우도 희박합니다. 이렇게 되면 업무량 대비 직원수가 적은 팀의 경우 걸려오는 전화를 응대하는 것 만으로도 충분히 업무시간의 대부분을 소진하게 됩니다. 이러한 KMS부재로 발생하는 고질적인 문제들은 단기적으로는 업무의 효율성을 현저하게 떨어뜨리며 장기적으로는 회사의 성장가능성을 낮추는 요인이 되고 있습니다.

모범사례마힌드라 사띠암
인도의 IT기업인 마힌드라 사띠암의 경우우리나라 지식검색서비스와 유사한 K-Window와 전문지식블로그서비스인 Xpert를 운영하고 있습니다이 두가지 서비스는 모두 제가 사띠암에서 근무하던 당시에 제작된 것으로 제가 직접 참여했던 프로젝트입니다. K-Window는 기본적으로 우리나라의 네이버 지식인 서비스와 유사합니다검색엔진을 기반으로 제작되었으며검색결과로 어느 지사의 누가 어떤 프로젝트 관련 업무를 진행중” 여부까지 모두 파악이 됩니다이렇다보니 사띠암에서는 신입사원이 업무파악을 하거나 혹은 회사내의 이벤트 등을 알아보기 위하여 선배들을 찾아다니면서 물어볼 필요가 없습니다. K-Window에서 검색하면 되니까요반대로 회사의 입장에서도 신규프로젝트에 적합한 인재를 찾는데 용이해졌습니다전국에 흩어져있는 수만명의 직원들 중정확히 어떤 분야에 경험이 있는 인재를 찾으려면 K-Window에서 검색해보는 것이 가장 빠르기 때문입니다. 
X-pert K-Window와는 약간 성격이 다릅니다. K-Window가 회사내에 보유중인 전반적인 지식을 검색하기 위한 엔진이라면 X-Pert는 사내에 보유중인 전문가들이 중심이 되어 운영하는 사내블로그에 더 가깝습니다그렇다고 블로그라고 해서 SERI(삼성경제연구소)처럼 기술적인 내용들이나 경영학적인 내용들만 올라오는 것은 아닙니다자신의 경험과 의견안건등이 종합되어 읽을거리와 생각할 거리가 있는 글들이 꾸준히 업로드 되고전 직원이 그 글을 구독하게 됩니다.

모범사례삼성SDS 아리샘
물론 국내에서도 충분히 사례를 찾아볼 수 있습니다삼성그룹의 KMS를 담당하기 위하여 SDS가 개발한 아리샘 (ARISAM: Acknowledge Reusable Infomation in SAMsung)의 경우국내의 열악한 정보산업 환경을 극복하고 시장개방에 따른 선진업체 등과의 경쟁에서 우위를 점하기 위해 몇 명의 우수한 사원이나 경영진에게 기업경영을 의존하는 대신 직원 모두의 지식 및 노하우를 공유함으로써 기업 경쟁력을 극대화한다는 목표를 내세워 지난 1997년도에 개발되었습니다그러나 아리샘1.0은 삼성SDS측에서도 실패작이라고까지 할 정도로 제대로 운영되지 못했습니다그만큼 지식관리에 대한 직원들의 인식이 확고하지 않았고 지식공유에 대한 동기부여가 되어있지 않았던 것입니다이에 따라 직원들에 대한 설문조사를 전면적으로 실시하고 선진업체의 자료를 분석하여 시스템을 재설계 하였습니다이렇게 새로이 탄생한 아리샘2.0에는 흥미로운 기능이 추가되었습니다직원들이 곤란을 겪는 사안을 아리샘 지식서비스에 올리면 관련 경험이 있는 다른 직원이 대답을 해줍니다네이버 지식검색서비스과 기본적으로 같은 패턴입니다이렇게 전달된 답변은 질문자에 의하여 3단계로 평가를 받습니다그리고 그 결과에 따라 1000~5000아르 정도를 포인트로 적립받습니다. 1아르는 1.3원 정도로 환산되며 현금과 동일하게 쓸 수 있습니다결국 삼성 아리샘이 고안해낸 방법은 동료직원들의 업무를 도와주고 자신의 능력을 인정받는 동시에 돈까지 벌 수 있는 일석삼조의 시스템을 구축해낸 셈입니다현재 아리샘에는 376명의 전문가가 활동중이며 경영 트렌드기술 팁업무이노베이터 등 4개 분야, 79개 세부 항목에 걸쳐 월 평균 3000여 건의 신규 지식이 등록되고 있습니다또한 설문조사에서 85%의 임직원이 아리샘이 업무에 매우 도움이 되며 직원당 월 평균 12건의 지식을 업무에 활용하고 있다고 답했다고 합니다.

기타사례: BP (British Petroleum)
BP의 경우 KMS를 위한 시스템을 전혀 구축하지 않은 상태에서도 KMS를 효과적으로 운영하고 있기로 유명한 기업입니다. BP의 경우데이터보다는 경험의 전파를 강조하고 있습니다예를 들어한 원유 시추 현장에서 경험하지 못한 심각한 장비문제가 발생하면 전 세계 원유시추현장을 화상회의로 연결합니다그리고 그 문제를 해결한 경험이 있는 기술자가 문제를 해결하고 그 방법을 공유하게 됩니다.

KMS, 어떻게 만들면 좋을까?
그렇다면 KMS를 어떻게 구축하면 좋을까요? KMS가 구축되는 기본적인 과정은 다음과 같습니다.
 
생성--> 수집 --> 축적 --> 공유

첫째로생성은 개개인이 자신이 알고 있는 지식이나 노하우를 글이나 그림사진등의 자료를 동원하여 생성해내는 과정입니다머리로 알고 있는 지식을 글이나 그림으로 표현해내야 하기 때문에 가장 어려운 작업이기도 하면서 동시에 임직원 전체의 동의와 협력이 필요한 작업이기도 합니다둘째수집은 개개인이 생성해낸 자료를 모아서 DB에 저장하는 과정입니다이 과정에는 게시판이나 그룹웨어 등의 방법이 동원됩니다하지만 굳이 그룹웨어등의 솔루션을 사용하지 않더라도 페이스북이나 트위터혹은 웹블로그등을 이용하여 자료를 보관할 수 있습니다셋째 축적은 수집된 자료를 의미가 있는 자료로 전환하는 과정입니다개개인이 자신의 의견이 담은 글을 단순히 DB에 담아놓기만 하면 그 중에는 가치가 있는 자료와 쓰레기자료가 섞여있을 수 있습니다따라서 이 자료들을 적절하게 분류할 수 있는 장치가 필요 할 수 있습니다규모가 큰 기업의 경우 이 과정을 전담하는 부서를 별도로 운영하기도 합니다넷째공유는 자료의 중요도에 따라 적절한 접근 권한을 부여하여 관계자에게 공유하는 과정입니다특히 공유되어야 하지만 대외비로 설정된 자료들에 대하여 접근 권한이 있는 사람들을 선별하여 권한을 설정해주는 단계입니다.
이미 언급하였듯, KMS라는 것은 고가의 IT시스템이라기 보다는 지식을 공유하고자 하는 회사의 정책이나 의지에 가깝습니다삼성의 아리샘 1.0이 실패로 끝난 이유도 사실상 직원들의 참여를 이끌어내지 못했기 때문입니다아리샘의 사례로 볼 때, “우리의 실정에 맞는 시스템” 그리고 직원들의 참여를 유도할 수 있는 시스템을 구축하는 것이 가장 중요한 것으로 보여집니다.
그것을 해결하기 위한 방법은 여러가지가 있습니다우선삼성의 아리샘 2.0이 사용한 방법인 지식공유에 대한 보상” 제도를 고려해 볼 수 있습니다직원들이 게시한 지식자료나 아이디어또는 질문에 대한 답변에 질문자와 다른 동료들이 평점을 매길 수 있도록 설계한 뒤그 지식의 가치에 대하여 인센티브를 지급하는 방식입니다삼성의 경우건당 1000~5000아리 ( 1300 ~ 6500가량의 현금으로 쓸 수 있는 포인트를 지식 제공자에게 보상하고 있습니다. 
이러한 방법은 네이버 지식검색과 유사한 방식의 Q/A 서비스와 연동되어 운영할때 효과를 발휘합니다하지만 그러한 방법이 오직 지식검색서비스에서만 작동하거나 또는 그러한 시스템을 구축해야만 하는 것은 아닙니다블로그를 활용하거나 심지어는 트위터 혹은 페이스북등을 이용하는 방법도 있습니다예를들면경영관리팀이 운영하는 블로그에 2012년 사업계획과 관련된 상세한 정보와 메뉴얼등을 공유함으로써 관련 작업을 처리하는 직원들이 일괄적으로 상세정보와 함께업무처리 현황을 실시간으로 얻을 수 있게 됩니다 삼성전자는 2006년부터 블로그를 통하여 아이디어나 노하우를 공유하고 있으며, IBM의 경우 2006 11사내블로그로부터 신규사업 아이디어를 10개 획득했다고 발표하기도 했습니다.
(참조자료 : 
http://www.ddaily.co.kr/news/news_view.php?uid=36441)
블로그를 커뮤니케이션 도구로 이용하는 방안의 장점으로는 팀별로 장문의 공지사항이나 알림글 또는 작업 매뉴얼등을 손쉽게 게시할 수 있다는 점이 있습니다또한 블로그의 성격상 자유로운 글쓰기를 허용하기 때문에 KMS나 인트라넷등의 시스템보다 거부감이 적다는 장점도 있습니다단점으로는 게시물을 작성하는데 시간이 많이 소요된다는 점입니다트위터를 사용할 경우짧은내용의 공지사항등을 게시하거나 관련자들에게 실시간으로 전송할 수 있다는 장점이 있습니다반면에트위터는 개방형 플랫폼이기 때문에 대외비 성격의 자료를 게시하기 어렵다는 단점이 있습니다성격이 다른 두가지 플랫폼을 모두 만족하는 것은 페이스북의 그룹 서비스 입니다그룹을 이용하여 관계자들만 선별적으로 받아들일 수 있으며장문과 단문의 내용을 모두 게시할 수 있습니다단점으로는굳이 페이스북으로 로그인을 하지 않으면 게시물을 열람하기 어렵다는 점이 있습니다. 
블로그나 트위터페이스북 등을 주요 지식공유와 커뮤니케이션 도구로 사용함으로서 발생하는 장점도 분명합니다예를 들면경영관리팀의 경우, “사업계획 전산입력이 안돼요!” 라는 질문에 대하여 연도입력을 잘못하셨네요” 라는 대답을 10건 넘게 응답해드린 기억이 있습니다이러한 Q/A 또는 사용메뉴얼등이 웹에 게시되어 있다면같은 오류로 발생하는 건에 대하여 일괄적인 응대가 가능해 집니다마찬가지로 다른 문제점에 대하여서도 처리가 가능한 것입니다. 
커뮤니케이션을 위해서 해당 담당자와 통화가 될때까지 전화를 걸어대는 방법 대신 사내 메신저 등을 이용하여 메시지등을 남기는 방법을 이용할 수 도 있습니다. 
또한 작업된 자료 파일을 모두 온라인에 보관하여자료가 공유될 수 있도록 하는 것도 중요합니다. (선별적 권한부여 필요하지만 무엇보다도 중요하고 우선적으로 처리되어야 할 사항은 바로 매뉴얼제작입니다갑자기 직원 중 누군가가 병가를 내거나 하는 등의 이유로 자리를 비우게 되었을 때누구라도 손쉽게 그 자리를 대체할 수 있으려면 상세하게 기술된 업무 매뉴얼이 필수적으로 필요합니다이 업무메뉴얼에는 단순히 처리해야 할 업무의 내용뿐 아니라 업무를 처리하면서 생각해보아야 할 문제들과 개인적인 노하우그리고 왜 이런식으로 작업이 처리되었는지를 알려주는 비하인드 스토리까지 담겨있으면 가장 좋습니다또한 매뉴얼과 업무일지에는 이 정보를 누가 알고 있는가?”를 비롯하여, “왜 업무가 이렇게 처리되었는가?”, “이 자료를 언제누가 만들었으며 가장 최근에 작업한 사람은 누구인가?”, “이 작업은 어떤식으로 처리하는게 가장 효율적인가?” 등등을 담는 것이 좋습니다. 
충분히 꼼꼼히 작성된 업무메뉴얼이 어느정도 완성되면그것을 취합하여 전 임직원이 열람할 수 있도록 공유하고 서로의 커뮤니케이션에 활용될 수 있도록 지원하여야 합니다. 
결론적으로 보면지식관리시스템(KMS: Knowledge Management System)은 고가의 IT솔루션이라기보다는 회사의 정책에 가깝다고 볼 수 있습니다그리고 KMS는 개개인이 가진 지식과 노하우를 저장하고공유하여 결과적으로 임직원간의 커뮤니케이션을 증진시켜업무의 효율성을 높이는데 목적이 있다고 볼 수 있습니다흔히들 21세기 경영환경은 한치앞도 내다 볼 수 없는 암흑이라고 표현합니다이러한 경영환경 때문에경영학자들은 위대한 리더의 존재를 더욱 부각하기도 하면서 동시에 지식경영 정책 없이 한 사람의 판단으로 경영을 이끌어가는 것이 얼마나 위험한 일인가를 돌아보기도 합니다. KMS는 개개인의 지식과 노하우를 교류하면서 그것을 기반으로 경영자의 결정에 도움이 되는 구조를 가지고 있습니다.
 < 저작권자: 손무영@MBA7.kr >