jdk6 update3 를 설치하다 발견한 내용입니다.
다운로드 받은 패키지는 68메가인데, 설치 공간은 거의 600메가를 육박하는군요.
한번에 5가지가 설치됩니다. 옵션으로 조정이 가능하고 다음 화면에서 설치 경로와 5가지의 설치여부를 결정할 수 있습니다.

사용자 삽입 이미지

  1. 개발 도구 300메가입니다. 내부적으로 JRE포함하고 있습니다. Private JRE라고 합니다.
  2. 데모와 샘플 46메가입니다.
  3. 자바 API클래스에 대한 소스코드로 49메가입니다.
  4. 독립 JRE, Public JRE라고 173메가입니다. 브라우저 플러그인을 비롯해 배포용으로 사용되는 Java Web Start 포함합니다.
  5. Java DB 25메가입니다. 클라우드스케이프에서 아파치 더비로 변모했는데, 이것이 같이 설치됩니다.
압축이 꽤 많이 되었군요. 텍스트 형태의 소스가 많아서 그런듯 합니다.
참고하세요. ^^

구걸 등의 검색결과에서 저장된 페이지는 유용합니다만 저장된 페이지의 내용이 바뀐 경우 구걸에 구걸하는 골때리는 상황이 연출됩니다.
이럴 때 해당 게시물이 404 (Not Found) 또는 410 (Gone) 으로 표시 되어야 하는데, 컨트롤러에 다음과 같은 코드를 추가했습니다.

  public void doGet(HttpServletRequest req, HttpServletResponse res)
                        throws IOException {
...
    if ("106835".equals(req.getParameter("seq"))) {
     res.sendError(404,"File Not Found");
     return;
    }

굵게 표시한 부분이 404 상태코드를 날리면서 메시지도 File Not Found 라고 표시되게 만들어줍니다. 게시물 죽은척하는 코드입니다.

확인 : http://www.okjsp.pe.kr/seq/106835

역시 웹에는 숨겨진 세상이 많습니다.

java에서는 클래스의 생성자는 생략이 됩니다.
유명한 HelloWorld 소스입니다.

package net.okjsp;

public class HelloWorld {
 public static void main(String[] args) {
  System.out.println("Hello World");  }
}


이 유명한 소스에서 HelloWorld() 부분이 생략된 것이죠.

package net.okjsp;

public class HelloWorld {
 public HelloWorld() {
 }

 public static void main(String[] args) {
  System.out.println("Hello World");

 }
}

메소드처럼 ()은 붙어있지만, 리턴 타입이 없습니다. 바로 클래스 자신의 타입을 리턴하기 때문이죠.

언제 호출이 될까요. 바로 new 로 인스턴스를 만들 때입니다. 다음 소스를 실행해보세요.

package net.okjsp; public class HelloWorld {
 public HelloWorld() {
  System.out.println("생성자 호출");
 }
 public static void main(String[] args) {
  HelloWorld helloWorld = new HelloWorld();
  helloWorld.printOut();

 }
 public void printOut() {
  System.out.println("Hello World");
 }
}

결과는 다음과 같습니다.
생성자 호출
Hello World

파라미터를 준 생성자가 등장한다면 얘기는 흥미진진해집니다. 자바 스펙이라도 한 번 봐두면 좋을 듯 하네요.
 
IDE, Integrated Development Environment 의 약어입니다. 통합개발환경이라고 했는데 무엇을 통합한 것인가요? 개발에 필요한 작업은 세 가지로 나눌 수 있습니다.
코딩, 컴파일, 실행/디버깅
이렇게 세 가지로 구분할 수 있습니다. 이 세 가지 과정을 콘솔에서 작업한다면 편집기를 열어서 소스 코딩을 하고, 저장을 한 뒤에 콘솔로 가서 컴파일을 합니다. 그리고 콘솔에서 실행하게 됩니다. 이 때 작업하는 경로와 옵션 등을 신경을 써야 됩니다.

이러한 과정을 모두 통합해서 개발할 수 있도록 통합한 것을 IDE라고 얘기합니다.

http://www.eclipsecon.org/2008/?page=registration/

완전 가고 싶습니다. ^^;
2008/03/17 - 2008/03/20
Santa Clara, California
사용자 삽입 이미지


등록비용이 시간에 따라서 ㄷㄷㄷ 차이가 나는군요.
12월 31일까지는 $999에 모십니다. ㅎㅎ
현장등록은 $1,999 이군요. ㄷㄷㄷ
사용자 삽입 이미지

기대되는 컨퍼런스 중 하나입니다.
Adding a mothod doesn't change behavior unless the method is called somehow.

Working Effectively With Legacy Code 내용 중에 테스트 가능한 프로그래밍 기법이 있는데, 재밌는 예제였습니다.
올바른 값을 가져오는지 테스트하기 위해서 탐침(probe)과도 같은 클래스를 만들어냅니다. 보통 메소드 안에서 흘러가는 흐름을 테스트 때문에 감지를 위한 것이지요.

package net.okjsp;
public class Car {
 public void 급정거(int level) {
  // ...
  System.out.println("버럭! "+level+"번");
  // ...
 }
}

저 부분을 테스트하기 위해서 코드를 분리합니다.

package net.okjsp;
public class Car {
 public void 급정거(int level) {
  // ...
  CarSpeaker speaker = new CarSpeaker();
  speaker.yell("버럭! "+level+"번");

  // ...
 }
}

CarSpeaker 는 내용을 감지하기 위한 미끼역할을 하게 됩니다.
package net.okjsp;
public class CarSpeaker {
 public void yell(String string) {
  System.out.println(string);
 }
}

테스트를 위해서 인터페이스를 뽑아냅니다.
package net.okjsp;
public class CarSpeaker implements Speaker {
 public void yell(String string) {
  System.out.println(string);
 }
}

package net.okjsp;
public interface Speaker {
 public void yell(String string);
}


그리고 speaker를 외부에서 지정할 수 있도록 필드로 만듭니다. 지정은 생성자에서 담당합니다.
package net.okjsp;
public class Car {
 private Speaker speaker;
 
 public Car(Speaker speaker) {
  this.speaker = speaker;
 }
 
 public void 급정거(int level) {
  // ...
  speaker.yell("버럭! "+level+"번");
  // ...
 }
}

이렇게 코드의 구성이 끝나면 감지를 전담하는 FakeSpeaker를 만들 수 있습니다.
package net.okjsp;
public class FakeSpeaker implements Speaker {
 String string;
 public void yell(String string) {
  this.string = string;
 }

 
 public String getString() {
  return string;
 }
}

테스트케이스는 다음과 같이 됩니다.
package net.okjsp;
import junit.framework.TestCase;
public class CarTest extends TestCase {
 public void test급정거() {
  FakeSpeaker speaker = new FakeSpeaker();
  Car car = new Car(speaker);
  car.급정거(1);
  assertEquals("버럭! 1번", speaker.getString());

 }
}


처음 코드 보다 설계는 복잡해졌지만, 테스트를 자동화하는 효과를 얻었습니다.
선택의 시간입니다. 그냥 System.out.println(">>>>"+level); 로 원본 클래스를 바꿔서 테스트할 것입니까, 아니면 테스트 케이스를 위해서 소스 코드의 설계를 바꿔서 하시겠습니까.

참고자료
Working Effectively With Legacy Code, Michael C. Features, Prentice Hall, P23-28
까오기님이 정리한 글
http://kkaok.pe.kr/servlet/KBoard?cmd=view&tableName=kmytip&flag=0&search=&findword=&gotoPage=1&seq=124
전설이라는 단어가 가지는 의미가 두 가지 있습니다. 곧 개봉하는 나는 전설이다의 신화적인 이야기라는 의미와 어릴 적 전설의 고향에서 풍기는 기괴함을 뜻하는 의미도 있습니다.
사용자 삽입 이미지
image from: http://cizle.nate.com/movieinfo/movie.html?movieid=37782
그림을 보시면 아시겠지만, 지금 말하려는 것은 후자입니다. 전설의 코드, 전설의 소스. 즉 사연이 많이 담긴 소스 코드입니다.

보통 이런 소스의 특징은 다음과 같습니다.

  • 라인수가 길다.
  • 여러사람의 손을 거쳤다.
  • 연관되는 문서를 찾기 어렵다.
  • 문서가 있어도 갱신된 내용은 없다.
  • 쓰지 않는 코드가 많이 섞여있다
  • ~고 추측하게 된다.
  • 그러나 그것을 빼기는 어렵다.
  • 테스트 경우의 수가 많다.
  • 테스트 케이스 만들기 불가능하다.
  • 복사된 A', A'' 같은 클론의 어택이 심하다.
  • 소스의 사연은 정말 구구절절하다.

이거 뭐 엄마찾아 삼만리도 아니고, 정말 힘들게 관리되어진 소스입니다.
이 소스의 고민을 풀어주기 위해서 러브하우스가 필요합니다.

러브하우스의 기본 컨셉은 살만한 집입니다. 깨끗하고, 거추장스러운 것은 제거되어 있고, 현재 거주자의 필요에 맞게 재설계된 집이죠.

소스를 전설로 만드는 것은 그만하고 싶습니다. 이제는 러브하우스를 하고 싶습니다. 가치있는 일이죠. ^^

그런데 참으로 어려운 말을 해버렸네요.
"2007년 12월5일7주년입니다.10주년까지버틸께요.-행복 kenu" 라고 제일 상단에 써놓았습니다.

사용자 삽입 이미지


결혼하고 만1년이 지나고 2000년 12월 5일 JSP/XML 정보공유를 목표로 시작한 사이트입니다. 최초 도메인은 jspstudy.zoa.to 였죠. 아직도 포워딩은 됩니다. 그 당시는 dreamwiz의 5메가 무료 홈페이지 계정부터 시작했죠.

이후 2001년 3월 15일 okjsp.pe.kr 이라는 도메인을 잡고, giveu 호스팅회사에 php호스팅을 하고, jsp 게시판은 당시 다니던 회사 서버를 약간 빌리기도 했었죠. 이후 회사를 나오면서 두루넷을 쓰던 집에서 오라클에 jsp게시판을 잠시 돌렸었고, jsphost 호스팅회사를 거쳐 바람난닭님 소개로 변태대마왕님이 운영하시는 현재의 www.80port.com 호스팅회사에서 지원받게 되었습니다. 무료로 4년간 서버와 회선을 지원받았습니다. 이 회사 잘 되어야 합니다. 팔공포트 만만세.

무엇보다도 고마운 것은 사이트를 애용해주시는 분들입니다. 좋은 정보 올려주시고, 질문에 성실하게 답하는 등 사이트가 사람이 올만한 곳으로 만들어주시는 분들이죠.
광고 올리는 분들도 밉지만, 방문카운트 하나씩 올려주는 만큼만 안 미워하고 있습니다. 그래도 도배는 싫지요.

지금부터 3년 뒤 10주년이 되면 이렇게 조용히 지나가고 싶지는 않습니다.

텍스트로 얼룩진 황량한 디자인의 사이트지만 앞으로 새끈하게 바뀌는 것도 고려해보겠습니다.

행복해야죠. kenu였습니다.
아, 아이디 kenu는 starcraft 배틀넷 등록하다가 만든 id입니다. ^^

www.sdnkorea.com 에 기고한 내용입니다.

카멜레온 개발자

부제- 변화, 익숙하지 않은 것들에 대한 두려움

 

허광남

OKJSP.pe.kr 운영자

GS이숍 EC정보팀 재직

 

자바에 대하여

자바가 나온 지 10년이 넘었습니다. 1982년에 처음 베이직으로 프로그램을 짠 이후로 포트란, 어셈블러, C 등의 몇 가지 언어를 거쳐왔는데, 자바에 대한 첫 느낌은 문자열 처리가 C보다 낫기 때문에 좋았습니다.

1999년 취업을 하기 위해 SCJP과정을 거쳤는데, 당시 jdk1.1에서 1.2 버전으로 가면서 Java2라고 명명되고 있는 과정이었습니다. 그래서 제 SCJP 자격증은 버전이 1.1이었죠.

 

2001,2년 무렵 직장 생활 초기에는 웹을 주로 했기 때문에 jdk의 버전에 민감하지 않았습니다. 대신 OKJSP라는개인 사이트를 운영하면서 정보를 공유하다 보니 1.2에서 1.3으로 업그레이드 되면서 안정성이 높아졌다는 것을 간접적으로 알 수 있었습니다.

 

jdk1.3에서 1.4로 가면서 기능이 확장되었습니다. 로깅, XML, NIO API가 대표적이죠. 버전이 올라가면 항상 그렇듯이 버추얼 머신의 성능도 20%정도 향상됩니다.

 

Java5 2004 Tiger라는 이름으로 정식 출시 했습니다. 공교롭게도 지금 한국에서 작은 파란을 일으키고 있는 Mac OS X 10.4 버전과 코드명이 같았고, 같은 해 샌프란시스코의 바로 이웃한 곳에서 같은 시간 오프닝 쇼를 하고 있었습니다. 썬은 모스콘 센터에서 JavaOne 2004로 애플은 그 옆에서 WWDC로 말이죠.

Java5는 언어적인 완성도를 높였습니다. 제네릭(Generics), 어노테이션(Annotation) 등의 문법적인 변화가 가장 두드러졌습니다.

 

하나 더, 버전얘기를 하고 넘어가죠. Java5부터 jdk1.5 또는 Java5 라고 불려지기 때문에 혼동이 되고는 합니다. 제품 버전(Production Version Number) Java 5입니다. 그럼 1.5는 뭐냐하면 말이죠. 개발자 버전(Developer Version Number)입니다.

 

작년 2006 Java6 Mustang이라는 코드명에서 정식으로 출시되었습니다.

우리 말로는 모피코트로 유명한 무스탕이라고 발음하지만 영어식 발음은 머스탱입니다.

Jdk1.5와 비교해서 도구로서의 유용성을 강화하기 위해 Tools & Tool APIs영역에 jconsole을 추가했고, Integreation Libraries Scripting이 추가된 것을 알 수 있습니다.

 

사용자 삽입 이미지
 

내년 2008년에는 코드명 돌핀(Dolphine) 즉 돌고래가 Java7 으로 우리곁에 정식으로 선 보이게 됩니다. https://jdk7.dev.java.net/ 을 통해서 오픈된 상태로 java 7이 만들어지는 모습을 볼 수 있습니다.

 

 

자바 따라잡기

이렇게 열심히 발전하는 자바와 현실과는 괴리감이 없을 수 없습니다. 최근 두 가지 사건이 있었는데, 애플의 신작 OS 레오파드에 jdk1.5버전이 기본으로 들어가 있고, 맥용 jdk1.6은 프리뷰버전으로 개발도 완료가 안된 상태라는 것 하나와 구글이 야심작으로 내 놓는 안드로이드라는 모바일 애플리케이션에 Rjava라 하여 표준인 JME(Java Mobile Edition)와는 다른 버전의 자바를 내놓는 일이었습니다. 물론 위 그림에서 보듯이 제일 상위에 있는 Java Language에 대한 확장 API 세트가 달라지는 것이라 자바 언어 자체에 대한 도전은 아닙니다만, 현실의 자바는 업계의 이해관계와 맞물려서 쉽지 않은 과정을 거쳐가고 있습니다. 기업용 언어였던 코볼의 전성기를 자바가 차지하고 있기 때문에 거쳐야될 성장통이라고 보여집니다.

 

다른 한 가지 양상은 자바 개발자들의 헉헉 거림입니다. 새로운 기능을 써보고 싶은 것은 얼리어댑터의 특성을 가진 프로그래머들의 공통적인 성향입니다. 하지만, 기업내에서 실험적으로 무엇인가를 만들어 내는 일은 쉽지 않습니다. 더군다나 이미 소프트웨어를 통해서 비즈니스가 진행되고 있는데, 업그레이드를 위해서 그것을 바꾼다는 것은 컴퓨터를 모르는 사업주 입장에서는 무한도전이 아닌 무모한 도전입니다. 그렇기 때문에 기술의 발전과 기업 내에서 기술을 담당하는 인력과의 격차는 점점 커져가는 것이지요.

 

지식 산업에서 인력의 기술을 기름짜듯이 뽑아먹으면 짜고 남은 찌개미처럼 버려지게 됩니다. 오히려 사내 세미라든가 구글의 20:80 업무시간 처럼 개인의 발전을 모색할 수 있는 숨통을 열어줘야 합니다. 요즘 가장 좋은 방법으로는 오픈소스 활동이 되겠지요.

 

카멜레온이 몸의 색을 변화시키는 것을 보면 생존을 위해서 참 피곤하게 산다라고 느낄 수도 있습니다만, 그렇기 때문에 카멜레온이라는 단어의 뉘앙스를 만들어 낼 수 있었습니다. 터미네이터2에 나오는 T1000처럼 완벽하게 몸을 바꾸기는 어렵겠지만, 개발 트렌드를 잘 따라갈 수 있는 스터디 모임이나 소규모 자체 프로젝트들을 자주 접하는 것이 좋을 것 같습니다. 회사 탓하고 앉아있으면 옛날 얘기하는 관리자 되기 쉽상입니다.

 

인간의 본성 가운데 익숙하지 않으면 두려움을 느끼게 됩니다. 익숙해지는 방법이 있습니다. 흔히 얘기하죠. “자꾸 해보면 늘어

 

관련

https://jdk7.dev.java.net/  java 7 정보

https://jdk6.dev.java.net/  java 6 정보

 

+ Recent posts