2017년 11월 26일 일요일

일본어 단어정리

contract
カァントゥラァクトゥ | コォントゥラァクトゥ

estimate
エスタァマァトゥ

DNS 【 Domain Name System 】
燚 불 모양 일
驫 떼지어 달릴 표

사상
しそう [思想]
어떠한 사물에 대하여 가지고 있는
구체적인 사고나 생각.

とつげき[突撃]
공격 전투의 마지막 단계에 적진으로
돌진하여 공격함. 또는 그런 일.

腹黒い

くりこす[繰(り)越す] 이월하다, 차례로 다음으로 넘기다
よくげつ[翌月] 익월; 다음달.(↔반의어前月)

くりこす[繰(り)越す] 이월하다, 차례로 다음으로 넘기다
よくげつ[翌月] 익월; 다음달.(↔반의어前月)

UML

도조 히데키
국제 우호협정
지미 두리틀

도쿄 상경

こんしんかい[懇親会] 간친회.

御社 おんしゃ  귀사; 상대의 회사나 신사(神社) 등을 높여 부르는 말.
きしゃ[貴社]귀사(상대의 회사나 신사).
へいしゃ[弊社]폐사(자기 회사의 겸칭).

誘惑 Yūwaku 유혹
O nīchan お兄ちゃん
敏感 Binkan 민감

文脈 Bunmyaku 문맥
妥当 Datō 타당
さらす[晒す·曝す] 햇볕에 쬐다;또, 비바람을 맞히다,
바래다, 여러 사람의 눈에 띄게 하다

くりこす[繰(り)越す] 이월하다, 차례로 다음으로 넘기다
よくげつ[翌月]

익월; 다음달.(↔반의어前月)
ふせつ[敷設·布設] 부설.
しく[敷く] 깔다,
널리 깔리다, 퍼지다

しこうさくご[試行錯誤] 시행착오.
りんきおうへん[臨機応変] 임기응변.

Transport 차량, 이동 (방법)
Telemetry   텔레미터법, 원격 측정
プロトコル 프로토콜, (조약의) 의정서, 컴퓨터간의 데이터 통신을 원활히
 하기 위해서 정해 놓은, 통신 규약.

アンテナ(안테나)정보를 재빨리 능숙하게 포착하는
 능력. 촉각. 더듬이.

きょうい[脅威] 위협.

ふせん[付箋·附箋] 부전;

だいきぎょう[大企業] 대기업.(↔小企業)

きぼ[規模]  규모.

こうぼう[工房]공방; 조각가·화가·공예가가 일하는 방. (=アトリエ)

おしつける[押しつける·押し付ける]억누르다;강압하다,
강제로 시키다;강요하다きょうよう[強要] 강요.(=無理強い)

非営利 ひえいり
비영리 Institute US [|ɪnstɪtu:t]  (특히 교육・전문 직종과 관련된)기관[협회]

さくてい[策定] 책정.
しゅほう[手法] 수법; 기교.(=テクニック)
じゅうらい[従来] 종래.(=従前)
ちゃくもく[着目] 착목; 주목; 착안.
きばつ [奇抜] 기발.

ここのつ[九つ] 아홉; 또, 아홉 살.
たね[たね·種]종자;씨,원인, 거리;재료

じゅんかん[循環]  순환.
つましい[倹しい]검소하다,알뜰하다.
せんえつ[僭越]참월; 분수에 지나친 일을 함; 또, 그러한 태도.(=出しゃばり)

せんえつながら [僭越ながら]외람되지만.
つつましい[慎ましい]조심성스럽다;

조신하다; 얌전[음전]하다; 수줍다.
みみざわり[耳障り]귀에 거슬림.

ばれい[馬齢] 자기 나이를 겸손하게 이르는 말.
ばれいをかさねる [馬齢を重ねる](헛되이) 나이만
먹다.(=馬齢を加える)

きさく[気さく]담백하고 상냥함; 싹싹함.(=気軽)きがる[気軽]
사물에 구애치 않고, 선뜻선뜻 처신하는 모양: 소탈함; 선선함.(=きさく)↔...きがおけない
[気が置けない]마음이 쓰이지 않다; 스스럽지 않다; 무간하다.かかりつけ[掛(か)り付け]
언제나 그 의사의 진찰·치료를 받는 일.

かかり付けの医者 단골 의사

いきつけの喫茶店늘
다니는 다방

うしろがみをひかれる[後ろ髪を引かれる]뒷머리를 끌리는 것 같다(미련이 남아서
떨쳐 버릴 수 없다).

ひっかかる[引っ掛かる]걸리다, 무엇에 걸려 떨어지지 않다, 걸려들어
도중에 방해받다

みれん[未練]미련;단념하기 어려움, 미숙;아직 숙련되지 않음

たちきれる
[断(ち)切れる]たちきる[断(ち)切る]끊다; 잘라 버리다.[가능형]たちき-れる[하1단 자동사]

悲喜(ひきこもごも)至る(いたる) 희비가 엇갈리다

多摩川たまがわ新丸子しんまるこ武蔵小杉
むさしこすぎ元住吉 もとすみよし綱島 つなしま大倉山 おおくらやまかんこ실제로 할수잇는것을하자자이센

常盤 ときわ 영구불변

勝田 かつた 이바라키현 북부의 공업도시욧츠도

로나가타쵸에도카와쿠시이나쵸히가시나
가사키에코다토시마엔사쿠라다이
구이구이

스소구다루오모테우라용고키우치아와세 산카이하브하가유이

쿠시하칭 串八珍

インタラクティブ
内蔵 ないぞう
インタプリタ型容易 ようい
発揮 はっき
協調 きょうちょう
適合素朴

そぼく初歩 しょほ
多能性 たのうせい

HashMap

HashMap<String,String> hmap = HashMap<String,String>();
hmap.put("key1","val1");
hmap.put("key2","val2");
hmap.put("key3","val3");

String[] keys = hmap.keySet().toArray(new String[0]);

for(int i=0;i<keys.length;i++){
 String key = keys[i];
 String val = hmap.get(key);

 System.out.println(key+" : "+val);
}

Set key = map.keySet();
 
  for (Iterator iterator = key.iterator(); iterator.hasNext();) {
                   String keyName = (String) iterator.next();
                   String valueName = (String) map.get(keyName);
 
                   System.out.println(keyName +" = " +valueName);
  }

List<Map<String, String>> list2 = new ArrayList<Map<String, String>>();
Map<String, String> map2 = new HashMap<String, String>();
map2.put("Label", "未申請");
map2.put("Value", "1");
list2.add(map2);

Map<String, String> map3 = new HashMap<String, String>();
map3.put("Label", "申請中");
map3.put("Value", "2");
list2.add(map3);

Map<String, String> map4 = new HashMap<String, String>();
map4.put("Label", "申請済");
map4.put("Value", "3");
list2.add(map4);

List<Map<String, String>> listNew = new ArrayList<Map<String, String>>();

for (int i=0; i < list2.size(); i++)
{
Map<String, String> maptt = new HashMap<String, String>();
String[] keys = list2.get(i).keySet().toArray(new String[0]);
maptt.put(keys[0], list2.get(i).get(keys[0]));
maptt.put(keys[1], list2.get(i).get(keys[1]));
listNew.add(maptt);
}

Iterator iterator = map.entrySet().iterator();

while (iterator.hasNext()) {
Entry entry = (Entry)iterator.next();

System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());

HashMap은 key 와 value 쌍으로 존재하는 자료구조이다.
프로그래머가 key값을 알고 있는 상태에서 쓰는 경우도 있지만,
프로그래머가 동적으로 구한 데이터를 key, value 쌍으로
HashMap을 쓴 경우는 프로그래머도 key 값이 무엇이 들어갔는지 알 수가 없다.
arrayList 처럼 index 가 정해져 있는것도 아니라
순차적으로 Log 에 찍어보기도 애매하다.

오늘 포스팅 내용은 이러한 상황에서 HashMap key값이 무엇이 있는지
구하는것이다.

HashMap 클래스 내부구조로 Set 자료구조에 key를 보관한 객체가 존재한다.
Set 객체를 통해 key를 가져오는 것이다. Set 객체에 들어있는 값(key)를 iterator 인터페이스를 통해, 순차적으로 탐색할 준비를한다.

HashMap<String,String> hashMap = new HashMap<>();
hashMap.put("key","value");

Set set = hashMap.keySet();
Iterator iterator = set.iterator();

가져온 후, iterator를 통해 순차탐색한다.

while(iterator.hasNext()){
  String key = (String)iterator.next();
  System.out.println("hashMap Key : " + key);
}

Entry 객체를 이용한 방법도 있다.
Entry 객체를 이용하면 key 와 value를 동시에 구할 수 있다.
물론 위에 코드로 key값을 구한 후, hashMap.get(key) 로 value를 구해도 상관없다.

Set set = hashMap.entrySet();
Iterator iterator = set.iterator();

while(iterator.hasNext()){
  Map.Entry entry = (Map.Entry)iterator.next();
  String key = (String)entry.getKey();
  String value = (String)entry.getValue();
  System.out.println("hashMap Key : " + key);
  System.out.println("hashMap Value : " + value);
}

주의할 점은 Set 자료형에 keySet() 을 넣은 경우와 entrySet() 경우를 잘 구별해서 이용 해야한다.

Map<String, Integer> map = list.stream()      // 1. listをstream()に渡す。
    .collect(Collectors.toMap(   // 2. streamをcollect()メソッドに渡し、CollectorsクラスのMapインスタンス生成メソッドを実行します
    s -> s, // 3. Mapキーを取得するラムダ式
    s -> s.length() // 4. Mapの値を取得するラムダ式
));

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Main {

    public static void main(String[] args) {
        //Listの宣言
        List<String> list = new ArrayList<>();
       
        list.add("apple");
        list.add("orange");
        list.add("melon");
       
        //Mapの宣言
        Map<Integer, String> map = new HashMap<>();
       
        int i = 1;
        for(String str : list) {
            // MapにListの値を追加
            map.put(i, str);
            i++;
        }
       
        System.out.println(map);
    }

}

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Main {

    public static void main(String[] args) {
        //Listの宣言
        List<Integer> list = new ArrayList<>();
       
        list.add(1);
        list.add(2);
        list.add(3);
       
        //Mapの宣言
        Map<Integer, String> map = new HashMap<>();
       
        for(Integer num : list) {
            // MapにListのキーと値を追加
            map.put(num, "apple");
        }
       
        System.out.println(map);
    }

}

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Main {

    public static void main(String[] args) {
        //Mapの宣言
        Map<String, Integer> map = new HashMap<>();
        map.put("apple", 1);
        map.put("orange", 2);
        map.put("melon", 3);
       
        //Listを宣言し、valuesメソッドを使用して値を取得する
        List<Integer> list = new ArrayList<>(map.values());
        System.out.println(list);
    }

}

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Main {

    public static void main(String[] args) {
        //Mapの宣言
        Map<String, Integer> map = new HashMap<>();
        map.put("apple", 1);
        map.put("orange", 2);
        map.put("melon", 3);
       
        //Listを宣言し、keySetメソッドを使用してキーの値を取得する
        List<String> list = new ArrayList<>(map.keySet());
        System.out.println(list);
    }

}

  HashMap map = new HashMap();

  map.put("key01", "value01");
  map.put("key02", "value02");
  map.put("key03", "value03");
  map.put("key04", "value04");
  map.put("key05", "value05");         

  Set key = map.keySet();
 
  for (Iterator iterator = key.iterator(); iterator.hasNext();) {
                   String keyName = (String) iterator.next();
                   String valueName = (String) map.get(keyName);
 
                   System.out.println(keyName +" = " +valueName);
  }

<select>
  <option value="volvo">Volvo</option>
  <option value="saab">Saab</option>
  <option value="opel">Opel</option>
  <option value="audi">Audi</option>
</select>

$("#selectBtn").click(function() {
var target = document.getElementById("gender");
alert(target.options[target.selectedIndex].text);
//alert($('select option:selected').text());
});

 <input id="selectBtn" type="button" value="selectButton">
  <select id="gender" name="gender" class="style12">
    <option selected="selected">ALL</option>
    <option>Male Only</option>
    <option>Female Only</option>
</select>

<a href="https://www.w3schools.com" target="_blank">Visit W3Schools</a>

<form action="/action_page.php" method="get" target="_blank">
  First name: <input type="text" name="fname"><br>
  Last name: <input type="text" name="lname"><br>
  <input type="submit" value="Submit">
</form>

데이터단위

8 bit (비트)                  1 byte
1024 byte (바이트)          1 kilobyte
1024 kilobyte (킬로바이트)   1 megabyte
1024 megabyte (메가바이트)  1 gigabyte
1024 gigabyte  (기가바이트)  1 terabyte
1024 terabyte (테라바이트)   1 petabyte
1024 petabyte (페타바이트)   1 exabyte
1024 exabyte (엑사바이트)   1 zettabyte

데이터 타입   메모리의 크기 표현 가능 범위
byte            1 byte          -128 ~ 127
short            2 byte          -32,768 ~ 32,767
int            4 byte          -2,147,483,648~2,147,483,647
long            8 byte          -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807

1메가바이트는 ---> 1048576바이트다.
1024킬로바이트는 --> 1메가바이트이다.
1킬로바이트는 ---> 1024바이트다.

float a = 2.2F;
double a = 2.2;

int의 최댓값인 2147483647

byte -> short -> int -> long -> float -> double

2017년 11월 25일 토요일

합리와 감성 리더십

합리와 감성 리더십

[이정규 칼럼] 어려운 상황에 진짜 리더십 나온다

출처 - http://www.zdnet.co.kr/column/column_view.asp?artice_id=20171106110527

이정규 비즈니스IT 칼럼니스트

입력 : 2017.11.06.15:28
수정 : 2017.11.06.15:28

군대에 있을 때 얻은 창피한 트라우마가 있다.
가장 힘든 일명 말호봉의 때의 일이다.
폭력이 일상이 된 군대생활에서 선임의 구타를 면하기 위해 거짓말을 했다.
고참들은 식기가 깨끗하지 않다는 둥 자기 빨래를 찾아내라는 둥 하찮은 일로 트집을 잡았다.  “제가 하지 않았습니다.” 궁색한 내 변명 때문에 선임 밑의 부하들은 같이 고초를 겪어야 했다.

자신이 부끄러웠다. “어려운 상황은 내가 어떤 사람인지 비로소 드러나게 만든다.” 는 깨우침을 얻었다. 겁내지 않고 의연하게 살아왔다고 자신했지만 작은 시련에도 나약해지는 섣부른 자만심의 속살이 보였다.

군종 신부를 찾았다. 안수기도를 받으니 신기하게 폭력이 두렵지 않았다.
그다음 부터 “제가 그랬습니다. 시정하겠습니다.”라고 당당하게 맞섰다.
선임은 가슴팍을 치려던 주먹을 내려놓으며 “다음부터 잘해!”라 말했다.
거짓말 할 줄 알았던 내가 솔직하게 말하니 오히려 당황하는 듯 했다.
그 사건 이후에 괴롭히던 선임과 친해지게 되었다.


■ "충성심과 존경심은 관계의 산물"

사회생활에서 여러 상사를 만나게 된다. 분위기가 좋을 때는 좋기만 하던 선배나 상사가
궁지에 몰리면 후배에게 책임을 넘긴다. 협력업체에 재고를 밀어내고는 년말 매출목표를 채운다.

비용을 다음해로 넘기고 수익율을 부풀린다. 분식회계다. 매일같이 고함 치며 목표달성을 닥달한 상사는 책임져야 할 그 순간 “제가 시키지 않았습니다.” 하며 부하 뒤로 숨는다.

건망증이 있을 나이도 아닌데, 아침에 한 약속을 상사는 저녁에 뒤집는다.
고객에게 약속한 일, 협력사와 맺은 거래를 싹싹빌며 없던 것으로 해달라는 어려운 부탁은 부하의 몫이다.

정작 책일질 상사는 회사에 남고, 애궂은 부하만 징계를 받고 회사를 떠나기도 한다.

이처럼 “어려운 상황은 상사가 어떤 관리자인지 비로서 드러나게 만든다.”
난세에 리더가 부하들에게 신의와 의리를 지키는 일은 대개 자신의 직을 거는 위험한 일이다. 시험이 닥치면 부하들의 편에서 의리를 지킬지, 부하에게 책임을 씌우고 자리를 보전할지 고민이 시작된다.

중세의 마녀사냥에 쓰던 방법을 들었다.
물에 빠뜨린 다음에 마녀가 아니면 물에 가라앉을 것이고,
마녀라면 물위에 떠오를 것이니 죽이라는 것이다.
마녀로 내 몰린 여인은 죽어서 명예를 지킨다. 물위에 떠서 살았다한들 결국 생명을 부지할 어떤 방법도 없다. 리더에게 닥치는 도전이 이와 같다면 “본성 테스트”의 시간이다.

어려운 상황에서도 본성을 잃지 않고 인간애를 유지하는 상사를 만나는 것은 직장인에게는 은총이다.

다행히도 오랜 직장생활 동안 서너분의 좋은 상사를 만났다.
그분들과 지금도 좋은 관계를 유지하고 즐거이 만나고 있다.
그분들이 부르면 달려나가고, 몇개월 지나면 보고 싶고,
어려우면 조언을 청한다. 그러한 선배들과 같은 시대를 살아가는 일이 기쁨이다.
그분들과의 스토리가 접착제처럼 끈끈한 관계를 만든다.

왜 그럴까 생각해 보았다. 인간에 대한 최우선의 가치를 두는 진정성만큼 강한 리더십은 세상에 없다.

그들은 부당한 주먹이 뻗쳐올 때 자기 가슴팍을 대신 들이밀었다.
핑계의 시간에 “제 책임입니다.” 말했다. 상황을 설명하지 않아도,
부하들은 감성으로 리더의 마음을 읽는다. 드디어 관계 형성의 스토리가 만들어진다.
그러한 리더의 이름을 지워버리면, 자신의 성장을 설명할 수 없다.
불행한 일은 리더의 역량과 리더십은 그가 조직을 떠나고 나서야 알게된다.

장석주 작가와 만났다.
만날 때마다 귀한 지혜의 말씀을 주신다.
"20세기는 뭐든지 끌어 않는 사람의 세계이었다면,
21세기는 나누는 주는 사람, 주변에 자기 것을 넓게 뿌리는 사람의 세계"라는 말에 공감했다.

사회생활 사반세기를 지나 마침내 “사람을 움직이는 것은 지식이나 합리성이 아니라, 감성임”을 알게되었다. 합리성은 사람이 같은 방향을 보도록 만든다. 그러나 사람을 움직이게 만드는 것은 합리를 넘어선 감성이다. 감성이 사람을 모으고, 따라오게 만든다. 따르는 부하를 만드는 상사는 감성관리가 남다르다. 리더십은 부하에 대한 진솔한 존중과 배려에서 시작된다.

이렇게 만들어진 리더십은 조직의 경계에 구속되지 않는다.
엄격한 규율로 부터 조직에 대한 충성심, 상사에 대한 존경심이 생기는 것이 아니다.
충성심과 존경심은 관계의 산물이며, 공유된 가치와 상호간에 내어준 배려의 시간으로 부터 나온다. 요즈음 참다운 리더들이 그리운 시간이다.

칼럼니스트 : 이정규
이메일 dominiclee@naver.com

약력

현 케이씨에이 전문위원. 정보처리기술사, 미국회계사, IT수석감리원.
IT 다국적기업에서 16년, 컴퓨터 보안회사 본부장 및 대표 6년 ,
H그룹 계열사 기술연구소장으로 2년을 역임하였다.

5년간 스타트업 대표와 1 년간 비영리재단의 사무국장으로 일하였고,
3년간 KAIST 기술경영대학원에서 겸직교수로 벤처창업을 가르쳤다.
저서로는 “동시병행설계”와 “딥스마트”가 있다.
주된 관심분야는 지속가능 발전, 스타트업 창업경영과 프로세스 혁신이다.
네이버 사이트 검색어는 '딥스마트'다.

‘전원 연결하면 끝’ 어플라이언스 총정리

‘전원 연결하면 끝’ 어플라이언스 총정리

출처 - http://www.zdnet.co.kr/news/news_view.asp?artice_id=20121027073547

김우용 기자
입력 : 2012.10.27.13:59
수정 : 2012.10.28.07:30

가전제품처럼 전원만 연결하면 즉시 사용가능한 IT인프라제품, 어플라이언스가 인기를 얻고 있다.
서버, 스토리지, 네트워크 하드웨어와 운영체제, 애플리케이션 등을 벤더가
사전에 통합, 최적화해 판매하므로 시스템 구축 시간을 대폭 줄일 수 있기 때문이다.

오라클은 아예 어플라이언스를 완제품 자동차에 비유하기도 한다.
마크 허드 오라클 공동사장은 지난 9월 한국방문 당시 “자동차는 전문기술을 가진 회사의 완제품을 사면서,
왜 IT인프라는 고생을 자처하며 직접 조립하느냐”고 역설했다.

어플라이언스는 현재 거의 대부분의 회사들에서 제공된다.
어플라이언스가 최근들어 아주 새롭게 등장한 트렌드는 아니다.
10년전부터 소프트웨어와 하드웨어를 한번에 판매하는 트렌드는 이어져왔다.
다만, 전보다 더 저명한 벤더가 나서, 하드웨어와 소프트웨어의 최적화를 약속한다는 차이가 있다.

단순히 하드웨어와 소프트웨어를 통합한 것이라고 어플라이언스가 쉽기만 하지 않다.
어플라이언스에 대한 업계의 현황을 정리해본다.


스티브■‘범용 vs. 목적별’ 어플라이언스의 갈래

현재 어플라이언스 시장은 두 갈래로 나뉜다.
시스코-EMC V블록, 시스코-넷앱 플렉스포드, 델 V스타트, HP 클라우드시스템, IBM 퓨어플렉스 등 범용 어플라이언스가 한 갈래다.
다른 하나는 오라클 엑사시리즈, HP 앱시스템, IBM 퓨어애플리케이션 등 목적별 어플라이언스다.

선발주자였던 범용 어플라이언스 제품들이 확산에 힘든 시기를 겪는 반면,
목적별 어플라이언스는 출시 초기부터 빠르게 시장규모를 늘렸다.
이에 범용 어플라이언스를 내놨던 벤더도 애플리케이션 측면의 제품에 더 집중하고 있다.

어플라이언스 시장이 점차 특정 업무를 위한 목적별 어플라이언스로 수렴되는 모습이다.
통합 하드웨어에 가상화 수준까지만 제공해온 범용 어플라이언스도 점차 애플리케이션에 대한 최적화를 강화하고 있다.

대형 벤더의 어플라이언스는 테라데이타가 선도했다. 하지만 본격적인 어플라이언스 시장이 열린 시점은 2009년이다.
그 해 시스코, EMC는 각자의 하드웨어에 VM웨어 가상화 솔루션을 사전통합한 V블록을 출시했다.
V블록은 기본적인 IT인프라를 가상화 단계까지 완료해 공급되고, 구매자는 V블록에 애플리케이션을 따로 구매해 설치한다.

오라클은 그해 엑사데이터 버전2를 선보인다.
데이터베이스와 데이터웨어하우징(DW)에 특화된 제품이다.
처음 나온 엑사데이터는 오라클과 HP의 협력으로 만들어졌지만,
오라클은 썬마이크로시스템즈를 인수해 자신들만의 완제품으로 새롭게 내놨다.
웹로직을 위한 엑사로직 어플라이언스도 함께 나왔다.

이후 시스코는 넷앱과 손잡고 플렉스포드를 출시했다.
기본 콘셉트는 V블록과 같지만, 넷앱 스토리지를 사용한다는 점이 다르다.
그해 HP가 클라우드시스템을 내놨고, 델이 V스타트를 출시했다.

IBM은 올해 퓨어시스템이란 새로운 제품을 출시했다.
지난 4월 선보인 이 제품은 가상화 환경 구축을 위한
‘퓨어플렉스’와 애플리케이션 환경 구축을 위한 ‘퓨어애플리케이션’ 두종류로 나왔다.
그리고 이달 9일 데이터베이스와 관련된 ‘퓨어데이터’가 출시됐다.

HP는 작년 컨버지드인프라(CI) 제품군을 가상화와 VDI를 위한 버추얼시스템,
클라우드 구축을 위한 클라우드시스템, 애플리케이션 구축을 위한 앱시스템 등으로 분화했다.
이중 앱시스템은 MS SQL서버, 버티카, 통합커뮤니케이션(UC) 등 SW 파트너의 솔루션을 최적화해 제공하는 형태다.

■범용보다 목적별 어플라이언스가 더 대세

V블록, 플렉스포드, 클라우드시스템, V스타트 등은 특정 애플리케이션에 특화되지 않은 범용 제품이다.
클라우드 컴퓨팅이란 서비스형 인프라를 빠르게 구비하기 위한 용도다. IBM의 퓨어플렉스도 마찬가지이며,
오라클의 엑사로직도 본래 ‘엑사로직 엘라스틱 클라우드’란 정식명칭에서 나타나듯 클라우드 인프라를 위한 범용 제품에 가깝다.

이 제품들은 기본 구성에 애플리케이션을 포함하지 않기 때문에 엄밀한 의미로
어플라이언스라 부르기 힘들다. 오라클 엑사데이터와 HP 앱시스템, IBM 퓨어애플리케이션이 좁은 의미의 어플라이언스에 부합하는 제품이다.

V블록 이후 쏟아진 각사의 범용 어플라이언스들은 기대보다 더딘 성장을 보였다.
플렉스포드가 상대적으로 많은 판매량을 거뒀을 뿐이다. V블록은 출시 3년째에야
조금씩 반응을 얻기 시작했고, HP와 델의 제품들은 뚜렷한 레퍼런스조차 언급하지 못하는 처지다.

반면, 엑사데이터는 확실한 시장을 형성했다. 이미 테라데이타가 만들어 놓은
목적별 어플라이언스 시장에 성능과 SW 인스톨베이스를 무기로 뛰어든 만큼 확산이 어렵지 않았던 것으로 분석된다.

엑사데이터의 성공과 마찬가지로 HP의 앱시스템도 나름 좋은 성과를 거두고 있다.
HP는 기존 MS SQL서버 앱시스템 외에 SAP HANA용 앱시스템으로 속속 고객사를 확보하고 있다.

이런 흐름 속에서 각사는 범용 어플라이언스보다 목적별 어플라이언스에 집중하는 모습을 보이고 있다.
IBM이 퓨어시스템의 외연을 데이터분석 분야로 확대한 것이 대표적이다.

IBM은 전문가통합시스템 ‘퓨어시스템’에 데이터분석에 특화된
‘퓨어데이터’를 추가했다. 퓨어데이터는 업무환경에 따라 DB를 제공하기
위한 '퓨어데이터시스템 포 트랜잭션', 분석업무를 위한 '퓨어데이터시스템 포 애널리틱스',
분석역량을 녹인 운영최적화 용도를 겨냥한 '퓨어데이터세스템 포 오퍼레이셔널 애널리틱스'로 나뉜다.


■SW없는 벤더가 목적별 어플라이언스를 내놓는 방법

올해 사전통합플랫폼을 새로 선보인 히타치데이터시스템(HDS)과 델도 IBM이 걷는 행보와 유사하다.

HDS는 이달 11일 ‘유니파이드 컴퓨트 플랫폼(UCP)’을 출시했다.
UCP는 VM웨어 가상화, 클라우드 환경을 위한 UCP프로와 애플리케이션별로
구성을 달리해 제공되는 UCP셀렉트 등 두 종류로 나왔다.

델은 19일 ‘액티브 인프라스트럭처’란 새 통합제품을 선보였다.
액티브 인프라스트럭처는 가상화, 가상데스크톱인프라(VDI) 등을 쉽게 구축하고,
그 위에 마이크로소프트(MS 링크, 셰어포인트 등 애플리케이션을 클라우드 상에 쉽게 배포할 수 있도록 설계됐다.

구성요소를 모두 갖지 못한 시스코와 넷앱은 최근 플렉스포드에 클러스터모드를
탑재하면서 오라클 RAC 데이터베이스를 위한 인증 설계를 지원한다고 발표했다.
플렉스포드와 VM웨어 환경에 오라클 RAC 데이터베이스를 사용하는 최적화된 설계법을
제공한다는 의미다. 오라클 DB 시장을 겨냥한 목적별 어플라이언스로 볼 수 있다.

이뿐 아니다. 시스코와 넷앱은 ‘SAP HANA를 위한 시스코-넷앱 스케일아웃 솔루션’을
공개했다. 클라우드 상에 SAP HANA 환경을 쉽게 구축할 수 있다는 설명을 덧붙였다.

JP 반 스티어티그헴 시스코 월드와일드세일즈 CTO는 “시스코는 SAP, 오라클 같은
주요 애플리케이션 제공업체의 인증을 많이 받았고, 다양한 어플라이언스를 제공하고 있다”라며
“그밖에 그린플럼, 클라우데라처럼 새롭게 부각된 여러 빅데이터 솔루션과도 적극적으로 같이 협업하고 있다”고 설명했다.

벤더가 전면에 나서지 않고 파트너를 이용하는 OEM 어플라이언스 전략도 있다.
HP의 OEM 사업이 대표적이다. HP는 각국의 지역 SW개발사 솔루션을 OEM 어플라이언스 형태로
제공한다. 판매되는 어플라이언스는 HP의 ODP(OEM Development Partner)가 HP 하드웨어를 이용해 제작하고,
제품의 상표명은 솔루션 제작사가 짓는다. 한국의 경우도 티맥스 어플라이언스가 대표적이다.

EMC의 행보도 비슷하다. EMC는 올해 VSPEX란 브랜드를 발표했다. VSPEX는 EMC가 각 하드웨어,
소프트웨어 구성요소의 최적 조합을 만들어 레퍼런스 디자인으로 공개하고, 선정된 EMC 파트너가
솔루션을 최적화시켜 판매하는 어플라이언스다. 상표명은 EMC 파트너의 명칭을 사용한다.
국내에서
■어플라이언스를 사려는 사람의 심리

목적별 어플라이언스가 대세를 이루는 현상은 애플리케이션 중심의 접근을
선호하는 고객의 심리에서 기인한다.

애초부터 어플라이언스 구매의향을 가진 기업은 자신의 수고를 최소화해
곧바로 운영한다는 제품의 취지에 동의한 만큼 애플리케이션 구축까지 간소화하길 원한다.
클라우드 컴퓨팅 환경을 구축해서 알아서 쓰겠다는 생각은 별로 하지 않는다.

때문에 인프라 구축단계만 없애주는 범용 어플라이언스는 고객 접근이 힘들다는 한계를 갖게 된다.

범용 어플라이언스를 다양한 용도에 폭넓게 사용할 수 있다는 장점도 있긴 하다.
하지만 어플라이언스는 확장, 증설할 경우 벤더에 종속되는 상황을 만들어낸다.
이를 염려하는 고객은 용도에 따라 가격과 규모를 따져 어플라이언스를 고른다.

어플라이언스는 과거 ‘베스트오브브리드’라 불렸던 IT인프라 구축방식을 깨뜨리는
사업방식이다. 하지만 고객입장에서 베스트오브브리드는 사라지지 않는다.
과거 서버, 스토리지, 네트워크, OS, 애플리케이션 등 세부적으로 바라봤던 것이
애플리케이션이란 더 넓은 시야의 베스트오브브리드로 바뀌는 것이다.

하드웨어뿐 아니라 운영체제, 미들웨어, 애플리케이션 등 소프트웨어 스택을
폭넓게 보유한 IBM, 오라클 같은 회사는 목적별 어플라이언스를 강력하게 밀어붙인다.
상대적으로 SW 스택이 빈약한 HP나 델은 SW개발사를 파트너 삼아 애프리케이션에 최적화된
제품을 공급한다. 하드웨어 스택을 모두 갖추지 못한 시스코, EMC, 넷앱 같은 회사는
파트너 전략을 더 광범위하게 구사한다.

사이버 공격 대응하기 위한 6가지 비결

사이버 공격 대응하기 위한 6가지 비결
[마이클 지 칼럼] 나눠서 정복-신속 조정 등 중요

출처 - http://www.zdnet.co.kr/column/column_view.asp?artice_id=20170919152328

마이클 지 포티넷 CTO

입력 : 2017.09.21.15:57
수정 : 2017.09.21.15:57

사이버 위협이 날로 정교해지고 있다.
전 세계 수많은 기업들은 매일 사이버 위협을 효과적으로 대응해야 하는
어려운 과제를 안고 있으며 보안 어플라이언스를 구축하여
기업의 데이터와 중요한 자산을 보호하는 중이다.

보안 어플라이언스는 사이버 위협을 방어하는데 매우 중요한 역할을 한다.
이것이 바로 위협 인텔리전스다.

진화하는 위협 환경을 면밀히 파악하고 적절히 대응하는 보안 어플라이언스의 역량은
사이버 방어력을 강화하는데 매우 중요하다.

적시에 정확하고 예측 가능한 위협 정보를 확보하는 것은 쉽지 않은 일이다.
효과적인 위협 인텔리전스는 아래와 같은 6가지 요건이 충족돼야 한다.


첫째, 나눠서 정복하라.

비즈니스의 여러 측면에서 대규모 팀은 대규모 생산량과 동일시된다.

동기 부여가 확실한 사이버 범죄자를 넘어서고 싶다면 최적의 전략이 필요하다.
효과적인 위협 연구 조직은 여러 팀으로 나눠서 구성돼야하며 각 팀은 특정 위협에 초점을 맞춰야 한다.
이를 통해 각 팀의 전문적인 역량이 향상되면 보다 신속하게 위협을 감지하고 식별할 수 있으며
고객 대응 시간을 단축시킬 수 있다.

둘째, 신속히 조정하라.

위협 연구팀은 민첩해야 한다.
위협 상황은 매우 역동적이기 때문에 시간,
분단위로도 상황이 달라질 수 있다.
팀은 즉각적이고 유연하게 우선 순위를 조정할 수 있어야 한다.

포티넷은 위협 환경이 어떻게 진화할지에 대한 예측을 기반으로
연구 계획을 업데이트한다. 방향이 정해지면 최적의 기술을 가진 연구원이
특정 테스크포스팀에 참여하여 새롭게 주목받고 있는 위협을 연구한다.

최근 예로는 IoT, 랜섬웨어, 자율적 멀웨어 등이 있다.

셋째, 전체를 조망하라.

연구자는 직접적인 연관이 없는 사안이라도 늘 주변 상황에 관심을 가지고 큰 그림,
즉 전체를 조망할 수 있어야 한다. 예를 들어 사물인터넷(IoT) 취약성을 연구해
위협 전망에 대한 엔터프라이즈 보안 업체의 이해도가 높아질 수도 있다.

넷째. 직감을 키워라.

연구 책임자는 실제 위협 상황이 벌어지기 전에 팀원들이 위협에 대한
통찰력을 가질 수 있도록 교육해야 한다.

예를 들어 뛰어난 위협 연구원들은 미라이 IoT 봇넷이 지난 9월에 등장하기 전에
이미 수 년 간 IoT 취약점이 차세대 위협이 될 것이라고 경고해 왔다.
새로운 위협이 끊임없이 등장하고 빠르게 진화하고 있다.
보안 업체들이 위협에 대한 조사를 늦추고 신속하게 반응하지 못하면 고객들도 신속한 보호를 받을 수 없다.

다섯째, 데이터를 축적하라.

위협 연구팀이 접근 가능한 데이터를 많이 확보할수록 연구 결과의 정확도가 커진다.
선두의 연구 기관들은 정보를 축적만 하는 것이 아니라, 공유한다.

포티넷은 전세계 3 백만 개의 센서를 통해 인텔리전스를 확보하는 것을 넘어서,
사이버 위협 연합(Cyber Threat Alliance, CTA)을 통해 인터폴, 나토(NATO),
국내서는 한국인터넷진흥원(KISA) 및 기타 보안 업체들과 적극적으로 위협 정보를 공유하고 있다.
최근 몇 달 간 포티넷은 전 세계 더 많은 정부 기관과 통신사업자들과 협업하는데 성공했다.

여섯째, 연구 기술에 투자하라.

위협 정보를 수동으로 분석하는 시대는 지났다.
효과적인 연구 팀은 매 초 마다 들어오는 엄청난 데이터를 분석하는 고급 툴이 필요하다.
포티넷은 단일 시그니처로 수천 개의 현재, 미래 악성코드 변종을 식별하는
콘텐츠 패턴 인식 언어(Content Pattern Recognition Languages, CPRL)를 보유했다.

그러나 미래에는 빅데이터 분석 및 인공 지능과 같은 기술이 더 많은 역할을 할 것이다.
사람들은 네트워크를 연결하고 데이터를 공유하며 시스템에 데이터를 적용하는
복잡한 작업을 수행하고 있다. 미래에는 더욱 성숙한 인공 지능 시스템이
이러한 복잡한 작업을 자동화시켜줄 것이다.

그러나 AI가 아무리 발전한다고 해도 100% 자동화 시스템을 구현하기는 어렵다.
사람의 개입이 여전히 필요하다. 빅데이터 및 분석 플랫폼을 통해 멀웨어 진행을 예측할 수는 있지만
멀웨어의 변이는 예측이 어렵다.

워너크라이와 같은 랜섬웨어는 패치가 적용되지 않은 시스템을 감염시키기 위해
미국 국가안보국(NSA)으로부터 유출된 취약점을 악용했는데 이를 미리 예측하는 것은 쉽지 않다.

멜웨어의 진화는 본질적으로 인간의 진화와 사람들이 일상 생활에
새로운 기술을 어떻게 적용하는지에 따라 달라진다.
자율주행차와 웨어러블 IoT가 더욱 대중화되면 사이버 범죄자들은
이들 장치를 악용할 방법을 찾을 것이다. 마찬가지로 암호화 화폐에 대한 관심이
높아지면 해커들은 이를 악용할 방법도 찾아낼 것이다.

자동화의 개념이 사이버 범죄자들에게 새로운 가능성을 열어주면서
많은 기업들이 이를 주목하고 있다. 해커들이 멜웨어 자동화 기능을 강화하면서
대상 기업에 대한 공격 속도가 빨라지고 침입 후 영향을 미치는 시간도
단축됐으며 탐지를 피하는 방법도 빠르게 발전하고 있다.

기업들은 IoT부터 클라우드에 이르기까지 분산 네트워크 에코시스템 전반에 걸쳐
거의 실시간 위협에 대응해야 한다.

그러나 오늘날 많은 기업들이 이를 위한 역량을 확보하지 못하고 있다.
최고정보책임자(CIO)들이 주목해야 할 대목이다.

*본 칼럼 내용은 본지 편집방향과 다를 수 있습니다.

마이클 지 포티넷 CTO
이메일 sjung@fortinet.com

약력

마이클 지(Michael Xie)는
네트워크 보안 업계에서 15년 이상 경력을 가졌다.
2000년 10월 포티넷을 공동 창업했으며 2010년 10월부터
CTO로 기술 전반을 책임지고 있다.

이전에는 넷스크린에서 소프트웨어 디렉터이자 아키텍트로,
서브게이트에서 CTO 겸 부사장을 맡았다. 그는 CRN 매거진이
수여하는 '2009 테크 이노베이터 어워즈'를 수상했으며 2006년 바비즈니스 매거진 주최
'언스트앤영(Ernst & Young) 및 톱 테크놀로지 이노베이터(Top Technology Innovator)'에서
올해의 노던 캘리포니아(Northern California) 기업인에 선정되기도 했다.
중국 칭화대학 자동차공학과 석사 및 캐나다 매니토바 대학교에서
전기 및 컴퓨터 공학과 석사 학위를 받았다.

아이폰X을 통해 생각해본 '혁신의 의미'

아이폰X을 통해 생각해본 '혁신의 의미'

출처 - http://www.zdnet.co.kr/column/column_view.asp?artice_id=20170913111927

김익현 기자
입력 : 2017.09.13.11:24
수정 : 2017.09.13.11:24

만화가 이현세 씨의 ’공포의 외인구단’은 혁신적인 작품이었다.
특히 만화에 등장하는 ‘필살수비’는 작가다운 상상력으로 많은 관심을 받았다.
수비하는 쪽이 의도한 곳으로 정확하게 공이 날아간다는 발상.

1982년 프로야구 수준에선 상상도 하기 힘든 기막힌 혁신이었다.

하지만 2017년 프로야구에선 ‘필살수비’에 버금가는 모습을 심심찮게 접한다.
2루수가 우익수 앞에 가서 수비를 한다. 3루수는 유격수, 유격수는 2루 베이스 쪽으로 옮겨 수비하는 경우도 있다.

그런데 타자가 친 공은 신기하게도 수비수가 서 있는 자리로 날아간다.
데이터 분석을 기반으로 한 '수비 시프트' 덕분이다. 이현세 작가의 상상력이 만들어낸 혁신이 현실에서
그대로 구현되는 셈이다.


■ A11 칩 탑재…스마트폰에서 머신러닝도 가능

애플이 12일(현지시간) 소문으로만 떠돌던 아이폰X을 공개했다.
겉보기에 가장 눈에 띄는 점은 얼굴인식기능인 페이스ID를 탑재했단 점이다.
덕분에 눈으로 바라보기만 해도 잠금 해제가 된다.

베젤을 없앤 화면과 OLED를 새롭게 탑재한 점 역시 많은 관심을 끌었다.
많은 외신들이 “사상 최고 아이폰”이라고 평가하는 것도 무리가 아닐 정도였다.

겉으로 드러나진 않았지만 패러다임이 바뀌고 있다는 걸 보여주는 부분도 있었다.
사상 처음으로 아이폰에도 인공지능(AI) 칩이 탑재됐다는 점이다.
애플은 이날 아이폰X에 A11 ‘바이오닉 뉴럴 칩’을 사용했다고 밝혔다.
필 쉴러 애플 부사장이 아이폰X의 페이스ID 기능에 대해 소개하고 있다.

덕분에 아이폰X는 머신러닝을 비롯한 각종 기능을 수행할 수 있게 됐다.
애플이 얼굴인식 기능을 자신 있게 아이폰X 잠금해제 수단으로 적용한 것 역시
A11 칩 덕분이라고 해도 과언이 아니다.

그 동안 얼굴인식 기능은 ‘인증 오류’ 논란이 끊이지 않았다.

여기까지만 놓고 보면 애플이 새롭게 선보인 아이폰X는 나름 혁신적인 부분이 적지 않다.
하지만 이런 발표를 지켜보는 많은 사람들은 그다지 놀라지 않는다.
“그래서 뭐가 특별하단 건데?”란 반문을 하는 경우도 적지 않다.

왜 그럴까?

스마트폰 시장의 수준과 저변이 엄청나게 향상됐기 때문이다.
애플이 이번에 아이폰X의 신기능으로 소개한 것들 중 시장에서 최초로 적용된 건 없다.
페이스ID를 비롯해 OLED, 베젤 없는 디스플레이 등은 이미 갤럭시를 비롯한 많은 안드로이드 폰들에서
최소 한 차례 이상 소개된 것들이다.

■ 4할 타자가 사라진 건 혁신 실종이 아니라 수준향상 때문

시간을 10년 전으로 한번 돌려보자. 스티브 잡스가 처음 터치스크린 방식의 가상 키보드를 선보였을 때
많은 사람들은 놀라움을 감추지 못했다.

물리적인 키보드가 사라지면서 스마트폰이 ‘통화 도구’가 아니라 ‘콘텐츠 소비 플랫폼’으로 한 단계
업그레이드됐다. 각종 앱을 통해 기능을 추가한다는 발상 역시 혁신적이었다.

하지만 지난 10년 사이에 스마트폰 시장의 수준은 몰라보게 향상됐다.
굳이 비유하자면 이현세 작가가 만화 속에서 구현했던 ‘필살수비’를 경기에서
일상적으로 적용하는 수준까지 업그레이드됐다.

2007년 맥월드 행사에서 아이폰 첫 모델을 소개하던 스티브 잡스.
그 무렵 유행하던 키보드 장착형 스마트폰을 조롱하고 있다.

다시 야구 얘기로 살짝 돌아가보자.
프로야구계의 오랜 화두 중 하나는 “왜 4할 타자가 사라졌을까?”란 의문이었다.

한국 프로야구에선 1982년 백인천 이후로 4할 타자 명맥이 끊겼다.
미국 프로야구 역시 1941년 테드 윌리엄스 이후엔 4할 타자를 볼 수가 없다.

이 질문에 대해 많은 사람들은 “타자들의 수준이 낮아진 때문”이라고 생각했다.
하지만 미국 진화 생물학자인 스티븐 굴드는 오히려 ‘타자들의 수준 향상’ 때문이란 답을 내놨다.
그 유명한 ‘굴드의 가설’이다.

무슨 얘기인가? 선수들의 전반적인 수준이 높아지면서
‘거인처럼 우뚝 솟은 타자’는 더 이상 찾아보기 힘들게 됐단 얘기다.

■ 아이폰X vs 갤노트8의 '멋진 도토리 키재기'를 기대하며

스마트폰 시장에도 같은 논리를 적용할 수 있을 것 같다.
이젠 ‘깜짝 놀랄 혁신’은 기대하기 힘들다.
삼성, 애플 같은 업체들이 스티브 잡스 당시보다 수준이 떨어져서가 아니다.

10년 사이에 전반적인 수준이 향상되면서 ‘경쟁자를 압도하는 제품’을 내놓는 건 갈수록 힘들게 됐다.
어떤 성능을 갖다 붙이더라도, ‘점진적인 진화’ 수준을 벗어나기 힘들게 됐단 얘기다.

애플이 12일 선보인 아이폰X 역시 마찬가지다.
‘10주년 기념폰’으로 공을 들였지만,
시장에선 갤럭시노트8을 비롯한 경쟁 제품들과
‘도토리 키재기’를 해야 하는 수준일 따름이다.
다만 그 도토리들이 ‘10년 전의 거인’보다 훨씬 더 수준이 향상됐다는 점이
달라졌다면 달라진 점일 테지만.

SW회사 '사수 부사수 시스템'의 문제점

SW회사 '사수 부사수 시스템'의 문제점

출처 -
http://www.zdnet.co.kr/column/column_view.asp?artice_id=20170918134302

입력 : 2017.09.19.10:40
수정 : 2017.09.19.10:40

우리나라 회사에서 후배를 키우는 가장 흔한 방법은 '사수 부사수 시스템'이다.
필자도 오래 전부터 사수 부사수 시스템을 많이 봐왔고, 지금도 매우 일반적인 방식이다.

이 용어는 군대에서 유래했다. M60 기관총 등 중화기들은 대부분 2명 이상이 운용해야 하고
사수와 부사수가 같이 장비를 다룬다. 영화 속 람보는 M60 기관총을 혼자서 양손에 하나씩 두개를 들고 쐈지만,
원래는 2명이 쏴야 하는 무기다.

이런 사수 부사수 시스템에서는 사수는 주업무를 하고 부사수가 보조 업무를 하며 업무를 익힌다.
1, 2년 후에는 부사수가 사수가 되어 또 다시 부사수를 교육하는 시스템이다.
소프트웨어 회사에서도 비슷한 시스템을 가지고 있는 경우가 많다.
공식적이든 비공식적이든 사수 부사수 시스템을 가지고 있는 소프트웨어 회사에서는
신입개발자가 들어오면 회사에서 사수를 지정해준다.
사수 옆자리나 근처에 자리를 배정하여 사수와 많은 시간을 보내면서 하나씩 업무를 배워나갈 수 있도록 한다.
사수는 부사수에게 개발하고 있는 소프트웨어의 구조부터 기능, 소스코드, 빌드 방법, 업무지식,
회사의 시스템 사용법 등 많은 것을 가르쳐준다.

사수 부사수 시스템이 장점이 없는 것은 아니지만 많은 문제점을 가지고 있다.
어떤 문제를 가지고 있는지 알아보자.

● 사수, 즉 선배가 후배 교육에 너무 많은 시간을 소비해야 한다.
후배 교육은 회사 입장에서 투자이기도 하지만 큰 비용이다.
선배는 오랜 기간동안 지속적으로 시간을 빼앗긴다.

● 후배가 제대로 일을 하기까지 교육을 하는데 시간이 너무 많이 걸려서 현장 투입이 늦어진다.
회사마다 개인마다 다르기는 하지만 작게는 몇주부터 몇달이 걸리곤 한다.
부사수는 교육과 훈련을 어느 정도 받기 전까지는 제대로 일을 하기 힘들다.

이때까지는 한사람의 개발자가 들어온 것이 아니고 0.5 또는 0.3 인원이기도 하고,
심지어는 사수의 시간을 너무 많이 빼앗어서 마이너스 인력이 경우도 있다.
즉, 후배가 없을 때보다 전체 개발 기간을 더 지연시키기도 한다.

● 후배가 들어올 때마다 매번 반복적으로 가르쳐야 한다.
부사수가 다시 사수가 되어 후배를 가르치려면 상당한 시간이 걸리기 때문에
여전히 고참 개발자가 교육을 계속 해야 하고 시간 간격을 두고 5명의 개발자가
입사를 하면 교육 시간이 5배 들어간다.

● 사수도 많은 정보를 잊어버려서 제대로 교육을 하기가 쉽지 않다.
사수는 핵심 개발도 하고 교육도 하느라고 바빠서, 개발을 하면서 문서를 제대로 작성할 시간도 없다.
그래서 악순환이 반복된다. 아무리 후배를 교육해도 결국 모든 문제 해결 요청은
고참에게 몰려서 고참은 여전히 더 바쁘다.

● 부사수는 너무 자주 물어보면 사수의 시간을 빼앗는 것 같아 미안해서 잘 물어보지 않게 된다.
뻔뻔한 후배는 궁금한 것이 있을 때마다 잘 물어보겠지만, 사수가 얼마나 바쁜지를 매일 보게 되면
사수의 시간을 빼앗는 것을 미안해하곤 한다. 그래서 일을 그르쳐 문제를 만들고 나중에는
사수의 시간을 더 빼앗곤 한다.

■ 사수-부사수 한계 극복하려면 개발때 분석-설계 제대로 해야

경영자는 그동안 문서가 너무 없어서 이런 일이 벌어진다고 생각하고
기존 소프트웨어의 문서를 만들라고 하는데 이미 개발된 시스템의 문서를
나중에 많는 것은 헛수고다. 문서는 원래 개발 전에 만들어야 제대로 만들 수 있다.
개발 후 만드는 문서는 필요한 정보의 10%나 제대로 적을 수 있을까 의문이다.

또한, 제대로 분석, 설계를 하지 않고 이미 만들어진 소프트웨어는
시간을 아무리 많이 준다고 하더라도 다시 문서로 정리하기 어려운 구조로 되어 있는 경우가 많다.
그래서 악순환이 계속되고 사수 부사수 시스템에서 영원히 벗어나기 어렵게 된다.

이런 사수 부사수 시스템을 계속 유지하는 한 기업은 현재 수준에서 벗어나기 어렵다.
회사를 조금만 키워도 개발 효율성은 점점 떨어져서, 경쟁력 저하를 가져온다.
사수 부사수 시스템을 유지하는 회사에서의 후배에게 정보를 전달하는 방법의 비율을 보면 다음과 같다.
문서/시스템 : 직접 교육/코칭 = 2:8 또는 1:9

즉, 문서나 시스템을 통해서는 10~20% 정도의 정보밖에 전달을 못하고
나머지는 사수가 직접 가르쳐야 한다. 이상적인 비율은 반대가 되어야 한다.
즉, 8:2 정도가 되는 것이 좋다.

대부분의 정보는 문서나 시스템을 통해서 얻어야 하고,
문서를 봐도 잘 모르겠는 정보는 멘토나 선배에게 물어보는 것이 좋다.
이것을 10:0 또는 9:1로 만드는 것은 거의 불가능하다. 오히려 더 비효율적이다.

8:2 정도만 되면 위에서 언급한 문제점의 대부분이 해결된다.
고참 개발자의 시간을 너무 많이 빼앗지 않게 되고, 신규 입사자가
아무리 못해도 마이너스 인력이 되지는 않는다. 스스로 공부를 할 수 있으니
후배의 노력에 따라서 얼마든지 빨리 배울 수도 있다.
또한 입사 후 실전 개발에 투입되는 시간은 훨씬 빨라진다.

그럼 사수 부사수 시스템을 탈피하는 방법은 무엇일까?
분석, 설계를 제대로 해서 개발을 하는 것이다. 말은 참 쉽다.
하지만 실제는 정말 어렵다. 물론 이슈관리시스템이나 위키시스템 등 소프트웨어 회사에
필수적으로 필요한 시스템은 잘 구축되어 있어야 한다.

분석, 설계 문서는 SW를 개발하는데도 필요하면 이 문서들은 나중에서 신입 사원을
교육시키는데도 매우 유용하다. 이런 체계를 갖춘 회사에서는 신입개발자가 입사를 해도
바로 개발에 투입이 가능하다. 물론 개발 능력을 갖춘 신입개발자여야 한다.

개발 능력 자체가 부족하다면 얘기가 안된다. 한사람 몫을 하려면 상당히 시간이
걸리기는 하겠지만 고참을 그렇게 많이 방해하지는 않는다. 궁금한 것이 있으면 문서나 시스템을 통해서
스스로 배울 수도 있고, 설계가 잘 된 시스템에서는 개발을 할 때 알아야 할
정보의 범위가 작다. 자신이 개발해야 할 시스템의 인터페이스와 요구사항만 알면 된다.

대부분의 외부 인터페이스가 잘 정의 되어 있고, 유닛 테스트는
이미 작성이 되어 있는 경우도 많다. 신입 개발자에게 시스템 내부의 하위 설계는
직접 맡기는 경우도 있다. 또는 고참 개발자가 내부 설계까지 해주고 내용만 채우도록 하는 경우도 있다.
시스템이 작은 서브시스템으로 잘 나눠져 있기 때문에 신입 개발자라도 개발에 참여하기 쉽고 문제가
생겨도 전체 시스템에 큰 영향을 주지는 않는다.

물론 이렇게 하려면 분석, 설계를 매우 잘해야 한다.
모든 회사가 성숙도와 역량이 달라서 회사마다 벌어지는 현상은 다르다.
필자는 상당한 성숙도를 가진 회사를 기준으로 설명을 하고 있다.

이우소프트도 그러한 방향을 향해 발전해 가고 있는 진행형이다.
아직 제대로 된 시스템도 구축이 안되어 있고 분석, 설계 문서도 제대로 쓴적이 없는 회사라면
어떻게 할까? 한번에 극복할 수는 없다. 새로운 제품부터 분석, 설계를 하나씩 제대로
하는 습관을 들여야 한다. 방법론과는 상관이 없이 분석, 설계를 적절히 제대로 하는 것은
소프트웨어 개발의 기본이다. 이렇게 하나씩 제대로 해나가면 지식정보가 축적되고 점차 사수 부사수 시스템에서
벗어날 수 있을 것이다.

칼럼니스트 : 전규현
이메일 gracegyu@gmail.com

약력

소프트웨어 전문기업인 이우소프트의 CEO다.
20여년간 한글과컴퓨터 및 안철수연구소에서 소프트웨어를 개발하였고
소프트웨어 공학 컨설턴트로서 수많은 회사가 글로벌 소프트웨어 역량을 갖출 수 있도록 가이드를 했다.
지금도 개발을 하고 있으며 이우소프트를 글로벌 소프트웨어 기업으로 키우기 위해서 노력하고 있다.
저서는 “소프트웨어 개발의 모든 것”(2008 페가수스)이 있으며
소프트웨어 공학 블로그인www.allofsoftware.net의 운영자이다.

2017년 11월 23일 목요일

일본어 조사..유니코드등..

ほうこう[方向] 방향.

再帰的(ネストした構造)

予期せぬ Yoki senu 예상치 못한
挙動 Kyodō 거동

サロゲートペア

Unicode(ユニコード)は、
符号化文字集合や文字符号化方式などを定めた、
文字コードの業界規格である。文字集合(文字セット)が
単一の大規模文字セットであること(「Uni」という名はそれに由来する)などが
特徴である。

符号化 --> ふごう [符号] 부호화 문자 집합
文字符号化 --> 문자부호화
きかく[規格] --> 규격
きぼ[規模] --> 규모

1980年代に、Starワークステーションの日本語化 (J-Star) などを
行ったゼロックス社が提唱し、マイクロソフト、アップル、IBM、
サン・マイクロシステムズ、ヒューレット・パッカード、
ジャストシステムなどが参加するユニコードコンソーシアムにより
作られた。

ていしょう[提唱]
주의·의의 등을 제시하여 주장함, 종지의 대강을 제시하여 설법함

1993年に、国際標準との一致が図られ、
DIS 10646の当初案から大幅に変更されて、
Unicodeと概ね[注釈 1]互換のISO/IEC 10646が制定された。

せいてい[制定] 제정.


はかる[図る·慮る]
생각하다, 목적하다;노리다, 노력하다;계획하다

おおむね[概ね·大概·大旨]
대체의 취지; 대체(로); 대개; 대강.(=だいたい·あらまし)

ごかん[互換]
호환; 맞바꿀 수 있음.

はぶく[省く]
덜다, 생략하다;줄이다, 없애다

데이터베이스 기초지식...

데이터 정의 언어 (DDL : Data Definition Language)
데이터 조작 언어 (DML : Data Manipulation Language)
데이터 제어 언어 (DCL : Data Control Language)

UPDATE USER_MASTER
SET
    DEPT_NO = '0004',
    MODIFIED_ON = SYSDATE
WHERE
     USER_ID = '0001'

DELETE
  FROM USER_MASTER
 WHERE USER_ID IN ('0020', '0019');


DDL(데이터 정의 언어) 문(Transact-SQL)
Data Definition Language, DDL


문서 형식 정의(Document Type Definition, DTD)

データ定義言語 / DDL (Data Definition Language)
DDL ができること

スキーマ オブジェクトの作成、変更および削除 ( CREATE、DROP 、TRUNCATE、ALTER(※1) 、etc)
権限およびロールの操作 (GRANT、REVOKE)
スキーマ オブジェクトの分析 (ANALYZE(※2))
監査の定義 (AUDIT)
スキーマへのコメントの追加(COMMENT)
(※1) ALTER SESSION (および SET ROLE)、ALTER SYSTEM は、それぞれ セッション制御文、システム制御文 という特別な位置付けがされている。 そして双方とも DDL の特徴である 暗黙コミット が発生しないため DDL ではないか、または、例外事項と思われる。

(※2) DBMS_STATS パッケージはストアドパッケージなので、DDL とは呼べないが、実験してみたところ、 先行したトランザクションを ロールバック できなかったので、どこかでコミットはされている。 自律型トランザクション のプロシージャではないようである。(Oracle 10g 時点)

SQL DDL コマンド一覧

ALTER 〜 すべて (=セッション、システム制御文を含むかどうかわかりません)
ANALYZE
ASSOCIATE STATISTICS / DISASSOCIATE STATISTICS
AUDIT
COMMENT

CREATE 〜 すべて
DROP 〜 すべて
TRUNCATE
FLASHBACK 〜 すべて
PURGE
RENAME

GRANT
REVOKE
NOAUDIT

データ操作言語 / DML (Data Manipulation Language)
Oracle において DML とは Data ( access and ) Manipulation Language となっている。

SQL DML コマンド一覧

SELECT (≠ Manipulate) / SELECT FOR UPDATE
INSERT
DELETE
UPDATE
MERGE Oracle 9i

CALL
LOCK TABLE

EXPLAIN PLAN


データ制御言語 / DCL (Data Control Language)
Oracle のマニュアルにおいて DCL という文言は(おそらく)存在していない。
何故かは知りませんが推測すると DCL 表記(標準SQL「しばり」)を Oracle を持ち込んでしまうと Oracle 固有の命令も含まれたりして「美しくない」&「後追いの標準によって面倒」なことになってしまうのを避けているのだろう。

DCL とは 標準SQLや他のベンダの DBMS をみると GRANT、REVOKE、トランザクション制御文と記されてるドキュメントが多いです。
ちなみに Oracle では GRANT、REVOKE は 「Data Definition Language 文」 に含まれ、COMMT や ROLLBACK は「トランザクション制御文」である。つまり、どちらのコマンドも DCL の一部という表記もありません。

SELECT * FROM table1 WHERE EXISTS ( SELECT /*+ NO_UNNEST */ * FROM table2 〜 )

이클립스 단축키

이클립스 단축키

Ctrl + Q   --> 수정전으로 바로 가기.
Ctrl + F11  --> Run As를 실행한 것과 같은 단축키입니다.
Ctrl + D    --> 커서가 위치한 줄 자체를 지워버립니다.
Ctrl + /    --> 주석처리를 위한 단축키 입니다.
                드래그를 한 다음 이 단축키를 누르면 드래그된 줄이 주석 // 처리 됩니다.
Ctrl + Shift + /  ---> 주석처리를 위한 단축키 이며 이는 /* */ 으로 주석처리 됩니다.
Alt + ↓, Alt + ↑ ---> 줄바꾸기입니다. 현재 커서가 위치한 줄을 위쪽 아래쪽으로 이동시켜 줍니다.

Shift + End ---> 한줄 선택하기
End --> 한줄끝으로 가기

ctrl + E ---> 편집기 빠른 전환
              띄워놓은 파일 목록이 뜨며, 선택한 파일로 빠르게 전환이 가능

ctrl + K, ctrl + shift + K
선택한 문자열과 동일한
다음/이전 문자열 찾기, 찾을 문자열을 선택 후, 단축키 실행

ctrl + alt + D
디버그 모드로 서버를 실행
ex) Tomcat v9.0 at localhost 선택 후, 단축키 실행

[Java > Editor > Folding] 클릭해서 아래처럼 체크를 합니다.
대부분 [Header Comments / imports]를 체크하시는데 각자에 맞게 체크하시면 됩니다.


Navigation

Ctrl + Shift + E : 에디터안에서 열린 파일간의 이동
Ctrl + E : 에디터안에서 열린 파일간의 이동(작은 레이어로 뜬다.)
Ctrl + F6 : 에디터안에 열링 파일간 이동하는데 F6누를때마다 하나씩 순차적으로 넘어감.
Ctrl + E : 퀵 에디터간 이동
Ctrl + F7 : 뷰간 전환
Ctrl + F8 : 퍼스펙티브 간 전환
F12 : 어디서든 에디터로 포커스 됨


etc..
Ctrl + Shift + L : 단축키 리스트
Ctrl + 3 : Quick Access
Ctrl + M : 화면 최대화
Ctrl + W : 파일에디터 닫기
Alt + Shift + X, R : Run on Server
F11 or Ctrl + F11 : 최근 실행한 Run 실행


Information
Ctrl + Shift + R : 리소스 찾기
Ctrl + O : 레이어로 현재파일의 Outline 보여줌
Ctrl + T : 레이어로 계층구조 보여줌
Ctrl + Shift  + Space : 메서드의 괄호안에서 누르면 파라미터 타입 볼 수 있음.
Ctrl + 1 : 에러난 곳(빨간 줄 표시)에서 누르면 레이어로 해결방법이 나옴.
F3 : 해당 메서드나 클래스가 정의된 곳으로 이동
Ctrl + Shift + G : 해당 메서드, 객체, 변수가 사용(호출)된 모든 곳을 찾는다.

StringUtilsの使い方


「文字列がnullのときの例外処理が面倒」
「文字列を調べる方法を知りたい」
「空白や特定の文字を削除したい」
「文字列を置換や追加したい」

StringUtilsの使い方

StringUtilsクラスは、文字列がnullの場合でもNullPointerExceptionの例外が
発生しないように作られています。

そのため、文字列がnullの場合に例外を回避するコードを書く手間を省くことができます!

StringUtilsクラスは「Apache Commons Lang」のライブラリに含まれているため、
使用するにはライブラリをダウンロードしてプロジェクトに追加する必要があります。

ライブラリのダウンロードページはこちらです。
http://commons.apache.org/proper/commons-lang/download_lang.cgi

また、ライブラリを使うには次のようなimport文が必要です。
import org.apache.commons.lang3.StringUtils;

nullの処理以外は標準APIと同じ動作をするため、
この記事では文字列がnullの場合の動作を中心に解説します。

文字列を調べる方法

文字列がnullか空か空白か調べる

文字列がnullか空か空白かを調べるにはisEmptyメソッドと
isBlankメソッドを使います。

次の例でisEmptyとisBlankの動作を確認してみましょう。


StringUtils.isEmpty(null)   // true
StringUtils.isEmpty("")   // true
StringUtils.isEmpty(" ")   // false

StringUtils.isBlank(null)   // true
StringUtils.isBlank("")   // true
StringUtils.isBlank(" ")   // true

StringUtils.isEmpty(null)   // true
StringUtils.isEmpty("")   // true
StringUtils.isEmpty(" ")   // false

StringUtils.isBlank(null)   // true
StringUtils.isBlank("")   // true
StringUtils.isBlank(" ")   // true
文字列がnullの場合でも、isEmptyとisBlankは例外を発生させずに”true”を
返しているのが確認できます!

文字列を比較する

文字列を比較するにはequalsメソッドとcompareメソッドを使います。


StringUtils.equals(null, null)   // true
StringUtils.equals(null, "a")   // false

StringUtils.compare(null, null)   // 0
StringUtils.compare(null , "a")   // -1
StringUtils.compare("a", null)   // 1

StringUtils.equals(null, null)   // true
StringUtils.equals(null, "a")   // false

StringUtils.compare(null, null)   // 0
StringUtils.compare(null , "a")   // -1
StringUtils.compare("a", null)   // 1
文字列がnullの場合でも比較ができていることが確認できます!

指定した文字列があるか調べる
指定した文字列があるか調べるにはindexOfメソッドとcontainsメソッドを使います・
StringUtils.indexOf(null, “a”)   // -1
StringUtils.indexOf("abc", "b")   // 1

StringUtils.contains(null, “a”)   // false
StringUtils.contains("abc", “a”)   // true

StringUtils.indexOf(null, “a”)   // -1
StringUtils.indexOf("abc", "b")   // 1

StringUtils.contains(null, “a”)   // false
StringUtils.contains("abc", “a”)   // true
indexOfメソッドのように戻り値がint型の場合は、
文字列がnullのときに”-1”を返します。

アルファベットか数字か空白か全角か判定する

アルファベットや全角、半角などの文字を判定するには、
isAlphaメソッド、isNumericメソッド、
isWhitespaceメソッド、isAsciiPrintableメソッドを使います。


StringUtils.isAlpha(null)   // false
StringUtils.isAlpha("abc")   // true

StringUtils.isNumeric(null)   // false
StringUtils.isNumeric("123")   // true

StringUtils.isWhitespace(null)   // false
StringUtils.isWhitespace("")   // true
StringUtils.isWhitespace("  ")   // true

StringUtils.isAsciiPrintable(null)   // false
StringUtils.isAsciiPrintable("samurai")   // true
StringUtils.isAsciiPrintable("さむらい")   // false

StringUtils.isAlpha(null)   // false
StringUtils.isAlpha("abc")   // true

StringUtils.isNumeric(null)   // false
StringUtils.isNumeric("123")   // true

StringUtils.isWhitespace(null)   // false
StringUtils.isWhitespace("")   // true
StringUtils.isWhitespace("  ")   // true

StringUtils.isAsciiPrintable(null)   // false
StringUtils.isAsciiPrintable("samurai")   // true
StringUtils.isAsciiPrintable("さむらい")   // false
StringUtilsを使うと文字の判定も簡単に行うことができます。


空白や特定の文字を削除する方法

空白や制御文字を削除する

空白や改行コードなどの制御文字を
削除するにはtrimメソッドとstripメソッドを使います。


StringUtils.trim(null)   // null
StringUtils.trim("samurai\n")   // “samurai”

StringUtils.strip(null)   // null
StringUtils.strip("  abc  ")   // “abc”

StringUtils.trim(null)   // null
StringUtils.trim("samurai\n")   // “samurai”

StringUtils.strip(null)   // null
StringUtils.strip("  abc  ")   // “abc”
文字列の先頭と末尾の空白や改行コードが削除できました!

指定した文字を削除する

指定した文字を削除するにはremoveメソッドを使います。

StringUtils.remove(null, "a")   // null
StringUtils.remove("samurai", "a")   // “smuri”

StringUtils.remove(null, "a")   // null
StringUtils.remove("samurai", "a")   // “smuri”
このように文字を指定して削除することができました!

文字列を置換や追加する方法

指定した文字を置換する

指定した文字を置換するにはreplaceメソッドを使います。

StringUtils.replace(null, "a", "b")   // null
StringUtils.replace("samurai", "a", "b")   // “sbmurbi”

StringUtils.replace(null, "a", "b")   // null
StringUtils.replace("samurai", "a", "b")   // “sbmurbi”
このように文字列の置換ができました!

文字列がnullのときに空の文字列に変える

文字列がnullのときに空の文字列を返したい場合には
defaultStringメソッドを使います。


StringUtils.defaultString(null)   // “”
StringUtils.defaultString("")   // “”

StringUtils.defaultString(null)   // “”
StringUtils.defaultString("")   // “”
このようにnullを空の文字列に変えることができました!

文字列を追加する

文字列の先頭に指定した桁数になるように
文字列を追加するには、leftPadメソッドを使います。


StringUtils.leftPad(null, 1)   // null
StringUtils.leftPad("a", 3)   // "  a"
StringUtils.leftPad("a", 3, "b")   //”bba”

StringUtils.leftPad(null, 1)   // null
StringUtils.leftPad("a", 3)   // "  a"
StringUtils.leftPad("a", 3, "b")   //”bba”
同じ文字列を繰り返し追加する場合はrepeatメソッドを使います。


StringUtils.repeat(null, 3)   // null
StringUtils.repeat("abc", 3)   // “abcabcabc”

StringUtils.repeat(null, 3)   // null
StringUtils.repeat("abc", 3)   // “abcabcabc”
このように文字列の追加ができました!


文字列の分割や結合をする

文字列を分割する

文字列を空白や指定した文字で分割するにはsplitメソッドを使います。


StringUtils.split(null)   // null
StringUtils.split("samu rai")   // ["samu", "rai"]
StringUtils.split("samu,rai", ",")   // ["samu", "rai"]

StringUtils.split(null)   // null
StringUtils.split("samu rai")   // ["samu", "rai"]
StringUtils.split("samu,rai", ",")   // ["samu", "rai"]
このように文字列の分割ができました!

文字列を結合する

文字列を空白や指定した文字で結合するにはjoinメソッドを使います。


StringUtils.join(null)   // null
StringUtils.join(["a", "b", "c"])   // "abc"
StringUtils.join(["a", "b", "c"], ':')   // "a:b:c"

StringUtils.join(null)   // null
StringUtils.join(["a", "b", "c"])   // "abc"
StringUtils.join(["a", "b", "c"], ':')   // "a:b:c"
このように文字列の結合ができました!

2017년 10월 13일 금요일

루가의 복음서 6장 [공동번역:현대인의성경]

루가의 복음서 6장 [공동번역:현대인의성경]

31.너희가 남에게 대접을 받고 싶은 그대로 남을 대접하여라.

32.너희를 사랑하는 사람들만 사랑한다면 너희가 무슨 칭찬을 받겠느냐? 죄인들도 자기를 사랑하는 사람은 사랑한다.

33.너희에게 친절을 베푸는 사람들에게만 친절을 베푼다면 너희가 무슨 칭찬을 받겠느냐? 죄인들도 그 정도는 할 줄 안다.

34.너희가 다시 받을 생각으로 사람들에게 빌려준다면 무슨 칭찬을 받겠느냐? 죄인들도 되돌려 받을 줄 알면 빌려 준다.

35.그러나 너희는 원수를 사랑하고 그들에게 친절을 베풀며 아무것도 바라지 말고 빌려주어라. 그러면 너희가 큰 상을 받을 것이며 하나님의 아들이 될 것이다. 그분은 은혜를 모르는 사람과 악한 사람들에게도 인자하시다.

36.너희 아버지께서 자비로우신 것처럼 너희도 자비로운 사람이 되어라.

37.남을 판단하지 말아라. 그러면 너희도 판단을 받지 않을 것이다. 남을 죄인으로 단정하지 말아라. 그러면 너희도 죄인 취급을 받지 않을 것이다. 남을 용서하여라. 그러면 너희도 용서를 받을 것이다.

38.주어라. 그러면 너희도 받을 것이니 너희에게 누르고 흔들어 넘치게 부어 주실 것이다. 너희가 남에게 되어 주는 것만큼 되돌려 받을 것이다.'

39.또 예수님은 그들에게 비유를 들어 이렇게 말씀하셨다. '소경이 어떻게 소경을 인도할 수 있겠느냐? 그렇게 하다가는 둘 다 구덩이에 빠지고 말 것이다.

40.학생이 선생보다 낫다고 할 수는 없으나 완전히 다 배우고 나면 그 때에는 선생과 같이 될 것이다.

41.왜 너는 형제의 눈 속에 있는 티는 보면서 네 눈 속에 있는 들보는 보지 못하느냐?

42.네 눈 속에 있는 들보는 보지 못하면서 어떻게 형제에게 '네 눈 속에 있는 티를 빼내 주겠다.' 하고 말할 수 있느냐? 위선자야, 먼저 네 눈 속의 들보를 빼내어라. 그러면 네가 밝히 보고 형제의 눈 속에 있는 티도 빼낼 수 있을 것이다.

43.좋은 나무가 나쁜 열매를 맺을 수 없고 나쁜 나무가 좋은 열매를 맺을 수 없다.

44.나무는 그 열매를 보면 안다. 가시나무에서 무화과를 딸 수 없고 찔레에서 포도를 딸 수 없다.

45.선한 사람은 마음 속에 쌓인 선으로 선한 말을 하고 악한 사람은 마음 속에 쌓인 악으로 악한 말을 한다. 사람은 마음에 가득 찬 것을 입으로 말하기 마련이다.

46.너희가 나를 보고 입으로는 '주님, 주님' 하면서도 어째서 내가 말하는 것은 실천하지 않느냐?

47.나에게 와서 내 말을 듣고 실천하는 사람은 바로 이런 사람과 같다.

48.그는 땅을 깊이 파서 반석 위에 기초를 놓고 집을 짓는 사람과 같다. 홍수가 나서 흙탕물이 그 집에 세차게 부딪쳐도 튼튼하게 잘 지었기 때문에 무너지지 않는다.

49.그러나 내 말을 듣고도 실천하지 않는 사람은 기초 없이 맨 땅에 집을 짓는 사람과 같다. 홍수가 밀어닥치면 그런 집은 곧 무너져 크게 파괴되고 만다.'