반응형
반응형

자바 스크립트는 서로 다른 도메인에 대한 요청을 보안상 제한합니다. 이 정책을 동일근원정책(Same-Origin Policy, SOP) 정책이라고 하며, 이러한 정책으로 인해 생기는 이슈를 cross-domain 문제라고 합니다. 
개발을 하다보면 어쩔 수 없이 다른 도메인으로부터 데이터를 가져와야 하는 경우가 많기에 많은 사람들이 cross-domain 이슈를 겪고 있습니다.

이런 경우 사용할 수 있는 것이 JSONP(JSON with Padding)입니다. 처음 JSONP를 접했을 때 잘 정리가 되지 않았던, 사용할 때 명확히 알아야 할 것들을 정리해보았습니다.

 

1. JSONP 요청은 일반 AJAX 요청과 다르다

//-- JSON
$.ajax({ 
    url: url, 
    dataType: 'json', 
    data: data, 
    success: callback 
}); 
$.getJSON(url, data, callback);

//-- JSONP
$.ajax({ 
    url: url, 
    dataType: 'jsonp', 
    jsonpCallback: "myCallback", 
    success: callback 
}); 
$.getJSON(url + "?callback=?", data, callback);

dataType 만 변경하거나, 요청 url 뒤에 callback 파라미터 를 붙일 뿐입니다. 그렇지만 이것만으로도 완전히 다른 동작 을 하게 됩니다.

 

2. ‘JSONP’라는 데이터 타입 요청이 아닌 <script> 호출 방식

JSONP는 HTML의 script 요소로부터 요청되는 호출에는 보안상 정책이 적용되지 않는다는 점을 이용한 우회 방법 입니다.

다시 한번 확실히 하자면, script 요소는 src를 호출한 결과를 javascript를 불러와서 포함시키는 것이 아니고 실행시키는 태그입니다.

 


3. JSONP Callback은 서버에서 지원해줘야 한다
알아두어야 할 중요한 것은 응답 데이터는 Text형 이란 것과, callback 함수명으로 감싸진다 는 점 입니다.
 

"myCallback({'name':'test','age':28})"
 
 
 
 
 $.ajax({ url: url, dataType: 'jsonp', jsonpCallback: "myCallback", success: callback });
 
 $.getJSON(url + "?callback=?", data, callback);

위 요청을 해석해보자면,

  • cross-domain 이슈를 회피하기 위하여 jsonp 요청을 한다
  • 응답 데이터는 myCallback(결과) 형태의 text로 wrapping 되어질 것이다.
  • myCallback이란 함수를 나의 success function에 mapping 시킬 것이다.

가 됩니다.

 

github.com/kingbbode/spring-jsonp-server
 

 

kingbbode/spring-jsonp-server

Jsonp Server Example. Contribute to kingbbode/spring-jsonp-server development by creating an account on GitHub.

github.com

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Kingbbode</title>
    <script
    src="https://code.jquery.com/jquery-2.2.4.min.js"
    integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44="
    crossorigin="anonymous"></script>
  </head>
  <body>
    <script>
    var url = 'http://localhost:9000/';
    var static_json = 'http://localhost:9000/json/test.json'
    $.ajax({
      url: static_json,
      dataType: 'jsonp',
      jsonpCallback: "myCallback",
      success: function(data){
        console.log('ajax', data);
      }
    });

    $.getJSON(url + "?callback=?", function(data){
      console.log('getJSON', data);
    });
    </script>
  </body>
</html>
반응형
반응형

적용 대상: 

SQL Server 2016(13.x) 이상

FOR JSON 절의 JSON 출력에 null 값을 포함하려면 INCLUDE_NULL_VALUES 옵션을 지정합니다.

INCLUDE_NULL_VALUES 옵션을 지정하지 않은 경우 JSON 출력은 쿼리 결과에서 null인 값에 대한 속성을 포함하지 않습니다.

예제

다음 예제에는 INCLUDE_NULL_VALUES 옵션을 사용한 경우와 사용하지 않은 경우 FOR JSON 절의 출력이 나와 있습니다.

예제INCLUDE_NULL_VALUES 옵션을 사용하지 않는 경우INCLUDE_NULL_VALUES 옵션을 사용하는 경우

{ "name": "John", "surname": "Doe" } { "name": "John", "surname": "Doe", "age": null, "phone": null }

아래에는 INCLUDE_NULL_VALUES 옵션을 사용한 FOR JSON 절의 다른 예제가 나와 있습니다.

SELECT name, surname  
FROM emp  
FOR JSON AUTO, INCLUDE_NULL_VALUES    
[{
    "name": "John",
    "surname": null
}, {
    "name": "Jane",
    "surname": "Doe"
}] 

 

 

 

docs.microsoft.com/ko-kr/sql/relational-databases/json/include-null-values-in-json-include-null-values-option?view=sql-server-ver15

반응형
반응형

AdminLTE - Bootstrap 4 Admin Dashboard

 

AdminLTE is a fully responsive administration template. Based on Bootstrap 4.6 framework and also the JS/jQuery plugin. Highly customizable and easy to use. Fits many screen resolutions from small mobile devices to large desktops.

 

github.com/ColorlibHQ/AdminLTE

 

ColorlibHQ/AdminLTE

AdminLTE - Free admin dashboard template based on Bootstrap 4 - ColorlibHQ/AdminLTE

github.com

반응형
반응형

윈도우 10 시스템 백업 - 시스템 이미지 백업

 

1. '파일 히스토리로 파일 복원' 을 검색해서 실행. 

 

2. 파일 히스토리 화면에서 "파일 피스토리 설정을 구성하십시오"를 클릭합니다.

 

3. "시스템 이미지 백업"을 선택합니다. 

 

4. "시스템 이미지 만들기"를 클릭. 그러면 윈도우 7에서 제공되던 백업 및 복원 도구를 사용하여 시스템 이미지를 만들 수 있습니다. 

 

5. 백업을 저장할 위치를 선택하는 화면이 표시됩니다. 백업 파일이 저장될 위피를 선택한 다음 "다음"을 클릭하세요. 

 

6.백업 설정 확인 화면이 표시되면 백업에 필요한 디스크 공간의 크기도 표시됩니다.

  백업 시작을 누르면 백업이 시작됩니다. 

 

7. 백업이 완료되면 백업 저장 위치에 WindowsImageBackup이라는 폴더가 생성되어 있는 것을 확인할 수 있습니다. 

 

반응형
반응형

랜섬웨어 감염을 막는 방법

  1. 백업이 가장! 제일! 중요합니다. 백업 시스템을 구축해서 랜섬웨어가 여러분의 자료를 영구적으로 파괴할 수 없게끔 해야 합니다. 두 개의 백업본을 만들어 하나는 클라우드에 저장하고(파일을 자동으로 백업 해주는 서비스들이 많음), 다른 하나는 휴대용 하드드라이브나 가상 드라이브, 다른 PC 등에 저장하는 것이 좋습니다. 백업을 완료했을 때는 컴퓨터에서 이 장치들을 제거해야 합니다. 백업 카피본은 중요 파일이 삭제되거나 하드디스크가 고장났을 때도 유용하게 사용될 수 있습니다.
  2. 랜섬웨어를 막을 수 있는 백신을 사용하고, 특히 백신 내에서 이전에 감지되지 않은 새로운 랜섬웨어 샘플을 탐지할 수 있는 ‘행위기반(Heuristic) 분석 기능’을 켜 놓으세요.
  3. 컴퓨터의 모든 프로그램의 업데이트를 최신 상태로 유지하세요. 운영체제(OS)나 응용 프로그램에서 새로운 버전이 나오면 꼭 설치하고, 자동 업데이트 옵션을 이용하세요.
  4. 아무도 믿지 마세요. 어떤 계정이든지 침해당할 수 있고, SNS 친구, 동료, 온라인 게임 친구 등의 계정에서도 악의적인 링크가 올 수 있습니다. 알지 못하는 사람에게 온 메일의 첨부파일도 절대 열어보지 마세요. 범죄자들은 온라인 상점, 은행, 경찰, 법원, 국세청에서 온 것처럼 보이는 가짜 메일을 배포해서 악성 링크를 클릭하게끔 유도하고, 시스템에 악성 프로그램을 감염시킵니다.
  5. 윈도우 설정에서 ‘파일 확장자 보기’ 기능을 활성화하세요. 이것은 악성프로그램일 수도 있는 파일을 쉽게 식별하게끔 해줍니다. ‘.exe’, ‘.vbs’, ‘.scr’ 같은 파일 확장자는 특히 조심해야 합니다. 범죄자들은 악성파일을 영상, 사진, 문서로 속이는 다양한 확장자들을 사용합니다(.avi.exe, .doc.src 같은 이중확장자 등).
  6. 허위 혹은 미상의 프로세스를 발견하면, 인터넷과 와이파이 같은 네트워크 접속을 즉시 차단해야 랜섬웨어 피해가 확산되는 것을 막을 수 있습니다.
반응형
반응형

[ASP] 페이지 로딩완료 전 로딩 이미지 보여주기 

 

페이지 로딩 속도가 오래 걸릴때. 

일단 로딩 이미지 보여주고. 페이지 로딩완료 되면 로딩 이미지 제거하는 방식. 

<div id="loadingDiv"></div>
<style>
#loadingDiv{
  background: url(/img/loading_2021.gif) no-repeat center;
  background-size: 510px;
  width: 100%;
  height: 100%;
  background-color: rgba(255,255,255,0.4);
  position: fixed;
  z-index: 5001;
  top: 0;
}
</style>

~
~
~
~
~
~



<script>
    $("document").ready(function(){                
        $('#loadingDiv').hide();
    }
</script>    

 

반응형

+ Recent posts