내 아이에게 프로그래밍을 가르치지 않는 이유 잡다한 생각들

 나는 내 아이들이 뛰어난 프로그래머를 거쳐 위대한 아키텍트가 되기를 갈망하지만 아직까지 프로그래밍을 가르치지는 않는다.
그 이유는 프로그래밍이라는 영역이 단순한 암기 지식으로 접근할 수 있는 분야가 아니라고 생각하기 때문이다.

 프로그래밍, 정확하게 programmatic development에 대해 나름대로의 정의를 내리자면,

 "논리적 사고가 뛰어난 사람이 주어진 문제에 대해 컴퓨터를 활용하여 해결해 나가는 과정"이라고 정의하고 싶다.

 따라서, 많은 사람들이 사용하고 있는 방법들을 학습하여 나의 생산성을 높이는 것은 나의 경력이나 생산성을 높여 직업을 얻기 위한 목적이 강한 coding이나 composition에 해당하는 것이지 development라고 보기 어렵다. 물론 이런 과정들을 거쳐 논리적 사고가 발달하고, 다른 어떤 사건적 요소가 가미되어 새로운 아이디어가 떠오를 수도 있을 것이다.

 하지만, 인간 본연의 특성상 쉽게(?) 얻은 달콤한 유혹은 생각을 멈추게 하는 법이므로, 나는 나의 아이들을 그런 유혹에 길들이고 싶지 않다,

 아이들과 함께 하는 다양한 형태의 논리적인 놀이 등을 통해 논리적 사고에 익숙하도록 하는 수년 간의 과정을 거친 후에 프로그래밍에 관심을 보이고 집중하게 된다면, 그 아이는 남들이 십년 넘게 배운 과정을 1년 이내에 마스터하고 그 이후는 누구도 상상할 수 없을만큼 빠른 속도로 성장하게 될 것이라고 믿는다.

 아이들이 성장하는 과정을 건축에 비유한다면, 눈에 보이는 "사상누각"이 항상 불안하고 흔들리며, 성장에 한계가 있기 마련이다. 하지만, 오랜 시간이 걸리고, 복잡한 재료들이 융합되는 과정이 필요한 콘크리트 기초 위에 세워진 건물은 흔들림도 없이 안정될 뿐만 아니라, 무한한 성장 가능성을 가진 것에 비유하고 싶다.

 아이들에게는 실패를 통한 풍부한 경험이 필요하다.

Struggling to keep soa-infra for long period? SOA

 Idealy, apply partitioning to soa-infra tables and purge it please.
 Soa-infra data를 오랜 기간 동안 보관해야 한다면? soa-infra 테이블을 파티셔닝하고, 기간별로 삭제하는 것이 가장 이상적인 방법이다.

 But some clients want to keep received payloads to reinitiate the faulted process to resolve unexpected system crash or make sure the guaranteed delivery between two different management team's responsibility, especially, politicians :-P. So, it is required to be desinged retention period of delivered queue or history tables.

 하지만, 일부 고객들은 수신한 메시지를 보관하고 싶어 하는데 그 이유는 예기치 못했던 시스템 장애 시에 실패한 프로세스를 간단하게 재기동하거나 메시지를 올바르게 전달했다는 기록을 갖고 싶어하기 때문이다. 그래서 메시지 큐나 이력 테이블의 보관주기를 설계하고
데이타를 유지하려고 한다.

 In the large SOA integrated system, it is frequently required to purge soa-infra to avoid tablespace growth. How to resolve unexpected new requirement to keep BEPL payload with limited soa-infra tablespace timely? 

 하지만 규모가 큰 SOA 통합 시스템에서는 DB가 비대해지는 것을 막기 위해 soa-infra에 대한 purge작업이 꼭 필요하다. 이러한 두 가지 요건을 모두 만족하면서 BPEL의 payload를 일정기간 유지할 수 있는 방법이 있을까?

 My suggestion is to backup BPEL payloads from soa-infra as it is required.
 Here's my design and sample backup SQL:

 내가 제안하는 방법은 soa-infra 테이블에서 BPEL의 payload만을 추출하여 별도로 백업해 놓는 방법이다.
상세한 내용은 아래의 그림과 backup SQL을 참조하기 바란다.




INSERT /*+ append */ INTO exp_payload (
    SELECT es.guid,
            bi.ECID,
            bi.CIKEY,
            SensT.ONum,
            Senst.rnum,
            ad.bin bin,
            xd.document document,
            xd.DOCUMENT_TYPE document_type,
            bi.cpst_inst_created_time created_time,
            null updated_time,
            bi.CREATION_DATE,
            bi.MODIFY_DATE
    FROM PRD_SOAINFRA.exp_source es,
            PRD_SOAINFRA.cube_instance bi,
            PRD_SOAINFRA.audit_details ad,
            PRD_SOAINFRA.xml_document xd,
            (SELECT composite_instance_id,
                    max(decode(sensor_name,'OrderNumber',string_value,null)) ONum,
                    max(decode(sensor_name,'RevisionNumber',string_value,null)) RNum
            FROM  PRD_SOAINFRA.composite_sensor_value
            GROUP BY composite_instance_id) senst 
    WHERE bi.COMPOSITE_NAME = es.process_name
    AND ad.detail_id = 0
    AND bi.cpst_inst_created_time + interval '7' day > systimestamp
    AND bi.cikey = ad.cikey
    AND ad.DOC_REF = xd.DOCUMENT_ID(+)
    and senst.composite_instance_id = bi.cmpst_id
);


How to disable the WebLogic diagnostics log? WebLogic

 To save the system resource, it is possible to disable diagnostic log using Java options. WebLogic diagnostic log is not required in stable production system.

 시스템개발이 완료되고 운영모드가 안정화 되고 나면 /data/store/diagnostics 디렉토리에 저장되는 diagnostic log는 더 이상 볼 필요가 없게 된다. 이런 경우 불필요해진 기능을 제거하여 시스템의 성능을 향상시키기 위해 WebLogic의 Java option에 아래와 같이 설정하여 해당 기능을 disable해준다.

-Dcom.bea.wlw.netui.disableInstrumentation=true

-Dweblogic.connector.ConnectionPoolProfilingEnabled=false

-D_Offline_FileDataArchive=true


1 2 3 4 5 6 7 8