반응형

오라클 테이블 컬럼추가 및 코멘트,설정 수정


컬럼 추가

ALTER TABLE 테이블명 ADD (컬럼명 타입());

ex) ALTER TABLE user_info ADD ( user_phone char(10) );


컬럼 DEFAULT, NOT NULL 수정

ALTER TABLE 테이블명 MODIFY(컬럼명 NOT NULL);

ALTER TABLE 테이블명 MODIFY(컬럼명DEFAULT '디폴트값');


컬럼명 수정

ALTER TABLE 테이블명 RENAME COLUMN 컬럼명 TO 변경할컬럼명;


컬럼 코멘트 수정

COMMENT ON COLUMN 테이블명.컬럼명 IS '코멘트';


테이블 코멘트 수정

COMMENT ON TABLE 테이블명 IS '코멘트';



반응형

'IT > DB' 카테고리의 다른 글

오라클 쿼리 오류  (0) 2017.11.01
오라클 - 문자형 데이터 인덱스 자동증가  (0) 2017.10.26
오라클, mysql, mssql 문자열 합치기  (0) 2017.10.25
RDBMS, RDB 정의 및 기능  (0) 2017.10.12
SQL 문법 - SELECT문 및 함수  (0) 2017.10.11
반응형

도로명주소 API - 검색API 적용


도로명주소 API에서 검색형 API로 적용을 해보겠습니다.

검색형과 팝업형이있는데 레이어팝업을 사용해야되거나 팝업이 싫으시나 하시는 분들은

이방법으로 사용하시면 됩니다.

방식은 xml, json이 있는데 json으로 사용해볼겠습니다.


앞에 팝업형에서도 작성한것과 같이 

주소 api를 사용하려면 아래 링크에서 샘플 및 정보를 받을수 있습니다.

https://www.juso.go.kr/addrlink/main.do

접속해서 api키를 발급받아야 사용이 가능하니 api키를 발급 받으시길 바랍니다.

기본적인 정보만 입력하면 쉽게 발급받으실수 있습니다.

sample과 api활용 가이드도 있으니 참고하시면 좋을것 같습니다.

이번에는 검색형 주소검색을 사용했고 제가 적용한것을 작성하겠습니다.



자바스크립트


아래서 에러코드를 사용했는데 에러코드는 다음과 같습니다.

0         정상

-999         시스템에러 도로명주소 도움센터로 문의하시기 바랍니다.

E0001 승인되지 않은 KEY 입니다. 정확한 승인키를 입력하세요.(팝업API 승인키 사용불가)

E0005 검색어가 입력되지 않았습니다. 검색어를 입력해주세요.

E0006 주소를 상세히 입력해 주시기 바랍니다. 시도명으로는 검색이 불가합니다.



// 주소 검색후 데이터 받아오기

function getAddr(){

// AJAX 주소 검색 요청

$.ajax({

url:"http://www.juso.go.kr/addrlink/addrLinkApiJsonp.do" // 주소검색 OPEN API URL

,type:"post"

,data:$("#form").serialize() // 요청 변수 설정

,dataType:"jsonp" // 크로스도메인으로 인한 jsonp 이용, 검색결과형식 JSON 

,crossDomain:true

,success:function(jsonStr){ // jsonStr : 주소 검색 결과 JSON 데이터

$("#list").html(""); // 결과 출력 영역 초기화

var errCode = jsonStr.results.common.errorCode;

var errDesc = jsonStr.results.common.errorMessage;

if(errCode != "0"){ 

$("#pageApi").html("");

if(errCode ==  "E0001"){ alert("승인되지 않은 KEY입니다."); }

else if(errCode ==  "E0005"){ alert("검색어를 입력해주세요."); }

else if(errCode ==  "E0006"){ alert("시도명으로는 검색이 불가합니다."); }

else { alert("에러가 발생하였습니다. 잠시후 다시 시도해주세요."); }

}else{

if(jsonStr!= null){

makeListJson(jsonStr); // 결과 JSON 데이터 파싱 및 출력

pageMake(jsonStr);

}

}

}

,error: function(xhr,status, error){

alert("에러발생"); // AJAX 호출 에러

}

});

}


// 주소검색한 리스트를 html에 생성

function makeListJson(jsonStr){

var htmlStr = "";

htmlStr += "<table>";

// jquery를 이용한 JSON 결과 데이터 파싱

$(jsonStr.results.juso).each(function(){

htmlStr += "<tr>";

htmlStr += "<td>"+this.roadAddrPart1+"</td>";

htmlStr += "<td>"+this.roadAddrPart2+"</td>";

htmlStr += "<td>"+this.engAddr+"</td>";

htmlStr += "<td>"+this.zipNo+"</td>";

     htmlStr += "<td>

<input type=\"button\" onclick=\"addressing(\'"+this.zipNo+"\',\'"+this.roadAddrPart1+"\',\'"+this.roadAddrPart2+"\')\" value=\"선택\"></td>";

htmlStr += "</tr>";

});

htmlStr += "</table>";

// 결과 HTML을 FORM의 결과 출력 DIV에 삽입

$("#list").html(htmlStr);

}


// 주소값 넣어주기

function addressing(zipNo,roadAddrPart1,roadAddrPart2){

document.form.zipNo.value = zipNo; // 우편번호

document.form.addr.value = roadAddrPart1;//+" "+roadAddrPart2; // 도로명주소

}


//페이지 이동

function goPage(pageNum){

document.form.currentPage.value=pageNum;

getAddr();

}


// json타입 페이지 처리 (주소정보 리스트 makeListJson(jsonStr); 다음에서 호출)

function pageMake(jsonStr){

var total = jsonStr.results.common.totalCount; // 총건수

console.log("총건수:"+total);

var pageNum = document.form.currentPage.value;// 현재페이지

var paggingStr = "";

if(total < 1){

var htmlStr = "";

htmlStr += "<table>";

htmlStr += "<tr>";

htmlStr += "<td>검색결과가 없습니다.</td>";

htmlStr += "</tr>";

htmlStr += "</table>";

$("#list").html(htmlStr);

$("#pageApi").html("");

}else{

if(total > 1000){

total=1000;

}

var PAGEBLOCK=10; // 10

var pageSize=10; // 10

var totalPages = Math.floor((total-1)/pageSize) + 1; // 총페이지

var firstPage = Math.floor((pageNum-1)/PAGEBLOCK) * PAGEBLOCK + 1; // 리스트의 처음 ( (2-1)/10 ) * 10 + 1 // 1 11 21 31

if( firstPage <= 0 ) firstPage = 1; // 처음페이지가 1보다 작으면 무조건 1

var lastPage = firstPage-1 + PAGEBLOCK; // 리스트의 마지막 10 20 30 40 50

if( lastPage > totalPages ) lastPage = totalPages; // 마지막페이지가 전체페이지보다 크면 전체페이지

var nextPage = lastPage+1 ; // 11 21 

var prePage = firstPage-PAGEBLOCK ;

if( firstPage > PAGEBLOCK ){

paggingStr +=  "<a href='javascript:goPage("+prePage+");'>◁</a>  " ; // 처음 페이지가 아니면 <를 넣어줌

}

for(var i=firstPage; i<=lastPage; i++ ){

if( pageNum == i )

paggingStr += "<a style='font-weight:bold;color:blue;font-size:15px;' href='javascript:goPage("+i+");'>" + i + "</a>  ";

else

paggingStr += "<a href='javascript:goPage("+i+");'>" + i + "</a>  ";

}

if( lastPage < totalPages ){

paggingStr +=  "<a href='javascript:goPage("+nextPage+");'>▷</a>"; // 마지막페이지가 아니면 >를 넣어줌

}

$("#pageApi").html(paggingStr);

}

}


JSP - HTML


<form name="form" id="form" method="post">

  <input type="hidden" name="currentPage" value="1"/> <!-- 요청 변수 설정 (현재 페이지. currentPage : n > 0) -->

  <input type="hidden" name="countPerPage" value="10"/> <!-- 요청 변수 설정 (페이지당 출력 개수. countPerPage 범위 : 0 < n <= 100) -->

  <input type="hidden" name="resultType" value="json"/> <!-- 요청 변수 설정 (검색결과형식 설정, json) --> 

  <input type="hidden" name="confmKey" value="승인키"/> <!-- 요청 변수 설정 (승인키) -->

  <input type="text" name="keyword" value=""/> <!-- 요청 변수 설정 (키워드) -->

  <input type="button" onClick="getAddr();" value="주소검색하기"/>

  <div id="list"> <!-- 검색 결과 리스트 출력 영역 --> </div>

  <div class="paginate" id="pageApi"></div>

</form>



반응형
반응형

mysql 문자열 합치기


SELECT 

add1, 

add2, 

CONCAT(add1,'-',add2) as add

FROM juso



오라클 문자열 합치기


SELECT 

add1, 

add2,

add1||', '||add2 as add

FROM juso



mssql 문자열 합치기

SELECT 

add1, 

add2,

add1+', '+add2 as add

FROM juso

반응형
반응형

사업자등록번호


XXX-XX-XXXXX

일련번호코드(3)-개인.법인구분코드(2)-일련번호코드(4)검증번호(1)


*일련번호코드 101~999


*개인.법인구분코드

  1.개인과세사업자 01~79

  2.개인면세사업자 90~99

  3.법인이아닌 종교 89

  4.3이아닌 아파트관리사무소 등 다단계판매원 80

   영리법인 본점 81,86,87,88

   국가, 지방자치단체(조합) 83

   외국 본지점 연락사무소 84

   영리법인지점 85


*일련번호코드 0001~9999

*검증번호

반응형

'기타' 카테고리의 다른 글

티스토리 초대장 나눔해드립니다!  (33) 2017.10.27
티스토리 구글 애드센드 연결하기  (0) 2017.10.26
티스토리 피드등록  (0) 2017.10.12
반응형

간단한 클래스 선언 및 함수호출


클래스를 만들고 달러로 변환해주는 함수를 만들어 보겠습니다.


클래스생성

public class TestClass{

public int testMethod(int dollar){       //  int -> 함수의 return받을 타입설정 / 함수명(데이터 받을 타입과 변수명)

int testVal = dollar*1139;

return testVal; // int의 함수라 return은 int만가능 

}

}


호출

TestClass testClass = new TestClass();  // 클래스 호출

testClass.testMethod(1);  // 클래스 접근후 함수사용

반응형
반응형

replace(치환)


var 변수;

변수.replace(,);


g : 모든 패턴 체크(global)

i : 대소문자를 구별없이 체크

m : 여러줄 체크


^ : 처음

$ : 끝

. : 한문자


.replace(' ','')          : 첫번째 공백 제거

.replace(/\-/g,'')        : - 제거

.replace(/[-]/g,'')        

.replace(/,/g,'')         : , 제거

.replace(/^\s+/,'')       : 앞의 공백 제거

.replace(/\s+$/,'')       : 뒤의 공백 제거

.replace(/^\s+|\s+$/g,'') : 앞뒤 공백 제거

.replace(/\s/g,'')        : 문자열 내의 모든 공백 제거

2가지 이상사용시 .replace(/[-]|\s/gi, ''); 등으로 |(or)을 가지고 사용가능 (-,공백제거)



정규표현식



var Patten = /^[0-9\-]{12,12}$|^[0-9]{10,10}$/;   // 0~9의 숫자와 특수문자 -사용가능한 12자리수 or 0~9의 숫자의 10자리수


var Patten = /^[a-zA-Z0-9]{1,20}$/;   // a~z,A~Z,0~9인 1~20자리수까지


var Patten = /^.*(?=^.{8,15}$)(?=.*\d)(?=.*[a-zA-Z])(?=.*[!@#$%^&+=]).*$/;  // 영문,숫자,특수문자로 이루어진 8~15자리 (비밀번호에 많이사용)


테스트시

var test="abc1234";

if( !Patten.test( test ) ){}


반응형
반응형

도로명주소 API - 팝업형 주소 API 적용


주소 api를 사용하려면 아래 링크에서 샘플 및 정보를 받을수 있습니다.

https://www.juso.go.kr/addrlink/main.do

접속해서 api키를 발급받아야 사용이 가능하니 api키를 발급 받으시길 바랍니다.

기본적인 정보만 입력하면 쉽게 발급받으실수 있습니다.

sample과 api활용 가이드도 있으니 참고하시면 좋을것 같습니다.

저는 팝업형 주소검색을 사용했고 제가 적용한것을 작성하겠습니다.



JAVA - Controller


@RequestMapping("/jusoPopup")

    public String jusoPopup(@ModelAttribute("paramVO") ParamVO paramVO) throws Exception {

        return " 경로/jusoPopup";

    }


아래 jusoPopup 경로에 맡게 리턴을 설정해주시고 리퀘스트 맵핑을 해줍니다.




조회할 페이지 - jsp


자바스크립트


function goPopup(){

// 주소검색을 수행할 팝업 페이지를 호출합니다.

// 호출된 페이지(jusopopup.jsp)에서 실제 주소검색URL(http://www.juso.go.kr/addrlink/addrLinkUrl.do)를 호출하게 됩니다.

var pop = window.open("/cnsgn/entpr/jusoPopup.do","pop","width=590,height=420, scrollbars=yes, resizable=yes"); 

// 모바일 웹인 경우, 호출된 페이지(jusopopup.jsp)에서 실제 주소검색URL(http://www.juso.go.kr/addrlink/addrMobileLinkUrl.do)를 호출하게 됩니다.

    //var pop = window.open("/popup/jusoPopup.jsp","pop","scrollbars=yes, resizable=yes"); 

}


function jusoCallBack(roadFullAddr,roadAddrPart1,addrDetail,roadAddrPart2,engAddr, jibunAddr, zipNo, admCd, rnMgtSn, bdMgtSn,detBdNmList,bdNm,bdKdcd,siNm,sggNm,emdNm,liNm,rn,udrtYn,buldMnnm,buldSlno,mtYn,lnbrMnnm,lnbrSlno,emdNo){

    // 팝업페이지에서 주소입력한 정보를 받아서, 현 페이지에 정보를 등록합니다.

document.form.roadAddrPart1.value = roadAddrPart1; // 도로명주소

document.form.addrDetail.value = addrDetail; // 상세주소

document.form.zipNo.value = zipNo; // 우편번호

self.close();

}


위와같이 작성후 html에 button을 만들어 goPopup() 스크립트를 호출해주면 됩니다.


josoCallBack에서 원하는 주소방식을 원하는 id값에 넣어주면됩니다. 

또는 제이쿼리를 이용해서 $("#id").val(파라메터); 형식으로 넣어줄수도 있습니다.

파라메터 정보는 아래 사진 첨부하겠습니다.

설명으로 부족하다면 각 파라메터를 console.log()에 넣어서 직접 확인하는 방법이 있습니다.

주소검색후 상세주소를 입력하고 확인을 누르면 각 form에있는 id값에 데이터를 넣어주고 self.close();로 팝업을 닫아줍니다.







jusoPopup.jsp


<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

<% 

//request.setCharacterEncoding("UTF-8");  //한글깨지면 주석제거

//request.setCharacterEncoding("EUC-KR");  //해당시스템의 인코딩타입이 EUC-KR일경우에

String inputYn = request.getParameter("inputYn"); 

String roadFullAddr = request.getParameter("roadFullAddr"); 

String roadAddrPart1 = request.getParameter("roadAddrPart1"); 

String roadAddrPart2 = request.getParameter("roadAddrPart2"); 

String engAddr = request.getParameter("engAddr"); 

String jibunAddr = request.getParameter("jibunAddr"); 

String zipNo = request.getParameter("zipNo"); 

String addrDetail = request.getParameter("addrDetail"); 

String admCd    = request.getParameter("admCd");

String rnMgtSn = request.getParameter("rnMgtSn");

String bdMgtSn  = request.getParameter("bdMgtSn");

String detBdNmList  = request.getParameter("detBdNmList");

/** 2017년 2월 추가제공 **/

String bdNm  = request.getParameter("bdNm");

String bdKdcd  = request.getParameter("bdKdcd");

String siNm  = request.getParameter("siNm");

String sggNm  = request.getParameter("sggNm");

String emdNm  = request.getParameter("emdNm");

String liNm  = request.getParameter("liNm");

String rn  = request.getParameter("rn");

String udrtYn  = request.getParameter("udrtYn");

String buldMnnm  = request.getParameter("buldMnnm");

String buldSlno  = request.getParameter("buldSlno");

String mtYn  = request.getParameter("mtYn");

String lnbrMnnm  = request.getParameter("lnbrMnnm");

String lnbrSlno  = request.getParameter("lnbrSlno");

/** 2017년 3월 추가제공 **/

String emdNo  = request.getParameter("emdNo");


%>

</head>

<script language="javascript">

// opener관련 오류가 발생하는 경우 아래 주석을 해지하고, 사용자의 도메인정보를 입력합니다. ("주소입력화면 소스"도 동일하게 적용시켜야 합니다.)

//document.domain = "abc.go.kr";


function init(){

var url = location.href;

var confmKey = "api키값";  // 위에서 발급받은 api키값을 넣어줍니다.

var resultType = "4"; // 도로명주소 검색결과 화면 출력내용, 1 : 도로명, 2 : 도로명+지번, 3 : 도로명+상세건물명, 4 : 도로명+지번+상세건물명

var inputYn= "<%=inputYn%>";

if(inputYn != "Y"){

document.form.confmKey.value = confmKey;

document.form.returnUrl.value = url;

document.form.resultType.value = resultType;

document.form.action="http://www.juso.go.kr/addrlink/addrLinkUrl.do"; //인터넷망

//document.form.action="http://www.juso.go.kr/addrlink/addrMobileLinkUrl.do"; //모바일 웹인 경우, 인터넷망

document.form.submit();

}else{

opener.jusoCallBack("<%=roadFullAddr%>","<%=roadAddrPart1%>","<%=addrDetail%>","<%=roadAddrPart2%>","<%=engAddr%>","<%=jibunAddr%>","<%=zipNo%>", "<%=admCd%>", "<%=rnMgtSn%>", "<%=bdMgtSn%>", "<%=detBdNmList%>", "<%=bdNm%>", "<%=bdKdcd%>", "<%=siNm%>", "<%=sggNm%>", "<%=emdNm%>", "<%=liNm%>", "<%=rn%>", "<%=udrtYn%>", "<%=buldMnnm%>", "<%=buldSlno%>", "<%=mtYn%>", "<%=lnbrMnnm%>", "<%=lnbrSlno%>", "<%=emdNo%>");

window.close();

}

}

</script>

<body onload="init();">

<form id="form" name="form" method="post">

<input type="hidden" id="confmKey" name="confmKey" value=""/>

<input type="hidden" id="returnUrl" name="returnUrl" value="<c:url value='/cnsgn/entpr/insertCnsgnEntprMngmeView.do'/>"/>

<input type="hidden" id="resultType" name="resultType" value=""/>

<!-- 해당시스템의 인코딩타입이 EUC-KR일경우에만 추가 START-->

<!-- 

<input type="hidden" id="encodingType" name="encodingType" value="EUC-KR"/>

-->

<!-- 해당시스템의 인코딩타입이 EUC-KR일경우에만 추가 END-->

</form>

</body>

</html>

반응형
반응형

JSP - 페이징 처리


ajax통신을 통해서 List와 List의 갯수를 가져와 페이징처리를 적용해봤습니다.

생각보다 게시물수와 리스트페이지수만 바꾸면 자동으로 되게 하려했으나 생각보다 어지러워서 되는대로 짜버렸습니다....

일단 게시물 5개에 리스트 5개띄우는거에서 사용가능하며 아래는 레이어 팝업으로 ajax통신을 통해 데이터를 가져와 띄우는 형식이라 

소스가 더러우실수도있으나 참고하시려면... 참고하시길 바랍니다. 



SQL

아래와같이 SELECT를 3번해서 가져오는게 오라클 대용량 처리라고합니다.


List 쿼리문

SELECT 

no, id, nm 

FROM (

SELECT 

no, id, nm, ROWNUM as rnum

FROM (

SELECT 

no, id, nm

FROM List테이블;

ORDER BY no

) WHERE ROWNUM <= #{lastIndex}

)WHERE rnum > #{firstIndex}


List 개수가져오는 쿼리문

SELECT COUNT(*) FROM List테이블




JSP-자바스크립트


function fn_List_popup(data,num) {

var id = data;

var page = num; //현재페이지

var countList = 5; // 페이지에 게시물 수 (고정)

var countPage = 5; // 리스트 페이지수 (고정)

var totalCount; // 총게시물갯수 = selectListTotCnt

var totalPage; // 생성될 전체 페이지 수

var startPage;

var endPage;

$.ajax({

    type:"POST",

    url:_ctx+"/usr/selectListTotCnt.json",

    data: {'id':id },

    success: function(data) {

    totalCount=data.resultTotCnt; // 총게시물 갯수 설정

    totalPage = Math.floor(totalCount / countList); // 게시물의 리스트갯수 계산

    if (totalCount % countList > 0) {

    totalPage++; // 나머지가 있으면 전체페이지수가 +1이 된다.

}

    var pageMath= Math.floor(page/5.0000001)+1;

    startPage = (pageMath-1)*5+1;//((page - 1) / 10) * 10 + 1; 

    endPage = totalPage;

    var totalPageMath = Math.floor(totalPage/5.0000001)+1;

   

    if(totalPage<6){

    $("#paging2").html("");

    for(var i=startPage; i<=totalPage; i++){

    $("#paging2").append("<a href='#' onclick='fn_List_popup

("+id+","+i+")'>&nbsp;"+i+"&nbsp;</a>");

    }

    } else if( totalPageMath == pageMath ){

    $("#paging2").html("");

    $("#paging2").append("<a href='#' onclick='fn_List_popup("+dprtmId+",1)'> << </a>");

    $("#paging2").append("<a href='#' onclick='fn_List_popup("+dprtmId+","+(startPage-5)+")'> &nbsp;<&nbsp; </a>");

    for(var i=startPage; i<=totalPage; i++){

    $("#paging2").append("<a href='#' onclick='fn_List_popup("+dprtmId+","+i+")'>&nbsp;"+i+"&nbsp;</a>");

    }

    } else if(totalPage > countPage){

    $("#paging2").html("");

    if(pageMath != 1){

    $("#paging2").append("<a href='#' onclick='fn_List_popup("+dprtmId+",1)'> << </a>");

    $("#paging2").append("<a href='#' onclick='fn_List_popup("+dprtmId+","+(pageMath-1)+")'> &nbsp;<&nbsp; </a>");

    }

    for(var i=startPage; i<=startPage+4; i++){

    $("#paging2").append("<a href='#' onclick='fn_List_popup("+dprtmId+","+i+")'>&nbsp;"+i+"&nbsp;</a>");

    }

    $("#paging2").append("<a href='#' onclick='fn_List_popup("+dprtmId+","+(startPage+5)+")'> &nbsp;>&nbsp; </a>");

    $("#paging2").append("<a href='#' onclick='fn_List_popup("+dprtmId+","+endPage+")'> >> </a>");

    }

   

    var firstIndex = countList*(page-1)+1;

    var lastIndex = page*countList;

   

    $(".List").html("");

    $(".popup").show(); //팝업오픈

    //데이터 가져오기

    $.ajax({

        type:"POST",

        url:_ctx+"/usr/selectList.json",

        data: {'dprtmId':dprtmId, 'firstIndex':firstIndex, 'lastIndex':lastIndex },

        success: function(data) {

        $.each(data.resultList,function(index,value){

        $(".popup .popupTable tbody").append('<tr class="List"><td>'+(firstIndex)+'</td><td>'+value.id+'</td><td class="bor_r_0">'+value.nm+'</td></tr>');

        firstIndex++;

        });

        }

    })

   

   

    }

})

}


JSP-HTML


<a href="#" class="grayBtn2" onclick="fn_List_popup('<c:out value="${result.id}"/>','1')">조회</a></td>


<!-- 팝업 -->

<div class="popup" style="display:none;">

    <h1 class="popupT">유저정보<span class="closeBtn"></span></h1>

    <div class="popupCon">

        <table class="popupTable">

            <caption class="blind"></caption>

            <colgroup>

                <col width="20%">

                <col width="40%">

                <col width="40%">

            </colgroup>

            

            <thead class="">

                <tr>

                    <th scope="col">NO</th>

                    <th scope="col">ID</th>

                    <th scope="col"  class="bor_r_0">이름</th>

                </tr>

            </thead>

            

        </table>

            <div id="paging2"></div>

   

    </div>

</div>

<!-- //팝업 -->




반응형

'IT > JSP' 카테고리의 다른 글

JSP - JSTL 데이터 포맷  (0) 2017.11.15
JSTL - c:forEach 리스트 합계구하기  (0) 2017.11.02
JSP - 아이디 중복 체크  (0) 2017.11.01
JSTL - c:forEach문, c:if문, c:choose문(else문)  (0) 2017.10.27
반응형

RDBMS (Relational DataBase Management System)


RDBMS는 관계형 데이터베이스를 관리하기위한 소프트웨어입니다.

테이블(Table based)기반의 DBMS로 데이터를 조건에 따라서 테이블의 행과 열로 나누어 관리하는 시스템입니다.

E-R(Entity Relationship)모델을 사용하며 RDBMS으로 MSSQL, Oracle, MySQL, MariaDB, CUBRID 등이 있습니다.



RDB (Relational DataBase)


RDB는 관계형 데이터베이스를 뜻하며 모든 데이터를 계층구조가 아닌 2차원의 단순한 표(관계)로 표현하는 형식의 데이터베이스입니다.

관계형 데이타 모델에 기초를 둔 데이타베이스로서 수학적 이론에 기반을 두고있습니다.



RDBMS의 기능


데이터베이스 언어

데이터베이스 언어는 DBMS에 대해 다양한 지시를 전달하기위한 언어입니다. 

개념적으로, 데이터정의언어(DDL), 데이터조작언어(DML), 데이터제어언어(DCL)의 구성되있습니다. 

DDL은 데이터베이스의 구조를 정의합니다. 

DML은 데이터베이스에 대한 검색 및 업데이트 등의 작업을 실시합니다. 

DCL은 데이터에 대한 액세스 제어를 실시합니다.

RDBMS에서는 관계모델을 기반으로 데이터베이스언어를 갖추고 있으며, RDBMS의 데이터조작언어는 관계모델의 관계대수와 관계논리에 근거합니다.

RDBMS로하는 시스템의 대부분은 데이터베이스 언어 SQL을 갖추고있습니다.


물리적 데이터 독립성

데이터베이스를 저장하는 저장 장치를 변경할 때, 그에 따라 RDBMS에 액세스하는 방법을 변경할 필요는 없습니다. 

RDBMS에 액세스하는 사용자나 응용프로그램 소프트웨어에 대한 RDBMS는 저장 장치의 변경을 은폐할 수있습니다.


논리적 데이터 독립성

RDBMS에서는 도출관계(뷰)에 따라 논리적 데이터 독립성을 지원합니다.

파생관계는 관계대수 또는 관계논리 식으로 이름을 붙인 것입니다. 파생 관계는 관계의 일종이며, 뷰라고도 불립니다. 

또한 도출 관계를 사용하면 복잡한 검색 및 업데이트 등의 데이터 조작을 단순화하여 설명 할 수있습니다.


데이터 무결성

데이터 무결성은 잘못된 데이터가 등록되는 것이나, 잘못된 데이터로 업데이트되는 것을 방지하는 것을 말합니다. 

RDBMS는 정의역, 데이터 형식, 고유 제한 조건, 참조 무결성 제약, CHECK 제약 조건, 트리거 등의 기능을 갖추고있습니다.


트랜잭션 처리

ACID 속성을 기반으로 트랜잭션 처리를 실시합니다. 

여러 사용자가 동시에 동일한 데이터를 참조, 갱신 한 경우에도 일관성있게 제대로 처리 합니다.


보안

대부분의 RDBMS는 보안 (안전)에 대해 임의의 액세스제어 또는 강제액세스제어 를 제공하고, 

일부 RDBMS는 데이터 암호화 기능도 제공합니다. 

많은 RDBMS에서는 임의의 액세스 제어를 채용하고있다 ( SQL 에서는 임의 액세스 제어만을 규정하고있다). 

SQL의 임의 액세스 제어에서는 GRANT 문을 사용하여 이용자 (인증 식별자)를 지정하여 

그 이용자가 액세스 할 수있는 개체 (관계 등) 및 액세스유형 (검색, 업데이트 등)을 정의합니다.

데이터 암호화 기능은 RDBMS를 우회 한 잘못된 데이터 액세스에 대한 대책으로 RDBMS에서 관리. 전송되는 데이터를 암호화합니다.


복구

트랜잭션 장애, 시스템 장애, 기억 매체 의 장애 복구를 실시합니다.


최적화

데이터조작언어에 의한 고차관계대수와 관계논리에서 작성된 데이터 처리요구를 저수준 절차에 최적화 실행합니다.


분산 데이터베이스

분산 데이터베이스는 네트워크로 연결된 여러 대의 컴퓨터를 사용하여 

각각의 컴퓨터에서 DBMS의 프로세스를 작동시키고 움직 전체로 가상으로 하나의 DBMS를 실현하는 기술입니다. 

여러 대의 컴퓨터를 사용하기 때문에 가용성과 성능을 향상시킬 수있습니다.

클라이언트서버의 데이터베이스는 분산데이터베이스 간단하고 특수한 형태로 자리 매김 할 수있습니다.

반응형
반응형

티스토리의 게시물을 네이버에서도 검색되게하려고 찾아봤는데

아래와같이 검색반영 요청을 위해서는 RSS피드등록을 해야된다고합니다.








피드등록을 위해서 네이버에서는 네이버 웹마스터도구서비스에서 등록을 할수있습니다.

http://webmastertool.naver.com/

위 링크로 들어가셔서 로그인하시면 아래와같이 사이트정보 입력이 나오는데요.








해당하는 URL을 입력해주세요.

저는 http://huistorage.tistory.com 로 입력했습니다.








사이트를 소유확인을 해야하는데

첫번째 HTML 파일 업로드같은경우는 개인적으로 웹호스팅을 하셔서 

FTP로 파일을 업로드나 root로 파일을 올리는게 가능하신분은 첫번째로 하시면 됩니다.


잘모르겠다 나는 티스토리다 하시는분은 

2번째 HTML태그를 이용하시면 됩니다.


메타태그라고 <meta 이렇게 초록색으로 되있는 부분을 복사하셔서

티스토리 관리자 페이지로 가서

아래 화살표 HTML./CSS편집 부분을 클릭해줍니다.









그럼 아래와 같이 HTML 소스코드가 나오는데요.

거기서 <head>라고 적혀있는 아래부분에 위에 복사한 메타태크를 넣어주면됩니다.

<meta> </> 태그사이에 넣지않게 주의해주세요.

넣어주시고 저장을 누르시면됩니다.









그리고나서 네이버의 웹마스터도구 - 2.소유주확인 페이지에가서

자동등록방지가 있으시면 작성해주시고

저장을 눌러주시면 정상적이라면 확인이 됬다고 알림창이 뜨면서 

아래와같은 화면이 나타납니다.









위와같이 됬다면 등록이 완료됬습니다.

끝!

반응형

'기타' 카테고리의 다른 글

티스토리 초대장 나눔해드립니다!  (33) 2017.10.27
티스토리 구글 애드센드 연결하기  (0) 2017.10.26
사업자등록번호  (0) 2017.10.24

+ Recent posts