'분류 전체보기'에 해당되는 글 1286건

허니몬의 IT 이야기/IT 트랜드



3개월에 한번씩 찾아오는 '공감세미나'가 지난 10월 20일, 강남 교보타워 23층에서 열렸다.
이번 '공감세미나'의 주제는 '자바 라이프, 자바 스타일'이었다. 
  자바의 탄생에서 시작해서 자바가 가지고 있는 장점을 통해 자바라는 언어를 한줄로 정의해보고, 
자바라는 프로그래밍 언어와 함께 지내온 세월을 되짚어보고, 현재 사용하고 있는 자바를 보다 
효율적으로 분석하고 활용할수 있는 방법을 배워보았다. 마지막에는 '토비의 스프링3' 낭독회(솔직히 ... 이런 느낌이었다)로 정리가 되었다. 
  마지막 부분에서는 아쉬운 부분들이 많았다. 그렇다고 딱히 내가 뭐라고 할 수 있는 부분은 아니다(그러면서 뭐라고 하고 있는 이 몹쓸 행태, 나중에 내가 발표를 하면 어떤 소리를 듣게 될기 걱정이 앞선다).

  이번 '공감세미나'는 내가 자바개발자로서 걸어온 삶에 비추어, 15년 이상의 연륜을 머금은 자바라는 
언어를 살펴볼 수 있는 좋은 시간이었다. 적어도 십여년 정도는 우리나라에서 '자바'라는 프로그램 언어를 통해서 밥굶을 일은 없을거라는 확신도 가지게 되었다. 물론 밥굶을 걱정이 사라지면, 그 다음은 잉여력을 모아서 조금 더 새로운 것들에 대해 관심을 가지고 익히려는 '자기계발'의 노력을 멈춰서는 안된다. 
  '프로그래머'로 살아가기 위해서 필요한 습관은 '새로운 것을 배우고 익히는 것을 멈추지 않는 것'이라 생각한다. 그런 의미에서 보면 '요즘의 나'는 많이 게을러졌다. 회사일이 힘들다는 핑계로 10월은 
배움을 멀리해왔다.


공감 세미나 시작전 소식전달

이번에 자바서비스넷 사무국장님이 되셨다는 분은 세미나장을 술렁이게 만들었다. 이 분의 R 발음은 '살아있네!' 라는 표현이 적합할만큼 생동감 넘치게 잘 굴렀다. 그래서 세미나장이 어색해졌다는 아이러니함.

  • NIPA 공개SW 역량프라자
  • SK planet 소식
    • README 블로그(http://readme.skplanet.co.kr/) 소개
    • SK Planet 에서 주관하는 기술 컨퍼런스(테크 플래닛http://www.techplanet.kr/)이 곧 열린다.
      자세한 정보는 사이트를 참조하기 바라며, 곧 참관신청이 열릴 것이다. 이때는 빠르게 신청러쉬를 해내야겠다. 
      10월 마지막에 열리는 H3 컨퍼런스는 아쉽게도 참관신청을 따내지 못했다. 하아. Orz…

자바 탄생 이야기

  • 발표자 : 김영수
  • James Gosling : 자바의 창시자
  • Hello world(s)!
    • From Code to culture : A 10 Year Celebration of Java Technology
    • We’re missing it
    • 환경의 변화가 일어나고 있는 시기
    • Gang of four
    • Green team at Menlo Park
    • 네트워크 기반의 서비스 제작
  • OAK - THe tree outside his window
    • No Language for his idea then make it
    • 실험용으로 만든 언어를 활룡하는 것
  • In 1992, 13 members
  • Duke - Poe Palrang
    • 다른 관점? 자신이 작성한 코드를 단순히 돌리고 실행하는 것을 뛰어넘는다라…
  • Bill Joy
    • C++ 과 비슷하지 않느냐?
    • But almost nobody liked it.
  • going public : 공개의 길에 접어들다. Release
    • 실크
    • 후추
    • 네온사인
  • May 23, 1995
    • SunWorld Conference 에서 자바가 세상에 그 모습을 드러냈다.
  • 창시자의 많은 고민들이 묻어나는 언어
    • 디바이스에 대한 고민
  • 프레임워크를 사용하지 않으면 개발을 못하는 개발자들
    • 프레임워크에 대해서 의존적으로 변해가고 있는 것은 분명하다.
    • 나 역시도 프레임워크가 없다면 제대로 힘을 발휘할 수 있을까?
  • 자바
    • 네트워크 환경에 적합한 언어
    • Remote Contoler 에 적합한 언어
    • A Simple, object-oriented, distributed, interpreted, robust, secure, architecture-neutral, high-performance, multithreaded, dynamic language

    •  컴퓨터 개론의 느낌이 났다.  자바를 생업의 수단(내가 밥을 먹기 위해 선택한 언어니까. 내게는 밥과 같은 존재지! 
        먹고 사는 건 중요하잖아?)으로 삼았지만, 자바의 역사는 잘 모른다. 꽤 많은 사람들은 자신이 사용하는 언어의 ’역사’에 대해 무지하다. 그것이 어떤 목적을 가지고 누군가 만들었는지에 대해서는 관심을 가지고 시작하는 일은 흔하지 않다. 그러다가 애정이 생기면, 자신이 사랑하는 것에 대해서 하나라도 더 많은 것을 알고 싶은 욕심이 생긴다. 그 욕심들이 쌓이고 쌓여서 사랑이 되는 것이다. ’자바’를 사랑해서 나쁠 건 없잖은가? ㅎㅎ 요즘은 파이썬과 바람을 피고 싶은 마음이 뭉글뭉글 피어오르고 있는 상황이기는 하지만, 나의 프로그래밍 베이스캠프는 ’자바’다.

Java : The Good Parts

'남자는 핑크'라는 것을 몸소 보여주신 박성철님


  • 주제 ; 자바 언어의 특징과 활용 방안의 주관적인 탐구
  • 발표자 : 박성철(남자는 핑크!)
  • “프로그래밍 언어들을 한 문장으로 소개”
    • http://npcode.com/blog/archives/124
      • Perl
      • C++
      • J
      • List
      • Java : 자바는 공신력 있고 설득력 있는 한문장 소개를 찾지 못했다. C++ 보다 정체성이 불분명한 녀석이다.
        • Java 가 어떤 언어인지 살펴보고 정의를 해보자.
  • 화산파(화산파 정보)의 수련
    • 기종? 기본기, 내공부터 쌓자?
    • 검종? 기술부터 익히자!
    • 과연 나의 선택은? 나는 본의 아니게 검종부터 시작한듯 하다. 이제는 내공수련의 중요성을 깨닫고 심신수련을 병행하고 있달까?
  • 자신의 체격조건을 이용해서 홈런을 잘 친다.
    • 자바가 좋은 언어는 아니지만, 그 의미가 있다.
  • 자바 백서
    • 자바의 설게 목표
      1. 단순함, 객체중심, 친숙함
      2. 견고하고 안전한
      3. 아키텍처 중립성과 이식성
      4. 고성능
      5. 인터프리터, 스레드, 동작
      6. 1, 2는 언어, 3, 4, 5는 VM
    • 단순함, 친숙함
      • Java = C/C++ - WTF
      • 설계는 더이상 넣을 것이 없을 때 완성되는 것이 아니라, 더이상 뺄 수 없을 때 완성되는 것이다.
      • 지금까지 배워온 Syntax(다른 언어를 배워오던 경험)를 유지하면서 배울 수 있다.
    • 견고하고 안전한
      • 견고성 = 정적 static 타입(컴파일러가 타입을 확인)
      • 안정성 = 엄격한 strong 타입(실행 중에 타입 확인)
        • 타입체크를 통해서 안정성을 높여주겠다.
      • Unit testing isn’t enough. You need static typing too.
        • http://evanfarrer.blogspot.ca/2012/06/unit-testring-isnt-enough-you-need.html
        • 정적 타이핑은 버그를 탐지하기엔 불충분하며, 단위테스트를 해야한다.
        • 단위 테스트를 장착하고 나면, 정적 타입 확인은 과잉이다.
        • 정적 타이핑은 유효한 프로그램을 오류로 분류하기도 하므로 해롭다.
        • 사용자가 많고 테스트가 잘 정착되어 있는 파이선 오픈소스 프로젝트 네 가지를 하스겔로 1:1 포팅했더니…
      • 정적 타입의 또다른 장점
        • 도구(TOOL)지원
        • IDE : Eclipse, IntelliJ IDEA, Netbeans
          • FEED BACK
          • 자동 완성 / 자동 제안
          • 리팩터링 지원
          • Boiler plate code(너저분한 코드) 자동 생선
          • 자바 언어가 우리나라에서 지금의 영향력을 가지고 있는 이유 중 하나는 정적 타입이 가지는 장점이 최대한 활용되어 있기 때문이 아닐까 한다. 리팩토링(소스의 통합과 변경이 용이하다는 것이 가지는 장점은 무시할 수 없다)이 자유롭다(자유로운 만큼 잘못하면 낭패를 보기 쉽다).
        • 정적 코드 분석
          • PMD, CheckStyle, FindBugs, JDepend
    • 객체중심 프로그래밍
      • 범용언어
        • 인터페이스
          • 시뮬라67
            • 알고리즘 표현
            • 코드 분해
          • 스몰토크
            • 메시징 : 생물의 세포, 상호 작용을 하는 유기체로 판단
        • 패키지
          • 디렉토리
          • 이름 영역
          • 모듈 : 응집의 단위
        • 기본 가시성
          • public < protected < package-private < private
          • 캔트백(Kent beck)과 에릭 감마(Erich Gamma)의 가시성 토론 : 은익 정보 단위 테스트
        • 내부 클래스
          • Lisp 에서 나온 개념
          • 클래스 = 파일 원칙 위배(자바 1.1에서 추가)
        • 열거형(Enum)
          • C++에서 일부러 가지고 오지 않았던 특징
          • Java Enum = Class = Type Safe
          • Java 영역 namespace이 기본제공
          • 설계 패턴 중 상대 패턴(State Pattern) 적용가능
        • 지네릭
          • C++(template)에서 유보한 특징
          • 알고리듬이 처리할 타입을 사용시에 지정 코드 재사용 기술
          • Object는 안녕
          • 하지만 복잡한 상황이 생기기도
    • JVM
      • 인터프리터
        • 자바는 인터프리터 언어
        • 아키텍처 중립성, 이식성
        • 동적 로딩 & 바인딩 : 클래스 로더
        • 파이선과 유사한 실행구조 .java -> .class -> JVM .py -> .pyc -> PVM
      • 자동 메모리 관리(GC)
      • 리플렉션
        • 프로그램의 메타 데이터를 다를 수 있는 기술
      • 메타 프로그래밍
        • 다른 프로그램을 생성하거나 조작하는 프로그램을 작성하는 행위
          • 선행처리
          • 컴파일러 확장 - Lombok
          • 리플렉션 | 바이트 코드 생성/조작 - Spring Framework DI + AOP
      • 다언어 프로그래밍Polyglot
        • JVM 은 Java 만의 VM이 아니다.
        • Byte Code 라면 원천을 따지지 않고 실행
        • 80 : 20, 모든 문제를 해결할 수는 없다.
        • JVM에서 돌아가는 프로그밍 언어의 수는 90여개
  • Java는 관리자가 좋아하는 언어
    • 자바 코드의 총량
      • 상위 구조 재사용
      • 실 작성 코드량
      • 하위 기능 재사용
  • 언어 확장 : Library
    • 자바는 언어적 한계를 설계로 해결하도록 합니다. 그래서 좀 수다스럽고 번거롭지만 지금까지는 21세기의 코볼 역할을 잘 하고 있어요.
  • 구조 재사용 : 프레임워크
    • ’나 이제부터 프레임워크 만들거야.’라고 하면 망하기 쉽다.
  • 자바에 대한 공식 정의
    • 자바 프로그래밍 언어는 범용 병행 클래스 기반 객체 중심 프로그래밍 언어다. 특히 가능한 별다른 조건 없이 다양한 환경에서 동작하도록 설계되었다.
  • 자바를 배우려고 ’자바에 대한 입문서’를 펼치면 항상 첫장에서 하는 이야기가 있다.
    자바는 객체지향적인 프로그래밍 언어이고 다양한 환경(윈도우, 리눅스, 유닉스)에서 실행가능한 인터프리터 언어이다.
     이런 식의 설명이 있다. 아무런 지식이나 경험없이 읽으면 그냥 ’그렇군.’하고 쿨하게 넘어가게 된다. 사실 나는 지금도 ‘쿨하게’ 넘어간다. ㅡ_-);; 그런거 생각하면 머리 아프니까. ㅎㅎ 레드불 2캔의 위력은 엄청났다…

챔피언이 사랑한 언어, Java

자바를 정말 사랑하시는 표정이다.

  • 발표자 : 양수열(Heimdallr CEO)
  • 1996년
    • Java 라고 쓰고 Innovation 이라고 읽는다.
  • 오래전 그날
    • 새롭고 혁신적인 젊은 언어
    • 새롭게 성장하는 기술
    • 웹과 같이한 언어
    • 혁신을 좋아한 젊은 엔지니어들
    • 좋은 취지에 공감한 자바 개발자 커뮤니티
  • Keyword
    • Distrubuted Object(분산-객체)
    • OOP
    • Garbge Collector
      • JVM 엔지니어들이 C 전문가
    • Enterprise
      • 시스템이 커져가고 있다.
    • SOA
    • CBD
  • 2012년
    • Java 라고 쓰고 Platform 이라고 읽는다?
      • Java가 과연 플랫폼(기반)으로서의 역할을 하고 있는건가?
  • 우리의 오늘
    • Well matured Technology.
      • 서버 사이드의 개발을 하는 개발자는 없다. 서버 사이드 개발자가 귀한 대접을 받게 될거야. +_+)b
    • Language - > Platform
    • Old fashion & Old Engineer.
    • Cloud, Big data, Mobile + Java + other!!
    • Server-side 가 요구에 따라서 분리가 되고 있다.
  • 우리는 어디로?
    • Forever WAS!! (like Mainframe)
    • Mobile
    • Startup(Scale up! 확장에 대한 이야기)
      • 수요가 공급에 비해 턱없이 부족하다.
        • 하지만 자신의 실력이 없다면, 그것도 소용이 없다.
        • 자신의 실력을 키워라.
    • Platform + New language
    • Data Analysis(Big data, 개발자가 직접 빅데이터를 분석)
    • Algorithm
    • Courage(용기!) : 격변의 시기! 도전하고 시도해봐야한다.
  • A whole new World!
    • Developer = Creator!
    • Global Market
    • One Man Company
      • 개발할 수 있는 능력이 없으면 불가능하다.
    • HW -> SW 이슈 변화
    • High Technology
  •   전자정부 커뮤니티에서 만났던 양수열님과는 또 다른 편안한 모습이었다.
      그 때와는 달리 편안한 분위기로 세미나에 참가한 사람들의 분위기를 살피며 이야기를 하는 양수열님의 모습은 여유로워 보였다.
      청계천 옆 정보화진흥원에서 지켜봤던 떄와는 확연히 달랐다. 그 때야, ’전자정부 프레임워크를 통해 어떻게 써먹을 수 있을까?’라는 기대를 품고 갔던 사람들의 기대치와는 다른 발표였던 탓도 있긴 했다. ’전자정부 커뮤니티’에서는 왕왕 발생하는 일이다.
      사석에서 만나 이야기를 나눠본 ’양수열’님은 ’사람좋고 경험많은 부장님 스타일’의 느낌이 물씬 풍겨났다. ’JAVA 챔피언’이라는 칭호를 가진 사람에게서 풍겨나는 연륜을 품고 있달까? 그 모습은 어딘지 15년 묵은 자바와 비슷한 느낌이 났다. ㅎㅎ ’15년 묵은 자바’의 느낌은 어떤 모습일까? 쓰면서 상상해보고 있다.

자바 기반 시스템의 개발 및 운영에 도움이 되는 툴들


  • 발표자 : 이상민(About me로 청중의 웃음을 이끌어 낼 수 있는 발표자! 응?)

  • JDK, Profiling, troubleshooting, monitoring, ui, test, IDE tools

  • IDE
    • Eclipse만 IDE가 아니에요.
    • Netbeans, IntelliJ(하지만, 난 안쓸거야. 아마.)
  • JDK Tools
    • jps
      • java process 목록을 제공하는 툴
      • “pid 프로그램이름”
      • 자세한 옵션 보고 싶으면 jps -v
      • 해당 계정으로 실행한 자바 프로세스만 보임(다른 계정으로 실행한 프로세스 목록은 보이지 않음)
    • jstat
      • JVM의 상황을 모니터링하는 프로그램
      • 이 중에서 유용한 옵션들
        • gcutil : GC 상태 모니터링
        • gccapacity : JVM의 메모리 점유 상황 모니터링
      • GC 최적화시 사용
      • 운영중에도 사용가능하다
    • javap
      • 자바 클래스 파일 분석
      • javap -c className 을 실행하면, 해당 클래스의 opcode를 출력
      • Java virtual machine spec.
    • jstack
      • 스레드 덤프(thread dump) 발생 덤프 발생 시점에 어떤 스레드가 어떤 작업을 수행하는지 제공하는 덤프 파일
      • 사용하지 않는 것이 좋음 경우에 따라서 프로그램에 Hang 이 발생할 수 있음
      • Kill –3 pid 를 사용할 것을 권장
    • jmap
      • 힙 덤브 팔생 덤프 발생시 어떤 객체가 어떤 값을 갖고 있는지 저장
      • 운영시에 해당 프로그램을 실행하면 자바 프로세스가 멈추므로 꼭 필요한 경우에만 사용할것
      • 실행 옵션 jmap -dump:format=b,file=filename pid
    • jhat : Heap Dump 분석
    • jconsole, jvisualvm
  • Unit test tool

  • UI test tool
    • 주요툴
      • Selenium
      • NHN의 GUITAR
  • Acceptance test tool
    • 인수 테스트
    • 주요툴
      • fitness
      • NAF
  • Performance test tool
    • 시스템의 성능을 측정하기 위한 툴
    • Load Runner만이 성능 테스트 툴이 아님
    • 상용툴
      • QA Load(Microfocus)
    • 무료툴
      • Grinder
      • JMeter
  • Profiling tool
    • 프로그램의 성능, 메모리 사용량, 코드 커버리지 등을 확인할 수 있음
    • 운영 서버에 많은 성능 저하를 발생시키므로 반드시 개발자 PC 및 개발 서버에서 사용해야만 함
    • 상용과 무료툴로 나뉘지만, 상용툴을 권장
    • 자바 프로그래머들이 IDE만큼 옆에 끼고 살아야 하는 툴
    • 상용 프로파일링 툴들은 소스의 라인단위까지 분석이 가능하다.
      • 특정 라인에서 얼마나 시간과 메모리가 소요되었는지를 파악할 수 있음
    • 주요 툴
      • DevPartner for java
      • JProbe
      • JProfiler
        • Lock이 걸린 상황에 대한 분석이 쉽다.
    • 시작점을 찍고, 끝점을 찍으면 Snapshot 정보를 떨구는데 CPU 사용량, 각종 기록을 tree 형태로 제공
  • Monitoring tool이란?
    • APM : Application Performance Monitor
      • Jennifer
      • WebTune
      • Pharos
    • JMX : Java management extension
      • Visual VM
      • JConsole
  • Troublshooting 툴의 구분
    • Thread dump 분석툴
      • TDA
    • Heap dump 분석툴
      • IBM Heap analyzer
      • MAT
    • Tracing 분석툴
      • BTrace
        • Dtrace와 같이 수행중인 애플리케이션에 붙어 필요한 검증 가능
      • Byteman
  • CI Tool
    • 지속적이고 반복적으로 빌드를 수행해 주는 툴
    • Hudson, Jenkins
  • F/E tools(Front-End)
    • 웹 기반의 UI를 분석하기 위한 툴
    • 웹 페이지 최적화 툴
      • YSlow : 웹페이지에 대한 성능평가
      • Google Chrome : speed tracer
  • 유의사항
    • Tool은 Tool일뿐
    • 용도에 맞춰 사용
      • 남용할 경우 심각한 문제가 생김
      • 상황에 맞는 툴을 제대로 선택하는 것이 제일 중요
  • Tech Planet!
    • 11월 16일 코엑스 에서 열립니다.
    • 사전 참가등록은 10월 23일 오후 1시(13시)에 시작합니다. +_+)b


  • 프로그래머로 산다는 것

    저자
    유석문 지음
    출판사
    로드북 | 2012-09-26 출간
    카테고리
    컴퓨터/IT
    책소개
    -
    가격비교

  • 의 공동저자 중 한번이시다. 지금 읽고 있는 책을 모두 읽으면 구매해보려고 한다.

자바 개발 안티 스타일 - 스프링을 이용한 레거시 코드 개선 중심으로

  • 발표자 : 윤여진
  • 초난감 Dao
  • 책 내용정리의 시간이구나. 죄송합니다. 쓸 말이 별로 없어요.


  ’자바’라는 언어를 밥벌이의 도구로 삼고 이 바닥에 뛰어든지 어느덧 3년째에 들어서고 있다. 보통 3년차가 되면 뭔가 일을 잘 할 수 있을 듯한 느낌을 품게 된다. 그런데 막상 일을 하면, 여전히 모르는 것이 더 많다. 그래서 좌절감을 느끼는 경우가 많아진다. ‘나, 프로그래밍 좀 하는 것 같아!’ 라고 자신만만하게 들이대다가, 차갑게 마음이 식어버린 여인의 손바닥 마냥 매서운 현실 앞에 좌절을 느끼게 된다. 모든 사람들이 그러지는 않겠지만, 요즘의 내가 그런 상황이다. 뜻하지 않게 회사에서 진행하는 ’회사의 운명’이 걸린 ’프로젝트’를 진행하는 역할을 수행하게 된 것이다. 쩝. 고달프다. 고달퍼.

  힘들거나 잘못된 상황에 닥치면 ’초심으로 돌아가라’는 말이 있다. 처음 시작할 때의 겸손하고 낮은 자세로 임하던 때로 돌아가 다시 차근차근 정리하면서 처리해보라는 뜻이랄까? 이 부분에 대해서는 해석이 여러 개니까 자기한테 맞춰서 해석하자. 요즘 어깨에 들어간 힘을 너무 빼서 추욱 늘어진 것은 분명하다. 이 순간을 잘 견뎌내고 앞으로 한걸음 나가면 나에게 좋을 거라 기대하며 한걸음을 뗀다.

내가 ’자바’를 배우겠다고 이 바닥에 뛰어든지 횟수로 3년째다. 

 - 개발자의 길(Developer’s Road) - 1.1. 나의 개발자 입문 과정 

그렇게 자바를 배우는 과정의 기록을 남기면서 지금까지 도달했다. 그리고 앞으로도 쭈욱 ’자바’를 밑바탕으로 해서 개발자의 삶을 이어갈 것이다. 그리고 그 기록을 꾸준하게 남기려고 노력하겠지.


p.s. 내가 블로그를 시작한지도 어느새 6년을 넘겼네요. 남긴 글의 수는 1080개가 넘어섰고, 처음 블로그를 시작할 때의 그 마음을 다시 되새겨 봐야겠습니다. 이제 블로그에 쓰는 글의 일부는 어떤 목적(모아서 책을 만들어보고 싶은 욕심이 있음)을 위해 쓰여지겠죠. ^^

밤에 잠자기 전에 휘리릭 정리하고 휘리릭 쓰니, 정리가 안된 부분들이 생겨나는군요. 흐음...


허니몬의 IT 이야기/프로그래머, '코드 엔지니어'

Node.js의 인기가 정말 폭발적이네요. 올해 초쯤 슬슬슬 사람들의 관심을 받으며 입소문이 서서히 퍼지더니 국내에서 관련 컨퍼런스가 열릴 정도라니.

컨퍼런스 사이트 : http://nodeconf.kr/2012-teaser/

관련 안내사이트 : http://blog.doortts.com/273 

  저는 당장에는 Node.js 관련한 분야에 대해서는 크게 관심을 가지고 있지는 않습니다. ^^; 관련 책이 나올 때, 리뷰를 했던 정도지요. 하지만, node.js 가 가지고 있는 장점을 활용할 수 있는 개발을 하게된다면, 그 때가서 스터디하고 익히면서 활용할 궁리를 하겠지요. 흠냠.

  node.js 관련한 컨퍼런스가 일본에서 열리는 일정에 맞춰서 진행이 되는 것이기 때문에, node.js 관련한 개발자들의 이야기를 듣기 좋은 기회가 될 것입니다. 문제는 영어인데... Orz... 동시통역에는 늘 한계가 따르죠. 영어공부가 답입니다. ㅎㅎ 좌절합니다. Orz...

허니몬에 관한 보고서/허니몬의 직장일기


이번 주에 있던 철야로 인해 리듬이 완전히 깨져버렸다.
그 이후 쏟아지는 일들에 대한 근심, 걱정으로 하루에도 몇 십번 한숨지으며
고개를 절레절레 흔들고 의기소침해져있다.
자신감이 사그라져버린 어느 날의 기록.
다 포기하지 않고 어떻게든 끌어안고 가보려는 욕심이 과한걸까?
나의 능력을 제대로 파악하고 못한다고 놓아버리는 게 편한건가.
허니몬의 IT 이야기/프로그래머, '코드 엔지니어'


오는 토요일에 9번째 공감세미나가 열립니다.

Java life, Java Style  이라는 주제로 열리는 이번 공감세미나에서는, 처음 공감세미나가 열리던 취지와 가장 어울리는 세미나가 아닐까 하며 기대하고 있습니다. 그건 아마도 내가 자바 언어를 사용하는 개발자이고, 앞으로도 자바를 기반으로 해서 돈을 벌어먹고 살고 있는 개발자이기 때문일 것입니다. 자바의 시작부터 현재의 모습을 되짚어 볼 수 있는 좋은 시간이 되지 않을까 기대하고 있습니다. ^^


허니몬의 IT 이야기/프로그래머, '코드 엔지니어'

### Daum 내부 Hadoop 활용사례

* 발표자 : 윤석찬

* A role of Big Data

* Analytics(Hadoop)

* Realtime(NoSQL)

* Open Source based semi-real time analytics

* New Buzz

* 데이터 분석 산업의 변화

* Bigdata Stack?

* 지금 떠드는 건 한물 갔다.

* 오픈소스로 채우고 있다.

* Hadoo Platform : Today

* 도대체 국내에 빅 데이터가 있기나 하나요?

* 빅 데이터는 상대적이다.

* 데이터를 쌓아온 적이 없다. 

* 긴 시간 축적해놓으면 빅데이터

* Daum Hadoop 사용 사례

* 전사 로그 분석 

* Tiara 시스템

* Daum 서비스 내 발생하는 모든 트래픽을 수집하여 분석 및 리포팅

* Hive

* 하루 70TB 축적

* UCC 문서 스팸 필터링

* 문서 내부 단어 및 사용자 프로필을 기반한 스팸 필터링

* 일평균 600만개 문서

* 사물 검색 데이터 색인

* 이미지에 있는 데이터를 역 색인

* Daum 의 빅데이터 기술전략

* 사내 기술 코디네이션

* 개발자 데이터 접근성 향상

* 때론 컨트롤 타워가 진입 장벽과 아이디어 고갈을 가져온다. 

* Lessons for big data

* 기술 내재화 필요(No vendors)

- 개발자들이 직접 하둡을 활용할 수 있는 환경 필요

- 오픈소스의 적극활용 및 개발 잉여력 제공

* 데이터 분석 및 처리의 역할 파괴(No data scientist!)

- 개발자들이 직접 실시간 분석을 위한 Hive 활용

- 문서, 이미지 등 다양한 형태의 데이터 처리를 위한 토대 마련

* Small data를 활용강화(No big Mistacke!)

- Small Data라도 실시간으로 저렴하게 데이터를 처리 

* Hadoop 장점

* 분산 처리가 장점

* 관리 Host가 많이 든다. 

* 오픈소스는 기술내재화가 중요하다.


### Hadoop 실전 사용 사례 및 운영 노하우

* 발표자 : 김용우, 이선호(Daum)

* 좋은 검색 품질 : 사용자가 짧은 시간 안에 자신이 원하는 값을 얻어가는 것

* 좋은 검색 결과를 만드는 방법

* 검색하는 사용자를 이해하는 것 

- 로그를 기록 -> Big Data

* 데이터 분석을 위한 하둡(Data Analytics Process with Hadoop)

* **모든 데이터는 정제하지 않고 하둡에 입력**

* 분석 필요가 생겼을 때 필터링하여 툴을 이용하여 분석

* Hadoop - features - Tools

* 많이 본글

* Mission

* Target Data

- Half year Search Logs(About 40TB)

* Features

- Query - Collection Relationship

- Query - Document - Session Relationship

* Modeling

* Batch Process

- Hadoop - Feature - Model - Engine

* Search Spam Index

* Mission

* Data

* Task

* Blog Classification

* Mission

* Data

* Task

* What else?

* Topic Analysis With PLSA

* QUery Chain Filtering

* Reprocessing with Hadoop

* Advantage of Hadoop

* Advantage

* Disadvantage


### Hadoop을 사용하면서 겪을 수 있는 문제들에 대한 트러블 슈팅?

* 이선호(sunholee@daumcorp.com)

* 개발자 같아!

* Hadoop 시작하기

* 빅데이터 분석이 의미가 있는가?

* 하루치 로그 대신 30일치 분석하면?

* 유명인이 언급된 모든 문서를 분석하면?

* 문제

- 잘못된 파일 작업 하나 재시도

- 현재 작업 취소

- 다른 작업 떄문에 서버 리소스 부족

- 결과 취합해 다른 작업 수행

* Hadoop 사용자

- 다양한 배경

- 자바 프로그래밍 보다 분석 로직에 초점

* 주요 작업 방법

- Hadoop streaming(파이썬)

- 데이터 집계 :  pig or Hive

* 인프라

- 여분 하드웨어에 실험적으로 도입

* 설치는 쉽다

- 압축 파일 풀고 디렉토리 환경 변수 설정

- 패키지 설치도 가능

* 설정은 어렵다.

- conf/*.xml  너무 많은 설정옵션

- 뭔가 부족한 메뉴얼

- 시행 착오를 거쳐서 안정화

* Hadoop 디자인 - MapReduce

* 사용팁

- 데이터 저장

- 버리지 않고 저장

- 미지의 분석 요구 등장

- 디스크 비용은 감당할 수 있다고 생각

- 데이터 압축

- 빠른 작업 수행을 위해 파일을 쪼개서 압축

- lzo 같은 분할 압축 사용 가능

- 데이터 연동

- ftp로 외부 파일 가져다 분할 압축 저장

- crontab 에 수동 스크립트

- wget .. | zcat ... | hadoop fs ...

- hadoop fs 쉘을 활용하는 스크립트를 잘 짜면 많은 일을 할 수 있음

- Hadoop streaming

- 파이썬 같은 외부 프로그램 실행

- slave는 별도 프로세스를 생성해 표준 입출력으로 데이터만 교환

- Pig or Hive : 과정 명시 vs 결과 명시

- 데이터 정합성

- 데이터가 커서 항상 예외가 발생

- 정형화되어 있지 않은 데이터

- 대책

- 모든 예외 처리를 잘 하거나

- 예외는 버리고, 버려진 데이터 비율 집계 

* 장애상황

* 가장 중요한 자원은 메모리

* 가장 흔한 장애는 디스크 교체

* 가장 위헙한 장애는 네트워크 점유

* 장애 - 메모리 부족

- Slave 메모리 부족

- CPU가 swap 에 묶임 -> 행업, 통제 불가능

- 기본 설정은 hadoop streaming 이 만든 별도 프로세스 메모리까지 통제하지 않음

- 대책

* 장애 - 디스크 교체

- Master 디스크 교체

- 디스크 여러개에 checkpoint 저장 기능 

- Slave 디스크 교체

- hadoop 이 실패한 task 는 다른 서버에서 재시도

* 장애 - 네트워크 점유

- hadoop 클러스터 하나에서 발생한 경우는 없었음

- hadoop 클러스터를 여러 개 만들고, distcp로 대량의 파일을 복사할 떄

- distcp가 병렬로 파일 전송하는 task 생성

- distcp - m 옵션으로 task 개수 제한


### 알고쓰자! NoSQL - Hbase 및 MongoDB 중심

* 발표자 : 유응섭, 최준건

* Group-By Operation

* Secodary Index

*  DualWrite

- Observer를 이용한 구현, 클라이언트는 코드 수정이 필요없음, 부하를 많이 주었을 때 문제 발생해서 보류

* Index Manger

* IDEX_TABLE

* Scan Performance

- 범위가 좁은 검색을 할 때 속도가 높아진다.

- NoSQL의 인덱스를 활용해서 RDBMS처럼 쓰는거야?

* Durability

- 다수 노드 장애시 데이터 복구 불가능

- 다음 HDFS 버전에서 해결될 예정

* MongoDB : Scaling write performance

* 몽고디비!!

* First Impression : Easy

- Easy installation

- Easy data model

* Second thought : not so easy

- No SQL

* Insert throughput on a replica set


* Insert throughput on a second index

- 데이터의 크기가 커질수록 성능저화가 심함

- b+tree 인덱스를 사용

- 균등한 인덱스를 넣을 때는 크게 성능제한 없음

- 균등하지 않은 인덱스를 인서트할 경우에는 성능저하 발생

* 성능저하에 대한 대처

1. partitioning 처리

- 몽고디비는 파티셔닝 지원 안함

- 애플리케이션 수준에서 파티셔닝 해야함

- switch collection every hour

- 레코드 수를 조정?

2. Better HW

- More RAM

- More IOPS

- RAID strinping

- SSD

3. More H/W : sharding

- Automatic partioning across

- 유효한 리소스 메모리자원이 생기면서 성능이 향상됨

- 레이드까지 구성하면 더 높아짐

* Three's no free lunch

- 문제해결을 위한 비용이 든다.

* 몽고디비가 정말 인덱스가 필요하냐?

- 필요한 것에만 사용한다.

* Sharding 을 통해서 입력 성능을 높인다.

- 대용량의 데이터를 입력는 테스트를 어떻게 할꼬?

* Sequential key

- All sharding key to one 

* 문제해결을 위한 시도

* 몽고DB B+tree index 관련한 문제

* 몽고DB에서 sharding 을 통해 입력속도를 높이는 것은 쉽지 않다.

* Lessons learned

* 데이터의 양을 늘려라

* Know the performance impact of secondary index

* 몽고DB


* HBase vs MongoDB

* 인덱스를 사용하지 않을 경우


### 

* 발표자 : 김영한

* 프로젝트 구조와 모순

* 화면 중심 프로젝트

- 화면 중심으로 프로젝트 구조를 구성

- 중복의 상황이 발생한다.

- 프로젝트가 진행된다면

- 같거타 유사한 쿼리가 무수히 나타남

- 회원정보 조회의 경우 11번의 거의 동일한 쿼리 발견

- 수정이 아주 어려움

- 월화수목금금금...

- 화면 중심 프로젝트 구조는 수 많은 중복을 만든다.

* 일반적인 프로젝트

- 데이터와 비즈니스 로직을 중심으로 프로젝트 구조를 구성

- 실전에서 멀티 프로젝트

- 중복 발생

- 멀티 모듈 프로젝트

- 데이터 불일치

- CORE로 통합시 또 다른 문제 발생

- 해결방안

- Row 단위로 전체 조회

- 특별한 경우만 최적화

- 파레토 법칙

- 프로젝트 구조와 모순의 결론

- 엔티티가 쿼리에 의존

- 구멍난 엔티티

- 신뢰할 수 없는 엔티티

- 진정한 의미의 계층 분할이 어려움

* Why ORM

* ORM 을 사용하는 이유

- Projection 문제

- Join 관련 데이터 연결문제

- 엔티티 데이터에 대한 신뢰

- 제대로 된 프로젝트 구조

- CRUD SQL 좀 알아서 해줬으면

- 진정한 객체 지향 개발 가능

- 도메인 주도 개발 가능

* SQL을 사용해야 하는 이유

- 우리가 사용하는 DB는 RDB다

- 통계 데이터

- 아주 복잡한 View

* ORM을 사용하는 이유!

- 컴퓨터가 할 수 있는 일을 더이상 사람이 하지 말자. 나는 SQL Mapper가 아니다.

* JDBC -> iBatis -> ORM

* ORM에 대한 반대

* ORM에 관한 오해

- Object DB 같은 것 아닌가요? 이미 망한 기술로 알고 있는데요?

- 성능이 느리다.

- ORM을 사용하면 SQL을 못쓴다.

- Hibernate 자체도 네이티브 쿼리를 사용할 수 있다.

- SQL을 몰라도 되나요?

- SQL을 잘 아는 사람이 ORM을 해야한다.

- 공부할 내용이 많으면 어쩌지...

- 제대로 된 교육을 했다면 좋았는데

- 모두 iBatis, myBatis만 사용하는데?

- 진실은...

- 우리나라에서만 많이 쓴다.

* ORM을 사용하고 싶은데 어떻게 시작하나요?

- 공부해야 한다.

- 공부해야할 것

- JPA

- Hibernate

- SpringDataJPA

- interface로 repository 자동생성

- Simple queries

- pagination

- Webinding

- Specifications, QueryDSL 지원

- QueryDSL

* ORM 적용시 고민할 2가지 구조

* ORM을 적용하는 방법은 크게 2가지

- Domain Model Everywhere

- Domain 모델을 모든 레이어에서 적극사용하자

- OSIV 사용

- 게터, 세터 사용

- DTO는 중복 악이다.

- 장점

- 개발하기에 빠르고 편리함

- 단점

- 복잡한 View 표현 힘듦

- Domain 모델의 세터 게터 노출, View 로직 추가

- Domain 모델의 순수성이 떨어짐

- XML, JSON, 외부와의 통신 API 위험

- Pure Domain Model

- 도메인을 순수하게 유지

- CQRS

- 장점

- 순수한 도메인 모델

- 단점

- DTO를 만드는 것은 귀찮다. 성가시다. 괴롭다.

- DTO는 또다른 중복이다.

- DTO와 도메인모델의 컨버터를 고민

* 어떻게 해야해!!

- 도메인은 순수해야 한다.

* 우리의 과제

- DDD를 하자

- Pure Domain Model 을 유지하며 실용적으로 개발하는 방법

- DTO를 생성하는 방법, 활용법

* AutoSave : 연관관계에 의한 자동저장이 일어난다고...!? 그럼 왜 우린...Orz...

* SpringDataJpa 소개



1 ··· 50 51 52 53 54 55 56 ··· 258
블로그 이미지

Email : ihoneymon@gmail.com 안녕하세요, 꿀괴물 입니다. ^^ 멋진 비행을 준비 하는 블로그 입니다. 만능형 인간이 되어 많은 이들에게 인정받고, 즐겁고 행복하게 살기를 간절히 원합니다!! 달콤살벌한 꿀괴물의 좌충우돌 파란만장한 여정을 지켜봐주세요!! ^^

허니몬