기본 콘텐츠로 건너뛰기

2013의 게시물 표시

Java garbage collection애 대한 이해

Java heap management 자바의 메모리 관리는 garbage collection의 효율성을 높이기  위해 존재한다. 자바의 특징 중 하나는  JVM이 자동으로  메모리 관리를 하는 것이다. 정확히 말하자면 메모리 해제만을 자동으로 한다. 그리고 이 기능을 garbage collection이라고 한다. 그림 1. Layer of heap  그림 1에서 볼 수 있듯이,  heap 메모리 영역은 Eden과 Tenured로 크게 2 영역으로 나눠진다.   (Eden은 자유영역 정도로 볼 수 있다. Object의 생성/소멸이 자유롭게 또는 빈번하게 이뤄지는 영역이라는 뜻으로 볼 수 있다. Tenured는 종신 영역이라 번역할 수 있는데, object가 이곳에 들어가면 빠져 나올 수 없다고 이해하는 것이 쉽다. 실제로 이런 이름이 어울리는 이유는 생성/소멸의 빈도에 따라 object의 위치를 바꾸기 때문이다.) 그림 2. Heap에서의 object 이동   그림2를 보면 heap 에서의 object의 이동을 원리를 알 수 있다. 

비니지니스 로직 처리 Workflow

  현재 확장 가능한 비지니스 로직 처리에 대한 모델 설계 및 룰엔진을 개발하고 있다. 기존의 로직인 단순 1:1 이벤트 처리 방식이었다. 즉, A -> B 라는 state가 없는 로직이었다. "A라는 이벤트가 발생하면 B라는 액션을 수행한다."  이전까지는 Simple 이벤트/액션이라고 할 수 있다. 지금 설계하는 부분은 Real Workflow라고 할 수 있다.  Complex event processing의 시작인것이다. 다양한 이벤트를 받아들이고, 복잡한 이벤트 조합 조건을 판단하여,  사용자가 원하는 액션을 처리해주는 역할을 할 것이다.   여기서 중요한 것은 workflow object이다. 이전까지의 event processing이 stateless 상태였다면, complex event processing을 위해 state 유지가 필요하기 때문이다. 단기적으로 인메모리에서 관리 가능하지만, 일정 규모 이상의 event processing이 필요할 경우 DB로 넘어가야 할 것이다.

프로그래머에게 필요한 EQ

  "당신은 똑똑하신가요? 그래서 코딩 잘하시나요?"   좋은 프로그래머가 되기 위해서, 인정받기 위해서 필요한 것이 똑똑함, IQ라고 생각하시는가요? 물론 기본적인 논리적 사고, 분석력은 있어야 합니다. 아니 프로그래머라면 그냥 있다고 보면 되겠네요. IQ 차이는 10000 라인에 만들 수 있는 프로그램을 8000라인으로 줄여 줄 수 있는데 의미가 있다고 생각합니다.   EQ가 필요합니다. 프로그래머들은 혼자 일하는 일이 없습니다. 다른 프로그래머와 함께 일하는 것은 물론 마케팅, 기획 등 다양한 분야의 사람들과도 함께 일하게 됩니다. 그래서 일을 진행시키고, 마무리하는데 있어서 중요한 것이 EQ입니다.   EQ라고 하면 감성적인 능력입니다. 자신의 감정을 이해하고, 적절한 방법으로 표현할 수 있으며, 다른 사람들의 감정을 읽고, 적절히 반응해 줄 수 있는 능력입니다. 프로그래머들에게 필요한 능력이 바로 이런 능력이라고 할 수 있습니다. 아무리 좋은 아키텍처, 기술을 가지고 있더라도 회의 시간에 이를 적절히 피력하여 관철시키지 못하면 아무런 의미가 없습니다. 그런데 이런 회의를 이끌고, 의견 차이를 줄이는데 필요한 능력은 IQ가 아닌 EQ입니다.  회의나 토의를 하다가 감정적으로 대한다거나 화를 내서 회의를 망치게 되면 그 사람이 아무리 좋은 의견, 아이디어를 가지고 있더라도 무용지물이 되기 마련입니다. 게다가 개인적 평판까지 나빠지게 되어 실력까지 평가절하될 수  있는 것입니다.    프로그래머로서 새로운 기술을 익히는 것, 멋진 코드를 만들어 내는 것도 중요하지만, 사람들 사이에서 일어나는 일들을 이해하고 이해시킬 수 있는 감성적인 능력 EQ를 기르는 것도 그 무엇보다 중요하다는 것을 잊지말아야합니다.    다음은 EQ를 기를 수 있는 팁들을 모아본것입니다. 한두개씩이라도 실천해보려고 노력해보세요.  1. 너 자신을 알라. 2. 함께 울 수 있는 감수성을 키우자.  3. 기쁨, 슬픔을 말로 표현해보자.  4. 답례없는 도움을 배풀자. 

Connector, Maven, Salesman 중 난 누구?

  망콤 글래등웰의 '티핑 포인트'에서 소수의 법칙을 보면 3가지 유형의 사람들을 볼 수 있다. Connector, Maven, Salesman이 그 세가지 부류이다. 단어의 의미를 보면 각각의 유형이 어떤 역할을 할지 느낌이 올것이다.   Connector의 경우, 사람들을 연결해주는 역할을 한다. 한국에서는 '마당발'이라는 말을 쓰곤한다. 여러분야의 사라들을 알고 있으며, 알기 원하며, 사람들과의 소통을 즐기는 사람들이다.   Maven의 경우, 특정 분야의 방대한 지식을 가진 사람들을 말한다. 그리고 그에 한발 더 나아가 그 정보를 공유하려고 노력하는 사람들이다. 이들은 특정 분야의 글을 많이 쓰는 블로거들, 커뮤니티의 답글을 많이 다는 회원이라고 할 수 있다.   Salesman의 경우, 실제로 사람들을 하나로 역고, 일을 진행시켜 나가는 리더쉽, 카리스마를 갖춘 사람들이라고 할 수 있다.   Connector, Maven, Salesman 세 부류의 사람들이 모두 모여야지 하나의 변화를 만들어 낼 수 있는 것이다.   당신은 어떤 부류에 속하시나요? 나는 어떤 부류에 속하는가? 질문해 볼 필요가 있을 것이다. 혹은, 나는 어떤 부류에 속하고 싶은가? 라고 물어보자. 그리고 그렇게 되기 위해 한발 더 나아가보자.

DrJava 설치 방법

  보통 Java를 사용하여 프로젝트를 만들때, Eclipse라는 IDE(Integrated Development Environment)를 사용합니다. 그러나 Java를 처음 배우려는 사람들에게 복잡한 프로젝트까지 커버할 수 있는 Eclipse는 다양한 환경 설정, 복잡한 UI가 어렵게 느껴질 수 있습니다. 이런 사람들을 위해서  DrJava를 추천합니다.   DrJava 란?    LIDE(Lightweight IDE)라고 할 수 있습니다. 기본적으로 자바를 학습하려는 사람들을 위해  디자인되었습니다. 직관적인 인터페이스를 제공하고, line by line으로 자바 코드를 실행할 수 있는 interactive console을 제공합니다. 설치 순서 1. jdk 설치 2. DrJava 설치   2-1.   http://drjava.sourceforge.net 사이트에 접속   2-2. Current Stable Release 에서 본인의 환경에 맞는 App 다운로드   2-3. 만약 다음과 같은 경고창을 보았을 경우 java jdk나 jre가 제대로 설치 되었는지 확인 3. 설치 완료 후 실행 4. 다음과 같이  DrJava가 실행된다.

BicData maturity model(성숙모델)

성숙모델은 2011년 마르쿠스 스프렌저가 정의한 모델로 3년간 2천개 조직을 대상으로 인터뷰와 업무를 통해 도출됐다. ■1단계 사용할 만한 데이터가 없는 단계 1단계는 성숙모델의 이론적 토대이자 출발점이다. 이 상황의 기업은 어떤 사용가능한 데이터도 갖고 있지 않다. 이 단계에서 조직은 통계를 운영할 수 없다. 그리고 확실히 이해도 않으며, 정보화 거버넌스와 이디스커버리 수요에 대해 넘겨 짚을 뿐이다. 사업을 개선해줄 정보에 기반한 인사이트도 없다. 조직은 밖에 조언을 구하고, 서비스프로바이더가 정보화 요구를 충족하기 위해 많은 돈을 사용하게 한다며 경멸한다. ■2단계 빅데이터 조직은 이 단계에서 빅데이터를 수용하기 위한 첫발을 뗀다. 그들은 꾸준히 내부와 외부의 소스로부터 데이터를 모은다. 그러나 이 데이터를 가치있는 정보로 바꿀 도구는 갖고 있지 않다. 단순히 데이터만 모아둘 뿐이다. 직원들은 분석보다 정보를 찾는데 더 많은 시간을 들인다. 많은 경우에 직원들은 데이터의 홍수 속에 포기해버린다. 그들의 결정은 정보가 거의 없이 이뤄진다. 그들의 회사는 결코 그들의 정보를 전략적인 정보, 경쟁력있는 자산으로 바꿀 기회를 얻지 못한다. 일부 회사들은 내부 데이터 인프라스트럭처를 창조하고 싶어한다. 이들의 첫 단계는 내외부에서 수집된 데이터 소스에 그들과 관련된 아이덴티티를 부여하는 것이다. 그들은 순위를 정해 데이터를 캡처하는 메커니즘을 만들어간다. 이를 통해 그들은 초보적인 분석을 할 수 있는 데이터 구조를 세우며, 이 지점에서 성숙의 단계를 밟아갈 기초를 닦는다. 이런 조직은 회랑에서 걸어내려와 전례없는 움직임을 고려해야 할 필요가 있다. 그들은 빅데이터 분석 데이블에 법률, 정보화 거버넌스 이해관계자를 초대할 필요가 있다. 이는 빅데이터 분석과 정보화 거버넌스, 이디스커버리 등의 통합을 시작하는 중요한 절차다. ■3단계 적합한 데이터 세번째 모습은 양질의 데이터를 사용하는 조직이다. 이들은 문맥과 관련성을 그들의 데이터

Collection들의 특징

1. Collection 인터페이스는 객체의 그룹으로, 중복을 허용한다. 2. Set 인터페이스는 Collection 객체를 상속했고, 저장되는 값의 중복이 불가능하다. 1) HashSet 동기화 X 가장 빠른 집합, HashMap보다 느림 2) TreeSet 동기화 X HashSet 보다 느림, 키가 정렬됨 3. List 인터페이스는 Collection 객체를 상속했고, 저장되는 값의 중복이 가능 하고, 저장된 Index 번호를 통한 접근이 가능하다. 1) ArrayList 동기화 X 가장빠름, null 허용 2) LinkedList 동기화 X 느림 3) Vector 동기화 O ArrayList 보다 느림 4) Stack 동기화 O Vector와 동일한 속도, LIFO 가능 4. Map 인터페이스는 Set 또는 Collection 어느것도 상속하지 않는 독불장군(?) 이다. 1) HashMap 동기화 X 가장 빠름, null 값 허용 2) Hashtable 동기화 O HashMap보다 느림, 동기화, null 값 허용안함 3) TreeMap 동기화 X Hashtable과 HashMap보다 느림, 키가 정렬됨 5. 선택의 기준 1) 중복 허용 여부 2) 동기화 지원 여부 : Multithreaded 환경 3) 검색 속도 에서의 선택 - ArrayList ? Vector ? ArrayList 와 Vector 의 차이점은 동기화를 지원하느냐의 여부다. 동기화가 필요한 곳에는 Vector를 사용하면 되고, 대부분의 경우는 ArrayList를 사용하면 된다. 사용자가 동기화 처리한 ArrayList 보다는 Vector 가 빠르다. Map 에서의 선택 - HashMap ? Hashtable ? HashMap 과 Hashtable 도 ArrayList 와 V