허니몬의 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개가 넘어섰고, 처음 블로그를 시작할 때의 그 마음을 다시 되새겨 봐야겠습니다. 이제 블로그에 쓰는 글의 일부는 어떤 목적(모아서 책을 만들어보고 싶은 욕심이 있음)을 위해 쓰여지겠죠. ^^

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