d라이브러리









당신을 '컴퓨터 도사'로 만드는 OLE

윈도우의 모든 프로그램은 클립보드를 통해 데이터 공유가 가능하다. 한 차원 높은 데이터 공유를 실현하기 위한 윈도우의 고급기능 OLE를 살펴보자.

전형적인 컴퓨터 작업의 경우를 생각해보자. 보통 어떤 일을 처리하기 위해서는 먼저 근거가 되는 자료가 있어야 한다. 컴퓨터를 이용하지 않는 경우라면 파일이 담겨있는 서류 캐비닛을 뒤져 그것을 꺼내어 놓고 작업을 하겠지만 컴퓨터로 일을 처리한다면 아마도 데이터베이스를 실행시켜 자신이 원하는 조건을 만족하는 레코드를 뽑아낼 것이다. 이렇게 추출해낸 자료는 그 자체로는 만족스럽지 못한게 대부분이다.

그래서 이를 분석해 어떤 규칙성이나 경향성을 찾아낼 필요가 있는데, 특히 수치로 된 자료를 분석하기 위해서는 스프레드시트가 필요하다. 스프레드시트를 이용하면 수치의 합계나 평균 등 간단한 연산에서부터 편차나 분산과 같은 통계함수의 처리까지 다양한 자료를 처리할 수 있다. 특히 수치를 그래프로 시각화한다면 일견 무의미한 수의 나열과 같아 보이는 자료가 갑자기 어떤 표정을 띠어감을 알 수 있을 것이다.

그렇지만 여기서 모든 일이 끝나는 것은 아니다. 지금까지 자료를 수집하고 분석한 결과를 일목요연하게 표현하는 것이 최종적인 일로 남는다. 이 일을 하는데 가장 적합한 것은 뭐니뭐니 해도 워드프로세서라고 할 수 있다.

이렇듯 현실의 일을 컴퓨터로 처리하기 위해서는 몇개의 프로그램이 순차적으로 요구되며 한 프로그램에서 만들어낸 자료를 다음 프로그램으로 넘겨줘야한다.

답답하기만 한 도스의 자료교환

만약 이런 일을 도스하에서 하게 된다면 다음과 같은 시나리오를 생각해볼 수 있다. 우선 컴퓨터를 켜고 도깨비 한글을 띄운다. 완성형이든 조합형이든 아무것이나 지장은 없지만 최종적으로 한글로 출력물을 만든다면 처음부터 조합형으로 맞춰놓고 사용하는 것이 무난하다. 아무튼 도깨비를 사용하는 이유는 보통 많이 사용하는 디베이스(dBaseⅢ+)나로터스 1-2-3에 한글을 입출력하기 위해서다.

다음은 디베이스를 실행시킬 차례다. 데이터베이스 프로그램이 실행되면 자신이 원하는 파일을 열어 원하는 부분을 뽑아내 파일로 저장한다. 이때 사용자는 이 파일명을 반드시 기억해야 한다. 그 다음에는 디베이스를 끝낸 후 디렉토리를 바꾸어 로터스를 실행시킨다. 로터스가 실행되면 디베이스에서 저장된 파일을 '수입(Import)'한다. 여기서 '수입'이라는 용어를 사용한 이유는 로터스를 사용해 만든 데이터 이외의 모든 파일은 '파일 열기(Open)' 명령으로 열려지지 않기 때문이다. 하지만 폭스프로와 같은 고급 데이터베이스프로그램을 사용해 저장한 파일이라면 그나마 수입해 들여올 수도 없다.

일단 로터스로 읽은 자료는 로터스의 여러가지 기능을 활용해 분석이 가능하다. 그렇지만 여기서는 영문 로터스로 작성한 그래프에 한글입력이 불가능하다는 문제에 직면한다. 따라서 한글을 영어로 번역해 집어넣어야만 그래프를 작성할 수 있다.

로터스에서 분석한 내용을 파일로 저장하기 위해서는 다음 차례인 워드프로세서를 의식하지 않을 수 없는데, 워드프로세서로는 흔히들 사용하는 한글을 사용하기로 한다. 하지만 워드프로세서를 사용하기 위해서는 몇가지 고려할 점이 있다. 도깨비를 한글 입출력을 위해 사용했던 이제까지와는 달리 한글은 일단 자체의 한글 입출력 기능을 이용하므로 여태까지 사용해왔던 도깨비가 완성형으로 사용되었는지 조합형으로 사용되었는지를 확인해야 한다.

만약 완성형을 사용했다면 한글 2.0버전 이하에서는 불러들일 수가 없다. 한글이 조합형을 사용하고 있으므로 도깨비도 조합형으로 맞추어 사용해야 하기 때문이다. 한글로 번역된 디베이스를 쓸 경우 무조건 완성형으로만 입력해야 하는 경우가 대부분인데 이때에는 카멜레온이나 한글의 코드변환기를 이용해 완성형 파일을 조합형 파일로 변환하는 작업을 해야 한다.

다음에 고려해야 할 문제는 로터스 1-2-3에서 그린 그래프를 한글로 불러들일 수가 없다는 점이다. 따라서 하드카피 프로그램(화면에 있는 내용을 그대로 그림 파일로 만들어 주거나 프린터로 출력해주는 프로그램)을 이용해 한글에서 읽어들일 수 있는 그림 형식으로 만들어 주거나, 아니면 문서 내에 그래프 들어갈 자리를 비워두었다가 로터스에서 출력한 그래프를 워드프로세서로 출력한 문서에 오려 붙이는 수밖에 없다.

상황이 바뀌어 만약 한글로 입력한 주소록과 같은 문서 파일을 디베이스와 같은 응용프로그램에서 사용해야 한다면 어떨까? 이 때에는 한글로 작성한 파일을 디베이스가 받아들일 수 있는 파일 형식(File Format)으로 저장해야만 하는데, 이 방식을 아스키 포맷이라고 한다. 아스키 포맷으로 저장하는 모든 문서파일은 호환성을 획득한다. 하지만 글자꼴이나 문단 모양 등 자신의 고유한 속성은 잃는다.

그런데 만약 처음으로 사용하였던 디베이스에 착오가 있다면 이 자료를 이용한 로터스에도 문제가 생기고 최종 출력물인 한글 문서에도 문제가 생길 수밖에 없다. 이럴 때에는 아무리 도사라 하더라도 일일이 관련 파일을 모두 열어서 하나하나 다 같이 고쳐주어야 한다. 왜냐하면 컴퓨터는 데이터들 사이에 존재하는 연관성을 전혀 인식하지 못하기 때문이다.

이렇듯 도스에서의 업무처리는 많은 문제점을 안고 있다. 한가지의 일을 처리하기 위해서 몇개의 응용프로그램을 열었다 닫았다 해야 함은 물론이고 입력된 한글 코드에 일일이 신경을 써야 하며, 하나의 응용프로그램에서 저장한 파일이 다른 응용프로그램에서 읽어들일 수 없을 때도 적지 않다.

결국 답답하기 그지 없지만 대부분의 사람들은 최종적인 과정만 워드프로세서로 처리하기로 마음먹고 자료의 수집이니 분석이니 하는 과정은 손으로 처리하는 경우가 더 많을 것이다. 이런 것이 보통이다보니 모든 것을 컴퓨터로 처리하는 사람은 자연 '컴퓨터 도사'로 호칭되고 컴퓨터의 달인(達人)인 것처럼 대접받게 마련이다.
 

서버인 액셀에서 시트를 작성한다.
 

한글 형식 선택도 불필요

하지만 윈도우라면 상황은 전혀 다르다. 거의 모든 윈도우 응용프로그램은 파일(FILE)메뉴와 편집(EDIT)메뉴를 공통으로 가지고 있는데 편집메뉴에는 잘라내기(Cut), 복사(Copy), 붙여넣기(Paste)등의 서브메뉴(Sub-menu)를 가지고 있으므로 이것을 이용하면 자료교환이 간단히 이루어진다. 즉 몇 개의 프로그램을 동시에 실행시켜 놓고 자신이 원하는 자료를 마우스로 선택한 후 메뉴에서 '잘라내기(Cut)'나 '복사하기(Copy)'를 실행시킨 후 옮겨가고자 하는 다음의 응용 프로그램에서 '붙이기(Paste)'를 하면 간단하게 자료전달이 이루어진다.

물론 이 때 한글 코드의 통일성에는 전혀 신경쓸 필요가 없다. 모든 윈도우 응용 프로그램은 완성형 한글만을 사용하므로 조합형이니 완성형이니 하는 선택 문제가 생기지 않는다.

두번째로 옮겨지는 대상이 수치이든 글자이든 그림이든 심지어 소리이든 아무런 관계가 없다. 글자는 받아주고 그림은 문전박대하는 일은 발생하지 않는 것이다.

세번째로 글자모양이나 문단모양은 하나의 응용 프로그램에서 정해둔 그대로 다른 응용프로그램에 전달되므로 아스키 포맷으로 저장했을 때와 같은 손실은 존재하지 않는다. 밑줄친 글자는 밑줄친 대로, 18포인트의 돋움체는 18포인트의 돋움체 그대로 교환이 된다. 따라서 윈도우 사용자는 아스키 포맷이니, 조합형과 완성형이니, 응용프로그램의 호환능력이니 하는 복잡한 컴퓨터 용어와 개념들을 몰라도 된다. 또한 도스에서처럼 응용 프로그램 하나하나를 각각 열었다 닫았다, 파일을 매번 저장했다 다시 불렀다 하는 번거로움 없이 하나의 데이터를 여러개의 응용 프로그램사이에 공유할 수 있어 도스전성 시대의 '컴퓨터 도사'칭호를 단숨에 얻게 된다.
 

서버에서 필요한 부분을 선택한 후 복사(COPY)명령을 내린다.
 

클립보드-자료교환의 연결 고리

우리가 윈도우용 응용 프로그램에서 특정한 부분을 마우스로 선택한 후 이를 대상으로 복사(Copy)명령이나 잘라내기(Cut)명령을 내리면 컴퓨터에는 외견상 아무런 변화가 없어 보인다. 하다못해 복사나 잘라내기가 완료되었다는 메시지조차도 나오지 않는다. 그러나 아무데나 커서를 이동시켜 붙이기(Paste)를 해보면 오려둔 내용이 어디엔가 들어있다가 자신이 지정한 위치에 불려나온다는 것을 실감할 수 있다.

물론 이와 같은 일은 도스용 응용프로그램에서도 마찬가지다. 컴퓨터 상에서 이와 같이 사용자가 일시적으로 오려둔 내용을 저장하고 있는 곳을 '임시기억장치(Buffer)'라고 하는데, 도스용 응용프로그램에서는 사용자가 이 영역에 접근할 수 없다. 그리고 임시기억장치에 들어있는 내용은 하나의 응용 프로그램을 종료하는 순간 사라져 버린다. 하지만 윈도우에서는 사용자가 임시기억장치에 들어 있는 내용을 볼 수도 있고 디스크상에 별도로 저장할 수도 있다. 이것이 바로 윈도우의 기본 그룹에 들어 있는 클립보드다.

하나의 응용프로그램에서 잘라내기나 복사를 실행하면 그 내용은 클립보드 상으로 들어가게 되는데 그 내용은 다음 번에 실행하는 잘라내기나 붙이기 명령에 의해서 새로운 내용이 현재의 클립보드에 있는 내용을 밀어내기 전까지 계속 유지된다. 또한 하나의 응용프로그램 상에서 오려두기나 복사하기를 실행한 후에 그 응용 프로그램을 종료하는 것과 상관없이 클립보드에 한번 복사된 내용은 그대로 유지된다. 이 내용은 윈도우를 종료하지 않는 한 계속 클럽보드에 남아 있다. 한번 클립보드로 복사된 내용은 붙이기를 몇번하더라도 고갈되지 않는 것이다.

애프터서비스가 철저한 OLE

어떤 나라의 모든 상인들이 한번 판매한 물건에 대해서는 어떤 일이 있어도 교환 환불 고장수리 등 사후봉사를 해주지 않는다고 하자. 아마 이런 나라라면 아무도 물건을 사고 싶지 않을 것이며 거래는 거의 없어지고 자급자족 시대로 가게 될 것이다. 도스용 응용 프로그램 사이의 자료교환은 이와 같이 애프터서비스가 말살된 거래와 같다. 하나의 프로그램에서 작성된 데이터가 일단 다른 프로그램으로 삽입됐다면 그 내용이 잘됐건 잘못됐건 그것을 삭제하고 처음부터 다시 만들기 전까지는 내용 수정이 불가능하다.

이와는 달리 윈도우에서는 자료의 교환을 매개로 두개의 응용프로그램 사이에 특수한 관계가 수립된다. 윈도우에서는 두개의 응용프로그램이 있어서 하나의 프로그램에서 작성된 데이터를 다른 프로그램으로 복사하거나 옮겨올 때 원 데이터를 작성한 프로그램은 서버(Server:공급자) 프로그램, 데이터를 받는 입장에 있는 프로그램을 클라이언트(Client:고객 또는 수요자) 프로그램이 되는 것이다. 또한 거래의 대상이 되는 부분, 즉 그림이든 텍스트든 아니면 목소리든 음악이든 하나의 응용프로그램에서 작성돼 다른 응용프로그램으로 넘겨지는 내용을 개체 또는 객체라고 하는데, 이는 거래의 대상이 되는 상품과 같다.

이 개체(Object)를 중심으로 응용 프로그램간에 공급자와 수요자의 관계가 맺어져 자료를 보다 원활하게 변경시킬 수 있는 윈도우의 자료 교환 방식을 개체 연결과 포함이라는 뜻의 OLE(Object Linking and Embedding의 약자로서 올레이라고 읽는다)라고 한다.

소비자 중심의 OLE 방식

윈도우에서 자료교환 방식으로 처음 등장한 것은 OLE가 아닌 DDE(Dynamic Data Exchange:동적 자료 교환)였다. DDE는 마치 상거래에서 물건을 판매한 사람이 주도권을 갖는 관계와 같다. 다시 말해 공급자(서버)와 수요자(클라이언트)가 있을 때 공급자 측에서 자신이 생성한 개체에 내용 변경을 가할 필요가 있어 내용을 변경하면 이것이 수요자 측의 도큐먼트에 포함돼 있는 데이터와 동적으로 연결돼 있다가 그 변화가 수요자에게 반영되는 방식이다. 따라서 수요자 입장에서는 자료의 변경이 요구될 때 스스로 자료 변경을 할 수가 없다. 이점이 개체 연결과 다른 점이다.

자료 변경을 위해서는 공급자가 개체 파일을 열어 내용을 변경해야만 한다. 따라서 클라이언트측 데이터를 변경시키기 위해서는 그 데이터와 동적으로 연결된 서버측 프로그램과 데이터 파일을 기억하고 있어야만 한다. 다소 불편해 보이기는 하지만 서버측의 내용을 바꾸기만 한다면 그 변화는 클라이언트측에 자동으로 반영되므로 도스 프로그램처럼 다시 자료 교환을 처음부터 시작해야 하는 문제는 생기지 않는다.

그러나 DDE방식은 요즈음과 같이 소비자 중심의 시대에는 걸맞지 않는 방식이다. 공급자가 아닌 소비자가 중심이 돼 자신이 원하는 물건을 마음대로 고르고 한번 구매해 간 물건이라도 마음에 들지 않으면 언제라도 바꾸기 위해서는 철저히 고객중심의 거래방식이 도입돼야 한다. 이와 마찬가지로 여러가지 응용프로그램에서 여러 개의 개체를 빌어다가 최종적으로 사용하는 클라이언트 측에서 자신이 포함하고 있는 개체를 마음대로 바꾸거나 변경하도록 주도권을 주는 방식의 자료 교환방식이 OLE다.

OLE가 윈도우3.1에 도입되면서부터 윈도우는 프로그래밍의 새로운 차원으로 환영받고 있는 개체지향바람을 프로그래머 수준에서 사용자 수준으로까지 대중화시켰다.

더블클릭만으로 개체 수정 끝

OLE는 개체의 연결과 포함이라는 두가지 상이한 측면으로 이루어져 있다. 우선 '개체연결'이란 DDE에서 발전한 개념으로서 서버 프로그램과 클라이언트 프로그램이 긴밀히 연결돼 서버측에서의 변화가 그대로 클라이언트측에 반영되는 것을 말한다. 연결은 서버에서 클라이언트로 개체를 넘겨주지 않는다. 그 개체는 서버 프로그램에 소속된 채로 남아있고 클라이언트에는 단지 개체가 어디에 있는지에 대한 연결정보만이 들어 있을 뿐이다. 따라서 클라이언트에서 연결된 개체를 편집하면 서버측의 개체 내용이 변경되고, 이때 하나의 서버에 있는 개체가 여러 개의 클라이언트와 연결돼 있다면 어떤 클라이언트에서 개체를 수정하든 관계없이 연결된 다른 클라이언트의 개체까지도 모두 자동적으로 갱신된다.

개체 연결 방식은 자료저장에 있어서 공통의 개체를 하나의 서버에만 저장해 놓고 클라이언트에는 개체에 대한 정보만을 기록해두기 때문에 디스크도 절약할 수 있다. 연결기능을 사용하기 위해서는 서버 프로그램에서 작성한 데이터를 저장한 다음 필요한 부분을 블럭으로 설정해 편집 메뉴에 있는 복사를 선택한 뒤 클라이언트 프로그램을 실행시켜놓고 필요한 위치에서 '연결하여 붙여넣기(Paste Link)'를 실행하면 된다.

여기서 주의해야 할 사항은 단순한 붙여넣기(Paste)로는 개체간의 연결이 안된다는 것이다. 여기까지는 DDE와 다를것이 없는데 개체 연결 방식이 DDE보다 나아진 점은 클라이언트 프로그램에서 마우스를 더블클릭하면 자동으로 서버 프로그램이 실행되어 개체를 쉽게 편집할 수 있게 되었다는 것이다.

'개체포함'이란 서버에서 클라이언트로 개체를 제공할 때 개체 자체를 클라이언트로 완전히 넘겨주는 것을 말한다. 따라서 개체가 서버 프로그램에 따로 저장되어 있다 하더라도 그것은 제공된 개체와 완전히 별개다. 이 경우 클라이언트에 포함된 개체를 편집하면 서버에 원래 있었던 개체는 아무런 영향을 받지 않는다.

그렇다면 개체 포함방식을 사용함으로써 얻는 이점(利點)은 무엇일까? 그것은 개체포함이 어떤 개체를 수정하고자 할 때 언제든지 수정할 수 있도록 개체를 탄생시킨 서버 프로그램에 대한 정보를 함께 저장하는 것을 의미하며, 따라서 개체에 대한 더블클릭만으로 개체의 수정을 가능하게 한다는 것을 의미한다.

개체 포함기능을 사용하기 위해서는 클라이언트측 메뉴에 있는 개체 삽입(Insert Object)메뉴를 이용해 자신이 원하는 서버 프로그램을 일단 실행시켜 개체를 작성한 후 종료(Exit and Return to)를 선택하면 서버에서 작성된 내용이 클라이언트에 포함된다. 개체연결방식이 개체포함방식보다 포괄적이기는 하지만 그렇다고 무조건 개체 연결방식을 사용할 수는 없다. 왜냐하면 클라이언트에서의 변화가 서버측에 영향을 미치지 않아야만 하는 때도 얼마든지 있기 때문이다.

그러나 윈도우용 응용프로그램이 모두 OLE의 서버나 클라이언트로 기능하는 것은 아니다. 예를 들면 '워드'나 '문서작성기' 등은 클라이언트의 기능만을 가지며 워드가 제공하는 벡터방식의 그림도구인 '드로(DRAW)'는 서버기능만을 가지고 있으며 자체로는 파일을 저장할 수 없도록 돼 있다. 한편 엑셀은 서버와 클라이언트 양쪽 기능을 모두 가지고 있다.

편집 메뉴에 개체 연결이라는 메뉴가 있으면 개체 연결이 가능한 클라이언트이며 개체삽입이라는 메뉴가 있으면 개체 포함이 가능한 클라이언트다. 또 파일메뉴에 새로 고침(Update)이 있으면 이 응용프로그램은 서버로서 작동한다.
 

서버프로그램에서 클라이언트 프로그램으로 정보가 전달됐다.
 

이 기사의 내용이 궁금하신가요?

기사 전문을 보시려면500(500원)이 필요합니다.

1993년 10월 과학동아 정보

  • 이형열 대표

🎓️ 진로 추천

  • 컴퓨터공학
  • 정보·통신공학
  • 소프트웨어공학
이 기사를 읽은 분이 본
다른 인기기사는?