Monthly Archives: 1월 2015
정보처리기사 필기 학습자료
[jQuery] jQuery Cross domain – 크로스 도메인 문제 해결하기
$.ajax({
crossDomain:
true
,
type:
"POST"
,
data: {url:document.URL},
success:
function
(data){
log(data);
}
});
XMLHttpRequest cannot load 에러
<% response.addHeader("Access-Control-Allow-Origin", "*"); response.addHeader("Access-Control-Allow-Credentials", "true"); %>
[jquery] Form Reset 방법
[jquery] Form Reset 방법
– $(“#formName”).reset(); or $(“form”).reset(); — 작동하지 않음
1. 특정 form reset
// 첫번째 form reset $(document).ready(function() { $("#btnReset").click(function() { $("form")[0].reset(); }); }); // 특정 id form reset $(document).ready(function() { $("#btnReset").click(function() { $("form").each(function() { if(this.id == "frmId") this.reset(); }); }); }); // 특정 class form reset $(document).ready(function() { $("#btnReset").click(function() { $("form").each(function() { if(this.className == "frmClass") this.reset(); }); }); });
2. 전체 form reset
$(document).ready(function() { $("#btnReset").click(function() { $("form").each(function() { this.reset(); }); }); });
[jQuery] 제어 (선택, 삽입, 삭제, 변경, 변환, 확장)
.add() : 요소를 추가 선택한다.
/ $(“p”).add(“div”) // p 요소와 div 요소를 선택한다.
.not() : 선택된 확장집합에서 인자에 해당하는 요소를 제거한다.
/ $(“p”).not(“.green”) // p 요소의 확장집합에서 class가 green인 요소를 제거한다.
.children() : 요소의 고유한 자식으로 구성된 확장 집합을 반환한다.
.contents() : 선택한 요소의 자식 요소를 가져온다.(text node 포함)
$(‘.container’).contents().filter(function(){});
// class container 요소의 자식요소(text 포함)를 가져와 filter 한다. iframe text를 가져올때 사용
.first() : 요소의 첫번째 노드 반환
.last() : 요소의 마지막 노드 반환
.next() : 요소 집합내의 바로 다음에 나오는 형제로 구성된 요소 반환
.nextAll() : 요소 집합내의 다음에 나오는 모든 형제로 구성된 확장집합 반환
.nextUntil() : 선택 요소부터 인자가 나올때까지 집합을 선택한다.
/ $(“#term”).nextUntil(“dt”).css(‘background-color’, ‘red’);
// id term 요소부터 dt가 나올때까지 형제요소를 검색하고 배경을 red로 변경
/ $(“#term”).nextUntil($(“#term2”), “dd”).css(‘background-color’, ‘red’);
// id term 요소부터 id term2 요소까지 중 dd 요소만 배경을 red로 변경
.parent() : 요소 집합의 바로 위 부모로 구성된 확장 집합 반환
.parents() : 요소 집합의 모든 조상 확장 집합을 반환. 부모와 상위 모든 조상이 포함되지만 문서루트는 미포함
.parentsUnitl() : 선택 요소부터 인자가 나올때까지 부모 집합을 선택한다.
/ $(“#term”).parentsUntil(“dt”).css(‘background-color’, ‘red’);
// id term 요소부터 dt가 나올때까지 부모요소를 검색하고 배경을 red로 변경
/ $(“#term”).parentsUntil($(“#term2”), “dd”).css(‘background-color’, ‘red’);
// id term 요소부터 id term2 부모요소까지 중 dd 요소만 배경을 red로 변경
.prev() : 요소 집합의 바로 이전에 나오는 형제로 구성된 확장 집합을 반환
.prevAll() : 요소 집합의 이전에 나오는 모든 형제로 구성된 확장 집합을 반환
.siblings() : 요소의 모든 형제를 포함하는 확장 집합을 반환.
.eq() : 선택 요소의 index번째 요소를 선택한다.
/ $(“div”).eq(2).css(‘background-color’, ‘red’); // div의 3번째 요소의 배경을 변경
.index() : 선택 요소에서 인자의 index 번호를 반환
/ $(“div”).index($(“div:contains(‘Third’)”));
// div 안에서 div에 ‘Third’라는 단어를 포함하고 있는 div index 값
$.inArray() <jQuery.inArray()> : 대상 배열 내의 값을찾아서 인덱스를 반환한다. ; 첫번째 배열은 0, 요소가 없으면 -1
/ $.inArray(“John”, arr); // arr 배열에서 “John”의 인덱스를 찾아서 반환
.find() : 선택된 요소의 자식노드에서 인자의 요소를 찾는다.
/ $(“#div”).find(ul); // id div의 자식노드에서 ul 요소를 찾는다.
.filter() : 선택된 요소를 포함한 노드에서 인자의 요소를 찾는다.
/ $(“#div”).filter(ul); // id div 노드 자신을 포함한 요소에서 ul 요소를 찾는다.
.end() : jQuery 함수를 연쇄적으로(chain)으로 사용할 경우 앞쪽에 이미 선택되었던 요소로 돌아간다.
$(‘ul:first’).find(‘.foo).css(‘background-color‘ , ‘red‘) // ul의 첫번째 요소에서를 찾아 배경 변경
.end().find(‘bar‘).css(‘background-color‘, ‘green‘); // find를 호출하기 전의 요소($(‘ul:first))에서를 찾아 배경 변경
.each() : 다중 요소를 순서대로 선택한다.
/ $(“div”).each(function(i,element){
// div 요소를 순서대로 선택한다. i: 순서 시작은 0 , element : 선택된 요소
});
.has() : 인자를 가지고 있는 확장집합을 선택
/ $(“li”).has(“ul”); // li 요소중 ul을 가지고 있는 요소만 선택
.slice() : 선택한 요소 집합을 인자의 범위로 잘라낸다.
/ $(“img”).slice(2).css(…);
// img 요소의 세번째 요소부터 끝 요소까지 css 적용
/ $(“img”).slice(2, 4).css(…);
// img 요소의 세번째 요소부터 5번째 요소를 만날때까지(4번째) css적용
/ $(“img”).slice(-2, -1).css(…);
// img 요소의 끝에서 두번째 요소부터 끝에서 첫번째 요소를 만날때까지 css적용
.clone() : 선택된 요소를 복사한다. / $(“#img”).clone(); // id img DOM을 복사한다.
.closest() : 현재 위치한 요소에서 DOM 트리를 탐색하여 일치된 요소를 선택한다.
$(“#name”).closest(“ul”); // id name 요소에서 가장 가까운 ul을 선택한다.
$(“#name”).closest(“ul”, “#code”); // id code 요소 아래의 id name 요소에서 가장 가까운 ul을 선택한다.
.andSelf() : 선택된 구조 요소를 이어붙인다.
/ $(‘div’).find(‘p’).andSelf().css(..);
// div와 내부의 p요소를 선택해서 결합 후 css 적용
.offsetParent() : 위치(css:position) 요소를 기반으로 한 부모 요소를 찾는다.
/ $(‘li.item-a’).offsetParent().css(..); // li의 item-a 클래스의 css position상 가장 가까운 부모요소에 css를 적용
$.grep() <jQuery.grep()> : 배열 요소를 조건에 따라 필터링하여 제거 한다. 특정 로직에 의해 true가 되는 결과만 반환
/ $.grep([0,1,2], function(n,i){ return n>0;});
// 배열 [0,1,2] 에서 0보다 큰값을 반환 [1,2]
/ $.grep([0,1,2], function(n,i){ return n>0;}, true);
// 배열 [0,1,2] 에서 0보다 크지 않은 값을 반환 [0]
$.proxy() <jQuery.proxy()> : jQuery의 네임스페이스를 관리할 수 있게 한다. “this” 키워드를 통하여 다른 개체를 유지할 수 있게 한다.
var app={
config : { clickMessage : Hi!” },
// config 메서드에 clickMessage를 정의
clickHandler : function(){ // clicHandler 메서드 함수 정의
alert( this.config.clickMessage);
// this:app 의 config 메시지의 clickMessage를 알람
}
}
$(‘a).bind(‘click’, app.clickHandler);
// 실행되지 않는다. jQuery 이벤트 모델에 의해 this가 app 이 아니다.
$(‘a’).bind(‘click’, .proxy(app, ‘clickHandler’));
// this 키워드를 유지한채 실행된다.
– 삽입
.after() : 지정한 요소 뒤에 새로운 요소를 삽입 / A.after( B) / A뒤에 B를 추가
.insertAfter() : 지정한 요소 뒤에 새로운 요소를 삽입
/ A.insertAfter(B) / B뒤에 A를 추가
.append() : 지정한 요소 뒤에 내용 삽입
/ $(“div”).append(“<p>내용</p>”); // div 뒤에 <p>내용</p> 를 삽입한다.
.appenTo() : 지정한 내용을 요소 뒤에 삽입
/ $(“<p>내용</p>”).appendTo($(“div”)); // <p>내용</p>를 div 뒤에 삽입한다.
.before() : 지정한 요소의 앞에 요소를 삽입 / A.before(B) / A 앞에 B를 추가
.insertBefore() : 지정한 요소의 앞에 요소를 삽입
/ A.insertBefore(B) / B 앞에 A를 추가
.prepend() : 지정한 요소 앞에 내용 삽입
/ $(“div”).prepend(“<p>내용</p>”); // div 앞에 <p>내용</p> 를 삽입한다.
.prependTo() : 지정한 내용을 요소 앞에 삽입
/ $(“<p>내용</p>”).prependTo($(“div”));
// <p>내용</p>를 div 앞에 삽입한다.
.pushStack() : jQuery 스택에 DOM 요소를 추가한다.
/ $(“#ids”).pushStack($(“div”));
// id ids 요소에 jQuery 스택에 div 요소를 추가한다.
.wrap() : $() 형식으로 쓰는 함수의 선택한 요소 각각을 문자열 또는 객체로 감싼다.
./ $(“.inner”).wrap(‘<div />’);
// 집합 요소 각각을 <div class =”new”></div>
./ $(“.inner”).wrap(function(){
return ‘<div />’);
// 집합 요소 각각을 <div class =”new”></div>
});
.unwrap() : 선택한 요소 집합의 부모를 제거한다.
./ $(“.inner”).wrap(); // 집합 요소의 부모를 제거한다.
.wrapAll() : $() 형식으로 쓰는 함수의 선택한 요소 전체를 문자열 또는 객체로 감싼다.
./ $(“.inner”).wrapAll(‘<div />’);
// 집합 요소 전체를 <div class =”new”></div>
.wrapInner() : $() 형식으로 쓰는 함수의 선택한 요소 각각의 내부를 문자열 또는 객체로 감싼다.
./ $(“.inner”).wrapInner(‘<div />’);
// 집합 요소 각각의 내부를 <div class =”new”></div> 로 감싼다
– 삭제
.detach() : 지정한 요소를 포함 하위 요소 모두 제거
/ $(“div”).detach(); // div를 포함 하위 요소 모두 제거
.empty() : 지정한 요소의 하위 요소를 제거
/ $(“div”).empty(); // div 하위 요소 모두 제거
.remove() : 지정한 요소를 포함 하위 요소 모두 제거, 요소와 관련된 이벤트와 데이터 모두 제거
/ $(“div”).remove(); // div 포함 하위 요소, 이벤트, 데이터 모두 제거
– 변경, 변환
.text() : 해당 요소에 text 요소를 삽입 또는 변경한다.
.html() : 해당 요소에 html 요소를 삽입 또는 변경한다.
.val() : 해당 요소의 value 값을 삽입 또는 변경한다.
.replaceAll() : 해당 요소들로 인자 요소를 대체한다.
/ $(‘<h2>New heading</h2>’).empty($(“div”));
// div 요소를 <h2>New heading</h2> 요소로 변경한다.
.replaceWith() : 해당 요소들을 인자의 요소로 바꾼다. ; replaceAll() 과 선택,인자(target)이 반대
/ $(“div”).empty(‘<h2>New heading</h2>’);
// <h2>New heading</h2> 요소로 div 요소를 변경 시킨다.
.toArray() : 선택한 요소 DOM 집합을 자바스크립트 배열로 만든다.
/ var arr = $(“div”).toArray(); // arr[0] === <div>Hello</div>
$.makeArray <jQuery.makeArray()> : jQuery 집합의 요소 값을 JavaScript 배열로 변환한다.
/ var arr = $.makeArray($(“input”)); // arr[0] === “Hello”
$.map() <jQuery.map()>
.map() : 선택된 배열 요소를 순서대로 callback 함수를 통해 얻어진 리턴값을 포함하는 새로운 jQuery 오브젝트 생성
/ var arr = $(“div”).map(function(){
return $(this).text().toUpperCase(); // 선택된 요소들의 text값을 대문자로 변경한다.
});
/ var arr = $(“div”).map({width : 10, height: 15} ,function(value, index){
return index; // key를 반환한다. [“width”, “height”]
});
$.globalEval() <jQuery.globalEval()> : 문자열로 명령어를 실행시켜준다.
/ $.globalEval(“var newVar = true;”) // newVar == true
$.merge() <jQuery.merge()> : 두개의 배열을 첫번째 배열에 합칩니다.
/ $.merge([0,1,2],[2,3,4]); // 첫번째 배열 결과 : [0,1,2,2,3,4]
/ $.merge($.merge([],[0,1,2]),[2,3,4]);
// 첫번째 배열의 값을 유지하기 위해 새로운 배열을 만든다.
$.trim() <jQuery.trim()> : 문자열 앞뒤에 있는 공백 문자를 제거하고 결과 반환
/ var trimStr = $.trim(str); // str === ” abc def ff “; trimStr === “abc def ff”;
$.unique() <jQuery.unique()> : element 배열의 중복된 모든 element를 제거한다. ; string, number 배열에서는 동작 X
/ var divs = $.unique(divs); // divs의 중복 선택되어 들어간 element를 제거한다.
$.parseJSON() <jQuery.parseJSON()> : JSON문자열을 JavaScript object로 반환한다.
/ var obj = $.parseJSON(‘{“name”:”John”}’);
// 문자열 {“name”:”John”}을 JavaScript object로 변환한다.
/ alert(obj.name===”John”); // JavaScriptObject인 obj에서 name 요소인 John
– 참고 : 형식이 어긋난 JSON 문자열을 인자로 사용하면 exception이 발생한다.
문자열의 key 와 value 는 쌍따옴표(“”)를 사용해야 한다.
$.parseXML() <jQuery.parseXML()> : 유효한 XML문서를 파상한다.
$title = $.parseXML(xml).find(“title”); // xml 파일에서 title의 값을 찾는다.
– 확장
$.noop() <jQuery.noop()> : 비어있는 함수 (function(){})
$.noConflict() <jQuery.Conflict()> : 다른 JavaScript 라이브러리와 함께 사용할때 $의 충돌을 막기위해 사용
$.sub() <jQuery.sub()> : 새로운 jQuery 함수를 정의할때, 네임스페이스의 충돌로 다른 개발자의 함수에 영향을 주지 않도록 캡슐화된 플러그인을 만들고자 할때 $.sub() 로 복사하여 사용
(function(){ var sub$ = jQuery.sub(); sub$.fn.myCustomMethod = function(){ return 'just for me'; }; sub$(document).ready(function() { sub$('body').myCustomMethod() // 'just for me' }); })(); typeof jQuery('body').myCustomMethod // undefined
$.extend() <jQuery.extend()> : 첫번째 인자에서 두번째 인자를 병합하며, 확장한다.
(1) 두번째 인자값이 첫번째 인자값의 같은 옵션을 대체하며 확장
var object1 = { apple : 0, banana : {weight : 52, price : 100}, cherry : 97 };
var object2 = { banana : {price : 200}, durian : 100 };
$.extend(object1, object2);
결과 : object1 = { apple: 0, banana: { price: 200 }, cherry: 97, durian: 100 };
(2) 첫번째 인자값의 원본 값을 유지하며 병합
var object1 = { apple: 0, banana: {weight: 52, price: 100}, cherry: 97};
var object2 = { banana: {price: 200}, durian: 100};
$.extend(true, object1, object2
결과 : object1 == { apple: 0, banana: { weight: 52, price: 200 }, cherry: 97, durian: 100 }
(3) 요소에 적용할 명령어 확장
$.fn.extend({
myMethod : function(){…}
});
-> $(“div”).myMethod();
(4) 함수 실행 JQuery 명령어 확장
$.extend({
myMethod2 : function(){…}
});
-> $.myMethod();
ajax에서 input 태그안의 value 에 값넣기
var enc = "값"; $('input[name=enc]').attr('value',enc);
input 으로 설정한 태그 안의 name 이 enc 인 곳에
value 를 enc변수의 값으로 설정하는 부분
<input type=”text” name=”enc” value=””/>
결과적으로 위 태그에서
<input type=”text” name=”enc” value=”enc”/> 태그로 변경 된다.
[MySQL]Stored Procedure 개요
Stored Program이란?
– MySQL5 버전부터 지원
– ANSI SQL 2003을 기준으로 채택(블럭구조기반)
– 3가지 타입
Stored procedure : 가장 일반적인 타임
Stored functions : 프로시져와 비슷하지만 단일값만 return
Triggers : 데이터베이스 activity발생시 반응되는 action정의
Stored Program 사용이유
– 데이터베이스 보안 강화
– 코드의 유지보수를 더욱 쉽게
– 네트웍 트래픽 감소
– 어플리케이션의 이동성을 강화
Procedure의 기초
– 기본 샘플
DELIMITER $$
DROP PROCEDURE IF EXISTS HellloWorld$$
CREATE PROCEDURE HelloWorld()
BEGIN
SELECT ‘Hello World’;
END$$
DELIMITER ;
– 변수
BEGIN
DECLARE my_integer INT;
DECLARE my_dob DATE DEFAULT ‘1960-06-21’
SET my_integer=20;
END;
– 파라미터의 모드
DELIMITER $$
CREATE PROCEDURE my_sqrt(input_number INT, OUT out_number FLOAT)
BEGIN
SET out_number=SQRT(input_number);
END$$
DELIMITER ;
IN – 프로시저의 기본모드, 값을 전달받음
OUT – 값을 할당할 수 있고 호출할 프로그램에 반환
INOUT – 값을 전달할 수 있고 변경된 값 역시 확인 가능
– 조건절(IF, CASE)
IF(price>500) THEN
SET discount=10
ELSEIF (price>100) THEN
SET discount=5
ELSE
SET discount=3
END IF
– LOOP의 사용(WHILE/END WHILE, REPEAT/UNTIL절 가능)
my_simple_loop : LOOP
SET counter = counter+1;
END LOOP my_simple_loop;
– SELECT INTO(변수에 값을 SELECT로 넣을 경우 사용)
DECLARE total NUMERIC(8,2);
SELECT SUM(sale) INTO total
FROM sales
– Store Function : IN파라미터만 사용가능, OUT, INOUT는 사용 불가, SQL내에서도 호출 가능
– Trigger : DML문에 의하여 테이블이 변경되었을때만 실행됨
자바로 Host 조회하기
자바로 서버 Host 조회 해보자 ..
package test; import java.net.InetAddress; import java.net.UnknownHostException; public class DnsTest { public static void main(String[] args) { try { InetAddress inetAddress = InetAddress.getLocalHost(); displayStuff("local host", inetAddress); System.out.print("--------------------------"); inetAddress = InetAddress.getByName("www.google.com"); displayStuff("www.google.com", inetAddress); System.out.print("--------------------------"); InetAddress[] inetAddressArray = InetAddress .getAllByName("www.google.com"); for (int i = 0; i < inetAddressArray.length; i++) { displayStuff("www.google.com #" + (i + 1), inetAddressArray[i]); } } catch (UnknownHostException e) { e.printStackTrace(); } } public static void displayStuff(String whichHost, InetAddress inetAddress) { System.out.println("--------------------------"); System.out.println("Which Host:" + whichHost); System.out.println("Canonical Host Name:" + inetAddress.getCanonicalHostName()); System.out.println("Host Name:" + inetAddress.getHostName()); System.out.println("Host Address:" + inetAddress.getHostAddress()); } }
apache 403 Forbidden error
리눅스에서 아파치를 설치한 후 직면하게 되는 부분이 바로 403 Forbidden 에러다.
403 Forbidden 에러는 단어 그대로 접근이 금지가 됐다는 말이다.
즉 권한이 없다는 뜻.
몇가지 경우가 있기 때문에 체크를 하다보면 해결할 수 있다.
서버관리를 10년이상해도 403 forbidden 에러는 정말 헷갈린다.
또 헤맸다 ㅡ.ㅡ
1. 웹서버의 디렉토리에 권한이 없는경우다.
웹루트가 /home/hosting/aaa/htdocs 인경우
hosting, aaa, htdocs 모두 실행권한(755 또는 701)이 있어야한다.
chmod 755 /home/hosting chmod 755 /home/hosting/aaa chmod 755 /home/hosting/aaa/htdocs
755가 아니라 701 로 해도 무방하겠지요.
2. 웹서버 설정화일 셋팅 문제 (httpd.conf)
<Directory /> Options FollowSymLinks AllowOverride None Order deny, allow Allow from all </Directory>
위 굵은 글자 부분이 Deny from all 로 되어 있다면 위처럼 변경하고 웹서버를 재시작한다.
구지 접속을 막고 싶다면
<Directory /> Options FollowSymLinks AllowOverride None Order deny, allow Deny from xxx.xxx.xxx.xxx yyy.yyy.yyy zzz.zzz.zzz Allow from all </Directory>
3. SELinux 가 동작하는경우
SELinux 는 취약한 보안을 강화시키는 좋은 환경이다.
귀찮다면
$ vi /etc/selinux/config
를 실행하여
SELinux=disabled 로 수정한다. (enforcing, permissive, disabled 가 있다.
적용하기 위해서는
$ setenforce 0 (끄기)
$ setenforce 1 (켜기)
혹은 재부팅
4. SELinux가 동작하는 경우
SELinux 보안환경에서 사용한다면 디렉토리에 보안셋팅을 해줘야한다.
ls -Z 으로 디렉토리 보안상태를 확인할 수 있다.
drwxr-xr-x nlinux nlinux root:object_r:httpd_sys_content_t aaa drwxr-xr-x nlinux nlinux user_u:object_r:user_home_dir_t bbb
위에서 httpd_sys_content_t 타입을 설정해줘야만 HTTP 웹서버가 접근이 가능하다.
설정하는 방법은 (하위디렉토리까지 모두 변경)
$ chcon -R -h -t httpd_sys_content_t /home/hosting/aaa