'ITWeb/스크랩'에 해당되는 글 119건

  1. 2014.07.25 [Hadoop] map task 정의.
  2. 2013.08.21 Transaction Processing Performance Council
  3. 2012.04.27 TED - Talk in 한국어
  4. 2012.03.16 node.js 에 대한 좋은 블로그 글 소개.
  5. 2012.02.27 view 란?
  6. 2012.02.16 문서작성에 필요한 아이콘을 찾아보자규.
  7. 2012.02.14 [펌] Multitenancy
  8. 2012.02.07 [펌] * As A Service ...
  9. 2012.02.07 [펌] Wikipedia's CMS link.
  10. 2011.12.12 LG U+AD 반성합시다.

[Hadoop] map task 정의.

ITWeb/스크랩 2014. 7. 25. 04:44

원문 : http://xlos.tistory.com/1512


정보 공유 차원에서 오늘 한 삽질을 기록으로 남김

  1. 상황
    • map/reduce 프레임웍이 필요한 것은 아니고, 단순하지만 처리하는데 오래 걸리는 작업들을 여러 컴퓨터에 분산하여 처리하고자 함.
    • reduce task 개수를 0으로 주고 mapper only로 설정하여 작업을 시작.
    • 문제 : 현재 hadoop의 scheduler는 preemptive 하지 않기 때문에, 한 번 map task가 시작되면, priority가 낮더라도 해당 map task가 끝날 때 까지 계속 진행됨. 덕분에 나의 단순하고 오래 걸리는 작업들이 한 번 hadoop에서 돌기 시작하면, 다른 긴급한 작업들이 처리되지 못하는 상황이 발생!
    • 시도된 해결책
      • 나의 job에서 동시에 실행되는 map task 개수를 제한하여, 다른 긴급한 작업들이 처리될 수 있도록 함
  2. 삽질.. 삽질..
    • 첫 번째 시도 : mapred.jobtracker.maxtasks.per.job=10 으로 설정
      • 하나의 job 당 최대 task 수를 10으로 설정했으니, 한 번에 실행되는 map task의 수도 제한되지 않을까? 라고 생각했으나,, 실제로는 적용 안됨. ㅜ.ㅜ
    • 두 번 째 시도 : mapred.tasktracker.map.tasks.maximum=1 로 설정
      • 이 설정의 의미는 하나의 task tracker에 의해 동시에 실행되는 map task의 개수
      • 저렇게 설정하면, 하나의 task tracker에 의해서 하나의 map task만 실행되어야 한다. 하지만 실제로는 적용이 안됨.
      • 이 부분에 대해서는 원인을 찾았는데, Hadoop The Definitive Guide라는 책에 보면 아래와 같이 쓰여 있다.
      • Be aware that some properties have no effect when set in the client configuration. For example, if in your job submission you set mapred.tasktracker.map.tasks.maximum with the expectation that it would change the number of task slots for the tasktrackers running your job then you would be disappointed, since this property only is only honored if set in the tasktracker’s mapred-site.html file.

      • 해석하면, mapred.tasktracker.~ 로 실행되는 설정들은 tasktracker daemon에 의해서만 적용되며, client에서 설정한 값은 무시 된다는 말씀.
    • 세 번째 시도 : mapred.map.tasks=10 으로 설정!
      • mapred.map.tasks 설정은 하나의 job 당 map task 의 개수이므로, map task의 개수가 적으면 당연히 동시에 실행되는 map task의 개수도 제한 될 것이라고 생각했지만!! 여전히 적용 안됨.
      • 원인을 찾아본 결과, mapred.map.tasks는 map task의 개수는 늘릴 수 있지만, 하둡이 결정한 map task의 개수 이하로는 줄일 수 없다고 함. 출처 :http://wiki.apache.org/hadoop/HowManyMapsAndReduces
      • 참고로 하둡은 하나의 input split 당 하나의 map task를 생성함. input split이란, 각 input file들을 구성하고 있는 하나 하나의 data block을 뜻함.
    • 발상의 전환 : 굳이 한 번에 실행되는 map task의 개수를 줄일 필요가 있을까?
      • 문제가 되는 상황은 나의 job이 모든 map task slot을 점유하고, 다른 긴급한 job들이 나의 slot을 뺏을 수 없어서 생기는 문제.
      • 그렇다면, 하나의 map task 가 빨리 빨리 종료되도록 단위를 줄이면, 그 사이 다른 priority 가 높은 job들이 종료된 map slot을 차지하여, map task을 실행시킬 수 있게 되어, priority가 역전되는 문제를 회피할 수 있음.
      • map task를 얼마나 늘려야 할까? 심플하게 mapred.map.tasks=100000000 정도로 설정하면, 하나의 map task가 처리하는 단위가 작아지고, 굉장히 빠른 시간에 종료되므로, preemptive 문제는 해결할 수 있지만, 이 경우, input split이 너무 작아질 수 있기 때문에, hadoop에서 배보다 배꼽이 더 큰 상황이 발생할 수 있다.
      • 이때 구세주처럼 등장한 설정이 있으니 바로 mapred.min.split.size ! 하나의 input split의 최소 단위를 설정할 수 있는데, 이 설정을 이용하면, map task가 지나치게 많아지는 것을 방지할 수 있다.
      • 최종 해결책
        • mapred.min.split.size=4194304  (하나의 input split은 최소 4MB 단위로 처리해라)
        • mapred.map.tasks=1000000   (최대한 map task를 잘게 쪼개서, 다른 작업에 방해가 되지 않도록 하자)
        • 실제로 위와 같이 설정하면, 전체 map task가 백 만 개 이하로 적절하게 쪼개져서 동작함. (몇 개로 쪼개지는 지는 전체 input file의 size에 따라 다름)


:

Transaction Processing Performance Council

ITWeb/스크랩 2013. 8. 21. 14:01

http://www.tpc.org/

:

TED - Talk in 한국어

ITWeb/스크랩 2012. 4. 27. 18:42
:

node.js 에 대한 좋은 블로그 글 소개.

ITWeb/스크랩 2012. 3. 16. 14:52
Node.js 에 대해 쉽게 접근 할 수 있도록 정리된 블로그 문서가 있어 공유 합니다.

[원본문서] 


그동안 봐야지 봐야지 하던 Node.js를 이제야 보기 시작했습니다. 


간단히 말하면 Node.js는 서버사이드에서 동작이 가능한 Javascript이지만 보통 서버사이드 자바스크립트라고 하면 생각할만한건 runat="server"같은 수준의 서버사이드 자바스크립트와는 차원자체가 다릅니다.또한 Jaxer나 Narwhar같은 서버스크립트 자바스크립트 환경도 존재하지만 Node.js는 약간 다릅니다. 원래는 nettues+의 Learning Server-Side JavaScript with Node.js 를 따라하면서 포스팅을 하려고 하였지만 Node.js를 만든 Ryan Dahl 가 JSConf 2009 에서 발표한 동영상을 보는 것이 훨씬 이해하기가 좋아서 Ryan Dahl의 발표영상을 링크합니다. 


Ryan Dahl: Node.js

동영상에 나오는 발표자료는 글자가 잘 보이지 않아서 Scribd에 올라와 있는 발료자료입니다. (JSConf정도 행사에 node.js같은 프로젝트를 들고 나오는 사람이 헤져서 글자도 잘 보이지 않는 나이키티셔츠를 걸치고 나와서 한다는 것이 재밌기도 하네요.)


Node.js JSConf 2009 
 

Node.js는 서버사이드 자바스크립트이며 Google의 자바스크립트 엔진인 V8이 빌트인되어 있습니다. Event 기반이며 non-blocking I/O를 지원합니다. 자바스크립트의 표준라이브러리 프로젝트인 CommonJS 의모듈시스템을 지원합니다.

Apache같은 웹서버들은 모든 요청마다 시스템 쓰레드를 생성하는 쓰레드 기반이고 대부분의 경우에는 잘 동작하지만 Friendfeed나 Google Wave같은 리얼타임 애플리케이션처럼 많은 long-lived커넥션을 사용하는 애클리케이션에는 적합하지 않고 확장(scale)하기가 어렵습니다. 위 프리젠테이션에서 Apache와 NGINX를 비교한 그래프를 보면 쓰레드기반인 Apache는 요청이 늘어날수록 메모리가 증가하지만 NGINX는 직선을 유지하는 것을 볼 수가 있습니다. 이는 NGINX는 Event Loop를 사용하기 때문입니다.

이런 쓰레드기반의 문제를 Event Loop를 이용하면 해결할 수 있습니다.(여기서 Event Loop라는 것은 동작을 요청한뒤에 콜백을 지정하여 동작이 완료되면 콜백이 실행되는 방식을 발합니다.) 그럼 왜 모두가 Event Loop를 사용하지 않는가하는 의문이 생깁니다. 




Ryan Dahl은 문화적인(Cultural) 이유와 구조적(infrastructural)인 이유 2가지가 있다고 생각하였습니다. 


문화적인 이유는 우리가 프로그래밍을 배울때 인풋을 요청하면 요청한 인풋을 받을때까지 아무것도 하지 말라고 배웠기 때문입니다. 
?
1
2
3
puts("Enter your name: ");
var name = gets();
puts("Name: " + name);

위 코드는 인풋을 받아서 출력하는 익숙한 코드입니다. 인풋이 들어올때까지 아무것도 행하지 않습니다.
?
1
2
3
4
5
puts("Enter your name: ");
gets(function(name) {
     
puts("Name: " + name);
});

이벤트 루프방식인 위와같은 코드는 복잡하다는 이유로 거부되어 왔습니다.

구조적인 이유는 싱글쓰레드이벤트 루프는 논블럭킹 I/O를 요구하지만 대부분의 라이브러리들은 그렇지 않았습니다. POSIX I/O나 DB라이브러리들은 비동기요청을 지원하지 않았습니다. 하지만 현재는 EventMachine, Twisted등 좋은 이벤트루프 플랫폼이 존재하고 있지만 사용자들은 어떻게 다른 라이브러리들과 이것들은 조합할수 있을지 혼란스러워 하고 있으며 서버사이드 개발자들은 이벤트 루프와 넌블락킹 I/O에 대한 지식이 필요합니다.

하지만 Javascript는 Event Loop를 사용하도록 디자인되어 비동기 펑션과 클로져를 지원하고 한번에 하나의 콜백만 실행하며 DOM 이벤트 콜백을 통한 I/O를 지원하고 있습니다. 더군다나 자바스크립트의 문화는 이미 이벤트기반의 프로그래밍에 익숙해져 있습니다.



Design Goal
  • Function은 직접 플랫폼 I/O에 접속하지 않습니다.
  • Disk, network, 프로세스를 통해 데이터를 받기 위해서는 반드시 콜백(callback)을 사용합니다.   콜백을 사용할 수도 있습니다. (함수명sync()라는 함수들이 제공되고 있다는 AJ님의 제보에 따라 수정하였습니다. 위 PT의 28페이지에 must be라는 표현으로 보아 보통의 경우 callback을 권장하는 것으로 추측(?)됩니다.)
  • TCP, DNS, HTTP같은 프로토콜을 지원합니다.
  • HTTP feature를 지원합니다.(Chunk된 requst/response, Keep-alive, Comet을 위한 리퀘스트 홀딩
  • 클라이언트 사이드 자바스크립트 프로그래밍과 과거 학생때 배운 Unix 스타일에 친숙하게 디자인되었습니다.



Internal Design
  • Google의 V8 사용
  • Marc Lehmann이 만든 이벤트루프 라이브러리 libev 사용
  • Marc Lehmann이 만든 쓰레드풀 라이브러리 libeio 사용
  • Ryan Dahl이 만든 HTTP파서 http-parser 사용
  • Ryan Dahl이 만든 libev에 기반한 스크림 소켓 라이브러리 evcom 사용
  • Michael Tokarev가 만든 넌블럭킹 DNS resolver udns 사용


더 자세한 내용은 AJ님의 core perspective to node.js 를 참고하시면 도움이 될 것입니다. 



이 포스팅은 node.js는 무엇인가? #2 : Hello World 실행하기로 이어집니다. 



이 포스팅은 node.js는 무엇인가? #1에 이어진 포스팅입니다.



Hello World에 대한 예제는 여러가지가 있지만 아무래도 node.js를 만든 Ryan Dahl가 보여준 예제가 node.js를 가장 잘 표현해 주는것 같아서 Ryan Dahl가 JSConf에 사용한 Hello World 예제를 그대로 사용하였습니다. nettuse+의 Learning Server-Side JavaScript with Node.js 에 나온 소스도 참고하시면 도움이 될 듯 합니다.



Node.js 설치하기
Node.js는 Mac OS X, Linux, FreeBSD같은 Unix기반의 시스템에서만 구동됩니다. (최근 Windows쪽에서도 할 수잇다느 포스팅을 본적이 있는것 같은데 지금은 찾을  수 없네요.) Node.js v0.6.x부터는 Windows에서도 동작합니다.

node.js를 다운로드 받습니다. node.js 공식사이트에서 최신 릴리즈버전을 다운로드 를 받을 수 있으며 현재 버전은 0.1.97입니다. 다운로드 받은 파일을 원하는 위치에 압축을 풀면 됩니다. Node.js는 GITHUB 에서 저장소를 사용하고 있기 때문에 GIT을 이용해서 git clone http://github.com/ry/node.git 명령어을 사용하면 현재 개발중인 최신소스를 받아서 테스트 해 볼 수 있습니다.

node.js가 소스가 있는 폴더로 이동하여 다음과 같은 명령어를 실행합니다.

./configure
make
sudo make install

설치할때 각 라이브러리를 체크하는데 단순히 현재 시스템에 지원여부를 체크하는 것이므로 not found라고 나와도 문제가 있는 것이 아니므로 신경쓰지 않아도 됩니다. (./configure를 하지 않으면 Project not configured 오류가 발생합니다.)

Node.js를 실행하기 위해서는 Node.js의 node명령어를 사용해야 하기 때문에 환경변수 path에 node.js가 설치된 경로(/Users/Outsider/node 같은)를 추가하면 아무데서나 node명령어를 사용할 수 있습니다.(우분투에서는 sudo gedit /etc/environment로 OSX는 sudo vi /etc/paths를 사용해서 PATH를 수정해 볼 수 있습니다. 수정된 PATH는 재로그인 후에 적용이 되며 env나 echo $PATH를 사용해서 확인할 수 있습니다.) V8은 내장되어 있고 별도의 의존성이 전혀 없기 때문에 설치하고 바로 사용할 수 있습니다.



Hello World 실행하기
아래의 예제들은 Node.js 0.1.96버전을 사용하였습니다. Ryan Dahl가 시연했던 코드와는 API가 변경된 내용이 많기 때문에 아래의 예제들은 0.1.96버전에서 동작하도록 수정하였습니다.
?
1
2
3
4
5
6
// helloworld1.js
var sys = require("sys")
setTimeout(function() {
    sys.puts("world");
}, 2000);
sys.puts("hello");

Hello World 예제입니다.

node helloworld1.js

위의 명령어를 실행하면 node.js가 실행됩니다. Node.js는 더이상 할일이 없으면 자동으로 종료됩니다.





Hello World 실행하기2
?
1
2
3
4
5
6
7
8
9
10
puts = require("sys").puts;
 
setInterval(function() {
    puts("hello");
}, 500);
 
process.addListener("SIGINT", function() {
    puts("good-bye");
    process.exit(0);
});



두번째 예제입니다. setIntervla을 이용해서 hello라는 메시지를 0.5초마다 계속 반복적으로 출력해 주고 종료명령인 Ctrl + C를 입력하면 good-bye라는 메시지를 출력한 후에 종료해줍니다. process는 V8 그 자체를 의미합니다. process에 SIGINT라는 이벤트리스너를 추가하여 해당시그널이 왔을때 이벤트가 발생하게 됩니다.



TCP 서버 예제
?
1
2
3
4
5
6
7
8
9
var tcp = require("net");
 
var s = tcp.createServer();
s.addListener("connection", function(c) {
    c.write("hello!");
    c.end();
});
 
s.listen(8000);

TCP 서버 예제입니다. 1번라인의 tcp는 현재 버전에서 net으로 변경되었으며 5번라인의 send()는 write()로, 6번라인의 close()는 end()로 변경되었기 때문에 현재 버전에 맞게 수정되었습니다.


위 화면에서 뒷쪽의 터미널에서 TCP서버를 실행시켜두고 터미널을 새로 띄워서 localhost에 TCP서버에 접속한 것입니다. 작성해 놓은대로 hello!를 출력한 뒤에 접속을 종료합니다. 9번 라인에서 TCP서버는 8000포트를 이용하도록 설정되어 있습니다. net객체는 접속이 들어올때마다 connection이벤트를 발생시키며 HTTP 업로드가 될때 각 패킷마다 body 이벤트가 호출됩니다.



아직 완전히 API가 Fix되지 않았기 때문에 버전에 따라서 변경되는 내용들이 있는 상황입니다. 일일이 다 테스트 해 본것은 아니지만 버전에 따라 변경되는 내용이 존재하고 있고 바로바로 문서에 반영되는 것은 아니기 때문에 상황에 따라서는 소스를 직접 열어보아야 하는 상황입니다만 위의 화면처럼 현재버전의 require("sys")대신 구버전에서 사용하던 require("tcp")를 사용할 경우 'tcp'가 'net'으로 변경되었다고 친절하게 알려줍니다.

connection리스너는 createServer의 첫번째 아규먼트로 사용할 수 있기 때문에 위의 코드는 아래처럼 변경할 수 있습니다.
?
1
2
3
4
5
6
var tcp = require("net");
 
 tcp.createServer(function(c) {
     c.write("hello!\n");
    c.end();
 }).listen(8000);




Simple HTTP 서버 예제
?
1
2
3
4
5
6
7
8
var http = require("http");
     
http.createServer(function(req, res) {
    res.writeHead(200, {"Content-Type": "text/plain"});
    res.write("Hello\r\n");
    res.write("World\r\n");
    res.end();
}).listen(8080);




웹브라우저에서 접속하면 서버에서 작성한대로 Hello world가 정상적으로 출력됩니다.



스트리밍 서버 예제
?
1
2
3
4
5
6
7
8
9
10
11
12
var http = require("http");
     
http.createServer(function(req, res) {
    res.writeHead(200, {"Content-Type": "text/plain"});
    res.write("Hel");
    res.write("lo\r\n");
     
    setTimeout(function() {
        res.write("World\r\n");
        res.end();
    }, 2000);
}).listen(8000);




웹브라우저에서는 스트림을 비동기로 받아지지 않아서 curl 을 사용해서 테스트하였습니다. 접속하면 Hello가 바로 찍힌뒤 setTimeout으로 설정한대로 2초뒤에 World가 출력되고 접속이 종료됩니다.



node.js의 시스템 접근 예제
?
1
2
3
4
5
6
7
8
var sys = require("sys"),
    spawn = require("child_process").spawn;
 
var ls = spawn("ls", ["-ls", "/"]);
 
ls.stdout.addListener("data", function(data) {
    sys.print(data);
});



위 예제는 시스템에 접근하는 예제입니다. ls -ls /을 실행하여 그 결과를 출력하여줍니다. Node.js는 앞에서도 언급했든이 버퍼링을 강제하지 않습니다. data를 child process의 STDIO를 통해서 스트림하도록 저레벨의 기능(facility)을 사용합니다. (Simple IPC 예제는 chile process의 방법이 완전히 바뀐것 같은데 어떻게 똑같은 예제를 만들어야 할지 전혀 모르겠더군요. ㅠㅠ)



Epilogue
간단히 헬로월드만 따라해보고는 Node.js를 감히 판단할 수는 없겠지만 Node.js가 보여주는 미래는 놀랍습니다. 이벤트드리븐을 이용해서 서버의 퍼포먼스를 엄청나게 끌어들일 수 있으면 현재 프론트앤드 개발자가 가지고 있는 Javascript 스킬을 그대로 사용해서 자신이 원하는 웹서버를 직접 만들어 낼 수 있습니다. 엔터프라이즈급의 서버까지 만들어 낼 수 있을지는 아직 판단하기 어렵지만 정해진 일정기능의 서버는 아주 간단하게 충분한 퍼포먼스를 가지고 만들어 낼 수 있을 듯 합니다. 현재 버전이 0.2도 가지 않은 상황에서수많은 모듈들 이 개발되고 있는 것으로 보아도 그 미래가 상당히 기대가 됩니다. 아마 올해 node.js를 많이 만지게 될것 같습니다.


:

view 란?

ITWeb/스크랩 2012. 2. 27. 16:26
뷰라는 것은 쉽게 생각하면 테이블을 보기 위한 창문 정도로 생각하면 된다.
테이블을 방으로 생각하고 뷰를 그 방을 보는 창문으로 생각해 보자.
창문을 통해 방안을 보면 방안의 모든 내용을 볼 수 없지만, 내가 보려고 하는 물건이 정해져 있다면, 그것만 창의 시야 안에 가져다 놓으면 다른 것은 볼 필요가 없을 것이다. 
오히려 방에 들어가서 직접 보고자하는 물건을 찾는 것보다 미리 내가 지정한 것만을 창 앞에 가져다 놓고 그것만을 본다면 더 편리할 것이다.
테이블과 뷰도 같은 이치이다.
창문을 통해 본다는 것은 창문이 물건을 가지고 있는 것이 아니고 방에 있는 물건이 창을 통해 비치는 것뿐이다.
내가 그 방을 보고자해서 창문을 두드리면 창문은 그 순간의 방안의 모습을 비춰놓고 창을 닫는다.
그것을 우리는 보는 것이다.
뷰를 통해 데이터를 읽어 오면 SQL이 실행되는 순간에 테이블의 상태 그대로가 읽혀온다.

뷰의 역할이 바로 그것이다.
뷰의 의미는 하나의 select 문과 같다고 생각하면 된다.
물론 뷰를 통해 insert, update, delete가 가능하지만 대개의 경우는 select를 위해 사용한다.

뷰란 한개 이상의 기본 테이블이나 다른 뷰를 이용하여 생성되는 가상 테이블(virtual table)이다.
뷰는 기존에 생성된 테이블 또는 다른 뷰에서 접근할 수 있는 전체 데이터 중에서 일부만 접근할 수 있도록 제한하기 위한 기법이다
뷰를 가상 테이블이라하는 이유는 테이블은 디스크 공간이 할당되어 데이터를 저장할 수 있지만, 뷰는 데이터 딕셔너리 테이블에 뷰에 대한 정의만 저장하고 디스크에 저장 공간이 할당되지 않는다. 하지만 일반 사용자들은 SQL 문을 사용하여 테이블에 저장된 데이터를 검색하고 조작하는 것과 유사하게 뷰를 이용할 수 있다.
뷰는 물리적인 저장 공간과 데이터를 갖지는 않지만 테이블에서 파생된 객체이므로 테이블과 유사하게 사용할 수 있다.
? 뷰를 이용하면 중요한 데이터를 보호하기 위한 보안(security) 목적과, 사용자에게 편의성(flexibility)를 제공하기 위한 목적을 달성하기 위해서이다.
? 테이블과 같이 뷰에 대한 DML 연산 즉, 쿼리, update, insert, delete가 가능하며 constraint(제약조건)도 부여할 수 있다.
? 뷰 자체는 데이터를 갖지 않지만, 기초 테이블의 데이터를 조회하고 수정할 수 있는 창과 같다.
? 뷰는 데이터 값이 아니라 실제적으로는 질의 문장만을 가진다.
? 오라클에서 뷰를 구성하는 컬럼의 최대 개수는 254개이다.
? 뷰에 대한 수정 결과는 뷰를 정의한 기본 테이블에 적용된다.
? 뷰를 정의한 기본 테이블의 데이터가 변경되면 뷰에도 반영된다.
? 뷰는 기본 테이블에서 정의된 모든 무결성 제약조건을 상속 받는다.
? 뷰에 대한 정의는 user_views 데이터 딕셔너리 테이블을 통해서 조회할 수 있다.

뷰의 장단점
장점 ? DB의 선택적인 부분만 보여주므로 접근을 제한
? 다양한 접근 경로 설정
? 복잡한 질의를 단순화
? 데이터의 독립성 제공
? 동일한 데이터를 또 다른 뷰로 표현
? 한 개의 뷰에 여러 테이블의 데이터를 검색 가능
? 한 개의 테이블로부터 여러 뷰를 생성 가능
단점 ? 뷰의 정의를 변경할 수 없고 insert,delete,update에 많은 제한이 있음

뷰의 종류

뷰의 종류는 뷰를 정의하기 위해 사용된 기본 테이블 수에 따라 단순 뷰(simple view) 또는 복합 뷰(complex view)로 구분된다.

단순 뷰는 하나의 기본 테이블에 의해 정의한 뷰이다. 단순 뷰는 INSERT, DELETE, UPDATE와 같은 DML문을 실행할 수 있다.
단순 뷰를 대상으로 실행한 DML 문의 처리 결과는 뷰를 정의한 기본 테이블에 적용된다

복합 뷰는 2개 이상의 기본 테이블로 구성한 뷰이다. 복합 뷰에 대해서는 무결성 제약조건, 표현식, GROUP BY 절의 유무에 따라 DML문을 제한적으로 사용할 수 있다.
복합 뷰는 DISTINCT, 그룹함수, GROUP BY, START WITH CONNECT BY, ROWNUM을 포함할 수 없다. 그리고 UNION ALL, INTERSECT 등과 같은 집합 연산을 실행할 수 없다.

특징 simple view complex view
테이블 개수 1 1 개 이상
함수 없음 포함
data group 없음 포함
뷰를 통한 DML 가능 항상 가능한 것은 아님

뷰의 생성

뷰 생성시 컬럼 이름을 명시하지 않으면 뷰를 정의하는 기본 테이블의 컬럼 이름을 상속한다. 하지만, 함수나 표현식에 의해 정의되는 컬럼은 별도로 이름을 명시하지 않으면 오류가 발생한다. 뷰에 대한 검색은 SELECT 문을 이용하여 기본 테이블의 데이터 검색 방법과 동일하게 검색할 수 있다.
【형식】
CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW 뷰이름
[(alias[,alias]...]
AS subquery
[WITH CHECK OPTION]
[WITH READ ONLY];
여기서 각각의 옵션의 의미는 다음과 같다.
옵션 설 명
OR REPLACE 같은 이름의 뷰가 있을 경우 무시하고 다시 생성
FORCE 기본 테이블의 유무에 상관없이 뷰를 생성
NOFORCE 기본 테이블이 있을 때만 뷰를 생성
ALIAS 기본 테이블의 컬럼이름과 다르게 지정한 뷰의 컬럼명 부여
WITH CHECK OPTION 뷰에 의해 access될 수 있는 행(row)만이 삽입, 수정 가능
WITH READ ONLY DML 작업을 제한(단지 읽는 것만 가능)
? 뷰를 정의하는 subquery에는 ORDER BY절을 포함할 수 없다. ORDER BY절은 VIEW에서 데이터를 읽을 때 지정됨
? WITH CHECK OPTION절에서 제약조건 이름을 표기하지 않으면 system default인 SYS_Cn 형태(예:SYS_C000123)로 지정된다.
? OR REPLACE 옵션을 사용하여 뷰의 정의를 변경할 수 있다.
(다른 것처럼 alter 문으로 변경하는 것이아니라 OR REPLACE 옵션으로 변경이 가능함)
? 뷰를 정의하는 질의어는 JOIN, GROUP, subquery를 포함하는 복잡한 문장으로 구성될 수 있고, 뷰의 연산은 기존의 테이블 연산과 동일하다.
【예제】
SQL> CREATE VIEW dno10_vw
  2  AS SELECT ename,job,sal,deptno
  3     FROM emp WHERE deptno=10;
 
View created.
 
SQL> select * from dno10_vw;
 
ENAME      JOB              SAL     DEPTNO
---------- --------- ---------- ----------
CLARK      MANAGER         2450         10
KING       PRESIDENT       5000         10
MILLER     CLERK           1300         10
 
SQL> select view_name,text
  2  from user_views;
 
VIEW_NAME      TEXT
-------------  ---------------------------------------
DNO10_VW       select ename,job,sal,deptno
               from emp where deptno=10
 
SQL> desc dno10_vw;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ENAME                                              VARCHAR2(10)
 JOB                                                VARCHAR2(9)
 SAL                                                NUMBER(7,2)
 DEPTNO                                             NUMBER(2)
 
SQL>
뷰의 수정
뷰의 수정은 기존 뷰에 대한 정의를 삭제한 후 재생성하거나, CREATE 문에서 OR REPLACE 옵션을 이용하여 재정의할 수 있다.
뷰의 수정 결과는 user_views 데이터 딕셔너리에 저장된다.

【형식】
CREATE OR REPLACE VIEW 뷰이름
AS subquery;
【예제】
변경 후 변경 전
SQL> select * from dno10_vw;
 
     EMPNO ENAME      HIREDATE         DEPTNO
---------- ---------- ------------ ----------
      7782 CLARK      09-JUN-81            10
      7839 KING       17-NOV-81            10
      7934 MILLER     23-JAN-82            10
 
SQL> 
SQL> select * from dno10_vw;
 
ENAME      JOB              SAL     DEPTNO
---------- --------- ---------- ----------
CLARK      MANAGER         2450         10
KING       PRESIDENT       5000         10
MILLER     CLERK           1300         10
 
SQL>
SQL> create or replace view dno10_vw
  2  as select empno,ename,hiredate,deptno
  3     from emp 
  4     where deptno=10;
 
View created.
SQL>
SQL> desc dno10_vw;
 Name          Null?    Type
 ------------- -------- ------------------
 EMPNO         NOT NULL NUMBER(4)
 ENAME                  VARCHAR2(10)
 HIREDATE               DATE
 DEPTNO                 NUMBER(2)
 
SQL> 
SQL> desc dno10_vw;
 Name          Null?    Type
 ------------- -------- ------------------
 ENAME                  VARCHAR2(10)
 JOB                    VARCHAR2(9)
 SAL                    NUMBER(7,2)
 DEPTNO                 NUMBER(2)
 
SQL>


뷰의 삭제
뷰는 실체가 없는 가상 테이블이므로 뷰의 삭제는 user_views 데이터 딕셔너리에 저장된 뷰의 정의를 삭제하는 것을 의미한다.
따라서 뷰의 삭제는 뷰를 정의한 기본 테이블의 구조나 데이터에는 전혀 영향을 주지 않는다.
? 뷰의 삭제는 해당 뷰를 생성한 사용자나, DROP ANY VIEW 권한을 가진자만이 가능하다.
【형식】
DROP VIEW 뷰이름;
【예제】
SQL> drop view dno10_vw;
 
View dropped.
 
SQL> select * from user_views where view_name='DNO10_VW';
 
no rows selected
 
SQL>
단순 뷰의 DML 연산
하나의 테이블을 기초로하는 단순 뷰는 DML이 아래의 조건에 따라 수행되지만, 다중 테이블로 구성되는 복합 뷰는 DML 연산이 수행되지 않는다.
단순 뷰는 아래의 조건을 제외하고는 DELETE, UPDATE, INSERT 연산이 가능하다.

다음 사항 포함시 삭제 않됨 아래 포함시 수정 않됨 아래 포함시 추가 안됨
그룹함수 그룹함수 그룹함수
GROUP BY 절 GROUP BY 절 GROUP BY 절
DISTINCT 키워드 DISTINCT 키워드 DISTINCT 키워드
ROWNUM pseudo 컬럼 ROWNUM pseudo 컬럼 ROWNUM pseudo 컬럼
표현식으로 정의된 컬럼 표현식으로 정의된 컬럼
뷰에 의해 선택되지 않은 
NOT NULL 컬럼이 기본 테이블에 있을 때

뷰에 대한 데이터 조작이 불가능한 경우는 다음과 같은 3가지 경우이다.
1) 뷰 정의에 포함되지 않은 기본 테이블의 컬럼이 NOT NULL 제약조건으로 지정된 경우에는 뷰에 데이터 삽입이 않된다.
2) 뷰 정의시 표현식으로 정의된 컬럼에 대해서는 UPDATE, INSERT 문의 실행이 않된다.
3) 뷰 정의시 그룹 함수, DISTINCT, GROUP BY 절을 포함한 경우에는 모든 종류의 DML 문을 사용할 수 없다.

【예제】
삭제 전 삭제 후
SQL> select * from dno10_vw;
 
     EMPNO ENAME      HIREDATE         DEPTNO
---------- ---------- ------------ ----------
      7369 SMITH      17-DEC-80            20
      7499 ALLEN      20-FEB-81            30
      7521 WARD       22-FEB-81            30
      7566 JONES      02-APR-81            20
      7654 MARTIN     28-SEP-81            30
      7698 BLAKE      01-MAY-81            30
      7788 SCOTT      19-APR-87            20
      7844 TURNER     08-SEP-81            30
      7876 ADAMS      23-MAY-87            20
      7900 JAMES      03-DEC-81            30
      7902 FORD       03-DEC-81            20
 
11 rows selected.
 
SQL>
SQL> select * from dno10_vw;
 
     EMPNO ENAME      HIREDATE         DEPTNO
---------- ---------- ------------ ----------
      7369 SMITH      17-DEC-80            20
      7566 JONES      02-APR-81            20
      7788 SCOTT      19-APR-87            20
      7876 ADAMS      23-MAY-87            20
      7902 FORD       03-DEC-81            20
 
SQL>
SQL> delete from dno10_vw where deptno=30;
 
6 rows deleted.
 
SQL> 


WITH CHECK OPTION
WITH CHECK OPTION 절을 사용하면 뷰를 통해 참조 무결성(reference integrity)을 검사할 수 있고 DB 레벨에서의 constraint 적용이 가능하다.
즉, WITH CHECK OPTION 절을 사용한 뷰에서 INSERT와 UPDATE를 수행하면 Error가 발생한다.

WITH CHECK OPRION의 기능
? 뷰를 통한 참조 무결성 검사
? constraint의 적용
? 데이터 검증 확인
【형식】
CREATE VIEW 뷰이름
AS subquery
WITH CHECK OPTION CONSTRAINT constraint명;
【예제】
SQL> create view test_vw
  2  as select empno,ename,hiredate,deptno
  3  from emp
  4  where deptno=10
  5  with check option constraint test_vw_ck;
 
View created.
 
SQL> select * from test_vw;
 
     EMPNO ENAME      HIREDATE         DEPTNO
---------- ---------- ------------ ----------
      7782 CLARK      09-JUN-81            10
      7839 KING       17-NOV-81            10
      7934 MILLER     23-JAN-82            10
 
SQL> update test_vw set deptno=20 where ename='KING';
update test_vw set deptno=20 where ename='KING'
       *
ERROR at line 1:
ORA-01402: view WITH CHECK OPTION where-clause violation
with check option을 사용한 뷰는 deptno=10인 데이터만 참조가 가능한데, 
20으로 변경하면 뷰가 더이상 참조할 수 없으므로 error를 발생한다. 
 
SQL> update test_vw set ename='JOE' where empno='7839';
 
1 row updated.
 
SQL> select * from test_vw;
 
     EMPNO ENAME      HIREDATE         DEPTNO
---------- ---------- ------------ ----------
      7782 CLARK      09-JUN-81            10
      7839 JOE        17-NOV-81            10
      7934 MILLER     23-JAN-82            10
 
SQL> 
WITH READ ONLY
with read only 옵션을 사용하여 뷰를 생성하면 뷰의 속성이 READ ONLY로 바뀌기 때문에 DML 연산을 못한다.
【형식】
CREATE VIEW 뷰이름
AS subquery
WITH READ ONLY;
【예제】
SQL> create view test_vw
  2  as select empno,ename,hiredate,deptno
  3     from emp
  4     where deptno=10
  5  with read only;
 
View created.
 
SQL> select * from test_vw;
 
     EMPNO ENAME      HIREDATE         DEPTNO
---------- ---------- ------------ ----------
      7782 CLARK      09-JUN-81            10
      7839 JOE        17-NOV-81            10
      7934 MILLER     23-JAN-82            10
 
SQL> delete from test_vw
  2  where ename='JOE';
delete from test_vw
            *
ERROR at line 1:
ORA-01752: cannot delete from view without exactly one key-preserved table
 
 
SQL> 
complex View
두 개 이상의 다중 테이블에서 만들어져 그룹함수를 포함하는 뷰를 의미한다.
subquery 문장에 JOIN, FUNCTION, DISTINCT 등을 포함한다.
? complex 뷰는 기본적인 DML 연산이 항상 가능한 것은 아니다. 뷰는 두 개 이상의 다중 테이블로부터 JOIN 연산으로 만들어졌기 때문이다. 뷰를 통해 source 데이터의 변형이 있느냐에 따라 실행 가능 여부가 결정된다.
? 뷰의 어떤 컬럼이 함수나 표현식에서 유래 되었다면 반드시 alias를 사용해야 한다. 하나의 테이블에서 만들어졌다면 쓸 필요가 없지만 2개 이상의 테이블로부터 만들어졌기 때문이다.
【예제】
SQL> create view test_sum(name,minsal,maxsal,avgsal)
  2  as select d.dname, min(p.sal), max(p.sal), avg(p.sal)
  3     from dept d, emp p
  4     where d.deptno=p.deptno
  5     group by d.dname;
 
View created.
 
SQL> select * from test_sum;
 
NAME               MINSAL     MAXSAL     AVGSAL
-------------- ---------- ---------- ----------
ACCOUNTING           1300       5000 2916.66667
RESEARCH              800       3000       2175
 
SQL>
Inline 뷰
인라인 뷰는 FROM 절에서 서브쿼리를 사용하여 생성한 임시 뷰이다. 인라인 뷰는 SQL 문이 실행되는 동안만 임시적으로 정의된다.
? inline view에서 ORDER BY 절을 사용할 수 있다.
【형식】
SELECT column_list
FROM (subquery) alias
WHERE 조건;
참고로 서브쿼리가 FROM 절에 있으면 이를 Inline view라하고
서브쿼리가 WHERE 절에 있으면 이를 Nested subquery라 하며
Nested subquery중에서 참조하는 테이블이 parent, child관계를 가지면 이를 correlated subquery라 한다.
【예제】
SQL> select a.empno,a.ename,a.sal,a.hiredate,b.maxdate
  2  from emp a, (select deptno, max(hiredate) maxdate
  3               from emp
  4               group by deptno) b
  5  where a.deptno=b.deptno AND a.hiredate < b.maxdate;
 
     EMPNO ENAME             SAL HIREDATE     MAXDATE
---------- ---------- ---------- ------------ ------------
      7369 SMITH             800 17-DEC-80    23-MAY-87
      7566 JONES            2975 02-APR-81    23-MAY-87
      7782 CLARK            2450 09-JUN-81    23-JAN-82
      7788 SCOTT            3000 19-APR-87    23-MAY-87
      7839 KING             5000 17-NOV-81    23-JAN-82
      7902 FORD             3000 03-DEC-81    23-MAY-87
 
6 rows selected.
 
SQL> 
TOP_N 분석 참조
뷰에 대한 질의의 내부적인 처리과정

뷰는 디스크 상에 저장공간이나 데이터가 없는 가상 테이블이므로 실체가 없다. 따라서 뷰에 대한 질의는 내부적으로 뷰를 정의한 기본 테이블에 대한 질의로 변환되어 실행된다.

뷰에 대한 질의가 내부적으로 처리되는 과정은 다음과 같다.
1) user_views 데이터 딕셔너리에서 뷰에 대한 정의를 조회한다.
2) 기본 테이블에 대한 뷰의 접근 권한을 확인한다.
3) 뷰에 대한 질의를 기본 테이블에 대한 질의로 변환한다.
4) 기본 테이블에 대한 질의를 통해 데이터를 검색한다.
5) 검색된 결과를 출력한다.

뷰에 대한 정보 조회

사용자가 생성한 모든 뷰에 대한 정의는 user_views 데이터 딕셔너리에 저장된다. user_views 데이터 딕셔너리에는 뷰를 정의한 select 문이 문자열로 저장되어 있다.
뷰는 디스크상에 공간이나 저장된 데이터가 없이 user_views 데이터 딕셔너리에 뷰를 정의한 select 문만 문자열로 저장되어 있는 가상 테이블이다.

【예제】
SQL> create view dno10_vw
  2  as select ename,job,sal,deptno
  3     from emp where deptno=10;
 
뷰가 생성되었습니다.
 
SQL> select view_name,text
  2  from user_views;
 
VIEW_NAME      TEXT
-------------  ---------------------------------------
DNO10_VW       select ename,job,sal,deptno
               from emp where deptno=10
 
SQL> 

참조: Query REwrite은 동일 쿼리에 대해서 SQL문을 내부적으로 재작성하여 구체화된 뷰를 통해 데이터를 검색


원본글 :  http://seobangnim.com/zbxe/?document_srl=68736 


VIEW 이란?

 

하나또는 하나이상의 테이블로부터 데이터의 부분집합을 논리적으로 표현하는것으로 실제

데이타를 가지고 있는것이 아니라 해당 데이타의 결과를 하나의 SQL 쿼리 정보로 가지고

있습니다.

 

※ VIEW는 생성시 SQL쿼리문(SELECT * FROM TABLE) 형태로 저장이 됩니다.

※ 뷰테이블이란 표현은 잘못된 표현입니다. 뷰쿼리가 맞는 표현입니다.

 

VIEW 장점,단점?

 

뷰를 사용하면 코딩 라인이 짧아지고 결과에 대한 오류 발생시 빠르게 대응 할수 있다는 장점

을 갖고 있습니다. 뷰는 상수값을 받지 못합니다. 즉, parameter 값을 받을수 없어

Scan 범위를 줄일수 없습니다.

 

VIEW 목적?

 

데이터베이스 액세스를 제한하기위해

view는 선택적인 내용을 보여주기 때문에 액세스를 제한합니다.

 

복잡한 질의를 쉽게 만들어 준다.

group나 order by와 같은 복잡한 질의의 정보를 view로 저장시켜놓으면 다음부터는 view의 정보만 가져오면 되므로 쉽게 사용가능하다.

 

데이터의 독립성을 허용하기 위해

 

다양하고 빠른 조회를 위해 사용

 

테이블의 수를 줄이고 성능향상을 가져온다.

 

VIEW 사용시점

 

해당 프로젝트에서 관리차원이나 유지보수차원을 중요시 여긴다면 VIEW를

사용하는게 좋다.

 

VIEW의 종류

 

단순뷰

하나의 TABLE에서 뽑아오며 함수를 사용안한다.

DML(INSERT,UPDATE,DELETE)사용 가능

복합뷰

하나이상의 TABLE에서 뽑아오며 함수를 사용합니다.

DML(INSERT,UPDATE,DELETE)사용 불가능

예제

CREATE OR REPLACE VIEW AAA AS
SELECT 
D.DNAME,
MIN(E.SAL),
MAX(E.SAL),
AVG(E.SAL)
FROM EMP E , DEPT D
WHERE E.DEPTNO=D.DEPTNO
GROUP BY D.DNAME;

 

VIEW 생성하기

 

사용방식

 

CREATE [OR REPLACE] VIEW VIEW_NAME AS QUERY_STRING [WITH READ ONLY];

 

주의할점

 

1. QUERY_STRING 에는 ORDER BY절 빼고 모두 사용가능하다.

 

2. "OR REPLACE" 옵션을 사용하게되면 생성할 VIEW와 같은 VIEW_NAME이 있어도 무시하고 새로운것으로 갱신하게 됩므로 주의하여 사용해야 합니다.

 

3. "WITH READ ONLY" 옵션을 사용하게 되면 해당 VIEW 에 DML 언어를 사용할수 없으며 DML 언어를 사용하게되면 에러가 발생합니다.

 

사용예제 :

 

CREATE VIEW VIEW1 AS

SELECT NAME, AGE, ADDRESS

FROM SCHOOL

WHERE NAME = '이준식';

 

CREATE OR REPLACE VIEW LEE AS

SELECT * FROM DEPT;

 

CREATE OR REPLACE VIEW LEE AS

SELECT * FROM DEPT

WITH READ ONLY;

 

VIEW에 DML한후의 반응

 

VIEW을 생성후 INSERT을 하게되면 VIEW에는 안들어가지고 원본 TABLE에 입력된다.

VIEW을 생성후 UPDATE을 하게되면 VIEW는 데이타가 없어지면서 원본 TABLE내용이 갱신된다.

 

뷰는 실테이블을 적당히 가공하여 보여주는 역할을 합니다. 
실제 테이블의 자료를 보기 위한 하나의 틀 정도로 생각하시면 됩니다.
뷰중에는 자료 입력,수정,삭제가 가능한 뷰도 있습니다. 
뷰의 자료를 수정하게 되면 실제 테이블의 자료가 수정되는 것입니다. 
테이블이 수정되면 뷰 또한 수정된 값을 보여줍니다. 

 

VIEW 지우기

 

사용형식 : DROP VIEW VIEW_NAME;

사용예제 : DROP VIEW EXAMPLE1;

 

생성된 VIEW보기

 

SELECT * FROM USER_OBJECTS WHERE OBJECT_TYPE='VIEW';

 

인라인 뷰란?

 

SQL문에서 사용가능한 별칭을 사용하는 서브쿼리입니다.

인라인뷰는 기본 질의의 FROM절에 명명된 서브쿼리를 사용하는것과 유사합니다.

Oracle 7.1 이상에서 사용가능하다.

 

※ 단점 : 인라인뷰를 사용한다는것은 가상메모리를 더 사용한다는 것이다.

 

※ 대용량에서 인라인뷰를 출력항목에 사용하게되면 성능이 많이 떨어진다. 왜냐하면

조회되는 건수만큼 인라인뷰가 실행되기 때문이다.

ex

SELECT (SELECT NAME FROM MEMBER) AS NAME FROM TRADE;

 

인라뷰를 응용한 Top-N 분석

 

회사에서 월급많이 받는 3명뽑아라

회사에서 가장 최근에 입사한 직원 3명뽑아라

 

사용형식:

SELECT COLUMN_LIST ,ROWNUM FROM

(SELECT COLUMN_LIST FROM TABLE ORDER BY TOP_N_COLUMN)

WHERE ROWNUM<=N;

 

사용예제:

SELECT * FROM 
(
SELECT * FROM DEPT ORDER BY DNAME

WHERE ROWNUM <= 3;

 

VIEW의 내부 동작

 

1. VIEW 생성

CREATE VIEW TEST_VIEW AS SELECT NAME, AGE FROM MEMBER WHERE AGE > 5;

 

2. VIEW 갱신명령

UPDATE TEST_VIEW SET AGE = AGE + 10 WHERE NAME = 'JUNSIK';

 

3. VIEW 내부적 변환

UPDATE MEMBER SET AGE = AGE + 10 WHERE NAME = 'JUNSIK' AND AGE > 5;

 

※ VIEW에 갱신명령을 내리면 겉으로는 2번과 같이 처리되는것 처럼 보이지만 DBMS가 명령

을 받은후에 3번과 같이 변환후 실행한다.

 

서로 다른계정에서 View 접근권한

 

create or replace view test

as

select * from uer.temp

where deptid =11;

위의 명령을 A계정에서 할경우 당연히 권한이 없다고 나온다. 이때는 SYSTEM 계정에서

A계정에 uer.temp 테이블에 대한 SELECT 권한을 주면 된다.

그리고 SYSTEM계정으로 접속을 해도 권한이 없으면 다른 유저의 자료는 액세스 할수 없다.

:

문서작성에 필요한 아이콘을 찾아보자규.

ITWeb/스크랩 2012. 2. 16. 11:19

icon 찾다가 괜찮은 것 같아서 링크 등록해 봅니다.

http://www.iconfinder.com  

블로그의 링크 메뉴에 등록을 하려다가 너무 길어 지는 것 같아서.. 걍.. 글 등록해요.
:

[펌] Multitenancy

ITWeb/스크랩 2012. 2. 14. 10:15

최근에 주변에서 듣고 있는 단어들이 이렇다.
- CMS, ECM, SaaS, ASP, Cloud, salesforce.com, CRM ....
그럼 이런것들이 국내에서는 어떻게 적용 되고 있을까???
제 생각은 "구름 속에 숨겨진 SI" 구나 싶내요.

남들이 하니까.. 따라하는.. 비즈니스.. 과연 얼마나 성공 할 수 있을지.. 
따라 하면서도 스스로는 뭔가 굉장한 걸 하고 있다는 자부심에 사로잡혀.. 판단력이 흐려지고 있는지도 모른다.

Fast Follow 가 나쁜게 아니고 현실감과 혁신성이 없는게 나쁘다.

[Wikipedia]
http://en.wikipedia.org/wiki/Multitenancy 

[기사1]
http://www.ddaily.co.kr/news/news_view.php?uid=72827 

[디지털데일리 심재석기자] 클라우드 컴퓨팅을 이야기할 때 빠지지 않는 기술요소 중 하나는 멀티 태넌시(다중소유 Multi-Tenancy )다. 멀티 태넌시란 하나의 소프트웨어를 여러 사용자가 함께 사용하는 것을 말한다. 


대표적인 사례가 세일즈포스닷컴이다. 세일즈포스닷컴의 CRM 애플리케이션은 전 세계 모든 고객이 함께 사용한다. 고객들은 프로그램을 수정하는 것이 아니라 세일즈포스닷컴이 제공하는 환경설정 기능을 통해 자사에 맞도록 커스터마이징해서 이용한다. 

멀티-태넌시는 SaaS(Softeware as a Service)와 애플리케이션 임대 서비스(ASP)를 구분하는 가장 중요한 속성이다. 둘 다 기업들이 소프트웨어를 소유하지 않고 빌려 쓴다는 점은 같지만 ASP 사업자는 고객마다 각자의 하드웨어와 소프트웨어를 별도로 구축한다.

하지만 멀티 태넌시 환경의 클라우드 서비스 제공업체는 서버 풀(Pool)을 만들어 이를 기반으로 하나의 서비스를 제공한다. 모든 고객들은 이 서비스를 공유해 사용하는 것이다.

멀티태넌시의 가장 큰 이점은 규모의 경제가 가능하다는 점이다. 서비스 제공업자가 고객마다 새로운 시스템을 만들 필요가 없기 때문에 IT투자를 최소화 할 수 있다. 또, 하나의 시스템만 관리하면 되기 때문에 관리비용도 적게 든다. 오류를 발견해도 하나만 수정하면 전세계 고객이 똑 같은 혜택을 얻을 수 있고, 한 번만 업그레이드하면 전 세계 고객이 동시에 이를 이용한다.

하지만 멀티 태넌시 기술은 논쟁의 여지가 있는 것도 사실이다. 데이터베이스를 공유하는 것이 필수적이기 때문이다. 

멀티 태넌시 환경은 하나의 데이터베이스에 전 세계 모든 고객의 데이터를 담아둔다. 고정적인 메타데이터도 공유된다. 고객별 데이터는 각기 다른 테이블을 통해 관리된다.

하나의 DB에 모든 사용자의 데이터를 담는다는 것은 그만큼 위험성도 높다는 걱정을 야기한다. 

이 같은 위험성을 강조하는 업체는 오라클이다. 오라클의 래리 앨리슨 회장은 “멀티 태넌시는 미친 짓”이라고 주장한다.

앨리슨 회장은 “모든 고객이 동일한 데이터베이스를 사용하는 것은 보안 면에서 끔찍하다”이라며 “멀티 태넌시는 소름끼치는(horrible) 아이디어”라고 말했다.

하지만 세일즈포스닷컴 마크 베이오프 회장의 생각은 정반대다. 그는 “멀티 태넌시가 아닌 것은 가짜 클라우드”라고 생각한다. “클라우드를 시작할 때는 100만 달러를 지불할 필요가 없어야 한다”는 것이 그의 확고한 주장이다.

그는 “멀티 태넌시 아키텍처가 보안 면에서 지적을 받지만, 세일즈포스닷컴은 지금까지 단 한 차례도 보안 문제를 일으킨 적이 없다”면서 “클라우드 컴퓨팅이란 아키텍처를 공유하는 멀티태넌시 시스템이 기본”이라고 강조했다.

멀티 태넌시가 매우 효율적이지만 계란을 한 바구니에 담는 아키텍처라는 사실은 분명하다. 실제로 많은 기업들은 클라우드 컴퓨팅의 보안 문제에 대한 우려를 나타내고 있다. 

글로벌 소프트웨어 업체 한 관계자는 “공급업체 입장에서 멀티 태넌시는 매우 효율성이 높은 아키텍처이지만, 보안 면에서는 우려가 많은 양날의 칼”이라면서 “멀티 태넌시 아키텍처는 강력한 데이터 암호화 등 다양한 보안 기술과 병행돼야 한다”고 말했다



[기사2]
http://www.netapp.com/kr/communities/tech-ontap/tot-1007-deploying-multi-tenant-infrastructure-for-the-cloud-ko.html 

클라우드를 위한 멀티 테넌트(Multi-Tenant) 인프라 구축

공유 인프라 구축은 까다로운 과제입니다. 일반적인 기업 데이터 센터는 중요 애플리케이션이나 공유 요소에 대한 요구 사항을 과도하게 초과하는 전용 인프라를 가지고 있습니다. 두 방식 모두 낮은 리소스 활용율로 예산을 낭비합니다.

문제는 추가적으로 부하가 생기면 서버, 네트워크 및 스토리지와 같은 인프라 구성 요소가 어떻게 동작할 것인지를 예측하기가 어렵다는 것입니다. 클라우드 컴퓨팅을 통해 개별 애플리케이션, 그룹 또는 고객 간에 모든 리소스가 공유되는 멀티 테넌트(multi-tenant) 환경의 모든 측면을 이해하는 것이 보다 중요해졌습니다.

이러한 이유로 NetApp은 시큐어 멀티 테넌시(multi-tenancy)를 위한 완전한 솔루션을 개발하기 위해 Cisco 및 VMware와 협력해왔습니다. 이 솔루션은 NetApp 연구소의 충분한 테스트를 거친 후 많은 회사에서 구현되었습니다. 예를 들어 중소기업용 관리 서비스 선두 제공업체인 Tier 3은 자사의 데이터 센터를 공유 가능하면서도 안전한 클라우드로 변환할 수 있었습니다. 이 클라우드는 IaaS(Infrastructure as a Service) 및 StaaS(Storage as a Service)를 제공하는 동시에 가상 서버 환경의 스토리지를 67% 회수하고 전체 데이터 센터의 백업 시간을 24시간에서 1시간으로 단축시킵니다. (또 다른 예는 ExamWorks 요약 부분을 참조하십시오.)


그림 1) 시큐어 멀티 테넌시(multi-tenancy) 솔루션 구성 요소.

이 문서에서는 공동 솔루션의 기초를 제공하는 설계 원칙을 설명하고 클라우드 구현을 돕기 위해 사용할 수 있는 리소스에 대한 지침을 제공합니다.

멀티 테넌시(multi-tenancy)의 4대 요소

많은 기업들이 보안과 QoS(서비스 품질)를 염려하여 클라우드 인프라 구축 또는 클라우드 서비스에 대한 계약을 망설이고 있습니다. 이러한 이유 때문에 NetApp, Cisco 및 VMware가 시큐어 멀티 테넌트(multi-tenant) 클라우드 아키텍처를 개발한 것입니다. 본 설계에서는 시큐어 멀티 테넌시(multi-tenancy)의 4가지 요소에 대해 설명합니다.

  • 가용성. 공유 인프라 하나에 장애가 발생하는 경우 10, 20 또는 50개의 클라이언트에 영향을 줄 수 있습니다. 따라서 우리가 정의한 인프라는 장애가 발생할 수 있는 상황에서도 필요한 컴퓨팅, 네트워크 및 스토리지 리소스를 이용할 수 있도록 이중화 및 기타 메커니즘을 기본으로 제공합니다.
  • 안전한 분리. 한 테넌트는 어떤 상황에서도 다른 테넌트의 VM(가상 시스템), 네트워크 또는 스토리지 리소스에 액세스할 수 없어야 합니다. 각 테넌트는 안전하게 분리되어야 합니다. 이에 우리는 엔드 투 엔드 보호를 위해 각 계층에서 보안 조치를 구현했습니다.
  • 서비스 보장. 정상적으로 운영되는 동안은 물론 장애가 발생하거나 특정 테넌트에서 비정상적인 부하가 발생할 경우에도 컴퓨팅, 네트워크 및 스토리지가 분리되어 성능이 보장되어야 합니다. 이 솔루션은 서비스 등급을 최대한 애플리케이션에 근접하게 설정하고 해당 값을 정책 정의에 매핑하며 각 계층의 고유 품질에 따라 정책이 모든 계층에 균일하게 적용되도록 합니다. (이 항목은 이전 Tech OnTap 기사인 "엔드 투 엔드 서비스 품질"에 자세히 기술되어 있습니다.)
  • 관리. 모든 리소스를 빠르게 프로비저닝, 관리 및 모니터링할 수 있는 기능은 매우 중요합니다. 우리의 목표는 관리를 단순화하는 동시에 고객이 특정 벤더에 얽매이지 않도록 하는 것입니다. 우리는 어떠한 타사 애플리케이션 벤더도(고객이 선택하는 경우) 전체 환경에 대한 관리를 제공할 수 있도록 모든 단계에서 API 통합 지점을 상세히 나열하고 워크플로를 상세히 기술했습니다.


그림 2) 멀티 테넌시(multi-tenancy) 요소.

포괄적인 참조 사항

공동 솔루션의 큰 장점 중 하나는 NetApp, Cisco 및 VMware에서 모든 고된 작업과 테스트를 미리 수행했다는 것입니다. 유사한 기능의 솔루션을 자체적으로 개발하려고 한다면 선택한 벤더의 모범 사례를 검색하고 파악하는데 많은 시간을 소모하게 됩니다. 그런 후에도 모든 것이 유기적으로 작동하여 엔드 투 엔드 성능 및 보안을 제공하고 있는지 여부를 확신하기가 여전히 어려울 수 있습니다.

우리는 이 아키텍처를 자세히 설명하는 두 개의 포괄적인 문서를 작성했습니다. 설계 설명서에서는 멀티 테넌시(multi-tenancy)의 네 가지 각 요소를 지원하는 메커니즘과 주요 설계 결정이 내려진 이유를 설명합니다.

구현 설명서는 이 환경을 구성하는데 필요한 모든 조치를 상세히 설명하는 단계별 안내서입니다. 이 설명서는 두 개의 섹션, 즉 인프라 설정 방법을 설명하는 첫 번째 섹션과 환경이 구성된 후 각 테넌트를 구현하는 방법을 다룬 두 번째 섹션으로 구분됩니다.

전반적으로 이 설계는 유연성을 강조합니다. 이 설계를 적용하면 경직된 하드웨어의 한계에 얽매이지 않고 특정 요구에 맞게 공유 인프라의 크기를 보통에서 대용량까지 조정하고 필요에 따라 독립적으로 규모를 조정할 수 있습니다.

공동 지원

시큐어 멀티 테넌트(multi-tenant) 솔루션의 또 다른 이점은 공동 지원입니다. 세 지원 조직 중 어느 곳에나 전화하여 전체 인프라에 대한 지원을 요청할 수 있습니다. 지원 조직뿐 아니라 엔지니어링 조직도 직접 상호 협력하고 있습니다. 고객의 문제가 서버, 네트워크, 스토리지 또는 가상화 중 어느 것에 대한 것이든 해결될 때까지 해당 문제는 미결 상태가 됩니다.


그림 3) 공동 지원 모델.



:

[펌] * As A Service ...

ITWeb/스크랩 2012. 2. 7. 17:31
[원본]
http://www.katescomment.com/iaas-paas-saas-definition/ 



이 그림을 주워온 이유는 자꾸.. 헷갈려 하시는 분이 있는 것 같아 걍.. 몇자 적어 보려 함입니다.
다분히 개인적인 사견이라는 점 밝혀 드립니다.. ^^;

[Framework]
http://en.wikipedia.org/wiki/Framework  

SaaS, PaaS, IaaS 등등 참 많이 도 있습니다.
이중에서 SaaS Architecture 를 이야기 할때.. 빠지지 않는 것이 Framework 입니다.
이건 Software 를 만들때 기반으로 사용하기 위한 틀이지 이 자체가 Service를 위한 독립적인 SW 는 아닙니다.
그럼에도 불구하고 Framework 을 Platform 고 섞어서 이야기 하시는 분들이 계시는데 그러시면 안됩니다.

Framework은  SW 를 구성하기 위한 또는 만들기 위한 하나의 편리한 개발 도구나 환경입니다.


[Platform]
http://en.wikipedia.org/wiki/Platform (여기서 Technology 부분 참고)
http://www.terms.co.kr/platform.htm  

Platform 은 SW 가 올라가서 실행되는 환경입니다.






:

[펌] Wikipedia's CMS link.

ITWeb/스크랩 2012. 2. 7. 14:40

원본 URL :  http://en.wikipedia.org/wiki/List_of_content_management_systems

[Web Content Management]

web content management system (WCMS)[1] is a software system that provides website authoring, collaboration, and administration tools designed to allow users with little knowledge of web programming languages or markup languages to create and manage website content with relative ease. A robust WCMS provides the foundation for collaboration, offering users the ability to manage documents and output for multiple author editing and participation.

Most systems use a database to store page content, metadata, and other information assets that might be needed by the system.

A presentation layer displays the content to website visitors based on a set of templates. The templates are sometimes XSLT files.[2]

Most systems use server side caching to improve performance. This works best when the WCMS is not changed often but visits happen regularly.

Administration is typically done through browser-based interfaces, but some systems require the use of a fat client.

A WCMS allows non-technical users to make changes to a website with little training. A WCMS typically requires a systems administrator and/or a web developer to set up and add features, but it is primarily a website maintenance tool for non-technical staff.


[CMS - Web Content Management Capabilities]

- Automated templates

- Access Control

- Scalable expansion

- Easily editable content

- Scalable feature sets

- Web standards upgrades

- Workflow management

- Collaboration

- Delegation

- Document management

- Content syndication

- Multilingual

- Versioning


[CMS - Web Content Management Types]

- Offline processing

- Online processing

- Hybrid systems


[CMS - Web Content Management Advantages]

- Low Cost

- Easy Customization

- Easy to use

- Workflow management


[CMS - Web Content Management Disadvantages]

- Cost of implementation

- Cost of maintenance

- Storage Volume

- Latency issues

- Latency issues

- Tool Mixing

- 원본글 :  http://en.wikipedia.org/wiki/Web_Content_Management_System 

[Enterprise Content Management] 

Enterprise content management (ECM) represents both a strategy to deal with all types of unstructured content and a set of software products for managing the entire content life cycle. Those who lead ECM projects, typically application managers and enterprise architects, confront critical decisions about how to manage a growing number of information types and whether to choose strategic infrastructure tools or best-of-breed offerings.

ECM technologies are frequently provided as part of an integrated suite or platform and include:


Document management – Document and image check-in/check-out, version control, security and library services


Web content management – Automating Web master tasks, managing dynamic content and managing content authoring


Records management – Rules for content disposition and automation of retention and compliance policies


Document capture – Basic imaging functionality for capturing and managing paper documents

Social content – unstructured data (documents, images, video) primarily destined for human consumption. Social content is created, vetted, marked up or delivered through a social process or channel.


Workflow (as integrated with document management, Web content management and records management products) – Supporting business processes and routing content, assigning work tasks and states, and creating audit trails

- 원본글 :  http://www.gartner.com/technology/it-glossary/enterprise-content-management.jsp 


[표원본 :  http://en.wikipedia.org/wiki/Content_management_framework]
NameTechnologies
Alfresco Java
Apache Jackrabbit Java
Apache Lenya Java, Apache Cocoon
Apache Sling Java, JSPECMAScript
ArcaCMF PHP 5 and MySQL
AxKit Perl
Catalyst Perl
CherryPy Python
CodeIgniter PHP and MySQL
Cotonti PHP 5 and MySQL
Cuyahoga ASP.NET and MySQL, PostgreSQL, SQL Server (based on NHibernate)
Django-CMS Python, Django and MySQL/PostgreSQL
Drupal PHP and MySQL/MariaDB/PostgreSQL/SQLite
Exponent CMS An MVC framework using PHP and MySQL
eZ Publish PHP 4, PHP 5, MySQL, PostgreSQL, OracleSQL Server
Jakarta Slide (Retired. Look at Jackrabbit as an alternative.) Java
Joomla! PHP and MySQL
Jumper 2.0 PHP and MySQL
Mambo PHP and MySQL
Maypole Perl
Midgard GLibD-Bus, PHP, Python and MySQL
MODx CMS PHP 4.1.x-5 and MySQL 3.2x-5
OpenACS AOLserver and PostgreSQL or Oracle
Pier Smalltalk and Seaside
Pimcore PHP and MySQL
Plone Python
ProcessWire PHP and MySQL
RIFE Java
Seagull PHP 4, PHP 5, works with MySQL, Oracle or PostgreSQL
SilverStripe (Sapphire framework) PHP 5, works with MySQL, PostgreSQL, SQL Server
TangoCMS PHP 5 and MySQL
TYPO3 PHP and MySQL
Umbraco .NET Framework, works with SQL Server, VistaDB, with XSLT or .NET UserControls
Microsoft SharePoint Server .NET Framework, works with SQL Server or Windows Internal Database
Microsoft SharePoint Foundation .NET Framework, works with SQL Server or Windows Internal Database
WordPress PHP and MySQL
Xaraya PHP and MySQL
XOOPS PHP and MySQL
 
:

LG U+AD 반성합시다.

ITWeb/스크랩 2011. 12. 12. 17:03
이런 일이 있나요???

LG U+AD 의 광고 상품 제작 가이드가 궁금해서 사이트 검색을 해서 들어갔습니다.
띠용..

크롬에서 화면 작살 입니다..ㅡ.ㅡ;
그래서 뭐.. 이 정도는 이해해 주자.. IE 로 들어갔습니다.

이런 별 짓을 해도 다운로드 링크는 활성화 되지 않습니다.
음.. 로그인을 해야 하는 건가????
(사실 로그인은 하지 않았습니다.)

그래서 고객센터에 전화를 했습니다.
상담원께서 이메일로 보내 드리겠다 합니다.
메일 주소 드렸습니다.

이런.. 메일이 오지 않습니다..
그리고 공지사항도 2010년 도 올라 오고 조용한데..
Advertiser 나 Publisher 를 뭘로 보는 겁니까!!!!!!!!!!

반성 좀 합시다.. 

※ 찾으시는 분 계실까봐.

http://uplusad.co.kr/ 
: