반응형

AJAX는 쉽게 말하면, 자바스크립트를 통해서 서버에 데이터를 요청하는 것입니다. 

HTML from 태그를 사용하지 않고 javascript를 사용하기 때문에 서버에 로딩된 데이터를 페이지에 보여주기 위해 새로운 HTML페이지로 이동 할 필요가 없기 때문에 "새로고침"을 할 필요가 없습니다.

또한 그부분만 로딩 되기 때문에 속도가 빠릅니다. 본래 명칭은 아래에 글을 참고하세요


Asynchronos 

 1. 바로해석을 하면 "비동기적" 이라는 뜻입니다.

 2. 비동기적이라는 것은, 클라이언트(사용자)가 서버에 요청을 보내놓고도 응답을 기다리며 대기 하는 것이 아닌 프로그램은 계속 실행이 된다는 의미 입니다.

    다시 말하면 먼저 요청한 것에 대한 것이 있다고 해서 그 응답을 기다리고 다음것이 실행 되는 것이 아닙니다. 

    그래서 어떠한 경우에는 나중에 요청한 결과가 먼저 실행되어 버리는 경우도 있습니다.


Javascript

 1. 자바스크립트는 웹 브라우저에 대한 스크립트 언어로 만들어진 언어 입니다.


XML

 1. XML은 우선 간단히 데이터 형식의 일종으로 이해하면 됩니다. 

 2. XML은 "Extensible Markup Language" 줄임말 입니다. 해석하면 확장가능한 표시 언어 입니다. 

    Markup Language는 데이터를 태그 항목으로 표시한다는 것입니다. 

    HTML 도 일종의 Markup Language 입니다. 

    대신 데이터를 태그항목으로 설정하는데 HTML에 비해 자유도가 높습니다. 


AJAX의 본래 명칭

 1. AJAX의 본래 명칭은 XHR(XML Http Request) 입니다. 해석하자면 HTTP request를 서버에 보낸다는 의미 입니다.


JSON

 1. JSON도 일종의 데이터 형태 입니다. XML은 자바스크립트에서 사용하기 불편한 점이 많기 때문에 주로 JSON 데이터 형식을 많이 씁니다.

 2. JSON은 객체 또는 배열 등을 이용해서 표현 됩니다. 


AJAX 4단계 과정

 1. XMLHTTP request object를 생성합니다.

    request(요청)를 보낼 준비를 브라우저에게 시키는 과정입니다.

 2. callback 함수를 만듭니다.

    서번에서 response(응답)이 왔을때 실행되는 함수 입니다.

 3. open request

    브라우저에게 두가지 정보를 넘깁니다. 

    request를 보내기 위해 사용할 메소드 예를들면 post 이고 request 가 이동할 URL 입니다. 

 4. request를 보냅니다.



예제 코드 

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

var xhr = new XMLHttpRequest();  // xhr 객체를 생성한다.

xhr.onreadystatechange = function(){  // request 변화여부를 확인할수 있는 객체로 function을 실행한다.

 if(xhr.readyState===4{

 document.getElementById('ajax').innerHTML = xhr.responseText; //response 이다.

 }

}

xhr.open('GET',"test.html");  // html get 방식 메소드와 URL를 낼 준비를 한다.

xhr.send();

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

onreadystatechange

 1. AJAX에서 이벤트는 사용자가 form를 submit하는 것이 일종의 이벤트이다. 이 form이 제대로 입력되었는지 AJAX에 어떠한 변화가 있는지 여부에 대응하는 프로그램이다.


readyState

 1. XHR object는 response가 돌아 왔는지 아닌지를 추적하는 property 이다.

    response 값이 4 이면 response 가 돌아 온것이다.


open send 

 1. open()는 보낼 준비를 시키는 것이지 보내는 것은 send() 메소스가 한다. 


감사합니다. 고맙습니다. 운이 좋습니다. 

반응형
반응형

생수 살때 꼭 확인해야 하는 부분이 있다 사먹는 생수도 알고 먹어야 합니다. 


길을 가다 목 마를 때 편의점에서 집어드는 생수 

이 수 많은 생수들 중에 좋은 생수를 사려면 '먹는샘물'인지를 확인해야 합니다. 

'먹는샘물'이 아닌 생수도 있기 때문입니다. 


유튜브에도 올라온 생수 구별 방법을 그대로 알려 드립니다.

영상을 통해 확인 하셔도 됩니다. 


현재 시중에 유통되는 물에는 2가지 형태가 있습니다. 

첫 번째는 우리가 흔히 생수라고 생각하는 '먹는 샘물'입니다. 

'먹는샘물'을 구분하는 방법은 간단합니다. 

품목명에 '먹는샘물'이라 써있는지 보면 됩니다. 

먹는 샘물을 지하수나 용천수 등의 샘물을 마실 용도로 제조한 물로 자연 형태의 생수 입니다. 

반대로 먹는 샘물이 아닌 '혼합음료'라고 적힌 생수가 있습니다.

겉 보기에는 일반 생수와 별다를 것이 없어 보이지만 엄연히 다른 제품입니다.

'혼합음료'는 증류수에 첨가물을 넣은 것입니다. 

지하수나 수돗물에 물리적 화학적 살균을 하고 정제 과정을 거쳐 인공적으로 만든 제품입니다. 

'먹는 샘물'은 자연 그대로의 물을 담아낸 제품이고 '혼합 음료'는 정제수에 합성 미네랄이 첨가된 제품입니다. 

'먹는 샘물'인 생수는 먹는물관리법에 따라 환경부에서 엄격하게 관리합니다. 

반면 '혼합음료'는 식품위생법에 따라 식약처에서 관리하고 있습니다. 

'먹는 샘물'의 원수는 46개 항목을 생산된 제품은 50개 항목을 각각 검사하지만 '혼합음료'는 8개 항목을 검사할 뿐 '먹는샘물'에 비해 통과 기준이 까다롭지 않습니다.

검사 기준이 분명이 다르고 관리하는 부서도 다르지만 디자인과 상표명만 봐서는 '먹는샘물'과 '혼합음료'를 구분하기 쉽지 않습니다.

다 같은 생수인 줄 알고 있었다 라고 하는 사람들이 많습니다. 

'혼합음료'들이 ㅇㅇ워터, ㅇㅇ수 등의 이름을 써 '먹는샘물'과 비슷한 형태를 하고 판매되기 때문입니다.  

그래서 당분간은 자연상태의 물을 드시고 싶으신 분들은 '먹는샘물'인지 확인을 하고 마시면 됩니다. 

유통기한은 제조일 후 6개월 내로 보는 것이 좋고 환경부 기준에 어긋난 먹는샘물은 환경부 홈페이지 '먹는물영업자 위반현황'에 올라 옵니다.

가끔 들어가서 확인해 보면 좋을 것 같습니다. 

특히 아이를 키우시는 분들은 알아 두시면 좋을 것 같습니다. 

'혼합음료' 생수 제품이 나쁘다 '먹는샘물'이 좋다 라는 이야기를 하려는 것이 아닙니다. 

본인 역시 생수는 인공적인 것이 아니고 자연적인 물이라는 생각을 일반적으로 가지고 있습니다. 

이것은 대부분의 사람들이 일반적인 생각일 겁니다. 그리고 일반적으로 생각하는 자연적인 물이 어떤 것인지에 대해 이야기 한 것입니다.  

법에 의해 정의된 먹는샘물 명칭 같은 말장난을 하자는 이야기도 아닙니다.

생수는 우리가 생각는 그대로 생수였으면 이런 이야기가 정보라고 올라 오지는 않았을 겁니다. 

이 2가지 생수가 있다는 정보를 많은 사람들이 제대로 잘 알지 못한다면 모르는 사람이 문제일까요?

제대로 알리지 않은 것이 문제 일까요?

어떤 것을 살지는 소비자인 우리가 제대로 알고 정해야 하지 않을까 생각합니다. 


감사합니다. 고맙습니다. 운이 좋습니다. 


먹는물영업자 위반 현황 확인 



반응형
반응형

Date Class getTime() 와 SimpleDateFormat을 통한 String 날짜 시간 비교 방법

감사합니다 고맙습니다 운이 좋습니다.


개발을 하다보면 시간을 비교 해야 하는 경우가 많이 있습니다. 

String 형태의 지정된 날짜와 현재 또는 특정일과 비교를 해야 하는 경우에 getTime() 을 사용하게 됩니다. 

getTime()은 import java.util.Date 를 선언하고 사용하면 됩니다. 

String 일시(날짜+시간)를 서로 비교할때 SimpleDateFormat을 사용해서 동일한 형식으로 변경하여 쉽게 비교 할수 있습니다. 

예를 들어 현재일시가 세일기간 사이에 있는지 확인을 방법은 다음과 같습니다. 


String saleStartStr = "2018.09.28 00:30"; //세일 시작 일시

String saleEndStr = "2018.09.30 23:30"; //세일 종료 일시

Date nowDayTime = new Date();


SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd HH:mm"); // String 날짜 형식을 정의 합니다. 

String nowDayTimeStr = sdf.format(nowDayTime);  // 현재일시를 같은 형식으로 파싱합니다.

Date saleStart = sdf.parse(saleStartStr); // 시간으로 변경을 합니다. 

Date saleEnd = sdf.parse(saleEndStr); // 시간으로 변경을 합니다.

Date nowDayTimeFormat = sdf.parse(nowDayTimeStr); // 시간으로 변경을 합니다.


// 이제 비교를 진행 합니니다. 

// Date 형식으로 값을 변경한 것은 getTime() 메소드를 사용하기 위해서 입니다. 


if(saleStart.getTime() > nowDayTimeFormat.getTime()){

System.out.println("현재는 세일 시작 전 입니다.");

}

// nowDayTimeFormat.getTime() 값이 작으면 시작일보다 앞에 있다는 이야기 입니다. 

// 날짜를 비교할때 실수를 많이 하는 부분이기 때문에 주의가 필요합니다. 


if(saleStart.getTime() < nowDayTimeFormat.getTime(){

System.out.println("현재는 세일 시작 후 입니다.");

}

// 현재 시간을 분단위 까지 정의 하였기 때문에 두 값이 같은 경우는 제외 하겠습니다. 

// 동일하게 종료 시간도 다음과 같이 확인을 할 수 있습니다. 


if(saleEnd.getTime() > nowDayTimeFormat.getTime()){

System.out.println("현재는 세일 종료 전 입니다.");

}

if(saleEnd.getTime() < nowDayTimeFormat.getTime()){

System.out.println("현재는 세일 종료 후 입니다.");

}

// 다음은 세일 기간 중인지 아닌지를 알아보겠습니다. 


if(saleStart.getTime() <= nowDayTimeFormat.getTime() && saleEnd.getTime() >= nowDayTimeFormat.getTime()){

System.out.println("현재는 세일기간 중 입니다.");

}else{

System.out.println("현재는 세일기간이 아닙니다.");

}


// 조건을 변경하여 다음과 같이 조건문을 사용 할 수도 있습니다. 


if(saleStart.getTime() > nowDayTimeFormat.getTime() && saleEnd.getTime() < nowDayTimeFormat.getTime()){

System.out.println("현재는 세일기간이 아닙니다.");

}else{

System.out.println("현재는 세일기간중 입니다.");

}


// 그럼 getTime() 으로 비교가 가능한 이유는 날짜date를 long형 숫자 값으로 변경하기 때문입니다. 

// 여기서는 현재 날짜를 new Date()를 사용해서 구했지만 

// 요즘은 Calendar 를 사용해서 많이 구합니다. 

// Calendar 를 사용하면 다음과 같습니다. 

// 선언된 nowDayTime.getTime() 을 바로 사용해도 되지만 같은 형식으로 변경한 후에 사용한것으로 구성했습니다. 

String saleStartStr = "2018.09.28 00:30";

String saleEndStr = "2018.09.30 23:30";

Calendar nowDayTime = Calendar.getInstance(); // Calendar 를 이용해서 현재일시를 구합니다. 


SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd HH:mm");  

String nowDayTimeStr = sdf.format(nowDayTime);

Date saleStart = sdf.parse(saleStartStr);

Date saleEnd = sdf.parse(saleEndStr);

Date nowDayTimeFormat = sdf.parse(nowDayTimeStr);


if(saleStart.getTime() > nowDayTimeFormat.getTime()){

System.out.println("현재는 세일 시작 전 입니다.");

}


if(saleStart.getTime() < nowDayTimeFormat.getTime(){

System.out.println("현재는 세일 시작 후 입니다.");

}


if(saleEnd.getTime() > nowDayTimeFormat.getTime()){

System.out.println("현재는 세일 종료 전 입니다.");

}

if(saleEnd.getTime() < nowDayTimeFormat.getTime()){

System.out.println("현재는 세일 종료 후 입니다.");

}


if(saleStart.getTime() <= nowDayTimeFormat.getTime() && saleEnd.getTime() >= nowDayTimeFormat.getTime()){

System.out.println("현재는 세일기간 중 입니다.");

}else{

System.out.println("현재는 세일기간이 아닙니다.");

}


if(saleStart.getTime() > nowDayTimeFormat.getTime() && saleEnd.getTime() < nowDayTimeFormat.getTime()){

System.out.println("현재는 세일기간이 아닙니다.");

}else{

System.out.println("현재는 세일기간중 입니다.");

}


 

반응형
반응형

편의점 커피의 비밀, 가격은 두배, 용량은 고작 3분1 추가

감사합니다 고맙습니다 행운을 드립니다


몇번이가 글을 써봐야 겠다 생각만하고 이제서야 글을 올입니다.

지금 쓰려는 글은 편의점 2200원 짜리 캔커피에 대한 내용입니다.

2200원 짜리 캔커피 용량을 보신적이 있나요?

몇번 방송에도 나오고 뉴스를 탄적도 있는것 같은데 신기하게도 이 내용을 알고 있는 사람들이 많지 않습니다. 

편의점 커피를 한번씩은 사먹을 때가 있습니다. 

회사에서나 친구를 만났을때 막상 카페에 들어 가기 뭐할때 간단하게 사먹기 편한것이 캔 커피 입니다. 

저 같은 경우는 커피를 자주 먹는 사람중에 하나 입니다. 

커피값이 뭐낙 비싸다 보니 왠만한 밥값 정도 되는 금액이라서 캔커피를 자주 이용합니다.


그런데 편의점에서 파는 2200원 짜리 커피 모두 아실 겁니다. 

일반 캔모양이 아니고 병스타일로 이쁘장하게 나온 캔커피 디자인도 심플하고 해서 본 사실을 알기전까지는 자주 사먹기도 했었습니다. 

그런데 이 캔커피 용량이 얼마인지 아시나요? 

275ml 입니다. 

1100원 짜리 캔커피가 200ml 인데 비해 가격은 두배인데 75ml 더 들어 있습니다. 

같은 가격이면 1100원 짜리 2캔을 사먹는게 훨씬 이득이라는 소리 입니다.  

대부분의 사람들이 캔 모양만 보고 적어도 375ml 정도는 들어 있을 꺼라고 생각을 하고 있더군요.

회사에서 커피를 살때 아주 자연스럽게 큰거 먹으라는 소리를 합니다. 

제가 가격과 용량을 이야기 하면 다들 하는 소리가 사기라고 합니다. 

제가 봐도 사기 같습니다. 


그때 방송에 나온 이야기를 기억에서 꺼내 보면 캔값이 비싸서 그렇다고 하는데 구글링 해보니 그것도 아닌 모양입니다. 

요즘 같이 해외 방문객이 점점 많아 지고 있는 상황에서 손님을 호갱으로 만드는 제품을 계속 팔고 있다는 것이 아쉽습니다. 

신제품이라고 나온 3300원 인가 하는 녀석의 용량이 380ml 입니다. 

가격은 3배 인데 용량이 이건 문제가 있다고 생각합니다. 

캔가격을 이야기 한다면 소비자는 커피를 사먹는 거지 캔을 모을려고 사는 것도 아니고 먹고 나면 버리게 될 부분에 대한 금액을 소비자가 내고 있다는건 이상한 일입니다. 

1100원 짜리 캔커피는 그나마 가격이 합리적이라고 생각이 듭니다. 

물가도 오르고 여러면을 생각을 해도 그럴수도 있겠구나 하는 생각이 들지만 2000원 이상 캔제품들은 사람을 바보로 만드는 것 같습니다. 

더군다나 어떤 편의졈은 아예 작은 캔은 놓지도 않는 곳도 있습니다. 

업체에선 용량까지 착하게 표기해 놨는데 못보고 사먹은 사람이 문제가 있다고 하겠지요?

그것보단 합리적인 제품을 만드는게 먼저가 아닐까 생각이 듭니다. 

그렇게 눈가리고 아웅해서 좀더 돈을 버셨는데 취업자리라도 더 만드신건지 아니면 어떤분들 주머니만 넓인건지 궁금합니다.

이런 기획을 만드신 분도 참 대단 합니다. 

제가 이글을 쓰는 것은 불매를 하자거나 욕을 하기 위함이 아닙니다. 

한명이라도 더 알게 되어 힘들게 번돈 헛되게 날리지 않고 합리적으로 소비를 했으면 하는 생각에 글을 적습니다. 

물론 우리의 눈을 가리고 내가 알지도 못하게 돈이 새어 나가게 하는 것들은 많습니다. 

그중 하나를 저는 공유하고자 글을 쓴것 입니다. 

누구든 한번쯤은 사먹거나 누가 사주거나 할때 아까운 소비를 하지 않았으면 합니다. 

스타벅스도 먹는데 그정도 쯤이야 하시는 분들은 대수롭게 생각하지 않을지는 모르지만 레귤러 사이즈에서 톨사이즈로 업그레드 하는데 가격을 2배에서 3배까지 받는다고 생각해 보셨으면 합니다. 

지금 캔커피가 나오는 추세를 봐서는 아마도 일반 캔커피 제품 200ml 짜리는 머지 않아 행사를 제외 하고 보기 힘들어 질지도 모릅니다.

지금은 저도 1100원 짜리라는 비교 대상이 있으니까 이런 글을 쓸 수 있지만 판매기업에서는 이런 소리가 커지면 아예 200ml 제품을 없애버리 겠지요.

너무도 뻔히 예상이 되는 전개 입니다. 

제품 가격을 정해 시장에 내놓는 것은 판매 업체가 할 수있는 일이지만 그 제품을 선택하는 권리는 우리가 갖고 있습니다. 


반응형
반응형

소니 노트북 터치패드 끄기/켜기 (SONY laptop touchpad off)

감사합니다 고맙습니다 행운을 드립니다. 


노트북으로 키보드를 사용하다 보면 터치패드를 건드려 오타가 나는 경우가 많이 생깁니다.

이럴때 터치 패드 기능을 끄는 방법을 정리 하였습니다.  

방법은 아주 간단합니다. 

 

1. VAIO 컨트롤 센터 설치 되었는지 확인 합니다. 

   HP 같은 경우는 프로그램 없이 하드웨어 적으로 잠금을 할 수 있는데 SONY는 프로그램을 이용해야 하는 모양입니다.

   VAIO 컨트롤 센터가 설치되어 있지 않은경우 www.sony.co.kr 사이트에서 다운 받고 설치 하면 됩니다. 

2. VAIO 컨트롤 센터를 실행합니다. 

   윈도우 시작버튼 >> 모든 프로그램 선택을 하면 그림과 같이 VAIO 컨트롤 센터를 찾을 수 있습니다. 


   C:\Program Files (x86)\SONY\VAIO Control Center 위치로 가시면 아래 그림처럼 VAIO Control Center.exe 실행 파일을 찾을 수 있습니다. 


3. 키보드와 마우스 항목에서 '기본 제공된 포인팅 장치'를 선택합니다.

 

4. 활성화 체크 박스를 해제하고 적용 버튼을 누르면 터치 패드가 꺼집니다.  

   반대로 체크 박스를 선택하고 적용 버튼을 누르면 터치 패드가 켜집니다. 


HP노트북 터치패드 끄기 바로가기 (HP laptop touchpad off)


터치패드 설정 방법을 알아 보았습니다. 

키보드 사용중에 터치패드로 인한 오타나 원치 않는 클릭 등으로 인한 스트레스에서 벗어 나실수 있습니다. 

저도 얼마 전까지 피아노를 치듯이 손목을 들고 자판을 치고 있었습니다. 

지금은 맘 놓고 자판을 두들기고 있습니다.

반응형
반응형

첫급여에서 국민연금과 건강보험료 공제를 하지 않고 받을수 있다.


첫 입사 이직후 첫 급여... 제대로 받았는가....?

예전에 써두었던 글인데 다시 정리해 보았습니다. 

많은사람이 이미 알고 계실 수도 있지만 필자는 몰랐다.. 혹 모르시는 분들을 위해,

첫급여에서 국민연금과 건강보험료 공제를 하지 않고 받을수 있습니다.

우리가 회사를 다니게 되면 무조건 내야하는 4대 보험료 중 국민연금과 건강보험료의 비밀이 있었다

물론 저보다 먼저 알고 챙기시던 분들도 있었겠지만,

첫월급을 받고 (이직이나 첫직장에서)  월급 들어 왔다고 기분 좋아만 했지 공제 내역에 대해서

꼼꼼히 확인해 보지는 않았을 것입니다.

첫급여에서 4대보험금을 공제해서 받았다면.... 당신...아까운 급여를 날린셈 입니다. 

믿기 힘들 수도 있다. 하지만 검색을 해보면 세무 쪽에서 4대보험 절약 감면 팁이라고 올라와 있을 글을 어렵지 않게 찾아 볼수 있습니다. 

예를 들어 급여 내역은 보통 다음과 같다..

예>연봉 2500 일경우(퇴직금 별도)            연봉 3000 일경우(퇴직금 별도)

                  국민연금   89,240원                        국민연금   108,000원               

                  건강보험   57,510원                        건강보험    69,600원

                  장기요양     3,760원                       장기요양      4,550원

                  고용보험   11,450원                        고용보험    13,750원

                  소득세      21,880원                       소득세        41,740원

                  주민세        2,180원                      주민세          4,170원

              공제액 합계  186,020원                  공제액 합계    241,810원

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

(통장에 꽂히는)실급여 1,897,310원 -->예상금액               2,258,190원 -----> 예상금액   

                     첫급여  1,897,310원 + @                      2,258,190원 + @     --> 받아야 한다.....

                     @는 국민연금+건강보험+장기요양 금액이다.


PS.중순에 입사를 했다 하더라고 급여 신고 금액이 있기 때문에 거의 동일하게 공제되는것으로 알고 있다.

입사일이 1일 이후라면... 만일4월 1일이 휴일일경우 2일 부터 입사일 이라면, 입사한 회사에서는 해당 월분 국민연금과 건강보험을 납부 하지 않아도 된다.

이것은 공단에 문의해 본결과 법적으로 1일날 조사했을때 직장가입이 아닐경우 (입사일 4월2일)

4월달분 지역가입자로 개인에게 고지서가 발행 되며, 피부양자 자격을 가지고 있다면 고지가 면제 된다....


국민연금은 4월 1일자로 아직 직장인이 아니기 때문에 납부의무가 없고 납부 하고 싶다면 하면 되는 것이다.

당신이 4대보험 입사일이 월 1일 이후 (자격득실확인서를 열람 하면 날짜를 쉽게 알수 있다) 


 (건강보험부분에서)

1. 이직자의 경우 직장가입자 자격을 상실하면서 피부양자가로 전환이 되어야 한다.

   부모님이나 형제와 같은 주소지에서 살경우에는 피부양자 전환이 되기 쉽다..

   가족과 같이 살고 가족중 직장가입자가 있을 경우에 피부양자 전환을 받을 수 있다.

   단. 형제 자매끼리 같이 살경우에는 피부양자가 되는 경우 미혼상태여야 한다.


2. 피부양자가 안되고 지역 가입자 될 경우에도 연봉현황에 따라...

   보험료가 직장가입대상 보험료 보다 적게 낼경우가 많다.

   연동 3000 기준에 월 6만원정도 공제 되는데

   2만원 미만으로 나올 확률이 많다는 것이다.


 


 

반응형
반응형

크롬(chrome) ERR_BLOCKED_BY_CLIENT 에러 메세지 js 파일명 확인 해결 방법

감사합니다 고맙습니다 행운을 드립니다.

크롬에서 ERR_BLOCKED_BY_CLIENT 같은 에러에 대해 확인한 사항 공유합니다.



[ERR_BLOCKED_BY_CLIENT] 해당 리소소의 로딩을 사용자 브라우져에서 차단하면 나오는 메세지

사용자의 크롬에 ADBlock 또는 브라우전 안전 확장 기능을 설치하였을 때,

특정 리소스가 해당 확장 기능에 의해 차단되어 나타나는 오류 사항입니다.

광고차단,팝업차단 등의 기능을 하는 크롬의 확장플러그인을 설치하면 해당 플러그인의 필터링에 의해 JS가 로딩이 되지 않으며 생기는 현상입니다.

어떤 확장 기능으로 인해 차단되었는지는 사용자 크롬 기능을 확인하지 않고는 정확하게 명칭을 이야기 하기 어려울 것 같습니다.

특정 js 가 로딩 차단되어 해당 js에서 사용하는 레이어팝업이라던가. 로딩팝업이 제대로 동작하지 않을 수 있습니다. 



해결 방법은 

- 해당 확장 기능의 예외 또는 안전 사이트에 해당 사이트 주소를 추가하면 차단에서 예외처리하거나

 (단, 어떤 확장플러그인으로 인해 차단되었는지 확인하는 작업이 추가로 필요합니다)

- 차단된 파일명을 다른 이름으로 수정해주거나

 (단, 정확히 어떤 단어가 파일명에 들어갔기에 차단되었는지 확인하는 작업이 추가로 필요합니다)



반응형
반응형


OLTP 와 OLAP 관련 정의 내용 정리

감사합니다 고맙습니다 행운을 드립니다

[OLAP] online analytical processing의 약어.

정보 위주의 분석 처리를 의미하며, 다양한 비즈니스 관점에서 쉽고 빠르게 다차원적인 데이터에 접근하여 의사 결정에 활용할 수 있는 정보를 얻을 수 있게 해주는 기술.


OLTP에서 처리된 트랜잭션 데이터를 분석해 제품의 판매 추이, 구매 성향 파악, 재무 회계 분석 등을 프로세싱하는 것을 의미한다. OLTP가 데이터 갱신 위주라면, OLAP는 데이터 조회 위주라고 할 수 있다.



[OLTP] on-line transaction processing의 약어.

호스트 컴퓨터와 온라인으로 접속된 여러 단말 간의 처리형태의 하나.

여러 단말에서 보내온 메시지에 따라 호스트 컴퓨터가 데이터 베이스를 액세스하고, 바로 처리 결과를 돌려보내는 형태를 말한다.

데이터 베이스의 데이터를 수시로 갱신하는 프로세싱을 의미한다.


주문 입력 시스템, 재고 관리 시스템 등 현업의 거의 모든 업무는 이 같은 성격을 띠고 있다.

현재 시점의 데이터만을 DB가 관리한다는 개념이며, 이미 발생된 트랜잭션에 대해서는 데이터값이 과거의 데이터로 다른 디스크나 테이프 등에 보관될 수 있다.

반응형
반응형

XPath [XML Path Language] 언어 간단 정리

감사합니다 고맙습니다 행운을 드립니다

XPath(XML Path Language)는 W3C의 표준으로 확장 생성 언어 문서의 구조를 통해 경로 위에 지정한 구문을 사용하여 항목을 배치하고 처리하는 방법을 기술하는 언어이다.

XML 표현보다 더 쉽고 약어로 되어 있으며, XSL 변환(XSLT)과 XML 지시자 언어(XPointer)에 쓰이는 언어이다.

XPath는 XML 문서의 노드를 정의하기 위하여 경로식을 사용하며, 수학 함수와 기타 확장 가능한 표현들이 있다.


XML 예제 문서

<?xml version="1.0" encoding="utf-8"?>

<wikimedia>

  <projects>

    <project name="Wikipedia" launch="2001-01-05">

      <editions>

        <edition language="English">en.wikipedia.org</edition>

        <edition language="German">de.wikipedia.org</edition>

        <edition language="French">fr.wikipedia.org</edition>

        <edition language="Polish">pl.wikipedia.org</edition>

      </editions>

    </project>

    <project name="Wiktionary" launch="2002-12-12">

      <editions>

        <edition language="English">en.wiktionary.org</edition>

        <edition language="French">fr.wiktionary.org</edition>

        <edition language="Vietnamese">vi.wiktionary.org</edition>

        <edition language="Turkish">tr.wiktionary.org</edition>

      </editions>

    </project>

  </projects>

</wikimedia>

   

아래의 XPath 식은

/wikimedia/projects/project/@name

모든 project 요소의 name 속성을 선택하고,


아래의 XPath 식은

/wikimedia/projects/project/editions/edition[@language="English"]/text()

모든 영문 Wikimedia 프로젝트의 주소(language 속성이 English인 모든 edition 요소의 문자열)를 선택하고,


아래의 XPath 식은

/wikimedia/projects/project[@name="Wikipedia"]/editions/edition/text()

모든 위키백과의 주소(Wikipedia의 이름 특성을 가진 project 요소 아래에 존재하는 모든 edition 요소의 문자열)를 선택한다.


약간 어렵다. 위키백과 사전 참고


 

반응형
반응형

리눅스 서비스 등록 및 재부팅 시작 서비스 등록

리눅스 재부팅시 자동으로 시작하기 위한 작업 공유 합니다.

예시로 MySQL을 서비스에 등록하고 등록한 서비스를 재부팅 및 콘솔 실행 권한을 주는 과정입니다. 

캡처 화면도 첨부 합니다. 


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

[root@Master /]# chkconfig --list | grep mysqld

[root@Master /]# chkconfig --add mysqld

[root@Master /]# chkconfig --list | grep mysqld

mysqld 0: 해제 1: 해제 2: 해제 3: 해제 4: 해제 5: 해제 6: 해제 

[root@Master /]# chkconfig --level 35 mysqld on

[root@Master /]# chkconfig --list | grep mysqld

mysqld 0: 해제 1: 해제 2: 해제 3: 활성 4: 해제 5: 활성 6: 해제 

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


반응형
반응형

[오라클] 달력 기준으로 매월 세째주 토요일 일자 쿼리로 구하는 방법

실무에서 달력의 날짜나 요일을 구해야 하는일들이 간혹 발생 합니다. 

보통 달력테이블을 만들어 조회하는데 쿼리로 원하는 요일을 구할 수 있습니다.


방법은

  매달 월의 1일에서 14일을 더하면 달력 상에서 항상 3주차가 나오게 됩니다. 

  14일을 더한 날짜의 요일이 월요일이라면 5일을 더해주어야 하고 화요일이라면 4일을 더해주어야 토요일 일자가 나옵니다.

  요일을 구하는 함수는 TO_CHAR(날짜, 'D')이며 일요일 ~ 토요일까지 1~7 값을 반환합니다. 


WITH TEMP_DATE AS (

SELECT TO_DATE(YYYY||MM, 'YYYYMM') YYYYMM     

  FROM (SELECT LPAD(LEVEL, 2, '0') MM FROM DUAL 

        CONNECT BY LEVEL <= 12)

     , (SELECT TO_CHAR(LEVEL+2018) YYYY FROM DUAL 

        CONNECT BY LEVEL <= 1)

ORDER BY 1)


SELECT YYYYMM, YYYYMM + 14 + (7-TO_CHAR(YYYYMM, 'D')) "세째주 토요일"

  FROM TEMP_DATE


위에 있는 쿼리를 사용하면 됩니다. 

TEMP_DATE 를 정의하고 호출하면 됩니다. 이방법을 응용해서 2주차나 4주차에 적용해 볼수 있습니다. 

반응형
반응형

log4j에서 e.printStackTrace() 메시지를 log에 남기는 방법


이클립스로 소스코드를 짜다 보면 exception 코드 확인이 필요한 경우가 많습니다. 

간단한 구문이지만 막상 쓸려고 하면 생각이 나지 않는 경우들이 많아서 몇자 남겨 놓습니다. 

log.debug("exception msg" + e.printStackTrace());    ==>  문법오류 

log.debug("exception msg" + e.printStackTrace().toString());    ==>  마지막 에러만 표시됨 


그래서 아래와 같이 try catch를 사용하면 로그로 에러를 추적할수 있습니다. 

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

try{

.....

}catch (Exception e) {

log.error ("exception msg", e);

//  or

log.debug ("exception msg", e);

...

}

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

e.printStackTrace() 구문은 요즘 PMD 에서 Avoid Print Stack Trace 로 삭제 하거나 log로 대체 되는 상황이기 때문에

미리 부터 설정 해두면 좋을것 입니다. 

PMD 에서 기본 대체 구문은 System.out.println(); 으로 잡혀 있지만 log로 남기는 것이 좋습니다. 

소스 코드 내에 println 메소드는 사용하지 않습니다. 


반응형
반응형

이클립스 오픈 리소스(open resource) 검색 제외(search exception) 설정 방법 [target, 이미지 폴더 제외] 

감사합니다. 고맙습니다. 행운을 드립니다. 

이클립스에서 오픈 리소스(open resource) Ctrl + Shift + R 단축키로 검색시 불필요한 파일까지 검색이 됩니다.

이를 막기 위해서 Filter 설정을 할 수 있습니다. 

해당 프로젝트에서 Properties 창을 open 합니다.  아래와 같이 선택을 하고 Apply를 하면 적용이 됩니다. 

이해가 잘 안되시면 아래에 순서 대로 정리하였습니다. 보시고 참고 하세요.


위 그림처럼 예를 들어 target 폴더 제외해 보는 순서를 아래에 적었습니다. 

1. 해당 프로젝트 선택 Properties (Alt + Enter)

2. Resource > Resource Filters

3. Add Filter 선택

4. Exclude all, Folder, All children 선택체크

5. File and Folder Attributes 선택

6. Filter Details

7. Name, matches 선택 후 "target" 입력 (target은 폴더 명입니다.)

8. OK 선택


위와 같이 Filter 작업을 해두면 오픈 리소스에 검색에서 제외 됩니다. 

단 이 설정은 각 프로젝트 단위로 설정 해야 합니다.

반응형
반응형

반응형 사이트 px 를  em rem 단위 변환 계산 

감사합니다. 고맙습니다. 행운을 드립니다. 

반응형 구축을 하다 보면 px-> em, rem등으로 계산을 해서 변환 해야 하는 경우가 있습니다.


[px >> em 또는 em >> px 변환]

- 상단에 기준이 되는 사이즈를 설정하고 왼쪽에 px 수를 작성하면 em으로 em 수를 작성하면 px로 변환하여 주는 사이트 입니다.

http://pxtoem.com/


[px >> rem 변환]

- 상단에 기준이 되는 수를 작성하고 "Calculate" 누르면 설정이 되어 있는 px을 rem으로 변환해 줍니다.

  ("px sizes to convert" 이부분은 px의 수를 설정 할 수 있습니다.)

https://offroadcode.com/rem-calculator/


잘 활용하면 편리 할 것 같습니다. 

국내에도 이런 사이트들이 많이 나왔으면 좋겠습니다.

반응형
반응형

[오라클] 쿼리(query) Hint 내용 정리


A. Initialization Parameter중 OPTIMIZER_MODE 지정가능 값

1.ALL_ROWS

전체 RESOURCE 소비를 최소화 시키기 위한 힌트. Cost-Based 접근방식.

SELECT /*+ALL_ROWS */

EMPNO,ENAME

FROM EMP

WHERE EMPNO = 7655;


2.FIRST_ROWS

조건에 맞는 첫번째 row를 리턴하기 위한 Resource 소비를 최소화 시키기위한 힌트.

특징 : Index Scan 이 가능하다면 Optimizer가 Full Table Scan 대신 Index Scan을 선택합니다.

Index Scan 이 가능하다면 Optimizer가 Sort-Merge 보다 Nested Loop 을 선택합니다.

Order By절에의해 Index Scan 이 가능하다면, Sort과정을 피하기위해 Index Scan을 선택합니다.

Delete/Update Block 에서는 무시됩니다.

다음을 포함한 Select 문에서도 제외됩니다.

집합연산자 (UNION, INTERSECT, MINUS, UNION ALL)

Group By

For UpDate

Group 함수

Distinct


SELECT /*+FIRST_ROWS */

EMPNO,ENAME

FROM EMP

WHERE EMPNO = 7655;


3.CHOOSE

Data Dictionary가 해당테이블에 대해 통계정보를 가지고 있다면 Optimizer는 Cost-Based Approach를 선택하고, 그렇지 않다면 Rule-Based Approach를 선택합니다.


SELECT /*+CHOOSE */

EMPNO,ENAME

FROM EMP

WHERE EMPNO = 7655;


4.RULE

Rule-Based 최적화를 사용하기 위함 입니다.


SELECT /*+RULE */

EMPNO,ENAME

FROM EMP

WHERE EMPNO = 7655;


B. Access Methods 로써의 Hints


1.FULL

해당테이블의 Full Table Scan을 유도.

테이블 Alias 가 있는경우는 Alias사용.

Schema Name은 사용안함(From 에 SCOTT.EMP 라고 기술해도 hint에는 EMP사용).


SELECT /*+FULL(EMP) */

EMPNO, ENAME

FROM EMP

WHERE EMPNO = 7655;


2.ROWID

지정된 테이블의 ROWID를 이용한 Scan 유도


3.CLUSTER

지정된 테이블Access에 Cluster Scan 유도. Cluster된 Objects에만 적용가능.


SELECT /*+CLUSTER(EMP) */

ENAME,DEPTNO

FROM EMP,DEPT

WHERE DEPTNO = 10

AND EMP.DEPTNO = DEPT.DEPTNO;




4.HASH

지정된 테이블Access에 HASH Scan 유도.

/*+HASH(table) */


5.HASH_AJ

NOT IN SubQuery 를 HASH Anti-join으로 변형

/*+HASH_AJ */


6.HASH_SJ

용도 : Correlated Exists Subquery 를 Hash Semi-join으로 변형

/*+HASH_SJ */


7.INDEX

지정된 테이블access에 Index Scan 유도.

하나의 Index만 지정되면 Optimizer는 해당index를 이용.

여러개의 인덱스가 지정되면 Optimizer가 각 Index의 Scan시 Cost를 분석 한 후 최소비용이 드는 Index사용. 경우에 따라 Optimizer는 여러 Index를 사용한 후 결과를 Merge하는 Acees방식도 선택합니다.

Index가 지정되지 않으면 Optimizer는 테이블의 이용가능한 모든 Index에 대해 Scan Cost를 고려 후 최저비용이 드는 Index Scan을 선택합니다.


SELECT /*+INDEX(EMP EMPNO_INDEX) */

EMPNO, ENAME

FROM EMP

WHERE DEPTNO=10;


8.INDEX_ASC

INDEX HINT와 동일 단,ASCENDING 으로 SCAN함을 확실히 하기위함 입니다.


9.INDEX_COMBINE

Index명이 주어지지 않으면 Optimizer는 해당 테이블의 Best Cost 로 선택된 Boolean Combination Index 를 사용한다. Index 명이 주어지면 주어진 특정 Bitmap Index 의 Boolean Combination 의 사용을 시도합니다.

/*+INDEX_COMBINE(table index) */


10.index_desc

지정된 테이블의 지정된 Index를 이용 Descending으로 Scan 하고자 할 때 사용합니다.

/*+index_desc(table index) */


11.INDEX_FFS

Full Table Scan보다 빠른 Full Index Scan을 유도.

/*+INDEX_FFS(table index) */


12.MERGE_AJ

NOT IN Subquery를 Merge Anti-join으로 변형

/*+MERGE_AJ */


13.MERGE_SJ

Correalted EXISTS Subquery를 Merge Semi-join으로 변형

/*+MERGE_SJ */


14.AND_EQUAL

Single-column Index의 Merge를 이용한 Access Path 선택. 적어도 두개이상의 Index가 지정되어야 합니다. 

/*+AND_EQUAL(Table Index1, Index2...) */


15.USE_CONCAT

조건절의 OR 를 UNION ALL 형식으로 변형합니다. 일반적으로 변형은 비용측면에서 효율적일때만 일어납니다.

/*+USE_CONCAT */


C. JOIN 순서를 결정하는 Hints

1.ORDERED

FROM절에 기술된 테이블 순서대로 JOIN이 일어나도록 유도.

/*+ORDERED */


SELECT /*+ORDERED */

TAB1.COL1,TAB2.COL2,TAB3.COL3

FROM TAB1,TAB2,TAB3

WHERE TAB1.COL1=TAB2.COL1

AND TAB2.COL1=TAB3.COL1;


2.STAR

Star Query Plan이 사용가능하다면 이를 이용하기위한 Hint. Star Plan은 규모가 가장큰 테이블이 Query에서 Join Order상 마지막으로 위치하게 하고 Nested Loop 으로 Join이 일어나도록 유도합니다.

적어도 3개 테이블 이상이 조인에 참여해야하며 Large Table의 Concatenated Index는 최소 3컬럼 이상을 Index에 포함해야합니다.

테이블이 Analyze 되어 있다면 Optimizer가 가장효율적인 Star Plan을 선택합니다.

/*+STAR */


D. JOIN OPERATION을 결정하는 HINTS.

1.USE_NL

테이블의 Join 시 테이블의 각 Row가 Inner 테이블을 Nested Loop 형식으로 Join 한다.

/*+USE_NL(inner_table) */


SELECT /*+ORDERD USE_NL(CUSTOMER) */

FROM ACCOUNT.BALANCE,

CUSTOMER.LAST_NAME,

CUSTOMER.FIRST_NAME

WHERE ACCOUNT.CUSTNO = CUSTOMER.CUSTNO;


2.USE_MERGE

지정된 테이블들의 조인이 SORT-MERGE형식으로 일어나도록 유도.

괄호안의 테이블은 JOIN ORDER상의 뒤의 테이블

/*+USE_MERGE(table) */


3.USE_HASH

각 테이블간 HASH JOIN이 일어나도록 유도.

괄호안의 테이블은 JOIN ORDER상의 뒤의 테이블

/*+USE_HASH(table) */


4.DRIVING_SITE

QUERY의 실행이 ORACLE에 의해 선택된 SITE가 아닌 다른 SITE에서 일어나도록 유도.

/*+DRIVING_SITE(table) */


SELECT /*+DRIVING_SITE(DEPT) */

FROM EMP,DEPT@RSITE

WHERE EMP.DEPTNO = DEPT.DEPTNO;


DRIVING_SITE 힌트를 안쓰면 DEPT의 ROW가 LOCAL SITE로 보내져 LOCAL SITE에서 JOIN이 일어나지만,

DRIVING_SITE 힌트를 쓰면 EMP의 ROW들이REMOTE SITE로 보내져 QUERY가 실행된후 LOCAL SITE로 결과가 RETURN됩니다.



( 출처 database.sarang.net 내용 정리 )

반응형

+ Recent posts