[Info]Tags categorized posts and contents patterns..

[AJAX] Ajax Code E xamples.. [Book] About the book.. [CSS] CSS Code E xamples.. [DB] Sql Code E xamples.. [DEV] All development stor...

2016년 2월 4일 목요일

[JS]Live Validation 라이브러리 테스트..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

LiveValidation은 어찌보면 웹페이지를 만들때 꽤 짜증나는 작업중의 하나인 엘리먼트의 값을 체크하는 밸리데이션 작업을 자바스크립트 라이브러리로 만든 것이다.

요즘 자주 가는 파이어준님의 블로그에서 얼마전에 발견하고 실제로 써먹을만 한지를 벼르다가 지난주말에 테스트를 해보았다.(언어별로 파이어준님 같은 블로그 몇개만 있어두 진짜 대박일텐데....)

어쨌든 요즘의 추세로 보아 Submit버튼을 눌렀을 때 alert창을 통해서 밸리데이션과정을 거치는 것은 유저에게 꽤나 불편한 인터페이스였고 피드백도 불편했는데 라이브밸리데이션은 값을 입력할 때마다 바로바로 피드백을 주기때문에 꽤나 관심이 갔다.

과연 쓰기가 편할 것인가? 얼마나 기능을 지원할 것인가? 과연 한글은 될것인가 하는 고민을 가진채 테스트에 들어갔다.

처음 봤을때는 1.0버전이었는데 어느새 1.2버전이 되었다. 더군다나 prototype.js용 버전도 제공하는 것은 반가운 일이 아닐 수 없다. ㅎ

어쨌든 기대는 전혀 하지 마시고 테스트 페이지!!  클릭!!
뭐 대충 돌아가는게 저렇다... 기능을 볼라구 한거라서 딱히 디자인은 하지 않았다. 포스팅할라구 좀 이쁘게 해볼라다가 영 귀찮아서 그냥....

앞에 한글로 써놓지 않은 건 그냥 빈 input이다. 테스트로 넣다보니 그냥 넣어봤다. 에러메시지도 한글로 내맘대로 띄울수 있고 조건 다야하게 줄수 있고 입력하고 나서 바로바로 피드백해주고 submit버튼누르면 자동으로 밸리데이션 통과 안해준거를 표시해서 submit을 실행안시칸다.

자세한 내용은 라이브밸리데이션의 API 도큐먼트를 보면 된다. 영어라서 좀 압박이 있지만 약간만 만져보면 그닥 어렵지 않고 같은 패턴이 계속 반복되기 때문에 이해하기가 어렵지 않다. 사용법도 편하고. 예제소스랑 같이 비교해 보면서 해보면 금새 라이브밸리데이션의 동작을 이해할 수 있다.

머 상단에

<script src="livevalidation_standalone.js" type="text/javascript"></script>

라이브밸리데이션파일 인클루드 시키는 건 당연한 얘기고... 이렇게만 하면 일단 라이브밸리데이션을 사용하기 위한 준비는 끝이 났다. css가 있긴 하지만.. ㅎㅎ 이하소스는 모두 테스트파일에서 사용한 소스이다. 직접 소스보기를 하면 다 볼 수 있다.

JavaScript

// "헬로"라고만 입력받는 인풋
<script type="text/javascript">
    var validate = new LiveValidation('Text1', { validMessage: 'ㅇㅋ!', wait: 500});
    validate.add(Validate.Presence, {failureMessage: "필수 입력이야!"});
    validate.add(Validate.Format, {pattern: /^헬로$/i, failureMessage: "\"헬로\"라구 써줘" } );
</script>

원하는 위치에 위와같은 소스를 입력하면 된다. (유일하게 안좋은 점이라면 <input>태그 옆에 바로 자바스크립트가 들어가기 때문에 좀 지저분해 진다는 정도?) 저 소스는 에러메시지를 표시할 곳에 써주어야 한다.

대부분의 소스는 비슷한 형태를 띄우고 있다.

var validate = new LiveValidation('Text1', { validMessage: 'ㅇㅋ!', wait: 500});

위의 소스로 밸리데이션 객체를 만든다. validate의 이름은 뭐 개발자 맘대로이고 이걸 LIveValidation객체로 만들어 낸다. 그리고 첫번째 아규먼트로 체크할 인풋의 id를 준다. 두번째 아규먼트는 옵션인데 validMessage는 통과했을때 띄워줄 메시지이고 wait는 입력받고 500밀리세컨뒤에 표시해 준다. 두번째 아규먼트를 안주면 "Thanyou!"라는 메시지가 즉시 뜬다.

validate.add(Validate.Presence, {failureMessage: "필수 입력이야!"});

객체를 만든뒤 필요한 조건을 add로 추가하는 형태이다.(validate와 Validate는 물론 다르다.) Validate.Presence는 필수입력값이다. 이 조건을 넣으면 무조건 값을 입력받아야하고 아규먼트로(옵션) failureMessage를 주면 필수입력을 안받았을 경우에 띄워준다.

validate.add(Validate.Format, {pattern: /^헬로$/i, failureMessage: "\"헬로\"라구 써줘" } );

똑같은 형태로 조건을 추가한다. 이번엔 Format으로 정규식으로 패턴을 입력받았다. 포맷 패턴을 정규식으로 받기 때문에 활용도가 아주 막강하다. 여기선 간단히 했지만 정규식만 잘 사용하면 주민번호, 전화번호 등 다양한 값의 형식을 강제할 수 있다.


JavaScript

// 숫자만 입력받을 때
<script type="text/javascript">
    var validate = new LiveValidation('Text3', { validMessage: 'ㅇㅋ!', wait: 500});
    validate.add(Validate.Numericality, { minimum: 100, maximum: 2000, onlyInteger: true, tooLowMessage : "100보다 커!", tooHighMessage : "2000보다 작고", notAnIntegerMessage :"정수만"   } );
</script>


방식은 동일하다. 숫자일 경우에는 Validate.Numericality를 이요한다. minimum은 최소값이고 maximum은 최고값이다.(계속 봐서 알겠지만 보통 {}안에 들어간 값은 옵션값이라서 안주어두 상관없다.) onlyInteger를 true로 주면 정수값만 입력받고 tooLowMessage는 minimum보다 작을때 tooHighMessage는 maximum보다 클때의 에러메시지이고 notAnIntergerMessage는 정수가 아닐때의 에러메시지를 정해주는 것이다.


JavaScript

// 길이 제한 할 때
<script type="text/javascript">
    var validate = new LiveValidation('Text4', { validMessage: 'ㅇㅋ!', wait: 500});
    validate.add(Validate.Length, { maximum: 10, tooLongMessage : "최대 10" } );
</script>
 
계속해서 보듯이 같은 변수명으로 계속 객체를 만들어서 사용해도 아무런 문제가 생기지 않는다. 길이는 기본적으론 <input>에서 제한해 줄수 있기는 하지만 에러메시지를 띄워주는 것이 더 좋다구 생각한다. 길이는 Validate.Length를 이용한다. maximum은 최대 길이값이고 tooLongMessage는 최대값보다 많이 입력되었을 때의 에러메시지이다.
 

JavaScript

// 이메일 입력받을 때
<script type="text/javascript">
    var validate = new LiveValidation('Text5', { validMessage: 'ㅇㅋ!', wait: 500});
    validate.add(Validate.Email, { failureMessage : "이메일 양식 아님" } );
</script>
 
이메일을 위한 메서드도 제공하고 있다. Validate.Email을 이용하며 물론 실메일을 확인하는 건 아니고 양식만 확인해 준다. a@a.com나 메일@naver.com 등은 통과되고 메일@네이버.com은 통과되지 못한다. 복잡하고 귀찮은 메일체크를 아주 간단하게 해준다.
 

JavaScript

// 비밀번호 재입력 체크하기
<script type="text/javascript">
    var validate = new LiveValidation('pass2', { validMessage: 'ㅇㅋ!', wait: 500});
    validate.add(Validate.Presence);
    validate.add(Validate.Confirmation, { match: 'pass1', failureMessage : "패스워드 잘못 입력" } );
</script>
 
회원가입시에 항상 사용하는 비밀번호 재입력 확인하는 부분이다. 위에 했든이 Presence는 필수입력 여부이고 비밀번호를 재입력 받을때는 보통 <input>태그가 pass1, pass2처럼 2개가 있으므로 실시간으로 체크하는 라이브밸리데이션의 경우는 처음 객체생성할때 아래쪽에 있는 <input password>에 체크를 걸어주어야 한다.(아니면 첫 패스워드 입력할때 에러메시지가 계속 떠있으니까....)

비밀번호 체크는 Validate.Confirmation을 이용해서 match아규먼트로 첫 <input password>에 걸어주어서 두 값이 같은지를 비교한다.
 

JavaScript

// 약관동의 체크박스
<script type="text/javascript">
    var validate = new LiveValidation('Checkbox5', { validMessage: 'ㅇㅋ!', wait: 500});
    validate.add(Validate.Acceptance , { failureMessage : "약관에 동의하세요!!" } );
</script>
 

필수로 입력받는 약관 체크박스 사용이다. 필수체크이지만 Presence는 사용하지 않으며 대신에 Validate.Acceptance를 이용하면 자동으로 해당 체크박스가 반드시 체크되도록 확인한다.

테스트박스에는 만들어 놓기는 했지만 여러개의 체크박스와 라디오버튼에 대한 밸리데이션을 위한 메서드는 제공하지 않고 있다. 아마 다양한 환경이기 때문에 굳이 추가하지 않은듯 하다. 이부분만은 따로 스크립트를 작성해서 해결해야 할듯하다.


아직 자바스크립트도 다 모르는 와중에 대충 쓸만한지 어렵사리 확인해 봤는데 비교적 쓸만하다고 생각한다. 이정도면 실사이트에서도 바로 사용할 수 있을것 같다. 나같은 범인들에게는 이런 유용한 라이브러리는 참으로 행복한 일이다. 라이브러리를 쓴다고 자바스크립트를 고급까지 알지 않아도 된다는 것은 아니지만 좋은 기능을 쉽게 적용할 수 있다는 것은 행복한 일이다.

덧1) css를 적용하지 않으면 테스트페이지처럼 색이 적용되어서 나오지 않는다. 라이브밸리데이션 페이지에서 제공하는 css를 그대로 적용했는데 원한다면 css만 수정하면 원하는 색으로 출력해 줄수 있을 것이다.

덧2) 내 수준이 초급 수준이라 이런 소스의 설명을 한다는게 상당히 압박감이 있었다. 라이브러리소스를 설명한 건 아니지만..... 혹 잘못된 내용이 있으면 언제라도 덧글을 달아주시면 감사~
 

[DEV]DOM 엘리먼트 분석에 좋은 Internet Explorer Developer Toolbar..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

웹페이지를 분석하기에 좋은 괜찮은 툴을 하나 발견했다. 이런 종류의 툴의 얘기를 많이 들어봤지만 보통 좋다는건 파이어폭스 플러그인들 이었고 난 메인브라우저로 IE를 사용하고 있고 파이어폭스플러그인은 일단 파폭에서 돌아가지 않는 건 의미가 없기 때문에 사용하지 않았었다.

그러다가 이번에 IE용 플러그인을 알게 되었다. 이름하야 Internet Explorer Developer Toolbar이고 MS에서 제공하는 것이다. IE Developer Toolbar는 웹페이지의 DOM Element를 파악해 주는 툴로 html구조와 스크립트 css등의 속성들을 쉽게 파악할 수 있게 만들어준다.

다운로드는 이 곳에서 제공하고 있으며 이 링크가 깨졌을 경우에는 검색엔진에서 "Internet Explorer Developer Toolbar"라고 하면 다운로드 페이지를 쉽게 찾을 수 있다.

현재 Version은 1.00.2188.0이고 2007년 9월 5일에 릴리즈가 되었고 624 KB의 사이즈로 용량은 적은 편이다. 다운로드 파일을 받아서 설치한 후에 IE를 새로 실행하면 툴바에 IE Developer Toolbar아이콘이 생긴다.

사용자 삽입 이미지
IE 7에서의 아이콘


사용자 삽입 이미지
IE 6에서의 아이콘

화살표모양의 아이콘을 클릭하면 IE Developer Toolbar를 껐다 켰다를 할 수 있다.

사용자 삽입 이미지

이렇게 아래쪽에 IE Developer Toolbar가 실행된다.

왼쪽에는 현재 페이지의 HTMLl의 구조가 트리로 나타나고 원하는 것을 클릭하면 오른쪽에 그 속성과 CSS스타일이 나온다.

사용자 삽입 이미지

가운데의 속성 부분에서는 녹색의 플러스 아이콘을 누르면 속성을 추가할 수 있다. 속성을 추가해서

[JS]플래시나 동영상 자동 실행하기..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

MS가 재판에서 진 이후 IE에서 플래시나 동영상 즉 embed나 object태그를 사용할 때 로딩시 바로 실행되지 않고 테두리가 생기고 클릭을 해주어야 실행되도록 바뀌었다.

이는 머 개발자들의 잘못은 아니지만 어쨌든 UI적인 측면에서는 상당히 불편한 부분으로 이를 해결하는 것은 개발자들의 몫이다.

가장 간단한 방법은 document.write를 사용하는 방법으로 가장 간단하면서 여태 이런 방법으로 해결했었다.

일단 별도의 js파일을 만든다. function autoactive() {
    document.write(" <embed src="파일경로">")
}

플래시등이 삽입되는 파일에는 아래 소스를 넣어주면 된다.

<script language=JavaScript src="active.js"></script>
<script language=javascript>autoactive();</script>

첫줄에서 파일을 인클루드 하고 플래시등을 보여줄 곳에 두번째소스를 넣어주면 된다.

-------------------------------------------------------------------------------------

이렇게 하면 테두리가 생기지 않고 자동으로 생성된다. 물론 document.write는 여러줄을 쓸수 있고 간단한 소스라면 js를 따로 만들지 않고 바로 자바스크립트로 document.write를 해주어도 된다.
근데 이거 생각보다 귀찮다. 머 간단한거는 바로 만들면 되기는 하지만 파일이 자주 있거나 할때등에는 별도의 js파일을 생성하거나 수정하는 등 계속 만져주어야 하기 때문에 불편하다.

그러다가 더 좋은 방법을 알게 되었다. 머 선택은 각자의 마음이지만...

다음과 같은 파일을 만든다.

JavaScript

// forActiveX.asp
<%
   'ActiveX를 둘러 쌓고 있는 Textarea의 ID (각 페이지에서 get방식으로 넘긴다.)
   id = request.querystring("id")
   spanID = "span" & id
%>


document.write("<span id='<%=spanID%>'></span>");
document.getElementById('<%=spanID%>').innerHTML=document.getElementById('<%=id%>').value;


위의 파일이 자동실행이 가능하도록 만들어 주는 파일이다.
위는 aps파일이므로 당연히 다른 언어에서는 그에 맞게 만들어 주어야 할것이다. 
그냥 겟방식으로 textarea의 아이디를 넘겨주고 그걸 받아서 span에 붙혀준것 뿐이다.
 
그럼 플래시나 동영상을 실행해야 하는 파일에서 원하는 위치에 다음소스를 입력한다.


Html
<!-- 개체를 입력할 파일 -->
<textarea id="forActiveX" style="display:none;" rows="0" cols="0">
    <embed src="어쩌구저쩌구">
</textarea> 

<script language="javascript" src="forActiveX.asp?id=forActiveX"></script>

원하는 embed나 object 태그를 보이지 않는 textarea태그로 묶어주고 그 바로 아래에서 위에서 만든 forActiveX.asp파일에 get방식으로 textarea의 id를 넘겨준다.(id가 꼭 forActiveX일 필요는 없다.)

이렇게 하면 페이지 로딩시 테두리가 생기지 않고 바로 실행되는 걸 볼 수 있다.

이런 방식으로 했을때의 이점은 플래시나 동영상을 사용할 때 일일이 만들어 주지 않고 위의 코드를 copy & paste 만 해서 계속 사용할 수 있다는 점이다.

[JS]prototype.js에서 $F()사용시..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

요즘 prototype.js에 좀 빠져들어 볼라고 하고 있다. 내가 빠져들기에는 너무 어려운 부분이 많아서.. ㅡ..ㅡ

어쨌든 이녀석을 제대로 사용하면 유용함은 거의 무궁무진할 것 같다.

어쨌던 prototype.js에서 $F("엘레먼트ID")를 하면 엘레먼트의 value를 가져올 수 있다.

document.폼네임.엘레먼트이름으로 하거나 ElementById를 사용하지 않아도 아주 편하다.

하지만 $F()는 getValue이기 때문에 값을 가져올 수는 있지만 값을 할당할 수는 없다.
ElementByID("엘레먼트ID").value하고는 다르다는 얘기다..

그래서 값을 할당하려면

$("엘레먼트ID").value = "test";

의 형식으로 사용해야만 가능하다. 생각해 본다면 당연한 얘기긴 하지만 쓸때는 좀 헷갈리기 때문에.. ㅎ

[JS]input type="file" 에서 값 초기화하기..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

<input type="file" name="attach" id="attach" />
을 사용했을 때 파일확장자를 제한하기 위해서 체크후에 잘못되었을 때 값을 초기화 해줄 필요가 있다.

근데 이게 만만치 않았단 말이지.... file의 경우에는 다른 input과 달라서 찾아보기를 통해서 입력하기 때문에

readonly로 기본 설정이 되어 있기 때문에

attach.value = ""; 라는 식의 자바스크립트로는 초기화 할 수가 없었다.

그래서 onchange="javascript:checkFile(this);" 를 통해서 자바스크립트를 호출해서 아래와 같이 해결했다.

function checkFile(file) {
   file.select();
   document.selection.clear();
}

(물론 파일체크부분을 제거했다. 그부분에 대한 얘기가 아니므로..)

이렇게 하면 밸류를 초기화 할 수는 있지만 이거 뒤에 submit();을 할 경우 문제가 생긴다. 한번 오류나고 다시하면 되기는 하지만 아직 완전한 해결책은 찾지 못해서.. ㅡ..ㅡ

[DEV]웹개발을 할때 IE 오류메시지 셋팅..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

머 개발을 하면서 버그 없이 한번에 개발한다는 것은 말도 안되고 디버깅을 하는데 있어서 오류메세지는 아주 중요하다.

사용자 삽입 이미지

IE에서 흔히 볼 수 있는 에러메시지이다.

그냥 클라이언트에게는 깔끔한 화면일지 몰라도 개발하는 입장에선 실제적으로 아무런 도움이 안된다. 머가 문제가 있다는건지.. 막막할 따름이다.

사용자 삽입 이미지

이 화면은 IE 7 에서의 화면이긴 하지만 IE6에서도 동일한 옵션이 있다. "HTTP 오류 메시지 표시"에 대한 체크를 풀어준다.

그리고 아까의 사이트에 다시 들어가보면...

사용자 삽입 이미지

HTTP메시지가 사라지고 위와 같은 메시지가 출력된다. 디버깅을 하기에 어느쪽이 좋은지는 머 비교해볼 필요도 없다.

[JS]자바스크립트의 replace에 대해..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

자바스크립트에서 문자열을 치환하는 Replace 쓸때 다른 언어와는 약간 다른 점이 있다.

자바스크립트의 replace는 처음 등장한 딱 한개만 바꿔준다.(사용했을 때 결과가 제대로 안나와서 약간 당황을...)

예를 들어

str = "aaabbbaaa";
result = str.replace("aaa", "ccc");


라고 해주면 결과값 result는 내가 의도한 "cccbbbccc"가 아닌 "cccbbbaaa"가 나와버린다.

원하는 문자열을 모두 바꾸어 주려면 정규식 표현을 사용해야 한다.

str = "aaabbbaaa";
result = str.replace(/a/g, "c");


이런식으로 정규식을 사용하면 의도한 결과가 제대로 나온다...

My Comment..
나도 처음에 replace 때문에 고생을 했더라능..
하지만 우리에게는 naver 누님이.. 검색을 통해서 해결했었다..

[JSP]JSP파일의 인코딩 설정..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

JSP파일에서 인코딩부분에서 문제가 생기지 않도록 하기 위해서는 다음의 3줄을 JSP상위에 항상 넣어주는 것이 좋다.(물론 euc-kr일 때... UTF-8은 아직 잘 몰라서.. ㅡ..ㅡ)

<%@ page contentType="text/html; charset=euc-kr" %>
<% request.setCharacterEncoding("euc-kr"); %>
<% response.setContentType("text/html; charset=euc-kr"); %>

My Comment..
과거에는 진짜 개 짜증 나는 일이었는데.. 지금은 어느정도 감수하는것도 있지만..
그렇게까지 신경이 안쓰인다.. 그래도 나름 글자 깨지고 이런 부분은..
수정할 수가 있기 때문에.. 초보 때 비하면.. 엄청난 발전이지.. ㅋㅋㅋㅋ..

흠 회사라서.. 캡쳐 파일을 올릴 수가 없넹..
집에가서 수정해야겠다..

집에가서 수정하려고 했으나, 형의 블로그 보다보니.. 코드는 저런식으로..
굵게 해서 해둔게 있어서.. 그런 패턴으로 바꿨다.. 아무래도 회사에서..
거의 블로그를 할테니.. 지금 같은 경우가.. 한 두번이 아닐듯..

[JAVA]자바에서 주의할 점..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

  • Try-Catch를 쓸때 Catch부분에는 로직을 넣지 않는 것이 좋다.(로직을 넣을 경우 무한루프의 가능성이 높기 때문에 Error메시지 정도만 출력해 준다.)
  • Try-Catch를 쓸때 Catch는 계층이 높을 것을 아래쪽에 써준다.
  • Try-Catch-Final을 쓸때는 블럭변수로 선언되지 않도록 주의한다.
  • String과 Integer를 더하면 String이 된다.
  • 실수를 계산 할 때는 정수도 1.0처럼 실수형태로 써주어야 결과값도 실수로 얻어낼 수 있다. (Ex: 2/3을 계산하면 정수로 계산되어 0이 된다.)
  • 자바의 3대 Checked Exception : JAVA.SQL, JAVA.IO, JAVA.NET
  • C/C++과는 다르게 1/0을 자동으로 True/False로 변환해 주지 않는다.
  • [DB]MS SQL 디비 백업하기..

    출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

    디비를 이동해야할 경우가 있다. 일반 회사에서는 어떤식으로 하는지 아직 잘 모르겠지만 공부용 프로젝트를 하는 가운데 여기저기 똑같은 DB를 설치해야 했고 시연을 위해서 데이터를 가져가야 했다.

    데이터베이스는 스키마로 만들어서 생성해 냈지만 이번경우에는 시연을 해야했기 때문에 안에 넣어놓은 데이터도 모두 백업해서 이동해야 했다.
    사용자 삽입 이미지

    MS SQL 2000 Server가 설치된 C:\Program Files\Microsoft SQL Server\MSSQL\Data 경로에 가면 DB 파일들이 이곳에 모여 있다. 이중에 내가 사용하는 데이터베이스의 이름으로 된 파일을 2개 찾을 수 있다. 여기선 kbay_data_mdf와 kbay_log.ldf이다.

    이 2개의 파일을 복사해서 해당 데이터베이스가 설치되어야 할 같은 위치에 가서 붙혀넣는다.

    사용자 삽입 이미지

    엔터프라이즈 관리자에서 데이터베이스연결을 시도한다.(미리 데이터베이스를 만들지 않아도 된다.)

    사용자 삽입 이미지

    연결한 데이터베이스의 MDF 파일에서 ... 버튼을 누른다.

    사용자 삽입 이미지

    탐색기와 같은 화면이 나타나고 여기서 아까 붙혀넣은 곳에 가서 mdf파일을 선택한다.(분위기상 꼭 저 위치에 붙여넣지 않아도 되겠지만 관리를 위해선 같은 곳에 있는 것이 좋을 것이다.)

    사용자 삽입 이미지

    이제 그냥 확인만 눌러주면 가져온 데이터베이스가 그대로 복원된다.

    [JS]처음 써본 JSON..

    출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

    몇일전에 제이슨이란 걸 듣게 되었다. 나중에 찾아보니 이름정도는 들어본 것도 같지만 처음 들었을때는 "이건 또 머야?" 하는 생각이 들었다.

    XML의 단점을 좀 상쇄할 어쩌구 저쩌구.... 용도가 오나전히 같다고 볼순 없을것 같지만... 듣고 처음 검색한 것은 어김없이 "Jason"이었다.. ㅡ..ㅡ jason이 아니고 JSON일 줄이야.. ㅡ..ㅡ

    사용자 삽입 이미지
    JSON은 JavaScript Object Notation인데... 데이터를 교환하기 위해서 초경량화한 데이터 형식으로 { 이름:값}의 형식으로 데이트를 다룬다. 약간의 설명은 위키피디아에... 어쨌든 역시 처음 본거를 만져보는건 그냥 죽~ 공부하는 것 보다는 실제 써보는 거다....

    지번검색하는 프로그램에서 4시간정도에 걸쳐서 html로 스트링 만들어서 반환하는 걸 json으로 반환해서 받아서 json을 까는 걸 해봤다... 하라는 대로 하는데 왜 이렇게 안되는겨.... 머가 먼지도 잘 모르겠고....

    json이 어떤건지도 잘 모른 상황에서 직접 다룰려니 여기저기 사이트 뒤져보고 정확히 어떤 함수인지 어떤 역활을 하는지 모르면서 써보고... 안되니까 왜안되는지 알아보려고 그 함수에 대해서 더 자세히 알아보고... 자세히 알아보니까 또 그럴때 쓰는게 아니고 찾아보니까 또 새로운거 찾아내고..

    몇시간 삽질하니까 대충은 감이 온다. 머 감이 온다고 쓸수 있는것도 아니지만.... 아~ 이런게 JSON이구나 하는 정도? 앞으로는 많이 쓴다니까

    My Comment..
    난 이걸 2012년 BCCard 에서 처음 썼는데.. 물론 지금도 BCCard 니까..
    계속 쓰고 있긴 하다.. 그 전에 썼을 수도 있지만, 아마 모르고 그냥 썼을거다..
    그나마 인지를 하고서 아 이게 JSON 이구나 한게.. 2012년이란 소리지..
    형은 진짜 모든 신기술에 대해서 항상 빠른듯하다.. 그래서 존경스럽다..
    하긴.. 옛날에는 왜 저 모든걸 다 알려고 하지..??.. 라는 생각을 했는데..
    지금 생각해보면, 개발자로써 최고의 마인드가 아닐까 싶다..

    [DB]MS SQL Server 2000에 원격 연결이 되지 않을 때..

    출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

    MS SQL 서버 2000으로 수업프로젝트를 진행하는 가운데 원격컴퓨터에서 서버로 접근이 되지 않아서 고생을 꽤나 했다. 코딩도 바빠죽겠는데 별게 다 신경쓰이게 해서....

    SQL 서버가 있는 PC에 2대의 PC가 접근했는데 1대는 문제없이 접근했는데 1대는 서버를 찾을수가 없었다.

    항상 트러블슈팅은 어려운 거지만 여기저기 찾아보다가 서비스팩으로 해결했다. 시간이 급해서 정확히 어떤 버그인지까지는 확인하지 못했지만 서비스팩을 업해주지 않으면 생기는 문제이다.

    난 전에 SP4가 문제생긴게 있어서 SP3로 업해주었더니 쉽게 해결 할 수 있었다. ㅡ..ㅡ

    다른 조에선 비슷한 문제를 SP4를 깔아서 해결했으니 3이든 4든 업데이트 해주면 원격연결 문제는 쉽게 해결할 수 있으리라 생각된다.


    덧) 추가적으로 SQL서버를 사용할때 서버이름으로 접근을 하게 되는데 이 이름은 내컴퓨터에서 속성을 눌러서 바꾸어 줄 수 있다.

    사용자 삽입 이미지

    전체 컴퓨터 이름이 SQL 서버도 사용하는 이름이다. 이름이 맘에 들지 않는다면 변경에 들어가서 바꾸어주면 되고 이름은 리부팅을 해야 적용이 된다.

    그리고 이름으로 잘 찾아지지 않을 때는 로컬에서는 이름대신 그냥 .(쩜)을 찍어주면 로컬에 깔려있는 SQL Server에 접근할 수 있다.

    [DB]ERWin으로 DB모델링 하기..

    출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

    여기에 수준이 뻔하듯이 DB모델링의 방법이 아니라 ERWind사용하기에 관한 부분이다.

    AllFusion  ERwin Data Modeler라는 프로그램이 있다. 이걸로 DB모델링을 하면 편하게 할 수 있고 관계나 그런것을 모두 생각하고 고려하면서 할수 있으며 다하고 나면 SQL 쿼리도 다 만들어주기 때문에 참 편하다.(이번에 처음 써봤다.)

    머 그래두 Query를 다 알고 있는게 당연히 좋겠지만.....

    사용자 삽입 이미지

    처음 들어가서 새로 만들기를 하면 위와같은 창이 나오는데 기본적으로는 논리/물리를 다 만들것이므로 Logical/Physical을 선택한다. 물론 다른 용도라면 원하는 것만 선택하면 된다. 나중에 SQL쿼리를 만들어야 하므로 아래에 타겟 DB를 선택한다. 여기서는 MS SQL Server를 선택했다.

    사용자 삽입 이미지

    일단 논리DB부터 만든다. 말그대로 논리DB다 그냥 생각나고 필요한대로 한글로 테이블을 만든다. 상단에 ①은 논리/물리 보기모드이고 ②가 테이블을 만드는 아이콘이다. ③번은 관계(Relation)을 설정해 주는 부분으로 1:1 1:N 등이 있다. 아이콘 누르고 관계되는 2개의 테이블을 선택해 주면 된다. 기본적으로 1:N의 경우는 관계를 이어주면 PK가 N족의 FK로 등록되며 PK로 올라간다. PK가 되길 원하지 않는다면 바꿔주면 된다.

    사용자 삽입 이미지

    테이블에서 오른쪽마우스를 눌러서 Entity Properties로 들어가면 테이블의 이름을 바꾸어 줄수 있고 Attributes에 들어가면 컬럼을 주가해주거나 컬럼의 타입을 결정해 줄수 있다.

    사용자 삽입 이미지
    논리 DB가 다 만들어지면 이젠 물리DB를 만들면 된다. 상단에서 화면보기를 Physical로 바꾸어주면 물리DB가 된다. 처음에는 논리때처럼 한글로 나오는데 마우스오른클릭으로 Culumn으로 들어가서 Rename으로 실제 DB에서 사용할 이을으로 바꾸어준다.

    물론 여기서 바뀌어도 논리쪽은 바뀌지 않는다. 바꿔가면서 비교해 주면서 바꾸면 된다. 논리에서도 타입을 정해주었지만 여기서 정확한 타입을 결정해 주고 NULL여부도 선택해 준다. 컬럼길이의 경우 타입정한 후에 위쪽 ()안에 써주면 된다. 오른쪽 Average쪽에 써넣는 것이 아니다.(처음에 한 실수.. ㅡ..ㅡ)

    자동증가값을 사용하는 경우에는 아래쪽 Indetity를 선택하고 1,1이라고 써주면 자동증가 인덱스로 생성된다.

    사용자 삽입 이미지

    다 만들어주었으면 이제 진짜 DB를 생성해야한다. 물론 DB가 설치되어있어야 한다. 상단메뉴에서 Schema Generation으로 스키마를 만들어 줄 수 있다.

    사용자 삽입 이미지

    생성할 스키마의 세부항복에 대한 부분을 결정할 수 있다. 자세한 내용들은 나도 아직은 잘 모르겠고 Trigger부분만 모두 체크를 풀어준다. 그 후에 Generate 버튼을 누른다.

    사용자 삽입 이미지

    여기선 SQL Server를 사용하였으므로 SQL서버에 연결한다. SQL계정로그인하고 DB이름 써주고 서버이름은 여기서는 로컬이라서 그냥 쩜만 찍어주었다.

    사용자 삽입 이미지

    각 쿼리가 나타나면서 성공여부가 나타난다. 설정이나 관계등에서 잘못되었을때는 Failure 메시지가 나타난다. 문제를 해결한뒤에 다시 스키마를 만들면 된다. 이렇게하면 모델링한 디비를 쉽게 만들어 낼 수 있다.

    [DB]SQL 쿼리 정리..

    출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

    이 글은 지극히 개인적인 용도이다.

    쿼리는 보기 시작한지도 얼마 안되었고 DB도 여러가지 볼때마다 헷갈리고 써도 쓸때만 찾았다가 또 잊어먹고 하다보니 좀 헛된 검색과 낭비를 좀 막아보고자 모은다.... 아직 초기라 틀린 부분도 많고 좀 목적이 계속된 정리작업이 필요할 것을 염두에 두고 있는 포스팅이기 때문에 다른 사람들이 참고하기엔 무리가 있다고 본다.
    (틀린 점도 꽤 있을것도 같기 때문에..)

    원래는 SLQ 표준안인 ANSI 쿼리문을 기준으로 모아보려고 했는데 막상 하려니까 ANSI쿼리 정보를 많이 구할수 없어서 일단 작성하고 더 정리해 나가기로 했다.

    오라클 / MS SQL
    DESC 테이블명; 테의블 정의 보기

    SELECT

    SELECT * FROM 테이블명 WHERE 필드='조건' AND 필드2='조건2'
    SELECT 필드1, 필드2, 필드3 FROM 테이블명
    SELECT * FROM TAB; 존재하는 모든 테이블 보기
    SELECT DISTINCT 필드1 FROM 테이블명; 중복제거하기
    SELECT 필드1 FROM 테이블 WHERE 필드2 BETWEEN 00 AND 00; //00부터 00사이에서
    SELECT 필드1 FROM 테이블 WHERE 필드2 IN (00, 00); //00과 00중에서
    SELECT 필드1 FROM 테이블 WHERE 필드2 LIKE '%단어%';
    SELECT 필드1 FROM 테이블 WHERE 필드2 IS NULL; or NoT IS NULL



    UPDATE

    UPDATE 테이블명 SET 필드='값', 필드2='값', 필드3='값' WHERE 필드 LIKE '조건'
    INSERT
    INSERT INTO 테이블명(필드1, 필드2) VALUES ('값', '값' );
    비교연산자 : >, >=, <, <=, =, <>(not equal)
    DROP TABLE 테이블명;

    CREATE TABLE 테이블명 (
          필드명 타입 조건,
          id varchar2(15) primary key,
          pass varchar(15) not null,
          no number(5)
    )


    시퀀스 생성 : CREATE SEQUENCE 시퀀스이름
                       increment by 1
                       start with 1
                       nomaxvalue
                       nocycle
                       nocache;

    외래키 생성 : ALTER TABLE 테이블명 ADD ( FOREIGN KEY (필드) REFERENCES 테이블명2);
    칼럼 수정 : ALTER TABLE 테이블명 MODIFY (필드 타입);

    컬럼 추가 : ALTER TABLE 테이블명 ADD ( 필드이름 필드타입 );

    칼럼 리네임 : ALTER TABLE 테이블명 RENAME COLUMN 컬럼이름 TO 새이름;

    Null값 처리하기 : SELECT isNULL(필드, '0') FROM 테이블

    방금 인서트한 자동증가값 ID 가져오기 : SELECT @@IDENTITY (현재 세션에서만 사용가능)
    현재 테이블의 가장큰 큰큰값 가져오기 : SELECT IDENT_CURRENT('테이블명')
    수행된 SQL문에 의해 영향받은 행의 수 : SELECT @@ROWCOUNT

    날짜 계산하기 : SELECT * FROM 테이블명 WHERE DATEADD(DAY, CONVERT(INT, 컬럼명), 날짜컬럼) > getdate()
    테이블 정보보기 : EXEC sp_help 테이블
    컬럼 정보보기 : EXEC sp_columns 테이블
    앨리어스 사용 : SELECT 필드 AS A FROM 테이블 (별칭에 특수문자 있으면 [] 사용]

    주석 : -- or /* */

    변수의 선언 : DECLARE @변수명 자료형, @변수명 자료형변수 할당 : SET @변수명 = 값
    변수값 가져오기 : SELECT @변수명

    일부분만 가져오기 : SELETC TOP 5 컬럼 FROM 테이블

    범위정하기 SELECT 컬럼 FROM 테이블 WHERE 컬럼 BETWEEN 10 AND 20
                    SELECT 컬럼 FROM 테이블 WHERE 컬럼 IN ('aaa', 'bbb', 'ccc')

    패턴매칭 : SELECT 컬럼 FROM 테이블 WHERE 컬럼 LIKE '%제목%"               _ : 어떤것이든 한 문자
                   % : 없거나 아무 글자오거나
                   [] : []안에 있는 글자들 - [b-f]
                   [^] : ^다름에 있는 글자를 제외한 다른 것

    중복제거 : SELECT DISTINCT 컬럼 FROM 테이블
    GROUP BY : SELECT 컬럼1, sum(컬럼2) FROM 테이블 WHERE 조건 GROUP BY 컬럼1 HAVING sum(컬럼2) >= 30
    (계산함수가 반드시 있어야 한다, GROUP BY ALL을 사용하면 WHERE제외된것 도 포함)

    이너조인 : SELECT 컬럼 FROM 테이블 INNER JOIN 테이블 ON 컬럼=컬럼
    아웃터조인 : SELECT 컬럼 FROM 테이블 LEFT OUTER JOIN 테이블 ON 컬럼=컬럼
                      (어느한쪽의 데이터를 모두 가져온다.)

    IN : SELECT 컬럼 FROM 테이블 WHERE 컬럼2 IN ( SELECT 컬럼2 FROM 테이블 )     (IN안의 하위질의는 DISTINCT가 붙은 것으로 동작)
    EXISTS : SELECT 컬럼1 FROM 테이블  WHERE EXISTS ( SELECT * FROM 테이블 WHERE 조건 )
                  (EXISTS는 하위쿼리가 어떤 결과라도 돌려지면 참)

    임시테이블 만들기 : SELECT INTO SELECT * INTO 새테이블명 FROM 테이블 (다른세션에서도 가능, DROP해야 삭제됨)
                                SELECT INTO SELECT * INTO #새테이블명 FROM 테이블 (해당세션에서만 가능, 세션끊어지면 삭제됨)
                                SELECT INTO SELECT * INTO ##새테이블명 FROM 테이블 (다른세션에서도 가능, 세션끊어지면 삭제됨)

    UNION : SELECT 컬럼1, 컬럼2 FROM 테이블
                UNION
                SELECT 컬럼1, 컬럼2 FROM 테이블

                (UNION은 컬럼의 자료형과 순서가 맞아야 한다. 중복데이터는 제거되며 UNION ALL을 하면 중복데이터도 가져온다.)

    컬럼 추가 : ALTER TABLE 테이블명 ADD 새컬럼 VARCHAR(10) NULL
    컬럼 변경 : ALTER TABLE 테이블명 ALTER COLUMN 컬럼 VARCHAR(10) NULL
    컬럼 삭제 : ALTER TABLE 테이블병 DROP COLUMN 컬럼

    삭제 : DELETE FROM 테이블명 WHERE 조건

    업데이트 : UPDATE 테이블 SET 컬럼 = 값 WHRER 조건

    트랜잭션 : BEGIN TRAN               ROLLBACK               COMMIT



    덧) SELECT에 왠만하면 * 는 사용하지 않는다.

    덧) WHERE절에서 연산자의 왼쪽은 가동하지 않는다. 컬럼을 가공하면 색인을 사용할 수 없다.
            WHERE 컬럼 * 3 < 10 말고 WHERE 컬럼 < 10 / 3 을 사용하자

    My Comment..
    개발 년차가 꽤 되었음에도.. 쿼리는 항상 어렵다.. 결론적으로는..
    노력을 안한 내가 죄인이지만.. 왜 그리도 SELECT 쿼리는 기본 이상 넘어가면 어려운지..
    형의 블로그도 다 보고 정리되고 하면, 쿼리 책도 하나 추천 받아서 사야겠다..

    [.NET]IIS에서 ASP.NET(aspx)만 실행안될 때..

    출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

    VS에서 ASP.NET 사이트를 만들고 내장서버가 아닌 IIS를 설치해서 웹사이트를 돌려보려고 할 때 ASP.NET 2.0파일인 aspx는 안돌아가고 html이나 asp파일만 돌아가는 경우가 있다. aspx를 돌릴려고 할때는 권한이 없다거나 못 찾는다거나 하여간 안된다.

    사용자 삽입 이미지

    이는 IIS에 닷넷프레임워크 2.0이 설치 안되어서 그렇다. 닷넷프레임워크 2.0을 설치했다고 하더라도 IIS를 닷넷프레임워크보다 나중에 설치하면 PC에는 닷넷프레임워크 2.0이 설치되었지만 IIS에는 설치가 되어 있지 않아서 발생하는 문제다.

    Visual Studio Tools에서 Visual Studio 명령프롬프트에 들어간다.

    사용자 삽입 이미지

    VS 명령프롬프트에서 aspnet_regiis -i 명령어를 입력하면 IIS에 닷넷프레임워크 2.0을 설치한다. 설치가 완료되면 IIS에 닷넷프레임워크가 등록이 된 것이다.

    Windows XP에서는 IIS가 5.1이 설치되고 Windows 2003 Server에서는 IIS 6.0이 설치된다. IIS 5.1에서는 위와같은 과정만 거쳐주면 바로 ASP.NET 2.0이 돌아가지만 IIS 6.0에서는 보안이 강화되어서 추가로 설정을 바꾸어 주어야 한다.

    사용자 삽입 이미지

    IIS에 들어가면 5.1과는 다르게 웹사이트 아래에 "웹 서비스 확장"이라는 항목이 있다. 여기서 사용하고자 하는 것을 "허용"해 주어야 한다. 여기서는 ASP.NET 2.0부분을 허용해 주어야 IIS에서 2.0파일인 aspx를 볼 수 있다.

    My Comment..
    이것도 설정적인 부분이기에 다른 언어에서도 쓰임새가 있을 듯 해서 가져왔다..
    그런데 말입니다.. 이러다 다 가져오는건 아닐런지..
    잘 구분해서 갖고 와야겠다..

    [.NET]IIS 5.1에서 시작시 예기치 않은 오류 발생..

    출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

    사용자 삽입 이미지
    IIS 서버에서 웹사이트를 시작하려고 했을 때 위와같은 예기치 않은 오류(0x8ffe2740)이 발생했다고 나올 때는 포트가 충돌해서 그런 것이다.(IIS 6.0에서는 다른웹사이트와 포트가 충돌할때 포트가 충돌했다고 나오던데... 5.1에서는 예기치 않은 오류라고 나오더라는...)

    기본웹사이트(또는 운영하려는 웹사이트)의 속성페이지에 들어가서

    사용자 삽입 이미지

    TCP 포트를 다른것으로 바꾸어 주면 된다.

    My Comment..
    음.. 이것도 역시 내가 개발하는 분야의 것은 아니지만, 가져왔다..
    이유는 기술적인 부분을 올려둔것이 아니라..
    IIS 오류에 대한 내용이기 때문인데.. 이 부분은 다른 쪽에서도 생길 수 있기에 올린다..

    [JAVA]이클립스 WTP로 웹개발하기..

    출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

    이클립스에서 JSP웹개발을 할때 많이 쓰는 롬보즈와 WTP중 WTP이다. 롬보즈에 비한다면 훨씬 설정이 간단한 편이다. 사소한 버그들이 좀 보이긴 한데 서로 장단점이 있어 보인다.. 툴의 선택은 좀 더 써봐야 할 것 같고 WTP의 설정을 보자.

    WTP는 Web Tools Platform의 약자인데 이클립스 3.2이상인가 버전부터는 WTP가 포함되어 있는 All-in-One버전이 같이 나와 있다. 이걸 다운받아서 사용하면 된다. 솔직히 뭐 설정이랄 것도 없다.

    사용자 삽입 이미지


    [Windows] - [Preference]에 들어가서 Server밑에 Installed Runtime을 찾아 들어간다. 이곳에서 사용할 서버를 설정해 주어야 한다. 여기서는 톰캣 4.1버전을 사용했으므로 Add를 눌러서 톰캣 4.1을 선택해 주고 Next를 누른다.

    사용자 삽입 이미지

    톰캣이 설치된 폴더를 선택해주고 JRE는 사용하는 JRE를 선택해 주면 된다. 여기서는 java 1.4를 사용하고 있으므로 J2sdk 1.4를 선택해 주었다.

    이것만 설정해 주면 WTP의 설정은 끝났다. 이제 그냥 개발을 하면 된다. Lomboz에 비한다면 설정과정이 무척 단순한 것을 알 수 있다.


    그럼 이제 개발을 해보자.

    사용자 삽입 이미지

    New프로젝트를 해서 Web밑의 Dynamic Web Project를 선택해 주고 Next를 누른다.

    사용자 삽입 이미지

    당연히 프로젝트 이름을 써주고 Target Runtime에 사용하려는 서버가 제대로 설정되어 있는지를 확인한 뒤에 Finish를 누르면 JSP개발을 할 프로젝트가 생성된다.

    사용자 삽입 이미지

    자동으로 WebContent라는 폴더가 생기는데 이게 웹사이트의 루트가 되는 곳이다. 이곳에서 우측마우스클릭을 해서 JSP페이지를 추가해 주면 된다. Java파일은 프로젝트에서 class를 추가해주면 자동으로 src에 위치하게 된다. (package를 무조건 사용해라.)

    사용자 삽입 이미지

    개발을 했으면 이제 봐야지 않은가... 보려는 파일을 마우스 우클릭을 해서 Run on Server를 하면 이클립스가 자동으로 톰캣을 실행하고  브라우저에 보여준다.

    기본적으로는 이클립스의 내장브라우저에 보여주는데 이건 편할수도 있으면서 불편할 수도 있다. 브라우저를 원하는 브라우저로 보려면 [Windows]-[Web Browser]에 들어가서 원하는 브라우저를 선택해 주면 Run on Server를 했을때 선택한 브라우저가 실행된다.

    사용자 삽입 이미지



    덧) 롬보즈와 WTP의 큰 차이점은 롬보즈는 실제 배포를 하고 WTP는 실제로 배포하지 않고 실행을 한다는 것이다. 무슨말이냐 하면 롬보즈는 배포를 해서 실행해 보기 때문에 배포를 한 시점에서 그 웹페이지는 실제 운영될수 있는 별도의 페이지가 되는 것이다. (때문에 톰캣을 미리 켜두고 실행해야 한다. 물론 이클립스 내에서 실행할 수 있지만...)

    하지만 WTP는 미리 톰캣을 실행해 두면 안된다. 따로 톰캣폴더안에 Context를 만들고 웹사이트를 돌리는 것이 아니라 WTP가 이런 일을 가상으로 해주기 때문에 WTP에서는 Data Source를 사용하기 어렵다고 한다. Class.forName으로 DB연결을 하고 마지막 배포시에만 Data Source로 바꾸어 주도록 하자.

    [JAVA]이클립스 Lomboz 셋팅 후 웹 어플리케이션 개발 준비하기..

    출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

    이클립스에서 롬보즈 플러그인의 설정을 다 했으면 이제 JSP사이트 개발을 할 준비를 해보자..

    새프로젝트를 Lomboz J2EE 프로젝트로 만든다.

    사용자 삽입 이미지

    프로젝트 이름을 입력하고 [Next]를 누른다.
    사용자 삽입 이미지

    그럼 아래와 같은 화면이 나온다. 그냥 [Next]를 또 눌러주면 된다.

    (물론 Oracle을 사용한다면 Libraries에 들어가서 Add Variable에 들어가서 오라클 설치시 설정해 놓은 오라클 환경변수(ojdbc14.jar)를 추가해 주어야 한다.)

    사용자 삽입 이미지

    이제 웹모듈을 연결해 주어야 한다. 여기서 말하는 웹모듈이란 웹사이트의 홈디렉토리가 되는 이름이다. 이 웹어플리케이션의 홈디렉토리의 이름을 지정해 주는 것이다. Add를 눌러서 이름을 입력한다.

    사용자 삽입 이미지

    상단탭에서 Targeted Servers로 가서 사용하는 서버의 타입을 선택해 주고 그 옆의 Add버튼을 눌러서 추가를 해준다. 목록에 추가된 타겟서버가 나타났으면 [Finish]를 눌러서 프로젝트 생성을 마친다.

    사용자 삽입 이미지

    프로젝트에서 오른쪽 마우스 클릭을 해서 Properties로 들어간다. Java Build Path에 들어가서 소스탭에서 Allow output folders for source folders를 체크하면 src쪽 아래에 Output folder라는 메뉴가 생겨난다. 이걸 선택하고 Edit를 누른다.

    사용자 삽입 이미지

    Output폴더를 디폴트가 아닌 Web-INF/classes로 선택해 준다. java파일이 컴파일된 클래스 파일은 이곳에 위치해야 웹어플리케이션에서 사용할수 있기 때문에 여기서 설정해 주면 이클립스에서 자동컴파일할 때 클래스파일이 이곳에 생기게 된다.

    사용자 삽입 이미지

    이제 코딩할 준비는 완료되었다.

    개발을 한 후에는 이제 배포를 해야 결과를 확인할 수 있다. 웹모듈폴더에서 오른쪽 마우스를 눌러서 Deploy Module를 해야 결과물을 확인할 수 있다.

    사용자 삽입 이미지

    배포를 하면 톰캣설치 폴더 아래 \webapps 안에 웹모듈이름의 war파일이 생기면서 자동으로 압축이 풀리고 웹모듈이름의 폴더가 생성된다. 해당폴더의 웹페이지를 직접 브라우져로 열어도 되고 배포 밑에 Show in Browser를 해도 된다.


    다만 이클립스에는 약간의 오류가 있어서 최초 배포는 잘 되지만 두번째부터는 war는 배포되지만 자동으로 압축이 풀리지 않는 문제가 있다. 이것을 해결하려면

    이클립스에서 롬보즈 프로젝트를 만들면 웹모듈안에 WEB-INF 폴더 밑에 build.xml파일이 생기는데 이파일에서

    <target name="deploy" depends="undeploy,init" >
        <!-- Create the distribution directory -->
        <delete file="${war}.war" failonerror="false" />
     <jar jarfile="${war}.war" basedir="${dist}" manifest="${dist}/META-INF/MANIFEST.MF"/>  
       <copy file="${war}.war" todir="${deploy.dir}"/>
        <delete file="${war}.war" failonerror="false" />    <delete dir="${dist}" failonerror="false" />
      </target>


    부분을 찾아서 주황색으로 표시한 delete부분 위에 다음 줄
    <mkdir dir="${war}"/>
        <unwar src="${deploy.dir}/${war}.war" dest="${deploy.dir}/${war}"/>

    를 추가해 주면 해결할 수 있다.

    [JAVA]이클립스 Lomboz 셋팅..

    출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

    보통 자바를 개발할때 이클립스를 사용하다. 최고의 툴이라고는 할 수 없을지 모르지만 공짜에다가 다양한 플러그인들로 많은 개발자들의 사랑을 받고 있는 듯 하다.........고 주워들었다. ㅡ..ㅡ

    어쨌든 Visual Studio같은 툴이 없는 자바에게는(머 Jbuilder라는게 있다지만..) 가장 괜찮은 툴인것 같다. (이클립스만 만질땐 몰랐는데 VS좀 만지다 돌아왔더니 자동화 되게 약한 느낌이.. ㅡ..ㅡ)

    이클립스에서 JSP를 개발하려면 약간의 추가적인 작업이 필요하다. JAVA처럼 바로 작성하고 컴파일해서 실행하는게 아니라 웹서버등이랑 연결해야하고 하다보니까... 주워들은 봐로는 Lomboz아니면 WTP이다. 여태까지는 롬보즈를 많이 사용해 왔고 아직도 사용자수는 롬보즈쪽이 많은 것 같고 이클립스 3.2 이상부터는 WTP가 포함되기 시작하면서 WTP도 사용자가 늘어가는 추세인것 같다.

    저번 프로젝트때는 롬보즈를 써보고 지금은 WTP를 쓰고 있는데 아무래도 WTP가 좀더 사용하기가 편한 것 같다. 작성하고 war로 Deploy해서 돌려봐야하는(회사에선 어떤지 모르지만 최소한 내 지식선에서 개발할때는...) 상황에 꽤나 번거로웠는데 WTP는 바로바로 브라우져 띄워서 볼수 있으니 일단 편했다...

    어쨌든 이클립스에서 롬보즈를 셋팅해 보자.

    좀 만져보니까 이게 꽤 까다롭더란 말이지... 롬보즈를 쓰려면 롬보즈 플러긴을 깔아야 하는데 머 롬보즈 추가하기 전에 EMF인가도 추가해 주어야 하고 그런데 처음 강사한테 받은 이클립스 3.0.2에는 이 플러긴도 다 포함되어 있어서 책보고 수월하게 셋팅을 했는데 이 녀석을 집에 복사해 오질 않아서 집에서 따로 다운 받아서 해보려고 했는데 이틀동안 죽어라... 셋팅해보고 온갖 버전은 다 받아가면서 해봤는데 죽어도 안되더라.. ㅡ..ㅡ 버전도 좀 맞춰주어야 하는것 같고.... 플러그인은 복사해 넣었는데 설정창엔 안뜨고 이거 하면 저거 안되고... 암튼 그렇다.. ㅡ...ㅡ 결국 다 포함되어 있는거 학원에서 가져와서 쓴다.. ㅡ..ㅡ

    내 책에나 웹페이지에나 롬보즈의 사이트는 http://www.objectlearn.com 이라고 나와있는데 내가 가봤을땐 저페이지는 이클립스 컨퍼런스같은 페이지가 되어 있었고 공식페이지인지는 몰라도 롬보즈는 http://forge.objectweb.org/projects/lomboz 여기에 잘 모여있더라... 저기서 받은것두 결국 제대로 돌리진 못했지만...

    Lomboz를 깔기전에 EMF를 먼저 깔아주어야 한다. 둘다 그냥 이클립스의 플러그인 폴더 아래에 복사해 넣으면 된다.

    이제 드뎌 셋팅좀 보자.. 어렵다.. 어려워..

    사용자 삽입 이미지

    이클립스에서 [Window] - [Customize Perspective...]에 들어간다. 플러그인이 제대로 설치되면 위와같이 롬보즈가 떠야 한다. Java아래 있는 Lomboz J2EE Wizard를 체크한다.

    사용자 삽입 이미지

    왼쪽은 Submenus를 "Show View"로 바꾸고 Lomboz J2EE를 체크해 준다.

    사용자 삽입 이미지

    상단탭에서 Commands으로 들어가서 Lomboz Actions을 선택한 후에 OK버튼을 눌러서 설정한 내용을 적용한다.

    이번엔 [Window] - [Preferences...]로 들어간다.

    사용자 삽입 이미지


    Workbench아래 Label Decorations 에서 Lomboz J2EE Decorators를 선택해 준다. 이건 이클립스 3.0.2버전인데 3.2버전에서는 Label Decorations이 저 위치에 있지 않고 General - Appearance 아래에 위치하고 있다.

    사용자 삽입 이미지

    Lomboz메뉴에 가서 JDK의 Tools.jar의 경로를 선택해 주어야 한다. 나는 C:\j2sdk1.4.2_14\lib\tools.jar 에 위치하고 있었다. 옆의 버튼을 눌러서 tools.jar의 위치를 선택해 주면 된다.

    사용자 삽입 이미지

    Lomboz아래 Server Definitions에 가서 서버를 설정해야 한다. 여기서는 톰캣 4.1을 사용했기 때문에 위와 같이 셋팅을 했다. 먼저 Server types를 선택해 준 후에 Properties에서 톰캣이 설치된 폴더를 선택해 주고 Classpath Variable의 값을 설치디레토리와 같게 해주면 된다. 당연히 포트번호도 톰캣에서 사용한것과 맞추어 주어야 한다.

    사용자 삽입 이미지

    이제 Java - Build Path에 가서 소스폴더와 아웃풋볼더의 이름을 src와 bin으로 설정하고 OK를 누르면 설정이 저장된다.

    이렇게 하면 롬보즈 사용을 위한 기본적인 설정을 완료가 된다.

    My Comment..
    형 말처럼 Lomboz 를 학원에서 썼다고 하는데.. 난 전혀 기억이 없다..
    역시나 과거에는 개발은 포기하고 수업을 들었던건지.. 거참..

    [JAVA]톰캣 설치 후 셋팅..

    출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

    Tomcat ver 4.1.31을 사용했다.

    Full 로 설치한 뒤에 아파치랑 겹치지 않도록 포트는 바꾸어 주어야 한다. 8090등으로 설치하고 기본 경로를 사용하지 말고 C:\에 바로 설치하되 Tomcat 4.1같은 폴더명을 사용하지 말고 Tomcat4.1 같은 폴더명을 사용한다.(폴더명에 공백이 들어갈 경우 흔하진 않지만 오류가 생길 가능성이 있다고 함. 나는 아직 겪어 보지 못함)
    설치 후에 http://localhost:8090/admin 에서 톰캣화면이 떠야 설치가 제대로 된것이다.(포트는 당연히 설치할때 할당한 포트번호이다.)

    사용자 삽입 이미지

    제어판 - 관리 도구 - 서비스 에서 Apache Tomcat을 수동으로 바꾸어 주어야 포트충돌이 나지 않는다. (이렇게 하지 않으면 리부팅 할때마다 JVM이랑 포트가 충돌나서 매번 바꾸어 주어야 한다. 위의 화면이 뜨려면 당연히 Tomcat이 실행되어 있어야 하고 Start Tomcat을 해서 창이 바로 꺼져버리면 제대로 실행이 되지 않은 것이다. 에러메시지를 보려면 cmd창을 열어서 톰캣설치폴더\bin으로 이동한 후 catalina.bat run라고 입력하면 메시지를 볼 수 있다.)

    포트충돌이 났을 경우에 포트는 C:\Tomcat 4.1\conf 의 server.xml 파일에서 포트를 찾아서 바꾸어 준뒤에 톰캣을 다시 실행하면 된다.

    원하는 다른 폴더에서 톰캣을 사용한 Jsp를 쓰려면 톰캣폴더\webapps\ROOT\WEB-INF폴더를 복사해서 해당 폴더 밑에 붙혀넣기를 한 후에 http://localhost:8090/admin 에 접속해서

    사용자 삽입 이미지

    왼쪽 메뉴에서 Tomcat -> Service -> Host에 들어가면 현재 등록되어 있는 Context 리스트가 나온다. 새로운 폴더에서도 웹서비스페이지를 만들어서 사용하려면 오른쪽창에서 Dropdown리스트를 열어서 create contex를 선택한다.

    사용자 삽입 이미지

    폴더가 C:\jsptest라면

    • DocumentBase : C:\jsptest
    • Path : /jsptest
    • Reloadable : True
    • UseNaming : Ture
    로 셋팅해 준다.셋팅후 http://localhost:8090/jsptest로 접속해서 해당위치의 파일목록이 나와야 한다. 물론 Index가 있으면 index파일이 뜬다.


    그 후에

    • C:\Tomcat 4.1\ common\lib 에 있는  servlet.jar를 C:\j2sdk1.4.2_14\jre\lib\ext 로 복사한다
    • C:\Tomcat 4.1\conf\web.xml에서
    •     <servlet>
              <servlet-name>invoker</servlet-name>
              <servlet-class>
                org.apache.catalina.servlets.InvokerServlet
              </servlet-class>
              <init-param>
                  <param-name>debug</param-name>
                  <param-value>0</param-value>
              </init-param>
              <load-on-startup>2</load-on-startup>
          </servlet>

    •     <servlet-mapping>
              <servlet-name>invoker</servlet-name>
              <url-pattern>/servlet/*</url-pattern>
          </servlet-mapping>
      부분의 주석을 풀어 준다.
    • 오라클을 사용하려면 C:\j2sdk1.4.2_14\Util\ojdbc14.jar 를 C:\Tomcat 4.1\common\lib에 복사해 넣는다.