'neouser'에 해당되는 글 112건

  1. 2007.12.13 alter / 테이블 변경
  2. 2007.12.13 left outer join
  3. 2007.12.13 SCJP가 필요하다고 느껴질때 [JAVA2SCJP]
  4. 2007.12.12 [sample] 가상의 input 만들어내 Action을 발생시키기
  5. 2007.12.07 [sample] 시간차 구하기 (지금시간기준)
  6. 2007.12.06 Junit 사용법 2
  7. 2007.12.06 [sample] request 유입경로 URL만들기
  8. 2007.12.04 내가찍은 사진
  9. 2007.12.04 처음인가요? 그럼 이것부터 보세요^^ [JSP 2.0 기초부터 중급까지]
  10. 2007.12.03 개발의 갈등을 풀어주는 책 [Effective Java]

*테이블 속성변경*
alter table [해당테이블명] change [해당필드] [바꿀필드명] [변경할필드속성];
예) 테이블의 속성만을 바꿔보자 varchar(50)으로
- alter table test000 change test test varchar(50);

예) 테이블의 필드명과 필드속성을 변경해보자 (필드명=age 속성=int)
- alter table test000 change test age int;


*테이블 필드 추가*

alter table [해당테이블명] add [추가할필드명] [필드속성];
예) 테이블에 name필드를 추가하다 속성은 varchar(20);
- alter table test000 add name varchar(20);


*필드 삭제*

alter table [해당테이블명] drop [삭제할필드명];
예) name 필드를 삭제해 보자
- alter table test000 drop name;

left outer join

DataBase/mysql 2007. 12. 13. 10:44
  SELECT a.fldid, a.userid, a.name, ifnull(b.count, 0) as count
 FROM test001 a left outer join
  (select fldid,  count(fldid) as count, userid from test002 where  userid='neouser'  group by fldid) b
 on a.fldid = b.fldid and a.userid=b.userid
 where a.userid='neouser'

위 쿼리의 결과는 아래와 같이 나온다.
쉽게 볼 것같지만 이것을 내가 따로 다루는 이유는 a.userid='neouser' 를
on에 두는지 where에 두는지가 차이가 많이 난다.

만일 a.userid='neouser'를 on절에 두게 되면 둘다 모두 count는 3,3 이 나온다.
이것가지고 1시간여를 시간을 보낸터라 기록에 남긴다.

+-------+--------+------------------+-------+
| fldid | userid | name             | count |
+-------+--------+------------------+-------+
|     6 | neouser   | test             |     3 |
|  1040 | neouser   | test2          |     0 |
+-------+--------+------------------+-------+




지금은 개발자로써 일을 하고있다. 하지만 시간이 지나면 나의 케릭터도 변할것이다.
그렇다면 내가 개발자였다는 사실을 누가 증명 해줄것인가?

또한 나 혼자 "나! JAVA 잘해요. 난 프로그래머에요" 라고 외쳐보지만 객관적인 자료가 없는 상황에서는
유언비어이고 쌓여있는 경력에 대한 가치를 희석시키는 일 밖에 되지 않을것이다.

기회는 한방이였다. 돈 20만원이 정말 아까웠기에 한방에 성공으로 이끌어야 한다.
그래서 사전준비차원으로 "인정받는 IT 프로 JAVA 2 SCJP"을 보게 되었다.

주문한 책이 내손에 들어온게 올8월24일..
그러고 기획에 착수해서 결과를 얻기까지 3달즈음 걸린셈이다.
개발자치고는 좀 오래걸렸지만 지금 프로젝트를 뛰면서 일하면서 멀티로 했기때문에
이렇게나 시간이 걸린것같다.

서두가 너무 길었다. 책의 내용으로 들어가 보도록 하자.
책은 SCJP를 위한 수험서적이다기 보다는 JAVA에대한 전반적인 섬세함을 보여주고있는 서적이다.
SCJP TEST가 그렇지만 ++i 냐 i++ 이냐에 따른 차이가 매우 중요하다.
책은 이런것 하나 하나도 놓치지 않고 이야기 해주고 있다.

간혹 Typeing 해보고 싶은 소스코드도 눈에 띄지만 결과와 설명의 정확도가 매우 높아
직접 Typeing하지 않아도 될꺼라고 본다. (다른 서적에 경우 Typeing 하면 결과가 다른 경우가 눈에띔)

SCJP수검은 주요 테마별로 진행이 된다. 책역시 수검에 필요한 단위 항목별로 카테고리가
분리 되어있고 thread, 가비지 컬랙션, 오버라이딩, 오버로딩 ... 등등의 출재빈도와 난이도와
유형에 따라 적절하게 배합 된것을 보여주고 있다.

이정도만 보면 정말 이 책은 SCJP를 위해 좋은 수험서이다.
친절하게 문제 유형을 설명하고 , 문제의 딥이 이것! 인 이유를 설명해 주고 있으며 뽀너스 트랙으로
EJB, JAVA WEB서비스 까지 70여페이지를 할애하여 이야기 하고 있으니
SCJP뿐만아니라 JAVA 배우는 책으로는 얼마나 좋은가?

하지만 이 좋은 수험서를 참고서 수준으로 전략시키는 문제집이 있다는 사실을 잊지 말자.
시험의 Pass가 목적이라면 참고서뿐만 아니라 문제집도 봐야하기에 문제집 3인방!
우그필 덤프, chofort덤프, test King이 대표적인 3인방을 꼭! 필독하고 시험을 보길 권면한다.
문항수는 3개 파일 합해서 500여문항이 넘는다.

바로여기에서 수검자는 손쉬운 유혹에 빠진다.
"500문제만 다 풀어보면 시험 보겠네...."
SCJP너무 우습게 보지 않기 바랬으면 한다.  자만하다 떨어지는 날이면 20만원이 자신의 열정과 함께 날라간다는
사실을 잊지 말고 문제지는 문제지로써, 참고서는 참고서로써 모두 두루 섭렵하고 수검에 임해야 한다는 사실이다.

11월12일.. 토요일..
바쁜 일상속에 공릉에 있는 LG교육센터에가서 시험을 치루었다.
충분한 연마를 했다고 치루었는데 결과는 만족하지 못하는 점수의 pass 였다.

휴...
재법 차가워진 가을 바람이 수검의 긴장을 싸악 가시게 할 만큼 기분 좋게 불었지만
자칫 자만하고 비아냥거렸다가 떨어졌을때 시나리오를 생각해보니 아찔하게만 다가왔다.

이제 나의 현재를 인정해주는 point가 생겼다.
또 다른 point를 만들기 위해 또 노력 할테지만 본 책을 구입해서 SCJP를 볼 사람들에게 권고한다.
쉽게 보지말고 시간이 걸려도 찬찬히 오래 깊이있게 참고서와 문제지를 봤으면 좋겠다.
문제지에는 문과 답만 있다.
문제지가 놓치는 설명을 "인정받는 IT 프로 JAVA 2 SCJP" 가 해 줄 것이다.



아참! 중요한것을 말하지 않았다!

내년부터는 SCJP도 한글로 출제된다고 한다. 원하든 원치않든 영어시험은 올해로 끝일것으로 보인다.
 var cCateList = new Array();
        cCateList[0] = new sCategory("N", "6", "test", "y", "3"); ..
..
..

 for (var i=0; i < cCateList.length; i++) {
   // I 추가, M 수정, D 삭제, N 변경안됨 , Z : 클라이언트에서 입력 후 삭제
   if (cCateList[i].type == "I" || cCateList[i].type == "M" || cCateList[i].type == "D" || cCateList[i].type == "N") {
      var input = document.createElement('input');
      input.type = 'hidden';
      input.name = 'folderChannels';
      input.value = serialize(cCateList[i]);
    
      formObj.appendChild(input);
      aInputObject.push(input);
      input = document.createElement('input');
      input.type = 'hidden';
      input.name = 'channelNames';
      input.value = cCateList[i].title;
           
      formObj.appendChild(input);
      aInputObject.push(input);
   }


위소스는 정말 신선하게 다가왔다. 어떻게 저렇게 만들어 submit까지 날려버리는지
최초개발자분에게 박수를 보내고 싶다 .

시간차 구하기입니다.
지금 현재 시간을 기준으로 분단위로 얼마나 차이가 나는지를 알려주는 process 랍니다.

 public static int getDiffTime(String date) {

  SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_FULL_STR);

  Calendar cal = Calendar.getInstance(defaultTimeZone);
  try {
   cal.setTime(sdf.parse(date));
  } catch (ParseException e) {
   e.printStackTrace();
  }
 
  Date today = new Date();
  Calendar calToday = Calendar.getInstance(defaultTimeZone);  
  calToday.setTime(today);

  Calendar calInday = Calendar.getInstance(defaultTimeZone);
  calInday.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH),
    cal.get(Calendar.DATE),cal.get(Calendar.HOUR) , cal.get(Calendar.MINUTE));
 
  int count = 0;
   while (!calInday.after(calToday)) {
    count++;
    calInday.add(Calendar.MINUTE, 1);    }
  }
  return count;  
 }

Junit 사용법

JAVA/framework 2007. 12. 6. 14:34
   
  • Junit 3.8
  1. public class TestConvert extends MyTestCase { // TestCase 상속
       
        private boolean t = DES.t;
        private boolean f = DES.f;

        public TestConvert(String name) { // 생성자
            super(name);
        }

        protected void setUp() throws Exception { // 한 메소드 수행전에 실행되는 메소드
            super.setUp();
        }

        protected void tearDown() throws Exception { // 한 메소드 수행후에 실행되는 메소드
            super.tearDown();
        }
       
        public void testConvertToBinary() { // 일반 테스트 메소드 - test로 시작작
            String str = "dddddddd";
            boolean[] text = null;
            boolean[] expected = new boolean[str.length()*8];
            boolean[] oneByte = {f,t,t,f,f,t,f,f};
            int j=0;
            for(int i=0, n=str.length(); i<n;i++) {
                for(int k=0; k<oneByte.length; k++) {
                    expected[j++] = oneByte[k];
                }
            }
           
            text = Convert.convertToBinary(str);
            assertByteEquals(expected, text);
        }
       
        public static Test suite() { // 테스트 수위트 형식식
            TestSuite suite = new TestSuite();
           
            suite.addTestSuite(TestConvert.class);

            TestSetup wrapper = new TestSetup(suite) {
                protected void setUp() {
                    oneTimeSetup(); // 테스트 수행 전에 호출되는 함수
                }
                protected void tearDown() {
                    oneTimeTearDown(); // 테스트 수행 후에 호출되는 함수
                }
            };
            return wrapper;
        }

        protected static void oneTimeSetup() {
        }
       
        protected static void oneTimeTearDown() {
        }


  1. public class TestAll extends MyTestCase { // 전체 테스트

    public TestAll(String method) {
            super(method);
        }
       
        public static Test suite() {
            TestSuite suite = new TestSuite();
           
            suite.addTest(TestDES.suite());
            suite.addTest(TestDESKey.suite());
            suite.addTest(TestDESExecution.suite());
            suite.addTest(TestTripleDes.suite());
            suite.addTest(TestAES.suite());
            suite.addTest(TestAesKey.suite());
            suite.addTest(TestAESExcution.suite());
            suite.addTest(TestSecAlgorithm.suite());
            suite.addTest(TestConvert.suite());
            suite.addTest(TestShiftRegister.suite());
            suite.addTest(TestECBmode.suite());
            suite.addTest(TestCBCmode.suite());
            suite.addTest(TestCFBmode.suite());
            suite.addTest(TestOFBmode.suite());
            suite.addTest(TestCTRmode.suite());
            return suite;
        }
       
    }
  • Junit 4.0

    • Jnuit 4.0 뛰어 들기

      • setupBeforeClass
      1. @BeforeClass
      2. public static void setupBeforeClass() throws Exception { }
      • test 메소드
      1. @Test
      2. pubic void ...() {}
      • 예외 테스트
      1. @Test(expected = IndexOutOfBoundsException.class)
      2. public void verify() throws Exception {
      3. Matcher mtcher = this.pattern.matcher("221010-5051");
      4. boolean isValid = mtcher.matches();
      5. mtcher.group(2);
      6. }
      • 제한 시간 테스트
      1. @Test(timeout=1)
        public void verifyFastZipCodeMatch() throws Exception{       
         Pattern pattern = Pattern.compile("^\\d{5}([\\-]\\d{4})?$");
         Matcher mtcher = pattern.matcher("22011");
         boolean isValid = mtcher.matches();       
         assertTrue("Pattern did not validate zip code", isValid);
        }
      • 테스트 무시
      1. @Ignore("this regular expression isn't working yet")
        @Test
        public void verifyZipCodeMatch() throws Exception{       
         Pattern pattern = Pattern.compile("^\\d{5}([\\-]\\d{4})");
         Matcher mtcher = pattern.matcher("22011");
         boolean isValid = mtcher.matches();       
         assertTrue("Pattern did not validate zip code", isValid);
        }
      • setup
      1. @Before or @BeforeClass
      • tearDown
      1. @After or @AfterClass
      • Suit
      1. @RunWith(Suite.class)
        @SuiteClasses({ParametricRegularExpressionTest.class,
              RegularExpressionTest.class,
              TimedRegularExpressionTest.class})
        public class JUnit4Suite {

        }

String requestURL = request.getRequestURL()+"?"request.getQueryString();


요즘이야 Eclipse로 모든 함수를 볼 수 있어
그것으로 그냥 모두 printout찍어본다면 시간이 좀 걸려도 알 수 있겠지만
그렇지 않은 경우라면 이것또한 찾는것도 일이다.


사용자 삽입 이미지
지난번 중국여행 갔을적에 만리장성에서 찍은  사진입니다.
비온날의 사랑~
아름답네요 . ^^


만약 지금 JSP라는 언어를 처음 배우기 시작한다면 어떤책을 볼까?
서평자가 처음 java를 배우기 시작할 무렵 봤던 책은 "지나와 함께하는 java" 를 봤었다.
2000년 이전 개발자라면 서평자와 동일한 책들을 봤을터이다.
하지만 시간이 참 많이 지났다.
이제 JAVA도 java가 있고 jsp가 있고 프레임웍이 있고 등등.. 그 복잡도와 난이도가 많이 높아져 버렸다.

마치 오락실의 DDR이 범 대중성을 갖추다가 메니아층의 등장으로 펌프같은 고난이도
오락기계만 남아버린것 처럼 초보자는 할 오락이 없고
개발회사는 오락에 대한 자금 투입을 열심히 하지만 자사고급 오락을 이용하는 계층은 메니아층으로 한정되어 버리게 되었다.

JAVA도 비슷한 현상이 발생하고 있다는 생각이 든다.
서평자의 경우 여태 개발의 끈을 놓치고 있지 않았기 때문에 다양한 기술과 테크닉들이 별것 아니게 다가오지만
시작하는 사람들에게는 "그래 프로그래머가 되보겠어!!"라는 자신감을 포기로 바로 맘바꾸게 만드는게 요즘 개발환경이 아닌가 싶다.

그러면 서평자가 말하려는 "최범균의 JSP 프로그래밍"은 어떤책이고 뭘 담고 있는것인가?
책은 초급자와 중급자를 위한 책이다.
떠벌이위한 책도 아니고 순수 개발에 매진하기위한 개발자들을 위한 개발 양서라는 점이다.

DDR처음하는 사람에게 버튼의 역할과 언제 발판을 눌러야 하는지를 요령껏 알려주고
DDR이 펌프로 넘어오면서 무슨 무슨 기능들이 강화 되었고 간단해 졌는지를 알려주고 있는것이다.

JSP는 그간 참 많은 진화를 거듭해 왔다.
단순 Script 언어에서 이제는 JSTL의 옷을 입고 web에서 OO를 논할만큼 많은 진화를 거듭해 왔다.
책은 이런 진화의 단계와 과정을 설명해 주고 있다.
또한 JSP는 "Hello word" 하나 찍기도 어찌나 어려운지.. 그 다양한 환경을 구성하는 방법들도 설명해 주고 있다.
위의 2가지만으로도 책은 처음 접하는 사용자들에게 도움이 될것이다.

● 책 내용을 살펴보도록 하자..
1장에서 6장까지는비교적 처음 JSP를 접한 개발자 분들을 위한 설명이 들어가 있다.
7장에 접어들면서 jsp프로그래밍의 약각의 변현된 기능들을 말하고 있다. (10장에 들어서는 jsp가 taglib를 이용한 javaBen의 활용으로 객체와 연결되는 것을 설명하고 있으고
자카르타 DBCP 커넥션풀과 같은 DB를 연결하는데 그냥 연결하는게 아니라 효율적으로 연결하는 방법을 알려주고 있다.
13장부터는 본격적인 예제소스코드가 여태 배운것을 실전에 응용해 볼 수 있도록 해주고 있으며
14장부터는 JSTL/ 커스텀테그 등을 이용한 jsp기본 컬러를 탈색시켜 여러 컬러를 함께 지니는 방법을 이야기 해주고 있다.
부록의 단계까지 가면 부록ABC는 부록이상의 재미와 개발의 팁! 들을 이야기 해주고 있다.

개인적으로 이런류의 책이 많이 팔렸으면 아직 많은 사람들이 개발에 흥미를 가지고 있고
개발을 해보려고하는 인력의 유입이 많이 발생하고 있다고 믿게 될것이다.
하지만 그렇지 않다면 IT시장의 엔지니어들은 살아남은것 자체만으로 경쟁력이 될 수 있다라는 다소 엉뚱한 생각도 들것이다.
그런데 이런류의 책이 잘 팔리지도 않았는데 시장에 엔지니어들이 많다면..
음.. 이것은 공포다 ^^!! 수많은 폭탄들이 자신의 엷은 지식으로 노력도 안하고 온동네 소스코드에 흔적을 남겨놓는것이니 말이다.

책은 다양한 레벨에서 봤으면 한다.
자신의 현 주소가 어디 즈음인지 파악도하고 관심있는것은 적용해보는것도 좋을것 같다.

이팩티브 자바는 원제목처럼 "유창하게 말하기"를 목적으로 하지 않는것 같다.
서평자의 경우 단순 말솜씨를 더욱 돋보이게 하기 위해 책을 보고 또봤다기 보다는
정말 내가 개발할때 궁해서 봤기 때문이다.
개발에 임하게 되면 의례 빠지는 갈등이 "과연 이렇게 만든 소스코드가 정상인가?" 하는 의문이다.
컴파일을 하고 구동을 시켜보면 결과는 원하는 데로 출력이 되지만 왼지모를 소스코드는
아무리 개선을 하고 연구를 해도 찜찜한것은 사실이다.
그래서 종종 openSource 코드들을 찬찬히 살펴보기도 하는데 그럴때면 서평자의 경우
심한 괴리감에 빠져들게 된다.
"내가 짠것도 java이고 이것도 java인데 왜 이리 쉽게 이해가 오지 않지?? ^^"
아마도 서평자가 아직 내공이 많이 않아서이기도 하고 openSource들은 그만큼 많은
단련의 과정을 거쳐서 된것일것이다.
본 서적은 이런 단련의 과정중에 중요한 몇가지를 왜 그렇게 구연해야하는지를
친절하게도 구체적인 소스코드를 가지고 사례를 들어주었다.
최초번역서를 보고 공부하게 된게 2003년이니 시간이 생각보다 꾀 많이 흐른것을 볼 수 있다.
다른 새로운책들로 책상이 많은 변화를 가져왔을법도 한데 아직 이책이 내 책상위를 떠나지 않는것은
내가 project를 하나씩 완료해 나갈때마다아직 내 머리가 project의 열기로 식기전에
내가 구연한 방법이 올바른지를 확인해 줄 수 있기 때문이다.

● 구독방법
빈맘으로 한번 읽는다.
  > 책의 구성은 단락 단락 되어있어  단락마다의 이슈제기와 문제 해결 방법등을 이야기 하고 있다.
  > 서평자의 경우 단락의 이슈가 처음 읽을때는 딴나라 이야기 였다. 공감가는게 10개도 안되었다.
     (당신도 그러하다면 나역시 정상인 이다.^^)
project완료후 다시 읽는다.
  > 책은 java의 여러 이슈를 다루고 있다.  하나의 project를 완료했고 거기서 발생한 자신만의 깊은
     상념의 시간이 필요할것이라고 본다.   바로 이때!! 이책을 봤으면 하는 바램이다.
     project에서 장고하지 않고 일정에 밀려 짧게 생각하고 넘어가벼렸던 메소들의 사용법을
     누군가 다시 집어주는것이다.
     음..
     물론 이단계에서 봐줄만한 책은 리펙토링도 있을것이다. 함께 복용하면 좋을것 같다 ^^

Project가 끝났다고 개발이 완료된것은 아니다.
이땅의 많은 개발자들은 Project완료후 또다른 Project를 대해야 하는 밴딩머신앞 기술자 일 수 있다.
밴딩머신을 떠나지 않는한 우린 지속적으로 Project를대하게 될것이고 비슷한 문제를 대하게 될것이다.
이제 그 비슷한 문제점을 습관이라고, 이전 Project에서 성공적으로 잘 돌아갔던 프로그램이라고
말하지 말고 개선의 여지를 찾아봤으면 좋겠다.
 책에 나온 57개의 항목이 모두 맘에 와닫으면 정말 대단하신 분이다. (박수^^)
 하지만 서평자 처럼 잘 몰라도 음냐.. 그냥 Project가 하나씩 완료될때마다 보고, 또한번 봤으면 하는책이다.

오늘도 진화를 거듭해하는 당신께 응원을 보낸다. 홧팅^^
1 ··· 3 4 5 6 7 8 9 ··· 12 

글 보관함

카운터

Total : / Today : / Yesterday :
get rsstistory!