2009. 2. 26. 21:10

이클립스 프로젝트 필수 유틸리티


Daum책 - 이클립스 프로젝트 필수 유틸리티
초보 개발자와 프로젝트 관리자가 한번쯤 읽고 넘어가야 할 책 

CVS와 Subversion을 통한 소스 버젼관리, 프로젝트와 관련된 문서를 공유하는 위키, 이슈 관리를 위한 Issue Tracker를 특히 집중적으로 봤다.

프로젝트를 진행하다 보면 필요없는 작업으로 인한 시간 소모가 아까울때가 많은데. 위 3가지 유틸을 사용한다면
보다 많은 시간을 개발에 쏟아부을수 있을거라고 생각한다.

웹에서 내용을 찾다가 보면 잘 이해되지 않는 부분 때문에 힘들었었는데 책에서는 스크린샷을 통해
좀 더 이해가 쉽도록 설명된게 좋은 점이다.

책을 읽은 후, 프로젝트에 실제 적용하며, 팀원들과 공유하는 재미도 함께 느끼시길~~~
2008. 12. 24. 11:07

오라클 10i(utf-8) zipcode 테이블 생성

1. 우편번호 데이터를 가져옵니다.
url : http://www.zipfinder.co.kr/zipcode/index.html
원하는 타입의 데이터를 다운 받아서 xls로 변경합니다.

2. zipcode 테이블 생성
utf-8의 경우 한글을 3byte로 인식하므로 기존 설명서보다
컬럼의 크기가 대략 1.5배로 곱한 값이 컬럼의 크기가 됩니다.
아래는 TYPE1을 가져온 값을 토대로 테이블을 생성한 스크립트입니다.

zipcode script
-- DDL Script for TABLE NITAM.ZIPCODE. Orange for ORACLE.
-- Generated on 2008/12/24 10:41:55 by NITAM@ORCL

CREATE TABLE "NITAM"."ZIPCODE"
(
  "ZIPCODE"        VARCHAR2(7),
  "SIDO"           VARCHAR2(6),
  "GUGUN"          VARCHAR2(23),
  "DONG"           VARCHAR2(80),
  "BUNJI"          VARCHAR2(30),
  "SEQ"            NUMBER(5)
)
TABLESPACE NITAM_TS
PCTFREE 10
INITRANS 1
MAXTRANS 255
LOGGING
STORAGE (
  INITIAL 65536
  MINEXTENTS 1
  MAXEXTENTS UNLIMITED
  BUFFER_POOL DEFAULT
)
NOCACHE
NOPARALLEL
MONITORING;

COMMENT ON COLUMN "NITAM"."ZIPCODE"."SEQ" IS '고유번호' ;
COMMENT ON COLUMN "NITAM"."ZIPCODE"."ZIPCODE" IS '우편번호' ;

3. 테이블에 데이터 입력
오렌지를 사용해서 입력한 경우
오렌지 - Tools - loader 에서 처리



'Database' 카테고리의 다른 글

오라클 10g에서 scott 계정 풀기  (0) 2008.11.13
oracle sid 확인  (0) 2008.11.11
oracle sql 관련 링크  (0) 2008.08.24
2008. 11. 22. 00:08

request 의 모든 파라미터 얻어오기


 1 request파라미터 
 

클라이언트의 요청시 파라미터가 존재할 때 이를 request객체가 핸들 할 수 있다. 다음은 post방식의 요청을 해결하는 예제입니다.

 


 2 클라이언트 폼(requestParam.html) 
 

<HTML><HEAD><TITLE>REQUEST정보</TITLE></HEAD>
<BODY>
<FORM METHOD="POST" ACTION="request.jsp">    
    <H3>폼데이터 전송-REQUEST파라미터예제</H3>
    이 름 : <INPUT TYPE="TEXT" NAME="ID" ><BR>
    비밀번호: <INPUT TYPE="PASSWORD" NAME="PASSWD" ><BR>
    <INPUT TYPE="SUBMIT" VALUE="POST전송">
</FORM>
</BODY>
</HTML>

 


 3 클라이언트의 요청을 받아 파라미터를 처리하는 request.jsp 
 

<%-- request.jsp --%>
<%@page import="java.util.*" contentType="text/html;charset=euc-kr"%> 

<HTML><HEAD><TITLE>내장 객체 request </TITLE></HEAD>
<BODY>
<H2> 내장 객체 request파라미터 전송 </H2><P>

<% 

 Enumeration enum = request.getParameterNames();
 String name = ""
;
 while(enum.hasMoreElements()) {

  name = (String)enum.nextElement();
  out.print(name + ":" + request.getParameter(name) + "<br>"
);
 }

%>

3 getParameter()와 Enumeration()메서드
   그리고 getParameterNames() 메서드는 클라이언트로부터 넘어온 파라미터 변수값을 얻는 방법이다. 이때 리턴되는 값은 Enumeration값으로 Enumeration은 자체 메서드도 boolean hasMoreElements(), Object nextElement()  둘 밖에는 없는 간단한 유틸 클래스이다. Enumeration의 가장 큰장점은 바로 hasMoreElements()메서드로서 다음데이터가 있는지 없는지를 알려주는 함수를 사용할 수 있다는 것이다.

vector v가 있다면 v의 요소를 프린트하기 위해서 다음과 같은 구문을 사용한다.  

     for (Enumeration e = v.elements() ; e.hasMoreElements() ;) {
         System.out.println(e.nextElement());
     }

이 구문은 Enumeration의 가장 일반적인 구문이며 위의 구문과도 비슷하다. 일단 getParameterNames()메서들 이용하여 클라이언트로 부터 넘어온 모든 파라미터 변수값을 Enumeration으로 받고 Enumeration의 요소를 꺼집어내어 request.getParameter(파라미터변수)를 이용하여 넘어온 파라미터 변수의 값을 얻고 있다.

 

 

☞ 팁: Enumeration은 C언어의 열거자의 형태를 클래스로 표현한 것이며 자바에서 이 클래스의 사용목적은 다음에 올 데이터가 무엇인지를 모를때 아주 유용하게 사용되어진다. 

 

2008. 11. 22. 00:08

request 객체 속성


♣ request 내부객체

HTTP 요청이 있을 때 발생하는 모든 정보와 이 정보를 얻어 낼 수 있는 여러가지 기능을 하는 객체가 바로 request 객체입니다.
이 객체는 response와 더불어 _jspService의 매개변수역할을 하며, Server Page 프로그램에서 가장 기본이 되는 객체입니다.

HTTP 프로토콜로 사용자 요청이 있을 때 요청된 메세지는 HTTP 헤더 부분과 HTTP 몸체 부분으로 나뉘어 집니다.
HTTP 메시지 자체의 목적지가 Java Server Page라면 JSP는 HTTP 메세지 전부를 이용하여 HttpServletRequest 객체를 생성하게 되며, 이것을 _jspServer 메서드내에서 매개변수로 넘겨받게 되는 것입니다.
코딩을 할때, 가장 많이 사용하게 될 request.getParameter()라는 메소드가 여기에 해당됩니다.
Request 객체에는 request.getParameter() 말고도 많은 메소드가 있으며, 메소드의 종류는 아래 표와 같습니다.

⊙ 클라이언트가 넘겨주는 파라미터에 관련된 정보를 얻는 메서드

메소드
설명
public Enumeration getParameterNames()
모든 요청 매개변수의 이름을 Enumeration으로 반환한다.
public String getParameter( String name )
해당 이름값에 해당하는 매개변수의 값을 반환한다.
지정된 이름의 파라미터가 존재하지 않을 경우 null을 반환한다.
public String[] getParameterValues( String name )
해당 이름값에 해당되는 매개변수의 모든 값을 String 배열로 반환한다.

⊙ HTTP 헤더와 관련된 메소드

메소드
설명
public String getHeader( String headerName )
HTTP요청 헤더에 지정된 headerName의 값을 문자열로 반환한다.
HTTP요청헤더에 headerName헤더가 존재하지 않는 경우 null을 반환한다.
public Enumeration getHeaderNames()
HTTP요청 헤더에 포함된 모든 헤더의 이름을 Enumeration으로 반환한다.
public Enumeration getHeaders( String headerName)
HTTP요청 헤더에 포함된 headerName헤더의 모든값을 Enumeration으로 반환한다.
public int getIntHeader( String headerName )
HTTP요청헤더에 포함된 headerName헤더의 값을 int로 반환한다.
지정된 headerName헤더의 값을 int로 변환할 수 없는 경우 NumberFormatException이 발생하고, headerName헤더가 HTTP요청헤더에 존재하지 않는 경우에는 -1 값을 반환한다.
public long getDateHeader( String headerName )
HTTP요청헤더에 포함된 headerName헤더 값을 1970년 1월 1일 00시 00분 기준으로 현재까지의 밀리초를 long형으로 반환한다.
HTTP요청 헤더에 headerName헤더가 존재하지 않은 경우 -1을 반환한다.
headerName헤더를 long형 숫자로 변환자지 못할 경우 IllegalArgumentException을 발생시킨다.  
getCookies()
요청에 대한모든 쿠키를 반환한다.

⊙ 세션데이터에 관련된 메서드

메소드
설명
public HttpSession getSession()
요청을 시도한 클라이언트에 지정된 HttpSession객체를 얻어낸다.
이전에 생성된 HttpSession객체가 없었다면 새로운 세션 객체를 생성하게 된다.
public HttpSession getSession( boolean create )
요청을 시도한 클라이언트에 지정된 HttpSession 객체를 얻어낸다.
create가 false로 지정된 경우 해댱 클라이언트에 대해 생성 된 HttpSession객체가 없는 경우 null을 반환한다.
create가 true로 지정된 경우 이미 존재하는 경우 생성된 HttpSession객체를 리턴하고 해당 클라이언트에 생성된 HttpSession객체를 리턴하고 해당 클라이언트에 생성된 HttpSession객체가 없으면 새로운 HttpSession객체를 생성하여 반환한다.
public String getRequestedSeeionId()
요청을 시도한 클라이언트이 세션 id를 문자열로 반환한다.
public String isRequestedSessionIdValid()
요청에 포함된 클라이언트이 세션id가 유효하면 true아니면 false를 반환한다.
isRequestedSessionIdFromCookie()
요청에 포함된 클라이언트이 세션 id가 쿠키로부터 전달된 경우 true 아니면 false를 반환한다. 

⊙ 기타 메소드

메소드
설명
getRequestURI()
요청에 사용된 URL로부터 URI부분을 문자열로 반환한다. 
getMethod()
요청에 사용된 요청방식 GET, POST 등을 문자열로 반환한다.
getRequestURL()
요청 URL을 반환 한다.(질의 문자열은 안 한다.)
getQueryString()
요청 URL을 반환 한다.( 질의 문자열 포함)
getRequestDispatcher(path)
Path에 지정된로컬URL에 대한 요청 전달자를 반환한다.
getRemoteHost()
요청을 보낸 호스트의 이름을 반환한다.
getRemoteAddr()
요청을 보낸 호스트의 IP를 반환한다.
getRemoteUser()
요청을 보낸 사용자의 이름을 반환한다.

사용 예) String name = request.getParameter(“name”);
2008. 11. 14. 13:27

Orange for Oracle에서 Loader 사용해서 데이터 입력하기

처음에 오라클을 배울 때는 ISQLPLUS를 이용해서 디비작업을 했었는데 그때는 상당히 초기에 쿼리를 배우는 수준이었기에 그게 당연한줄 알았고 그렇게 어려운 쿼리도 날리지 않았는데 한참동안 MS-SQL을 사용하다가 보니까 엔터프라이즈 매니저에 익숙해져서 비쥬얼툴이 아닌 콘솔로 디비를 다루는 것이 여간 불편한게 아니었다. 거의 작업하기가 어려울 정도로....

그래서 이것저것 찾아보았다. 툴은 여러가지가 있었다. 토드, 프리토드, 웹디벨로퍼등 이것저것.... 처음에는 이클립스에 DbEdit플러그인을 붙혀서 사용했는데 디비 확인을 위해서 항상 이클립스를 띄워야 하는 점과 프로그램이 아니라 플러그인이기 때문에 기능상의 부족함등으로 금새 털어버리고 Orange for Oracle이라는 툴을 현재 사용하고 있다.(제법 괜찮은것 같다. 내가 쓰는 기능은 아직 한정적이고 아직 손에 많이 익지는 않지만... 이런거 보면 EM이 참 좋단말야.. ㅎㅎ)

이번에 프로젝트를 하다가 SQL Loader라는게 오라클에 있다는 걸 알게 되었다. 쉽게 말하자면 txt파일의 자료를 오라클로 올리는 것이다.(실제 로더는 ctl이나 dbf를 통해서 이런저런 작업을 하는 듯 하지만...) 상당히 쉬워서 편할 것 같다. 지난달에 MDB를 오라클로 올리느라고 삽질을 꽤 했는데.....

사용자 삽입 이미지
메뉴바에 보면 왼쪽과 같은 아이콘이 있다. Export, Import 옆에 Loader라는 녀석이 있다. Export와 Import는 DB 또는 Owner, table등을 통째로 dmp파일로 내보내거나 들여오는 것이고 Loader는 훨씬 유연한 데이터 로드기능을 지원하고 있다. 메뉴에서 [Tools] - [Loader]를 선택해도 동일하다.

로더를 실행하면 아래와 같은 창이 뜬다.

사용자 삽입 이미지
약간 보고 있자면 그리 어려운 구성은 아니다. SQL Loader를 명령어를 통해서 오라클로 실행하면 ctl파일을 통해서 txt를 불러들이는데(검색해 보면 많이 나온다.) 여기서는 그냥 txt를 불러서 로드할 수 있다. [1] 부분에서 Owner와 원하는 테이블을 선택해 주고 [2]에서 TXT파일을 불러온다.

TXT파일은 다양한 형태가 될 수 있는데 가장 기본적인게 탭이나 콤마(,)를 통해서 구분을 지어주는 것이다. 엑셀에서 CSV파일로 내보내기 등을 생각하면 될 것이고 엑셀이나 다양한 툴에서 이런 방식으로 내보내기하는 것은 지원하고 있기 때문에 TXT를 만들어 내는 것은 그리 어렵지 않다. TXT의 데이터가 심볼로 구분되어 있는지 아니면 고정된 넓이인지를 선택해 주고 첫줄이나 첫 행이 실데이터인지 아니면 각 행열에 대한 이름인지를 선택해 준다.

구분자를 탭이나 콤마외에도 임의로 기호를 입력할 수 있기 때문에 다양한 형식의 데이터를 로드할 수 있다. 파일을 불러들이면 [3]번 부분에 해당데이터의 예시가 나온다. 어떤식으로 입력되는지를 15열로 예시로 보여준다. 오른쪽에는 현재 테이블의 컬럼구조가 나와있는데 [4]버튼을 누르면

사용자 삽입 이미지

위에처럼 TXT파일의 필드와 테이블의 필드를 매핑시킬수 있는 화면이 나온다. TEXT에 컬럼수가 많아도 필요한 것만 매칭 시키면 데이터가 잘 올라간다.

사용자 삽입 이미지
준비가 다 되었으면 로드창의 상단에 있는 Run버튼을 누르면 데이터가 올라간다. 업로드후에 결과를 보여주는 팝업창을 통해서 올려진 로우수와 에러난 로우수를 확인 할 수 있고 에러가 난 로우는 TXT파일과 같은 위치에 파일명_bad.err과 파일명_bae.txt 2개의 error파일이 생기면서 로드되지 않은 데이터가 저장되기 때문에 올라가지 않은 데이터를 쉽게 확인 할 수 있다.

거꾸려 데이터를 내려받을 때는 상단탭의 Unload를 사용하면 txt파일로 내보낼 수 있다.

출처 : http://blog.outsider.ne.kr/105?category=10
2008. 11. 13. 17:50

오라클 10g에서 scott 계정 풀기


오라클 10g를 설치하면 scott 계정이 lock 되어 있습니다.
이렇게 하면 풀리더군요.

alter user scott account unlock;

'Database' 카테고리의 다른 글

오라클 10i(utf-8) zipcode 테이블 생성  (0) 2008.12.24
oracle sid 확인  (0) 2008.11.11
oracle sql 관련 링크  (0) 2008.08.24
2008. 11. 11. 10:12

oracle sid 확인

sqlplus에 system으로 접속을 합니다.

SQL> select instance from v$thread;
이렇게 질의를 하면 sid를 확인할 수 있습니다.

'Database' 카테고리의 다른 글

오라클 10i(utf-8) zipcode 테이블 생성  (0) 2008.12.24
오라클 10g에서 scott 계정 풀기  (0) 2008.11.13
oracle sql 관련 링크  (0) 2008.08.24
2008. 11. 3. 19:41

리팩토링

리팩토링을 안전하게 수행하는 요령
1. 리팩토링과 다른 작업을 분리한다.
   프로그램에 기능을 추가하는 등의 작업을 할 때 리팩토링을 되도록 하지 않는다.
2. 리팩토링 전후에 반드시 테스트를 한다.
   java용 테스팅 프레임워크 junit를 사용하는것이 적절할 수 있다.
3. 한 번에 최소한의 작업만 한다.
   작은 수정을 수행하고 그때마다 테스트를 한다.
4. 기존의 로직에 미치는 영향을 적게 한다.
   이미 정상적으로 동작하는 있는 기존의 코드를 가능한 한 남기고 서서히 진행한다.
5. 반드시 백업을 해 둔다.
   CVS 등 버전별로 보존할 수 있는 구성관리 툴을 사용해서 백업을 한다.

메소드 추출의 순서
1. 적절한 이름의 새 메소드를 만든다.
2. 추출하고 싶은 로직을 새 메소드로 복사한다.
3. 추출된 로직 속의 로컬 변수를 새 메소드에 적합하도록 변경한다.
   (메소드의 인수나 임시변수, 반환값으로 변경한다.)
4. 컴파일하여 테스트한다.
5. 원래 메소드를 새로운 메소드를 호출하도록 변경한다.
6. 컴파일하여 테스트한다.

리팩토링을 진행할 경우 기능을 확장하거나 추가할려고 했을 경우 등
명확한 목적을 정하고 리팩토링 하는 것이 효율적이다.

2008. 10. 27. 19:24

이클립스 사용법

소스코드 네비게이션
다른 메서드나 클래스의 소스 코드를 확인해야 할 때 사용하는 기능
Ctrl + 코드를 누르면 원하는 메소드나 클래스로 이동
Alt + 왼쪽화살표키를 누르면 원래 위치로 돌아간다
Alt + 오른쪽화살표키를 누르면 forward 된다.

이클립스의 Package Explorer에서 두 개의 프로젝트나 패키지 또는 파일을 선택하고 컨택스트 메뉴에서
Compare With > Each Other를 선택하면 선택한 두 리소스에 대해 비교할 수 있다.

에디터간 이동
에디터에 파일이 여러 개 열려 있을 경우 ctrl + F6 키를 누르면 파일을 선택할 수 있다.
(ctrl 키를 누르고 있는 상태에서 화살표 키를 누르면 상,하로 이동이 가능하다.)

워크스페이스에서 검색
ctrl + H 키를 누르면 검색 다이얼로그가 떠서 문자열이나, Java 요소에 대한 검색이 가능하다.

버전관리
cvs를 사용한 버전 관리

Ant를 이용한 빌드 자동화

웹프로그래밍 - WTP
2008. 10. 8. 17:41

프로그래머가 되는 방법


http://wiki.kldp.org/wiki.php/HowToBeAProgrammer


구직을 시작하기전에...
너 자신을 알라...

http://blog.naver.com/youngwerther?Redirect=Log&logNo=100049689574

http://bcho.tistory.com/entry/%EC%97%85%EA%B7%B8%EB%A0%88%EC%9D%B4%EB%93%9C%EB%90%9C-%EA%B0%9C%EB%B0%9C%EC%9E%90-%EB%90%98%EA%B8%B0


[리뷰]회사가 당신을 채용하지 않는 44가지 이유


[참고하라고 올려둔다.... 그냥 생각꺼리 던져주는 것만으로도 의미 있는 글들]