달력

52024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

'나의 관심사'에 해당되는 글 195건

  1. 2016.07.11 Spring (스프링)
  2. 2016.07.11 JAVA 설치
  3. 2016.07.08 스택(Stack)
  4. 2016.07.08 DRM
  5. 2016.07.08 Documentum Security
프로그래밍/It 용어 2016. 7. 11. 14:02

스프링이 도대체 뭐란 말인가?

출처 : http://springmvc.egloos.com/487497

본 문서를 읽는 독자들에게 부탁하나 하노라면 토비의 스프링 3와 함께 읽어주길 바란다. 많은 부분이 이 책에서 인용되었고 필자 또한 책을 읽고 이해가 가지 않는 부분에 대해 적어놓는 형태인지라 책과 함께 블로그를 읽는다면 큰 도움이 될 것이라 생각되기 때문이다.

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

[이게 필자가 알고 있는 컨테이너]

토비의 스프링은 다음과 같이 말한다. 스프링은 거대한 컨테이너임과 동시에 Ioc/DI를 기반으로 하고 있는 거룩한 존재이며 서비스 추상화를 통해 삼위일체로 분리되는 3단 변신로봇이라고 한다. 이럴수가! 뭔말하는지는 하나도 모르겠지만 일단 말만 들어도 엄청난데다 가격까지 공짜다. 게다가 이걸 쓰는 사람들마다 칭찬 또 칭찬 일색이니 궁금해서 참을 수가 없다.



근데 말이다…. 필자는 스프링의 지독한 뉴비이므로 여기서 뉴비답게 눈치없게 한번 굴어보려 한다. 일단 스프링이 대단하고 무지 엄청나다는 건 알겠는데…. 컨테이너는 뭐고 IoC/DI는 뭐란 말인가? 평생 살면서 컨테이너란 위의 사진같은 것 밖에 모르는데… 그리고 서비스 추상화? 난 아직 서비스가 뭔지도 모르겠다.


컨테이너란?

컨테이너란 당신이 작성한 코드의 처리과정을 위임받은 독립적인 존재라고 생각하면 된다. 컨테이너는 적절한 설정만 되있다면 누구의 도움없이도 프로그래머가 작성한 코드를 스스로 참조한 뒤 알아서 객체의 생성과 소멸을 컨트롤해준다. 거기다 컨테이너를 이용함으로써 얻게되는 이득은 어마어마 하며, 이런 강력한 기능을 무료로 이용할 수 있다는 점 또한 엄청나다.

허나 소수의 독립심 강하고 줏대있는 사람들은 내가 잘 알지도 못하는 프로그램을 무작정 써야 한다는 것에 반감을 살 수도 있다. 게다가 프로그래머가 다른 라이브러리에 의존하지 않고 직접 코드를 작성해나간다면 완성된 프로그램에 대한 이해도 또한 상상을 초월할 것이다. 혹은 인간이 그렇게 줏대없이 프로그램만 의존하다가 터미네이터나 매트릭스 같은 세상이 되버리면 어떡하냐고 필자에게 따질 수도 있는 것이다.

만약 이러저러한 이유로 컨테이너를 거부하겠다면 필자는 굳이 사용하지 않아도 상관은 없다고 말하겠다. 진심으로 실력만 된다면사용자가 직접 컨테이너를 만들어써도 상관은 없다.

그러나 직접 컨테이너를 구현해보고자 키보드에 손을 올렸다면 아마 배보다 배꼽이 더큰 컨테이너의 어마어마한 기능에 입이 쩍벌어질 것이다. 빈정상하라고 하는 말은 아니지만 사실 당신이 구현하고자 하는 코드와 컨테이너의 구현 코드는 비교도 안될 정도로 수준차가 어마어마하다. 그러므로 코드의 이해가 당장 힘들어지고 뭐가뭔지 모르겠더라도 일단 막강한 기능을 제공하는 컨테이너를 이용하기로 하자.

다시 말하지만 프로그래머가 작성한 코드는 컨테이너를 사용하게 됨으로서 프로그래머의 손을 떠나 컨테이너의 영역으로 떠나버리게 된다. (정확히 말하자면 컨테이너가 맘대로 객체를 생성하는 게 아니라 프로그램을 이용하는 이용자의 호출에 의해 컨테이너가 동작하게 되는 구조이다.) 여하튼 컨테이너를 이용한다면 우리의 골치아픈 문제는 다 컨테이너 알아서 해주므로 쓸데없는 버그나 난해한 과제들에 골치 아파질 이유가 없어진다. 당신은 컨테이너의 기능을 이용하고 사용 중 오류가 있으면 일단 무조건 개발사 탓을 하면 되므로 회사에서 짤릴 가능성까지 어느 정도 낮아진 셈이다!

내친 김에 당신이 필자와 같은 初뉴비라면 임기응변을 위해서라도 반드시 스프링의 개발자와 자바의 개발자 정도가 누군지는 알아두어야 한다. 이런걸 미리미리 알아둬야 나중에 직장 상사가 괜한 버그로 트집을 잡을 때 무조건 이 사람들 탓으로 돌릴 수 있게 된다.

자바의 아버지, 제임스 고슬링 - 선 마이크로시스템즈라는 회사와 함께 자바라는 언어를 탄생시키는데 혁혁한 공을 세운 인물이며 SUN이 오라클로 인수된 뒤 얼마 지나지 않아 회사를 퇴임하고 현재 구글에서 근무 중이다. 개인적으로 C와 UNIX를 만든 데니스 리치 다음으로 훌륭한 프로그래머라고 생각한다.
스프링 혁명가, 로드 존슨 - 프로그래밍 계의 락스타같은 존재라 할 수 있다. 그가 한 유명한 말로 "항상 프레임워크 기반으로 접근하라"라는 말이 있는데 이 말은 곧 당신이 한 클래스에서 DB에 넣고 빼는 등 온갖 짓거리로 코드를 짜고 있다면 당신이 어디가서 프로그래밍의 프자도 꺼내서는 안된다는 말이다.

당신은 이 서블릿 클래스가 몇시몇분몇초에 호출될지 정확히 알고 있는가?

다시 본론으로 돌아와 스프링과 더불어 대표적인 컨테이너를 예로 들자면 톰캣과 같은 WAS(Web Application Service)를 들 수 있다. 우리가 열심히 작성한 서블릿을 써줄지 말지는 톰캣이 결정하므로 당연히 컨테이너 아닌가. 혹여나 그래도 이해가 가지 않는다면… 그냥 당신이 쓰고 있는 코드가 도통 언제 호출될지도 감이 안오는 막막한 상태라면 올바르게 컨테이너를 이용하고 있다고 하자. 그런 의미에서 컨테이너는 당신의 사수나 수석 프로그래머라고 할 수 있다. 내가 쓴 코드를 그 사람들이 써줄지 말지는 모르는 일이니 말이다.


IoC/DI란?

IoC/DI란 Inversion of Control과 Dependency Injection의 줄임말이다. 한글로 번역하면 제어의 역전, 의존적 주입이라고 하는데 목에 힘을 좀 빼고 솔직히 말하자면 살다살다 한글로 번역까지 했는데 이해 못할 말이 튀어나올 줄은 몰랐다. 그래서 나름 좀… 쪽팔려도 뉴비의 표현으로 바꾸자면 "대신 해줌(IoC)"과 "미리 찜해 놓음(DI)"라고 잠시 명칭을 정정하도록 하겠다.

일단 IoC란 무엇인가? 당신이 위의 컨테이너의 설명글을 꼼꼼히 읽어왔다면 IoC는 지금 당신이 생각하고 있는게 맞다. 바로 컨테이너다. 컨테이너는 당신이 작성한 코드 컨트롤(객체의 생성과 소멸)을 대신 해주는데 IoC덕분에 우리는 미친 사람마냥 언제 호출될지도 모르는 코드를 마음껏! 칠 수 있게 되었다.

사실 IoC는 스프링만의 코딩방식은 아니고 다른 프레임워크에서도 사용되는 방식인데 굳이 스프링만 우리는 IoC 방식이라고 목이 힘주어 강조하는 이유는 스프링은 정말 철저하게 IoC 방식을 써먹었다는 것이다. 그러므로 우리가 여기서 얻을 수 있는 결론은 어디가서 스프링 좀 안다고 IoC가 스프링만의 고유한 방식이라고 떠벌리면 안된다는 것일테다.

그렇다면 DI란 또 무엇인가? 이것은 마치 당신이 받아먹기도 전에 미리 받아먹겠노라고 선언하는…, 주는 놈은 생각도 않았는데 먼저 말부터 꺼내놓는 파렴치한 코딩방식이라고 할 수 있다. 예를 들어 당신이 조촐한 회식으로 사장님과 중국집을 갔는데 당당히 "저는 짜장면 안먹고 양장피 먹겠습니다."라고 선언한다면 당신은 DI개념이 아주 확실한 프로그래머인 셈이다.

게다가 사실 DI 마저도 스프링만의 고유한 방식은 아니라는 거다. DI란 전설과도 같은 프로그래밍 예언서 GoF 중에서 가장 유명한 전략패턴을 일종의 프레임워크 처럼 편리하게 사용할 수 있도록 만든 것이라 할 수 있는데 스프링은 이런 전설로만 알아오던 전략패턴을 뉴비마저도 산소 호흡하듯 능수능란하게 사용하게끔 편리화하였다.

좀 더 구체적으로 DI에 대해 말하자면, DI방식으로 코드를 작성한다면 현재 사용하고 있는 객체의 메서드가 어떻게 작성되었는지 알 필요가 없으며 솔직히 그 클래스가 기능을 잘 구현했는지 조차도 알 필요가 없다. 그저 당신이 확인할 사항은 클래스의 기능을 추상적으로 묶어둔 인터페이스만 갖다 쓰면 그만이다. 나머지는 스프링에서 찜한 걸 연결시켜줄테니 말이다.

아래 그림은 위의 글로만 써놓은 전략패턴과 DI에 대해 정말 간단히 예제로 만든 코드이다.

먼저 말했듯 DI는 스프링만 가지고 있는 고유의 기능이 아니므로 자바의 오브젝트 단위에서도 DI의 구현이 가능하다. 먼저 StrategyPatternService 클래스를 보면 sp라는 객체는 인터페이스 객체인 StrategyPattern로 선언되었으며StrategyPattern의 메서드인 dependency_injection()를 호출하고 있긴 하다. 그러나 객체 생성 과정에서 객체 sp에 StrategyPatternImpl 클래스를 주입시켜버림으로써 결과적으로 객체 sp는 StrategyPatternImpl의 dependency_injection()이란 메서드를 호출해버리고 말았다는 것이다.

그러므로 위에서 말했듯이 당신은 인터페이스의 메서드만 이용하더라도 위와같이 구현부는 나중에 주입을 통해 해결하므로 획기적인 분업과 동시에 구현 클래스를 쉽게 교체할 수 있다는 장점을 얻게 된다. 물론 스프링은 위의 이미지와 같이 단순한 방식으로 주입하진 않는다. 주입 방식에만 클래스 형태와 XML형태 2가지가 있으며 그 세부적으로도 어마어마하게 많은 방식으로 DI를 할 수 있다.

가끔 스프링을 쓰다보면 이런 다양한 방식이 진짜 편리와 우수한 기능을 위해서인지… 아니면 일부러 사용자를 헷갈리게 하려는 건지 분간이 안갈 때가 종종 있다. (개인적으로 로드 존슨이 프로그래머들을 편집증으로 몰아가기 위해 꾸민 음모가 아닌가 싶다…)

여하튼 IoC/DI의 개념을 요약하자면 정신나간듯 언제 사용될 지도 모르는 코드를 쳐대면서(IoC) 동시에 사용하고 있는 코드가 뭔지도 모르면서 일단 갖다 쓰는(DI) 획기적이고 진보적인 프로그래밍 작성방식이라 이해하면 되겠다.


서비스 추상화란?

솔직히 지금 DI를 설명하면서 서비스 추상화에 대한 부분까지 함께 설명해버렸다. 간략하게 개념에 대해서만 설명하자면 토비의 스프링의 일부분을 발췌하는 것이 좋을 듯 싶다.

추상화란 하위 시스템의 공통점을 뽑아내서 분리시키는 것을 말한다. 그렇게 하면 하위 시스템이 어떤 것인지 알지 못해도, 또는 하위 시스템이 바뀌더라도 일관된 방법으로 접근할 수가 있다.

그렇다. 우리는 위의 간단한 DI예제에서 StrategyPattern이란 인터페이스로 기능을 분리시킴으로서 하위시스템, 즉 클래스가 그 무엇으로 교체되더라도 해당 메서드는 반드시 존재할 것이란 보장을 받은 셈이다. 당신이 위의 모든 글을 읽고서도 아직 잘 이해가 가지 않는다면 지금 당장은 이러한 것을 과연 어떻게 구현해낼까에 대해 고민하지 않아도 된다. 사실 그것을 알아나가는 과정이 바로 스프링을 공부하는 과정이기 때문이다.

다만… DI예제의 과정, 즉 인터페이스를 구현하고 주입하는 과정이 이해가 가지 않는다면 당신은 자바에 대한 기본기가 매우 부족한 것이니 자바의 정석을 펼치고 객체지향개념부터 다시 필독하고 읽어보길 바란다.


'프로그래밍 > It 용어' 카테고리의 다른 글

UM Stereotype ( 스테레오타입 개념 )  (0) 2016.08.01
트랜잭션  (0) 2016.07.11
스택(Stack)  (0) 2016.07.08
DRM  (0) 2016.07.08
잡다한1  (0) 2016.07.08
Posted by 당구치는 개발자
|
프로그래밍/설치관련 2016. 7. 11. 11:44

 

 

java 설치

목차

1.    개요    3

2.    java 다운로드    4

2.1.1 다운로드    4

3.    java 설치    5

3.1.1 install    5

4.    java 환경변수 설정    11

4.1.1 환경변수 설정    11

 

 

  1. 개요

본 문서는 java 설치를 위한 문서이다.

자바 버전 Java 1.7.0.21 64bit 를 설치 한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  1. java 다운로드

2.1.1 다운로드

다운로드 url

http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html

java-7u21-windows-x64.exe 를 클릭하여 다운로드 받는다.

(오라클 게정이 필요함)

 

 

 

  1. java 설치

3.1.1 install

다운로드한 java-7u21-windows-x64.exe 파일을 실행 시킨다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Next 버튼을 클릭한다.

 

 

 

 

 

 

 

 

 

 

 

 

Next 버튼을 클릭한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Close 버튼을 클릭한다.

 

 

 

 

 

 

 

 

 

 

 

 

기본 설치된 java 경로는 C:\Program Files\Java\jdk1.7.0_21 이다.

 

 

 

 

 

 

 

 

 

 

 

 

  1. java 환경변수 설정

4.1.1 환경변수 설정

제어판\모든 제어판 항목\시스템 이동

고급 시스템 설정 클릭 후 시스템 속성 팝업에서 환경변수 버튼을 클릭한다.

 

 

 

 

 

 

 

 

환경 변수 창이 나타나고 새로 만들기 버튼을 클릭한다.

새 사용자 변수 창에서 다음과 같이 입력 후 확인 버튼을 클릭한다.

변수 이름 : JAVA_HOME

변수 값 : C:\Program Files\Java\Jdk1.7.0_21\

 

 

 

 

 

 

 

시스템 변수 변경

Path 를 선택하고 편집 버튼을 클릭한다.

시스템 변수 편집에서 C:\Program Files\Java\Jdk1.7.0_21\bin; 부분을 가장 앞쪽에 입력하고

시스템 변수 편집창에 있는 확인 버튼을 클릭한다.

환경변수 창에서 확인 버튼을 클릭한다.

시스템 속성 창에서 확인 버튼을 클릭한다.

 

 

 

Posted by 당구치는 개발자
|
프로그래밍/It 용어 2016. 7. 8. 11:30

 스택의 정의

"스택"이란 여러 개의 데이타 항목들이 일정한 순서로 나열된 자료 구조로, 한쪽 끝에서만 새로운 항목을 삽입하거나 기존 항목을 삭제할 수 있도록 고안된 것이다


 스택의 원리

스택은 동전을 넣고 뺄 수 있도록 되어 있는 동전 케이스와 같은 작동 원리를 가지고 있다. 삽입된 동전들은 케이스 내부에 일정한 순서로 저장된다. 먼저 삽입된 동전은 케이스의 가장 아래쪽에 위치하고 가장 최근에 삽입된 동전은 입구에 놓인다


 스택의 성질

스택에 저장된 데이타 항목들 중에 먼저 삽입된 것은 나중에 삭제되고, 나중에 삽입된 것이 먼저 삭제된다. 그래서 스택을 후입 선출 리스트(Last- In-First-Out List)라고 부른다. 선입 선출법을 사용하는 와는 상반된 성질을 가진다


 스택의 구조


  • 스택은 기저(base)로부터 데이타 항목들을 차례로 쌓아올린 모양을 가진다.
  • 삽입과 삭제는 현재 저장된 최상위 항목이 위치한 top 에서만 일어난다.
  • top 위치는 "스택 포인터"라는 지시자가 가리킨다.
  • 스택 포인터는 스택 기저에서 시작하여 항목이 삽입되면 하나 증가하고, 삭제되면 하나 감소한다.
  • 스택에는 한계가 있어서 그 한계를 초과하도록 삽입할 수 없다.

 스택에 데이타 항목 삽입 (push)

데이타 항목을 삽입하려면 스택 포인터를 하나만큼 증가시켜 주고 스택의 top 에 데이타 항목을 저장한다. 데이타 항목을 삽입하기 전에 새로운 항목을 저장할 빈 공간이 있는지 검사해야 한다.
 



full 검사

다음의 그림처럼 스택이 가득차 있으면 새로운 데이타 항목을 삽입할 수 없다. 데이타 항목을 삽입하기 전에 먼저, 스택 포인터가 스택의 한계에 도달해 있는지 검사해야 한다.
 


 

 

 스택에서 데이타 항목 삭제 (pop)

데이타 항목을 삭제하려면 스택의 top 에 있는 데이타 항목을 제거하고 스택 포인터를 하나만큼 감소시켜 준다. 데이타 항목을 삭제하기 전에 스택이 비어있는지를 검사해야 한다.
 



 empty 검사

다음의 그림처럼 스택이 비어 있으면, 데이타 항목을 삭제할 수 없다. 데이타 항목을 삭제하기 전에 스택 포인터가 기저에 도달해 있는지를 검사해야 한다.
 



 

'프로그래밍 > It 용어' 카테고리의 다른 글

트랜잭션  (0) 2016.07.11
Spring (스프링)  (0) 2016.07.11
DRM  (0) 2016.07.08
잡다한1  (0) 2016.07.08
잡다한  (0) 2016.07.08
Posted by 당구치는 개발자
|
프로그래밍/It 용어 2016. 7. 8. 11:21

DRM(Digital Rights Management: 저작권 관리 시스템)은 네트워크에서의 다양한 컨텐츠를 제공자 (Content Provider: CP)로부터 고객(Client)로 안전하게 전달하고 이 고객이 불법적으로 컨텐츠를 유통하지 못하도록 하는 시스템 기술이다. DRM시스템에서 있어 가장 중요한 기술은 암호화 기술로서 고객의 비밀 번호 혹은 고객 컴퓨터의 고유번호를 암호 키로 사용하여 컨텐츠를 암호화하여 전달하기 때문에 이를 복사하여 제3자에게 전달하여도 풀리지 않도록 하는 점이 가장 중요하다. 물론 DRM은 이외에도 컨텐츠 사용규칙 제어기술, 과금 결제를 위한 기술 등의 부대적인 기술들이 필요하다. 


이중에서 암복호화 기술은 멀티미디어 컨텐츠의 유통에 있어서 불법유통이나 불법복제를 방지하기 위한 핵심 기술로서, 컨텐츠를 특정한 암호 키를 이용하여 암호화시킴으로써 적법한 사용자만이 복호화하여 컨텐츠를 사용할 수 있도록 하는 기술이다. 기존의 컨텐츠 전잘 시스템은 사용자 ID와 비밀번호만을 사용하고 있는데 이런 경우 ID와 비밀번호를 공유함으로써 쉽게 컨텐츠를 불법으로 사용할 수 있다는 문제가 있다. 이것을 해결하기 위하여 (1) 고객 컴퓨터의 고유 ID를 변형하여 사용하는 방법 (2) 고객의 PKI키나 은닉된 개인 키를 사용하는 방법이 있다

고객 컴퓨터의 고유번호, 예를 들면 HardDisk 번호 라든가 혹은 CPU번호를 이용하여 컨텐츠를 암호화 시키는 경우가 있지만 컴퓨터의 고유번호는 누구나 쉽게 접근할 수 있기 때문에 보안성이 떨어진다는 단점이 있다. 따라서 가장 일반적인 DRM암호화 방법은 PKI 개인키처럼 개인 비밀키를 컴퓨터에 내장하고 이를 사용하는 방식이다. 2001 10 Beal Screamer라고 지칭하는 사람이 MS-DRM '깨었다'고 선언하여 상당한 화제가 되고 있는데 이는 MS-DRM의 개인키 숨기는 모듈로부터 개인키를 뽑아내는 방법을 찾아내었기 때문이다. 이처럼 고객의 고유키로 암호화할 경우 장점은 다운로드 받은 컨텐츠를 제3자에게 전달하여도 제3자의 컴퓨터에서는 작동이 불가능하다는 점이다. 이 점을 이용하여 DRM시스템은 컨텐츠의 불법 복제와 유통을 방지할 수 있는 것이다

다음으로 중요한 DRM의 부품기술은 컨텐츠 사용 규칙 제어기술이다. 이는 고객의 지불(Payment)형태에 따라 컨텐츠의 사용 횟수와 형태, 사용기간, 3자 양도 등을 제어하는 기술이다. 그 외에도 지불 시스템과 고객 관리 시스템과의 연동, 고객 과금 처리 등의 요소 기술이 DRM을 구성하는 중요한 요소이다.



[그림 1] DRM (Digital Rights Management)


위의 [그림 1] DRM을 이용한 저작물 유통 서비스의 한 예로, 저작물을 가진 공급자(CP)와 지불 시스템을 연결하여 저작물을 제공하며 사용자에게는 암호화하여 저작물을 전달한다. 순서상으로 본다면 사용자가 네트워크에서 이미지나 오디오, 비디오 등의 저작물을 신청하고 지불을 하게 되면 지불시스템에서는 지불 승인을 통보하게 되고, 정당한 사용자인 경우에 한해 저작물을 암호화하여 네트워크상에서 사용자에게 전송하게 된다

이미지, 오디오, 비디오 등의 저작물은 다운로드 되는 경우와 스트리밍으로 전송 받는 경우가 있으며 사용자측에서 이미지를 보거나 오디오를 듣거나 비디오를 감상하는 경우 저작자(CP)측이 제공하는 브라우저(Browser) PC, PDA등에 설치되어야 한다. 사용자의 불법복제나 Play횟수를 제한하는 사용규칙 제어 기능은 대체로 이 브라우저를 통해서 이루어진다. 그런데 이 브라우저에는 사용자의 비밀번호 관리프로그램이 들어있기 때문에 이 브라우저으 보안성이 대단히 높아야 한다는 점이 DRM시스템의 성공의 관건이다. 최근에는 실행 파일을 역으로 작동시켜 소스 코드를 복원하는 tempering기술이 많이 발달되어 이를 방지하기 위한 temper-proofing기술이 필요하다. 사실상 DRM시스템의 안전성은 이 브라우저의 안전성에 달려 있다고 해도 과언이 아니다

DRM
이 사용자에게는 단순히 브라우저만을 가진 시스템으로 보이지만 실제로는 대단히 복잡하고 많은 시스템이 연동되어 돌아가고 있다. DRM이 사용자들의 요청을 받아들여 저작물을 보내려면 키관리 시스템(KMS: Key Management System)과 지불 연계시스템(Payment Gateway), 저작물 관리 DB, 공연규칙 DB, 저작물 사용권 이전을 위한 Super Distribution 서버가 있어야 한다

키 관리 시스템(KMS)에서는 등록된 사용자만 접근을 허용하고 불법적인 사용자에게는 시스템에 접근하지 못하도록 사용자 ID와 패스워드를 확인하는 기능을 가지고 있다. 지불 연계 시스템 (Payment Gateway)에서는 신용카드, 지로, 전자 지갑, 사이버 머니, 은행 자동 이체 등의 다양한 지불 수단을 연결할 수 있어야 하며 저작물을 제공하기 이전에 지불 승인을 먼저 받는 것이 일반적이다. 사용자의 실적에 따라 쿠폰을 발행하거나 마일리지 프로그램을 시행하는 것도 필요하며 홍보성 이벤트 관리도 이 부분에서 이루어지게 된다. 저작물 관리 DB에는 저작물이 저장되며 사용자의 요청이 있을 경우 이를 사용자 ID에 상응하는 암호를 이용하여 암호화하거나 네트워크 통신량을 줄이기 위해 압축하여 보내는 경우도 있다. 예를 들어 음악의 경우 일반적으로 원음을 MP3, AAC, 혹은 WMA 등의 형식을 사용하여 압축하고 사용자측에 있는 브라우저에서 압축을 풀면서 음악이 연주되거나 비디오가 플레이된다

대부분의 경우 사용자의 비밀 번호 혹은 ID를 가지고 컨텐츠를 서버에서 암호화하고 이를 사용자에게 보낸 다음, 사용자측의 컴퓨터에 설치된 브라우저를 통해서 플레이(Play)시 복호화가 진행된다. 얼마전까지만 하여도 암호화 알고리즘의 보안성에 대한 논란이 있었으나 최근 암호화 알고리즘 중에는 수학적으로 보안성이 증명된 공개 알고리즘이 많이 나와 있기 때문에 DRM 시스템에서의 알고리즘의 보안성에 대한 논란은 많지 않다.

 

 

DRM의 정의


DRM
Digital Rights Management의 약자로 직역하면 디지탈 권리관리정도로 해석할 수 있다. 음악 파일이나 동영상 파일, 문서 파일에 대한 권리를 제공하는 기술로 허가된 사용자 이외에는 접근할 수 없도록 제어하는 기술이 DRM이다. 기본적으로 복사방지 기술은 포함되어 있고 사용자의 레벨에 따라서 여러 정책들을 적용시킬 수 있는데 기간제한이나 횟수제한, 혹은  읽기권한 제한 및 수정제한 등이 그것이다.


DRM의 종류


DRM
은 어떤 종류의 컨텐츠에 적용하느냐에 따라서 여러 분류로 나눌 수 있지만 크게 2가지로 나눌 수 있다.


문서 DRM


회사 내부에서 사용하는 문서들을 제어하는 DRM 기술이다. 보통 회사의 문서관리 시스템에 연동해서 구축하며 문서를 열람할 수 있는 사용자들을 구별해서 읽기, 수정 등의 기능을 제한하도록 한다. 또한 회사 이외에서의 접근을 막거나 제한하도록 하여 외부로의 유출을 방지하고 외부인력이 접근할 때 제한을 두어 정보의 유출을 막는데 이용되는 기술이 문서DRM 기술이다. 국내에서는 파수닷컴이나 마크애니 등의 회사에서 이 서비스를 제공한다.


멀티미디어 DRM


동영상이나 음악 컨텐츠들을 제어하는 DRM 기술이다. 최근 음제협 등이 저작권을 무기로 마구 사용자들을 유린하고 있는데 그것을 어느정도 강화시켜줄 수 있는 기술이기도 하고 이통사들이 자신들의 수익으로 많이 먹어주고 있는 기술도 바로 멀티미디어 DRM이다. 멜론, 도시락, 뮤직온 등의 각 이통사에서 제공하는 DRM이 멀티미디어 DRM이라고 보면 된다.

멀티미디어 DRM은 문서 DRM과 달리 파일 개별로 동작하는 경우가 많고 복제방지를 비롯한 녹음 등의 캡쳐방지에 기간제한, 횟수제한 등의 다양한 정책을 지원한다. 문서 DRM보다 어찌보면 더 엄격하게 지원하는 경우도 많다.


DRM 구성


문서 DRM과 멀티미디어 DRM의 구성요소는 많이 다르니 멀티미디어 DRM을 기준으로 설명하겠다. DRM은 기본적으로 DRM을 적용하는 Agent와 인증을 담당하는 Server로 구성된다.


Agent


DRM Agent
는 보통 개인용 PC에 설치되며 대부분이 윈도 기반으로 만들어져있다. Agent MS 오피스 프로그램이나 WinAmp, KMP, 곰플레이어 등의 멀티미디어 재생 프로그램에 직접적으로 접근하여 통제하는 기능을 갖고 있다. , DRM이 걸려있는 파일을 오피스나 플레이어를 통해서 접근할려고 할 때 먼저 Agent를 통해서 인증을 받은 다음에 인증에 통과한 사용자에 한하여 프로그램을 통해서 해당 파일에 접근할 수 있도록 한다.

Agent
가 윈앰프나 곰플레이어 등에서 DRM 파일을 인증받기 위해서는 해당 파일이 접근할 때 플레이어보다 먼저 그 파일의 제어권을 갖고 인증작업을 해야 한다. 그렇게 하기 위해서 보통 Agent에는 API 후킹 등의 다양한 해킹 기법이 많이 사용된다. 물론 DRM이 걸려있는 파일의 제어만을 위해서 사용하는 조건에 한해서 사용된다.

Agent
는 접근된 파일을 인증하기 위해 DRM Server와 통신을 하여 인증과정을 거치게 되며 DRM의 종류에 따라서 틀리지만 보통은 DRM Server에서 해당 파일의 정책정보를 가져와서 Agent가 정책정보를 적용시키는 과정을 거치게 된다. 정책정보에 따라서 이 파일의 접근을 허용할지 안할지 판단하며 정책까지 통과하면 그 이후에 플레이어에 제어권을 넘겨주는 방식을 취한다.


Server


DRM Server
Agent에서 온 인증정보를 확인하는 작업을 한다. ID와 암호로 인증하는 경우도 있고 아니면 해당 PC의 내부적인 정보(PC의 맥정보 등)를 이용하여 인증하는 경우도 있다. 이렇게 다양한 인증방법으로 인증정보가 들어오면 DRM Server는 내부에 있는 인증 DB 서버에서 해당 값을 가져와서 확인한 다음에 인증이 통과되면 정책정보를 또 가져와서 Agent에 전달하는 역할을 한다.


DRM 파일의 구성


DRM
이 적용되어있는 파일은 일반 파일과는 달리 암호화되어있는 경우가 많다. , 파일 자체가 조작되어있기 때문에 그 자체만으로는 어떤 프로그램을 사용하던 사용할 수 없는 구조다. 그래서 Agent를 통해 인증된 사용자에 한해서 암호화된 내용을 복호화하여 원본으로 만들어 플레이어에 넘기는 방식을 사용한다.

DRM
파일의 인증정보는 보통 DRM 파일의 헤더부분에 있지만 특별한 DRM 솔루션(테르텐의 미디어셀, Device-Wall )은 풋터라 하여 파일의 끝부분에 인증정보를 넣는 경우도 있다. Agent는 해당 DRM 파일의 인증정보를 ID/PW와 함께 Server에 보내 인증확인을 받은 다음에 정책정보를 통해 정책을 적용한다.

일반적으로 DRM에서 사용하는 암호화 알고리즘은 AES 128bit. 현존하는 암호화 알고리즘 중에서 가장 안전하면서 강력한 알고리즘으로 알려져 있기에 다수의 DRM 솔루션이 사용하는 암호화 알고리즘이다. , DRM에서 가장 중요한 것은 알고리즘이 깨질리가 없으니 암호화 키 관리가 되겠다. 키만 잘 관리하면 DRM이 깨질 가능성은 거의 없다고 본다(물론 멀티미디어 DRM에서는 플레이어의 플러그인을 통해서 복호화된 데이터를 따로 저장하는 방법을 이용해서 해킹하곤 한다).


DRM이 왜 필요한가?


DRM
은 사용자가 아닌 회사를 위한 기술이다. 어떤 컨텐츠에 대해서 그 사용자를 믿을 수 없으니 중앙에서 통제하겠다고 만들어낸 것이 DRM이다. 그렇기에 멀티미디어 DRM이 적용된 파일은 해당 사용자만 사용하거나 해당되는 MP3P, PMP 등에서만 사용할 수 있도록 제한을 둔다. 사용자는 내가 구매한 컨텐츠를 맘대로 활용도 못하니 무척이나 답답하게 만드는 기술이 바로 DRM이다.

DRM
이 각광을 받고 있는 이유는 사회 내부적으로 사회의 양심을 믿지 못해서이기 때문이다. 예를 들어 어떤 음악을 만든 작곡가가 자신의 음악을 정당한 가격에 팔려고 내놓았는데 어떤 사용자가 그것을 사서 무료로 뿌려버리면 그 작곡가는 사간 한명의 사용자에게만 가치를 얻은 것이고 나머지로 공짜로 뿌려진 다른 사용자들에게 대해서는 가치를 못얻은 꼴이 되어버린다. 그래서 다른 사용자들이 무상으로 이용하지 못하도록 사용자 제한을 걸어버리는게 DRM 기술이다. 작곡가 등의 CP(컨텐츠 생산자)들이 사회의 양심을 믿지 못하기 때문에 보안장치를 해놓는 것이다.

또한 CP들은 DRM의 다양한 정책적용을 통해서 금액산출을 달리하여 수익성을 확보할 수 있다. , 어떤 곡을 다운받아서 듣게 만드는데 10, 한달, 1, 평생이라는 레벨을 정해서 그 기간에 따라서 다운로드 가격을 달리하면 사람들은 가격에 맞게 그 음악을 듣게 만들고 그 이후에 또 듣고 싶으면 또 사게 만든다는 것이다. 예를 들어 10일짜리는 500원이고 1달은 1500원이고 1년은 만원이고 평생은 15000원이라고 한다면 사용자는 자신의 금전상황 및 그 음악의 수준에 따라서 구입하며 제한기간 이후에 또 듣고 싶으면 그만큼의 금액을 지불해야 한다는 것이다. 이는 CP들의 권리를 충족시켜주는 것과 동시에 사용자들의 짜증도 같이 유발하는 상황도 연출되나 일단 사회에서 요구되는 수익모델이니 어쩔 수 없는 듯 싶다.

DRM
은 컨텐츠를 생상하는 생산자 입장에서는 자신들의 권리를 보호할 수 있는 보호장치로, 이통사와 같은 유통업체에서는 수익을 잡아내는 주요 수익원으로 이용되고 있다. 다만 앞서 얘기했다시피 철저히 회사를, CP를 위한 기술로 사용자들에게 불편을 감수하라는 기술이기 때문에 친사용자적인 기술은 아니다. 그래서 최근 음원에 대해서는 DRM Free 정책이 힘을 받고 있는 중이며 음제협등이 이와 싸우고 있는 상황이기도 하다.

[출처] DRM 이란|작성자 TryAgain

 

출처 : http://knol.google.com/k/drm-digital-rights-management#

[출처] DRM 이란|작성자 TryAgain


'프로그래밍 > It 용어' 카테고리의 다른 글

Spring (스프링)  (0) 2016.07.11
스택(Stack)  (0) 2016.07.08
잡다한1  (0) 2016.07.08
잡다한  (0) 2016.07.08
DNS & IP 주소체계  (0) 2016.07.08
Posted by 당구치는 개발자
|
Documentum 2016. 7. 8. 11:01

0123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104



'Documentum' 카테고리의 다른 글

Document Query Language ( DQL )  (0) 2016.07.07
Webtop & DA 5  (0) 2016.07.07
Webtop & DA 4  (0) 2016.07.07
Webtop & DA 3  (0) 2016.07.07
Webtop & DA 2  (0) 2016.07.07
Posted by 당구치는 개발자
|