본문 바로가기

프로그래밍

코드에 주석은 어느정도 까지 다는것이 좋은가 개발자 신입은 사수에게 코딩의 기본 원칙과 지켜야할 규칙을 배우게 되죠. 그중에 코딩할때 주석을 잘 달으라는 얘기를 많이 듣습니다. 저도 신입으로 코딩할때 주석을 잘 달아야 겠다고 다짐했습니다. 그러나 저는 개발하다보니 코드에 주석다는 습관을 갖추기가 몹시 어렵다는 것을 알게 되었어요. 먼저, 주석에 신경 쓸만큼의 개발 기간이 주어지지 않는 경우가 대부분 이에요. 이것은 핑계가 아니라 중요한 사실입니다. 보통 위에서 개발 기간을 줄때 코드 품질을 신경 쓸 만큼의 시간을 주지 않아요. 일단 코드가 작동되는 것이 중요하고 주석 다는 작업은 우선순위에서 뒤쳐져요. 그리고 주석 다는 작업은 꽤 귀찮은 작업입니다. 코딩가이드에 명시한 주석다는 규칙은 화려하고 복잡하다는 생각을 했어요. 주석다는 규칙이 화려하고 번.. 더보기
코딩 속도 저는 역사를 좋아하는데요. 전쟁사 중에서도 2차세계대전사를 좋아합니다. 저는 2차세계대전 당시 과달콰날에서 일본군을 기관총으로 휩쓴~ 존 바실론 같은 전쟁 영웅 보다는, 해군 제독 니미츠 처럼 인자하면서 카리스마 있고 지혜로운 전략으로 전쟁을 승리로 이끈 리더십있는 지도자를 더 좋아합니다. 보통 장교 같은 군인들은 처음에는 존 바실론 같이 필드에서 전투를 뛰면서 경험을 쌓을 것입니다. 점점 더 나이가 들고 연륜이 쌓일수록 전체를 아우르는 안목과 지혜가 생기고 지도자가 될것입니다. 대신 지도자가 되면 필드에서 전투를 뛰는 운동감각은 떨어질 것입니다. 사실 필드에서 뛸 필요 자체도 없겠죠. 문득 오늘 코딩을 하면서 이런 군인의 성장 과정이 생각 났습니다. 저는 과장인데요. 코딩과 설계의 중간단계의 묵직한 개.. 더보기
루비의 비밀 (레일스 VS 자바) 제가 한창 프레임워크에 관심을 가질 때 였습니다. 그때 회사에서 운좋게 두어가지 프레임워크를 만들고 있었죠. 회사에서 몇개 개발할 웹사이트에 쓰일 가벼운 프레임워크도 만들었습니다. 그때의 웹프레임워크는 스프링MVC의 기능을 이용해 만들었고 그럭저럭 잘 쓰고 있었습니다. 그러나 왠지 모르게 쓰기 불편하기도 했습니다. 질질 끄는 느낌이라고 할까요. 뭘 하나 수정하면 JSP, 클래스, XML파일등 여러 파일을 고쳐야 하니 지겹기도 했고, 특히 기억에 남는 점은 클래스 고치면 리로딩, XML 고치면 리스타트를 했는데 이때가 참 번거럽고 귀찮더군요. 진짜 좋은 프레임워크 구성 방식은 없을까, 웹 개발은 항상 짜증만 나야 하나, 이런 고민을 많이 했습니다. 그때 귀가 솔깃한 수식어를 단 어느 언어가 등장하더군요. .. 더보기
아키텍처와 아키텍트 - 수필 객체지향 아키텍처란 단어는 산처럼 웅장하게 느껴지지만, 산속의 구름처럼 애매모호하다. 다른 객체지향 관련 용어처럼 어려운 용어로 우리를 불편하게 한다. 아키텍처의 시야는 ‘신’과 같다는 단서로부터 출발한다. 신은 위에서 아래를 내려다 보며 사람과 사물을 관찰한다. 그럴듯한 용어로 top-down view 라고 부른다. 아키텍처는 신이 사람사는 세상을 정밀하게 관찰한 결과물과 비슷하다. 아키텍처는 top-down view 관점에서 시스템의 구성 요소와 구성 요소들 사이의 연결관계를 분석한 기술적인 명세서이며 공학적인 청사진이다. 나는 나중에 내가 만들 아키텍처를 훌륭하게 만들기 위해 신의 눈을 갖기를 바랐다. 아키텍트란 단어는 고도의 전문가라는 이미지를 풍기지만, 이름만 화려하지 않을까라는 느낌도 준적이 있다. 이.. 더보기
객체와 컴포넌트 - 수필 객체지향 객체란 실체로 존재하는 대상/개념이며 고유명사이다. 객체는 세상에 유일하게 존재하는 모든 것들~이라고 정의했다. 나는 객체만 알면 되는 줄 알았다. 그런데 컴포넌트란 용어와 기술에 대해서도 알아야 했다. ‘CBD(컴포넌트 기반 개발) 개발 방법론’을 공부할때 나는 컴포넌트와 객체의 차이에 대해 햇갈려 했다. 객체와 컴포넌트에는 비슷한 개념이 들어있다. 오히려 객체와 컴포넌트에 비슷한 개념이 녹아서 햇갈려 했던 것 같다. 하지만 이 둘의 차이점도 명확하다. 컴포넌트의 정의는 독립적으로 배포되는 단위로 조립/교환이 가능한 응집도가 높은 소프트웨어 산출물이라고 한다. 컴포넌트는 좀 더 명확한 물리적인 결과물이다. 컴포넌트가 사람이 눈으로 확인할 수 있는 결과물이라면 객체는 사람이 눈으로 확인할 수 없는 작은 .. 더보기
UML로 객체지향 세계를 그리다. - 수필 객체지향 사람은 소통한다. 살기위해 소통하고 얻기위해 소통한다. 사람들이 얼굴보고 소통할때는 말뿐만 아니라 손짓, 발짓, 표정 그리고 알수 없는 미묘한 감성까지 힙을 합쳐 소통 한다. 그래서 사람들이 얼굴보고 소통할때는 자신이 전하고자 하는 뜻을 대부분 누수없이 전달한다. 그러나 과학 기술 영역에서는 소통의 어긋남이 조금이라도 발생하면 전체가 어긋날 수 있다. 섬세한 기록이 요구되는 과학 기술 영역에서 사람의 언어는 불완전한 소통 수단으로 전락한다. 그래서 과학 기술 영역에서는 사람의 불완전한 언어를 보완할 간결하고 명확한 언어를 쓴다. 수학은 간결함과 명확함으로 상징되는 과학의 언어이다. 수학은 인류의 발전을 우주로 이끌어 올린 로켓 엔진과 같은 힘을 주었다. 사실 수학은 나에게 어려움의 상징이긴 하지만 결국 .. 더보기
상속과 구성 - 수필 객체지향 시골의 아이들은 어렸을때 물가에서 놀면서 형들이 약간만 알려주면, 저절로 헤엄치기를 배운다. 누가 정석으로 가르쳐 준것도 아닌데 잘도 헤엄친다. 상속은 시골 아이들의 야생 헤엄치기와 같다. 객체지향에 대해 약간의 지식만 익히고 사용할 줄 알면 상속을 습관처럼 저절로 쓰기 때문이다. 아이들의 야생 헤엄치기는 물가에서 놀기는 좋다. 그러나 수영 전문가가 볼때는 비효율적인 동작의 조합으로 조잡해 보인다. 만약 아이들이 물가에서 놀기위해 헤엄치기를 한다면 모르지만 좀더 전문적으로 수영을 하고 수영 대회도 나가고 짝사랑하는 영희에게 멋진 폼을 보여줄라면 지금의 헤엄치기는 문제가 있다. 상속은 복잡하지 않은 프로그램에서 대충 사용하기는 좋다. 그러나 객체지향 전문가가 볼때 상속을 무작정 사용하면 비효율적인 코딩이 .. 더보기
환상을 꿈꾸며, 아이폰과 안드로이드 헬로월드를 찍어보고 누구나 환상을 꿈꾸어 봅니다. 예쁜 여자와 데이트 하기를 바라고, 멋진 차를 모는 환상도 꾸고, 김연아처럼 우아하게 피겨하는 환상도 꾸지요. 환상은 마치 생각의 초콜릿입니다. 달콤하지만 곧 녹아버립니다. 저는 옛날부터 프로그래밍에 대한 바람이 있었습니다. 마치 레고 블럭을 쌓듯, 퍼즐 게임을 하듯 지적인 놀이로서의 프로그래밍과 고된 등산 끝에 성취감 같은 즐거움을 얻기를 바랐습니다. 처음 아마추어적인 개발을 할때는 이런 즐거움을 얻었습니다. 그러나 막상 현장에 투입되니 이런 즐거움은 사라지고 온갖 스트레스에 노출되지요. 군대에 비유하자면 멋진 군인을 동경해 고된 훈련을 마쳤더니 마치 라이언 일병 구하기 상륙작전 처럼 비피린내나는 현장이 기다리는 것과 비슷할 것 입니다. 그래서 옛날 블로그에 왜 그럴까 하.. 더보기
상속과 폴리모피즘 - 수필 객체지향 객체지향 대부분의 장점은 상속과 폴리모피즘으로부터 출발한다. C등의 절차지향 개념을 공부한 사람이 처음 상속과 폴리모피즘 개념을 배울때도, 난생 처음 프로그래밍을 배우는 사람도, 상속과 폴리모피즘 개념을 이해하는데 어려움을 표시한다. 그러다가 결국 나는 절차지향이 좋아~하며 다시 익숙한 방식의 프로그래밍으로 돌아가거나, 상속과 폴리모피즘 개념을 이해하지 않은체 객체지향 언어지만 절차지향적으로 프로그래밍을 하곤 한다. 그러나 상속과 폴리모피즘은 마치 대한민국 젊은 남자의 군대생활 처럼 반드시 거쳐야 하고 반드시 이해해야 하는 과정이다. 상속은, 스승과 제자사이와 비슷하다. 스승은 제자에게 자신의 모든 기술을 전수한다. 제자는 스승의 기술을 고스란히 체득한다. 또는 스승의 기술을 완전히 습득하기 전까지는 스.. 더보기
dW Live 세미나 ‘웹 개발 다반사’, 여러 발표주제들 최근 소개해 드린대로대로 12월 5일 (토) 오후 1:30 ~ 6:00 도곡동 군인공제회관 23층 온디맨드홀에서 페챠쿠차(Pecha Kucha)란 발표형식으로 '웹 개발 다반사' 란 주제로 세미나가 열립니다. http://www.ibm.com//developerworks/kr/event/seminar/dwlive_1205/index.html 페챠쿠차란 발표형식을 다시 설명 드리면 15장의 슬라이드를 장당 30초씩 발표하는 방식입니다. 최근 최종 발표 주제가 확정되었다고 하네요. Pecha Kucha 최종 선정 결과 * 괜찮은 오픈 API 제공하기 + VLAAH API 소개 - 홍민희 * 봄싹 싸이트(http://springsprout.org) 개발 협업 방법 및 사용 기술 - 백기선 * 코드 품질 포탈 .. 더보기
웹 개발 다반사, 웹 개발도 즐겁게 할수 있다~ 어떤 사물을 생각하면 그 사물과 연관된 이미지가 즉각 생각나곤 합니다. 예를들어 애플사~ 하면 진취적 창의적 이미지가 떠오르고, 우리나라 통신사나 모자동차 회사를 생각하면 독과점 횡포 기업이란 이미지가 떠오릅니다. 이효리하면 섹시한 이미지가 떠오르고 박지성 하면 성실한 이미지가 떠오르죠. 하얀 눈의 이미지는 어떤가요. 깨끗하고 낭만적이고 순수한 이미지가 떠오르실 겁니다. 그러나 나에게 눈은 지독한 삽질, 지독한 노가다라는 강렬한 이미지로 남아 있습니다. 저는 산에서 군복무를 했고 지독하게 눈을 치워댔습니다. 눈이 무섭고 싫었습니다. 그 순수한 눈에게서 이런 나쁜 이미지를 느끼다니 삭막하고 안타깝죠. 근데 군 제대한 후에는 눈 치울 걱정은 할 필요 없더군요. 이제 더 이상은 삽질은 없을 것 같았습니다. 그.. 더보기
올드스쿨 또는 뉴스쿨 프로그래밍 금요일 퇴근하는길에 직장 동료와 1층으로 내려갔다. 동료가 묻는다. "김대리님은 주말에 뭐하세요." "저는 주말에 수영하고 뒷산타서 집에와서는 그냥 쭈욱 쉬어요~ 수영이 유일한 낙이에요~" 라고 말했다. 그야말로 수영이 근 1년간 유일한 큰 즐거움이다. 나는 20대 초반 4년을 부사관으로 입대하느라 군대 촌구석에서 몽땅 보냈다. 그때도 지금의 수영만큼 고되고 외로운 생활을 잊게 해주는 나의 유일한 낙이 하나 있었다. 그것은 바로 '힙합' 이란 음악장르로 힙합 음악을 듣거나 어설프게 랩을 읇조리면 나름대로 고단함을 잊을 수 있었다. 여기까지는 괜찮은데 어느날 내가 아주 고약하게 빠져든 힙합 분야가 있었다. 그것은 바로 '비보이' 라는 힙합 장르중 하나다. 비보이 배틀 영상을 TV로 본적이 있는데, 하늘을 .. 더보기
프로그래머, 장인 또는 고된 현실에 찌든 노동자, 수필 객체지향 우리가 프로그래머로 일하는 이유는 두가지이다. 프로그래밍이 좋아서 프로그래머가 되었다. 어떻게든 먹고 살려다보니 밥벌이 삼아 프로그래머가 되었다. 전자는 순수한 열정이 느껴지고, 후자는 치열한 생존 전쟁의 이미지가 풍긴다. 어렸을 때 빌게이츠와 애플의 스티브잡스등의 IT영웅들을 잡지에서 보던 나는, 세상의 프로그래머는 단지 프로그래밍이 좋아서 프로그래머가 되었을 것이라고, 프로그래머는 뭔가 순수하고 특별한 세계를 가진 사람들일 것이라고 기대했다. 나는 존재하지 않는 이상계에 대한 꿈을 꾸었다. 우리나라는 프로그래밍이 좋아서 프로그래머가 되는 순수한 열정을 지켜주진 않는다. 우리나라 프로그래머는 밤12시 넘어서 일하고, 새벽에도 일하고, 주말에도 일하며, 명절에도 일하고, 결혼기념일에도 일하며, 심지어는 .. 더보기
블로그와 트위터, 디자인패턴과 리팩토링, 수필 객체지향 블로그처럼 네티즌을 위한 훌륭한 도구가 또 하나 있다. 트위터라는 도구이다. 예전에 블로그는 '자기 생각과 주장을, 자유롭게 글이나 사진으로 편집해서 올리고, 댓글, 트랙백, RSS, 태그등의 기법으로 쉽게 전파하는 도구' 라고 정의한 적이 있다. 트위터는 '블로그 처럼 자기 생각과 주장을, 짧은 글로 올리고, 친구(following, followers) 맺기, RT(친구의 글을 내가 전파함), 댓글등의 기법으로 쉽게 전파하는 도구'라고 정의해 본다. 블로그와 트위터의 정의로부터 이 둘의 공통점과 차이점을 찾아 보았다. 블로그는 편한대로 쓰기도 하지만 대부분은, 글을 쓰기전에 미리 이런식으로 글을 구성하겠다고 생각한다. 블로그는 글쓰기 전에 또는 글을 쓰면서 많은 노력을 요구한다. 트위터는 편한대로 쓴다.. 더보기
객체지향과 관계형 데이터베이스의 조화, 수필 객체지향 처음 봤는데도 왠지 끌리는 사람이 있고 물건이 있고 기술이 있다. 나는 처음 프로그래밍을 배울때부터 객체지향 관련 기술을 좋아했다. 아마도 철학같은 깊이가 느껴지는 기술이라 좋아했던 것 같다. 객체지향을 배우면 어떤 요구사항이라도 고스란히 내 프로그램으로 옮길수 있을 것 같았다. 그러나 공부와 실전은 달랐다. 나는 객체지향 기술 공부와 실전 개발을 병행하면서 종종 알기 힘든 괴리감을 느꼈다. 처음에는 단순한 웹코딩을 했기 때문에 객체지향을 써먹을 일이 없었다. 그때 프로그래머는 머리를 쓰는 지식 노동자가 아니고 단순 복사/붙여넣기 노동자 일수도 있구나라는 생각을 했다. 드디어 기회가 왔다. 회사 업무에 쓰일 프레임워크를 개발해 보라는 지시였다. 그때 그동안 배운 객체지향, 디자인패턴, 리팩토링 기술을 총.. 더보기
객체지향과 절차지향, 수필 객체지향 세상의 모든 사물을 프로그래밍으로 표현하면 속성과 행동이라는 두가지 요소로 나누어서 표현된다. 세상의 모든 사물을 오직 두가지 요소로 나누어 표현해도 된다는 사실은 마치 0과1의 2진법처럼 명쾌하고 간결하게 느껴진다. 절차지향이던 객체지향이던 프로그래밍 대상의 구성 요소는 오직 속성과 행동으로 간결하게 구분지어 개발할수 있다는 사실을 생각해보니, 우리가 절차지향이나 객체지향을 너무 복잡하고 어렵게 생각하고 있는 것 같았다. 세상의 모든 사물을 속성과 행동으로 나누는 것은 절차지향과 객체지향 언어에서 나눈다. 좀더 명확하게 단어까지 고쳐 말하면, 속성과 행동은 절차지향에서는 데이터와 함수이고 객체지향에서는 속성과 메소드로 불린다. 절차지향은 농민들이 공동으로 농장을 경영하는 것과 같다. 무질서하고 원시적인.. 더보기
수필 객체지향, 디자인패턴과 프레임워크 그리고 라이브러리 디자인패턴(Design Pattern)이 무엇이고 프레임워크(Framework)가 무엇이고 이 둘의 차이가 무엇이냐는 질문은 객체지향 개발이 무엇이냐는 질문처럼 나를 바보로 만든다. 하지만 명색이 제대로 된 객체지향 개발자를 꿈꾼다면 이 둘의 실체를 알아내는 것이 두렵다고 해서 이 둘의 추적을 중단해서는 안될것이었다. 라이브러리(Library)의 정의는 간단하다. 자주 쓸만한 로직을 잘 갖춰놓고 필요할때마다 가져다 쓰는 유틸리티 클래스들의 모음이다. 그런데 디자인패턴을 정의하려면 말문이 막혀서 터지지 않는다. 대략의 뜻은 알고있고 써먹을줄도 알지만 명확한 정의에 대해서는 생각이 잘 떠오르지 않는다. 그럴수록 좀더 생각을 하면서 단어의 뜻을 따라가보았다. 디자인이란 말은 설계란 뜻이다. 패턴은 일종의 정형.. 더보기
수필 객체지향, 객체지향과 추상화 객체지향 개발에 익숙한 개발자들이 있다. 그들은 자신이 제일 잘쓰는 에디터를 구동하는 순간부터 저절로 객체지향적인 코딩이 진행된다. 그러나 갑자기 객체지향 코딩에 익숙한 개발자에게 ‘객체지향’ 개발이란 무엇인가요? 그리고 왜 객체지향적으로 개발을 하는건가요? 객체지향적으로 개발한다는 것은 어떤 뜻인가요?라고 호기심 가득한 신입 후배가 묻는다면 갑자기 머릿속이 가비지 컬렉터 되면서 아무 생각도 떠오르지 않지 않을까 짐작된다. 질문에 왠지 명쾌하게 답하기가 어렵기 때문이다. 그래서 저런 어려운 질문에 대하여 곰곰히 생각해본적이 있다. 답은 잘 떠오르지 않았다. 한때 이 문제로 고뇌했다. 한참 후에 결국 ‘객체지향 개발이란 세상의 모든 요소를 객체와 객체간의 관계로 추상화 하여 추상화시 얻을 수 있는 유연함과.. 더보기
수필 객체지향, 클래스(Class) 클래스(Class)는 일반명사이다. 일반명사는 저 사람~ 저 물건~ 처럼 유일한 사물을 가르키는 단어가 아니다. 사람, 나라, 자동차, 컴퓨터처럼 사물을 공통적으로 부를 수 있는 단어로 묶은 것이다, 예를 들어 맥북, 센스, X노트 등으로 불리는 고유명사인 사물은 노트북이란 일반명사로 묶어서 부른다. 노트북, 휴대폰, 자동차처럼~ 우리가 부르는 일반명사는 명확하게 어느 사물을 가리켜 부르는 것이 아니고 뭉뚱그려 부르기 때문에 그 실체가 애매모호하다. 일반명사는 명확하게 가리키며 부를 수 있는 눈앞에 존재하는 사물이 아니며 우리 인간의 사고과정을 통해 한단계 추상화시킨 존재이다. 그래서 클래스는 아직 사람 머릿속에 존재하는 개념이고 아직 객체로 생성하여 세상에 나온 개념은 아니다. 객체지향 언어인 자바로 .. 더보기
수필 객체지향, 응집도와 결합도 객체지향 개발을 하는 이유는 객체지향적으로 제대로 개발하면 유연하고 확장성 높고 유지보수 편리한 개발이 가능하기 때문이라고 한다. 객체지향적으로 개발하면 왜 유연하고 확장성 높고 유지보수가 편리하냐고 누가 단도직입적으로 묻는다면 나는 총으로 겨냥당한것처럼 돌부처가 될것 같다. 그래도 우격다짐으로 말해보면 객체지향적으로 개발하면 모듈간 응집도는 높고 결합도는 낮아지기 때문이라고 말할것이다. 하지만 역시 열심히 공부하려는 우리를 당혹스럽게 하는 뜬구름 잡는 얘기이기도 하다. 응집도는 높고 결합도는 낮아야 된다는 이 공대 용어 스러운 말이 무슨 뜻이야? 응집도가 높다는 말은 비슷한 일을 하는 기능들이 하나의 모듈로 얼마나 잘 뭉쳐 있냐와 비슷한 말이고 결합도가 낮다는 말은 그 일을 완수하기 위해서 얼마나 다른.. 더보기
수필 객체지향, 객체(Object) 객체(Object)란 단어는 낯설다. 객체지향 개발이 두려우면서 범접하기 어려운 기술로 느껴지는 이유중에 하나는 객체(Object)란 단어부터 낯설기 때문이다. 객체(Object)의 사전적인 뜻은 ‘실체로 존재하는 대상 또는 개념’ 이다. 이 뜻을 우리 사람사는 세상에서는 어떻게 표현하면 되는지 불러보았다. 저 사람~, 저 사물~, 저 물건~, 저 동물~, 저 것은~, 그것은~, 이것은~ 으로 불리는 것 같다. 그러고보니 저 사람, 사물, 물건, 동물, 그것은, 이것은 등을 하나로 통합하여 사람 입에 불리어지는 단어는 없다. 그냥 저 사람이고 저 물건으로 불리어질 뿐이다. ‘실체로 존재하는 대상 또는 개념’이라고 정의되는 대상을 우리는 저 사람~ 저 물건~ 하며 친숙하게 부르는데 다만 하나로 통합하여 부.. 더보기
수필 객체지향, OCP(open-closed principle, 개방-폐쇄의 원리) 사람 사는 세상은 복잡다단하다. 예를들어 마른하늘에 정말로 날벼락이 칠수도 있다. 어플리케이션은 사람 사는 세상을 고스란히 옮겨놓았다. 틀림없이 어플리케이션도 마른하늘에 날벼락이 치는 변화무쌍한 요구사항이 발생할것이다. 요구사항에는 기존 개발된 기능의 변경 건이 있거나 새로운 기능의 확장의 경우가 있다. 이런 요구사항이 생길때 객체지향 설계자는 어플리케이션을 어떻게 변경하거나 확장할지 고민한다. 기존의 소스를 변경하는 방법이 있다. 이 경우는 가장 직관적으로 해결하는 방법일 것이다. 하지만 위험하다. 기름바닥에 라이타불을 던져서 불폭탄을 만드는 광경을 영화에서 본적이 있는가. 기존의 소스를 변경하는 방법은 기름바닥이라는 높은 결합도에 라이타불을 던지는 것과 마찬가지이다. 기존의 소스는 이미 여러 클래스들.. 더보기
투덜투덜 개발 오랜만에 글 쓰니 뭔가 어색하다. 쓰다보면 풀리겠지~ 조금씩이라도 자주 쓰겠다고 했지만 또 이렇게 됐으니 하늘 보기도 내 블로그 보기도 창피하다. 역시 일이란 핑계로 때우자. 예를 들어 저번주는 밤새는 일도 늘어나 생활 리듬이 틀어져 단 몇분도 할애하지 못해버렸다. 내가 정말 고쳐야 할 성격이 있다면, 욕먹으면서 고생한다는 점이다. 군생활부터 내딴에 힘든일 하게 되면 드러내놓고 투덜투덜 거리면서 일했다. 윗사람 보기엔 너무도 좋지 않다. 나는 투덜투덜 거리면서도 결국 일은 끝내긴 하지만 윗사람에게 고생한 만큼의 인정을 받긴 힘들다. 오히려 더 안좋게 보게 된다. 제 작년 말 어느 프로젝트에서 내 딴에 무지 고생했다. 그때 블로그에 많이 투덜거렸다. 결과 전형적으로 고생은 고생대로 하고 욕은 욕대로 먹었다.. 더보기
초보자를 위한 이클립스 퍼블릭 스테이틱 보이드 메인.. 을 암기하던 그때는 어렵고도 재미있는 자바 문법 익히던 옛날이었다. 선생님은 군인의 차렷자세처럼 퍼블릭 보이드 메인.. 문법이 기초중에 기초니 꼭 암기하라고 강조하셨다. 지금의 나는 퍼블릭 보이드 메인..하고 다음을 흐렸듯이 다음 문법이 약간 햇갈린다. ^ ^; 그러나 그때는 기초를 차곡차곡 정석대로 습득해가던 때였다. 퍼블릭 보이드 메인..을 암기하던 그때는 완전한 문법지식을 바탕으로 로직을 자유롭게 구현하면 그것이 진짜배기 프로그래머라고 생각했다. 당시 알고 있던 비주얼 스튜디오 같은 IDE 툴은 프로그래머를 게으르고 바보처럼 만드는 툴이라고 단정지었다. 내가 그렇게 단정지은 이유는 사실은 IDE 같은 복잡한 툴 익히기가 싫었기 때문이다. (이런 좁디 좁은 시야의 자기.. 더보기
고수를 위한 고전 에디터 vim 2004년 봄 SI회사에 처음 취직을 했다. 이제 그동안 연마했던 내 플그램 실력을 발휘할 수 있다니 기대도 있으면서 두렵기도 했다. 아직 파견은 못 나가고 본사에서 잡일을 하며 대기를 했다. 당시 나에게 SI 사이트는 하나의 무림 강호였고 SI 사이트에서 일하는 개발자들은 무림의 고수들이었으며, 무림의 고수들이 쓰는 노트북은 고수들만이 쓰는 멋진 무기였다. 지금에 와서는 어이없지만 나는 SI에 대한 동경을 가진 순진한 IT개발자 지망생이었다. 어느날 우리 회사 무림의 고수 선배가 그 험난한 SI를 마치고 잠시 본사로 귀환했다. 나에게 그 선배는 존경과 동경의 대상이었다. 특히 그 선배가 쓰던 은빛 노트북은 왜 그리 빛나보였을까. 내가 쓰던 중고 데스크탑이 일반 병사의 구식 창이라면 그 선배의 은빛 노트.. 더보기
자바 IO의 성능개선 (무복사 기법을 통한 효율적인 데이터 전송) 얼마전 자바 NIO를 활용한 통신 프로그램을 개발하면서 자바 네트워크 프로그래밍에 관심을 가졌었는데요. 마침 제 관심분야에 대한 IBM developerWorks의 고급기사가 발행되었기에 소개합니다. 무복사 기법을 통한 효율적인 데이터 전송 기사 내용이 무슨 말인가 하니, 하나의 IO가 일어날때 디스크커널자바어플리케이션 의 영역을 넘나드는데, 무복사 기법은 자바어플리케이션 영역을 빼고 디스크와 커널간의 직접 통신만으로 IO가 가능하며 성능이 많이 향상된다는 내용입니다. "많은 웹 애플리케이션은 상당한 분량의 정적 내용을 제공한다. 즉, 디스크에서 데이터를 읽어 응답을 위한 소켓에 써 넣는다. 이런 처리는 상대적으로 CPU를 거의 사용하지 않을 것 같지만 다소 비효율적이다. 즉, 먼저 커널이 디스크에서 해.. 더보기
유닉스 고급 쉘스크립트 기법 IBM developerWorks 기사를 소개할때 기사를 고르는 기준은 어려운 이론을 다룬 기사 보다는 실무에서 바로 써먹을 수 있는 기사를 소개하는 것입니다. 이번에도 IBM developerWorks 소개 기사를 찾다가 유닉스 관련 유익한 기사를 찾아서 소개합니다. 최근에 리눅스를 다룰 일이 많아졌는데 특히 쉘도 다뤄야 했습니다. 평소 프로그램을 짜는 사람이지만 쉘의 문법이 익숙하지 않아서 쉘 프로그래밍 하기 불편했어요. 다른 쉘을 참고로 때려맞추기 끝에 기능만 잘돌아가게 겨우 쉘을 만들 수 있었습니다. 여기 저처럼 쉘을 잘 쓰지 못하는 사람을 위한 기사가 있습니다. 바로, '유닉스를 능숙하게 사용하기: 고급 셸 스크립트 기법' 입니다. 이 기사에서는 쉘을 깔끔하고 유지보수 편하게 작성하는 방법을 설.. 더보기
우리회사가 최고에요. 왠지 철학적인 깊이가 느껴지는 유명한 IT컨설턴트 김창준님의 파랑새 신드룸이란 기사가 IBM developerWorks에 올라왔다. 이번에는 직장에 대한 기사다. 직장인 이기도 한 개발자들은 돈도 많이 주고, 야근도 없고, 개발자로 자아실현 할 수 있는 꿈의 회사를 동경하지만 지금 근무하는 곳은 아니라며 체념을 한다. 1. 그 사람들은 계속 현재 상황이 문제라고 생각하며 불평을 반복하고 2. 그 상황을 개선하는 데 자신이 할 수 있는 일은 없다고 생각하며 3. 자신은 다른 직장에 가야 빛을 발할 수 있다고 믿으며 4. 따라서 현 직장에서는 최선을 다하지 않으려고 한다. 위 순서에 따라 이 개발자는 항상 뜬구름 잡는 꿈의 회사만을 찾게 되지만 결코 꿈의 회사는 못 찾고, 지금의 회사는 일단 먹고 살기위해 .. 더보기
Mock Object 를 사용해서 쉽게 테스트 하기 최근에 IBM developerWorks의 스크린캐스트(=동영상강좌)를 많이 봐야할 일이 있었습니다. 한꺼번에 보다 보니 당연히 힘들더군요. 그중에 심드렁한 내 눈과 귀를 번쩍트이게 하는 강좌가 있었습니다. 바로 'Mock Object 를 사용해서 쉽게 테스트 하기' 인데요. 테스트 주도 개발이 익숙하지 않은 초중급 개발자분들이 한번 짬내서 보면 개념잡는데 도움이 많이 되는 강좌입니다. Mock Object는 테스트 하기 힘든 특정 자원, 예를들면 '데이터베이스'에 의존하지 않고도, 비슷한 기능을 흉내내게 해주는 가상 객체입니다. 데이터베이스등의 특정 자원에 의존하는 객체가 Mock Object를 쓰면 이제 가상 객체를 쓰던 진짜 데이터베이스와 연결됨과 상관없이 기능을 수행 합니다. 저 강좌에서는 데이터.. 더보기
Extreme Programming에 조금씩 가까이 가기 최근 프로젝트가 빠듯한 편은 아니라 여유가 있습니다. 다만 저 같은 경우는 해당날짜에 끝내야될 일이 있어서 일과중에는 꽤 바쁘게 자바 소스를 돌리고 있습니다. 저번주 말부터 진득하게 일과시간 프로그래밍을 하면서 몇가지 느낀바가 있었습니다. 예전에 제가 환상을 가졌던 Extreme Programming에 비교하여 한번 그 생각을 정리해 봤습니다. 주 48시간 근무? 제가 Extreme Programming(이하 XP)에 환상을 가진 이유는 XP 규칙중에 주 48시간 근무를 지켜라~ 라는 규칙이 있기 때문이었어요. 아름다운 규칙입니다. XP에서는 이 규칙을 통해 ‘진정한 생산성’ 이 무엇인지 알려주고 있습니다. 야근이 일상화 된 곳에서는 크게 바쁘지 않는 이상 어차피 야근할 것 일과시간에는 예를들면 인터넷 .. 더보기