COM / ActiveX / OCX란 무엇인가 - 차이와 관계를 정리해서 해설
· 小村 豪 · COM, ActiveX, OCX, OLE, Windows 개발, 레거시 기술
COM / ActiveX / OCX라는 3가지 단어는 Windows의 레거시 안건에서 대체로 세트로 나옵니다.
- 벤더로부터
.ocx가 전송되어 온다 - Access나 VB6의 화면에 수수께끼의 부품이 타고 있다
- 「이것은 COM입니다」라고 말한 직후에 「ActiveX네요」라고 듣는다
- 그 후
regsvr32, 32bit / 64bit, IE 모드 같은 단어가 일제히 달려온다
이 흐름, 대체로 대화의 노면이 갑자기 진흙탕이 됩니다.
용어가 가까운 데다가 역사적으로도 꽤 겹치기 때문입니다.
다만 실무에서는 여기를 나누어 이해할 수 있으면 조사, 이전, 설명의 용이함이 꽤 바뀝니다.
이 글에서는 COM이란 무엇인가, ActiveX란 무엇인가, OCX란 무엇인가를 차이와 관계가 보이는 순서로 정리합니다.
특히 어느 것이 토대이고, 어느 것이 부품이고, 어느 것이 파일인가를 분명히 합니다.
1. 먼저 결론(한마디로)
먼저 거칠지만 도움이 되는 표현으로 하면 이렇습니다.
- COM은 토대입니다. Windows에서 컴포넌트끼리가 주고받기 위한 바이너리 계약입니다
- ActiveX는 COM 기반의 부품 문맥입니다. 특히 호스트에 매립해 쓰는 컨트롤로 나오기 쉽습니다
- OCX는 ActiveX 컨트롤에서 자주 보는 구현 파일입니다. 파일 확장자로 조우합니다
- 즉 COM = 구조, ActiveX = 부품의 문맥, OCX = 파일 정도로 잡으면 꽤 정리하기 쉬워집니다
ActiveX = 옛날 브라우저의 위험한 것이라는 기억은 반은 맞고 반은 부족합니다. ActiveX는 브라우저 전용이 아닙니다OCX = ActiveX와 거의 동의로 이야기되는 경우가 많지만, 엄밀하게는 개념과 파일 확장자를 섞고 있습니다- 지금 신규 개발에서 주역으로 세울 기술은 아니지만, 기존의 Windows 앱, Office, Access, 기기 SDK, 사내 Web에서는 아직 조우합니다
요컨대, 우선 다음 3가지를 나누어 생각하는 것이 중요합니다.
- 그것은 COM의 이야기인가
- 그것은 ActiveX 컨트롤의 이야기인가
- 그것은 단순히
.ocx파일을 보고 그렇게 부르고 있을 뿐인가
여기가 분명해지면 꽤 안개가 걷힙니다.
2. 이 글에서 말하는 COM / ActiveX / OCX
이 3가지는 실무에서는 종종 거칠게 동거합니다.
그래서 이 글에서는 먼저 의미를 고정합니다.
- COM: Windows의 컴포넌트 모델 그 자체. 인터페이스, GUID, 등록, 호출의 토대
- ActiveX: COM을 기반으로 한, 매립 가능한 컨트롤이나 그 이용 문맥. 실무에서는 특히 ActiveX 컨트롤을 가리키는 경우가 많다
- OCX: ActiveX 컨트롤 구현에서 자주 보는 파일 확장자.
.ocx
조금만 보충하면 역사적으로는 ActiveX라는 말이 좀 더 넓게 쓰인 시기가 있었습니다.
다만 지금의 실무에서 ActiveX라고 말했을 때 곤란한 장소의 대부분은 대체로 컨트롤, 매립, 호스트, 브라우저, 등록 근처입니다.
그래서 이 글에서도 기본은 ActiveX = ActiveX 컨트롤 쪽의 이야기로 진행합니다.
3. 먼저 한 장으로 정리
3.1. 관계도
우선 전체상을 한 장으로 보는 것이 빠릅니다.
flowchart LR
COM["COM<br/>바이너리 계약의 토대"] --> OLE["OLE / Automation<br/>매립·자동화의 구조"]
OLE --> AX["ActiveX<br/>COM 기반의 컨트롤 문맥"]
AX --> CTRL["ActiveX 컨트롤"]
CTRL --> OCX["OCX (.ocx)<br/>구현 파일에서 자주 보는 형태"]
HOST["호스트 / 컨테이너<br/>IE / Access / VB6 / MFC / WinForms"] --> CTRL
여기서 중요한 것은 COM과 ActiveX는 같은 말이 아니다라는 점입니다.
- COM은 토대입니다
- OLE / Automation은 매립이나 자동화를 위한 구조입니다
- ActiveX는 그 위에서 쓰이는 컨트롤 문맥으로 나옵니다
- OCX는 그 컨트롤 구현에서 자주 보는 파일입니다
그래서 ActiveX는 COM을 말하나요라고 물으면 답은 토대는 COM이지만 ActiveX는 COM 그 자체가 아니다가 됩니다.
3.2. 용어의 최단 정리
| 말 | 우선의 이해 |
|---|---|
| COM | 구조, 계약, 토대 |
| ActiveX | COM 기반의 매립 부품의 문맥 |
| ActiveX 컨트롤 | 실제로 호스트에 타는 부품 그 자체 |
| OCX | ActiveX 컨트롤에서 자주 보는 파일 확장자 |
| OLE / Automation | 매립, 자동화, 연계의 구조 |
최단으로 외운다면 이것으로 충분합니다.
- COM은 구조
- ActiveX는 부품의 문맥
- OCX는 파일
4. COM이란 무엇인가
4.1. 한마디로 말하면
COM은 Component Object Model의 약자로, Windows 상에서 컴포넌트끼리가 주고받기 위한 바이너리 계약입니다.
여기서 말하는 바이너리 계약이란 소스 코드의 사정이나 언어 사양이 아니라, 컴파일 후의 형태에서도 약속이 지켜지는 인터페이스를 말합니다.
C++로 만든 부품을 다른 언어나 다른 애플리케이션에서 이용할 수 있는 것은 이 계약이 있기 때문입니다.
실무의 감각에 맞추면 COM은 편리한 라이브러리의 배포 방식이라기보다 구현을 숨기고 계약만으로 연결하는 구조입니다.
예를 들어 다음 같은 것들이 COM의 전형입니다.
IUnknown에 의한 참조 카운트QueryInterface에 의한 인터페이스 탐색IID나CLSID같은 GUID 기반 식별- DLL에 의한 인프로세스 이용
- EXE에 의한 아웃프로세스 이용
요컨대 COM은 Windows의 부품화 문화의 토대입니다.
4.2. COM에서 중요한 것
기본만 잡는다면 COM에서는 다음이 중요합니다.
- 인터페이스 중심
- 구현보다 먼저 무엇을 공개할지를 정합니다
- GUID에 의한 식별
- 클래스나 인터페이스를 일의적으로 식별합니다
- 호스트와 구현의 분리
- 호출하는 쪽은 내부 구현을 알 필요가 없습니다
- 프로세스를 넘을 수 있다
- 같은 프로세스뿐만 아니라 다른 프로세스의 부품으로서도 쓸 수 있습니다
이쯤이 COM을 단순히 오래된 기술로 끝내지 않는 이유입니다.
꽤 이른 시대부터 계약 기반으로 재이용하는 설계를 확실히 가지고 있었습니다.
5. ActiveX란 무엇인가
5.1. 한마디로 말하면
ActiveX는 COM을 기반으로 한 재이용 가능한 소프트웨어 부품, 특히 호스트나 컨테이너에 매립해 쓰는 컨트롤로 이해하는 것이 이해하기 쉽습니다.
실무에서 ActiveX라고 말하면 꽤 높은 확률로 ActiveX 컨트롤의 이야기입니다.
예를 들어 버튼, 그리드, 그래프, 캘린더, 뷰어, 기기 연계 부품 같은 것이 해당됩니다.
즉 ActiveX는 단독으로 거만하게 서 있는 거대 기술이라기보다 어떤 호스트 안에 매립되어 일하는 부품으로 잡으면 빗나가기 어렵습니다.
5.2. ActiveX는 브라우저 전용이 아니다
ActiveX = Internet Explorer의 그것이라는 인상은 꽤 강합니다.
이것은 틀리지 않지만 그것뿐이 아닙니다.
ActiveX 컨트롤은 예를 들어 다음 같은 장소에서도 쓰여 왔습니다.
- Access 폼
- VB6 애플리케이션
- MFC의 컨테이너
- Office / VBA 주변
- WinForms로부터의 COM 래퍼 이용
- Internet Explorer나 그 호환 운영 문맥
즉 ActiveX는 브라우저 전용 기술이 아니라, Windows 앱 쪽에서도 오래 쓰여 온 부품 기술입니다.
여기가 모르면 사내 Web에서 발견한 ActiveX와 Access 화면에 매립되어 있는 ActiveX를 다른 것으로 보게 됩니다.
실제로는 양쪽 다 꽤 COM 쪽의 친척입니다.
6. OCX란 무엇인가
6.1. 한마디로 말하면
OCX는 ActiveX 컨트롤 구현에서 자주 쓰이는 파일 확장자입니다.
Windows의 현장에서 .ocx를 발견하면 꽤 높은 확률로 매립 컨트롤계의 COM 부품을 의심해도 좋습니다.
예를 들어 다음 같은 장면에서 나옵니다.
- 벤더 SDK의 배포물
- VB6 / Access / MFC의 오래된 프로젝트
- 인스톨러에 포함되는 등록 대상 파일
regsvr32가 필요한 부품
여기서 중요한 것은 OCX는 파일의 형태이지 개념 그 자체가 아닌 점입니다.
그래서 OCX란 무엇인가를 거칠게 말하면 ActiveX 컨트롤의 실체로서 자주 조우하는 파일입니다.
6.2. .dll과 어떻게 다른가
여기도 혼란스럽기 쉬운 곳입니다.
.ocx는 ActiveX 컨트롤임을 꽤 강하게 풍깁니다.dll은 평범한 라이브러리일지도 모르고, COM 서버일지도 모르고, ActiveX 주변의 의존 DLL일지도 모릅니다
즉 .ocx를 보면 꽤 ActiveX 쪽의 이야기지만, .dll을 본 것만으로는 아직 무엇인지 모릅니다.
실무에서 흔한 것은,
vendorcontrol.ocxvendorhelper.dllvendorcore.dll
처럼 늘어서 있고 주역은 OCX, 옆을 DLL이 받치는 패턴입니다.
그래서 OCX = DLL의 일종인가라고 물으면 감각으로는 가깝지만, 조사의 장에서는 역할을 나누어 보는 것이 안전합니다.
7. 차이를 표로 정리
| 말 | 무엇인가 | 실무에서 자주 보는 단어 | 흔한 실체 |
|---|---|---|---|
| COM | 컴포넌트 모델, 바이너리 계약의 토대 | IUnknown, QueryInterface, CLSID, IID, Apartment |
.dll, .exe, 등록 정보 |
| ActiveX | COM 기반의 컨트롤 문맥 | 컨테이너, 매립, 프로퍼티, 이벤트 | ActiveX 컨트롤 |
| ActiveX 컨트롤 | 실제로 배치되는 재이용 부품 | 그리드, 캘린더, 뷰어, 기기 연계 | .ocx, .dll |
| OCX | ActiveX 컨트롤에서 자주 보는 파일 확장자 | regsvr32, 도구 상자, 32bit / 64bit |
xxx.ocx |
| OLE / Automation | 매립이나 자동화의 구조 | Office 연계, 프로퍼티 페이지, 오토메이션 | COM 기반의 각종 기능 |
이 표로 외운다면 우선 이렇습니다.
- COM은 기초 공사
- ActiveX는 그 위에 타는 부품 문화
- OCX는 현장에서 줍는 파일
8. 어디에서 쓰였는가
ActiveX / OCX는 브라우저의 기억이 너무 강해서 옛날 Web 기술로 보이기 쉽습니다.
다만 실제로는 더 넓게 쓰여 왔습니다.
예를 들어 다음 같은 장소입니다.
- 데스크톱 앱
- VB6
- MFC / C++
- Access 폼
- Office / VBA 주변
- 브라우저 / 사내 Web
- Internet Explorer에 매립하는 뷰어
- 서명 부품
- 파일 전송 부품
- 주변기기 연계 부품
- 기존 .NET 앱
- WinForms에서 래핑해 쓰는 기존 ActiveX 컨트롤
- 기존 COM 자산을 UI 부품으로 연명하고 있는 케이스
여기서 중요한 것은 ActiveX는 인터넷 전용이 아니다라는 것입니다.
IE에서 화려하게 눈에 띄었기 때문에 Web 기술처럼 보일 뿐, 실태로는 Windows의 매립 부품 기술로 보는 편이 실무에서는 납득하기 쉽습니다.
9. 왜 혼동되기 쉬운가
9.1. 말의 계층이 다른데 같은 대화에 나온다
- COM은 토대의 이야기입니다
- ActiveX는 부품의 문맥의 이야기입니다
- OCX는 파일의 이야기입니다
즉 애초에 계층이 다릅니다.
그런데도 실무에서는 같은 현장에서 동시에 나오므로 대화가 엉망이 되기 쉽습니다.
9.2. ActiveX라는 말이 조금 넓다
COM은 비교적 의미가 고정되어 있습니다.
한편 ActiveX는 역사적으로도 실무적으로도 조금 넓게 쓰입니다.
사람에 따라,
- 컨트롤 그 자체
.ocx파일- IE에서 도는 오래된 부품
- COM 기반의 매립 부품 전반
중 어느 것을 가리키는지가 어긋납니다.
이 시점에서 대화는 꽤 진흙탕이 됩니다.
9.3. .ocx를 본 순간 전부 ActiveX라고 부르고 싶어진다
이것은 마음은 이해합니다.
평소에는 그것으로 대체로 통합니다.
다만 이전이나 조사의 장면에서는,
- 그것은 UI 부품인가
- 어느 호스트에서 도는가
- 등록이 필요한가
- 32bit / 64bit는 어떻게 되어 있는가
- 브라우저 의존이 있는가
를 나누어 보지 않으면 나중에 제대로 넘어집니다.
10. 지금의 실무에서 어떻게 잡아야 하는가
우선 COM / ActiveX / OCX를 발견했다고 해서 바로 전면 부정할 필요는 없습니다.
다만 전부를 같은 온도로 다루는 것도 위험합니다.
브라우저 쪽의 ActiveX 의존
이것은 우선적으로 엄격하게 보는 편이 안전합니다.
- 현대의 브라우저 개발의 주류가 아닙니다
- 호환 운영의 문맥에서는 IE 모드가 화제가 되지만, 이것은 후방 호환을 위한 다리로 보는 편이 좋습니다
- 신규의 전제 기술로 잡는 것은 추천하기 어렵습니다
요컨대 Web 쪽의 ActiveX는 「어떻게 연명할까」보다 「어디서부터 떼어낼까」로 생각하는 편이 현실적입니다.
데스크톱 쪽의 ActiveX / OCX 의존
이쪽은 좀 더 현실적으로 판단할 수 있습니다.
- 기존 호스트 안에서 안정 가동하고 있다
- 배포처가 한정되어 있다
- 벤더 보수나 자사 보수의 전망이 있다
- 등록, 의존 DLL, bitness의 전제가 파악되고 있다
이 조건이 갖춰진다면 남기는 판단은 평범하게 있습니다.
한편으로,
- 32bit OCX를 64bit 쪽에 그대로 로드하고 싶다
- 주변만 .NET화하고 싶다
- 배포와 등록에서 매번 넘어진다
- 브라우저 의존이 남아 있다
이라면 남긴다 / 감싼다 / 교체한다를 나누어 생각하는 것이 안전합니다.
즉 지금의 실무에서는 ActiveX니까 악이 아니라 어디에 경계를 만들까의 문제입니다.
오래된 기술이라기보다 기존 시스템의 접합면으로 보면 다루기 쉬워집니다.
11. 흔한 오해
오해 1: COM = ActiveX
다릅니다.
COM은 토대이고 ActiveX는 그 위에서 쓰이는 컨트롤 문맥입니다.
오해 2: ActiveX = Internet Explorer
다릅니다.
IE에서 유명해진 것은 사실이지만, ActiveX는 브라우저 전용이 아닙니다.
오해 3: ActiveX = OCX
실무에서는 꽤 가까운 의미로 쓰이지만, 엄밀하게는 다릅니다.
ActiveX는 문맥이나 부품의 이야기이고, OCX는 파일 확장자로 조우하는 실체입니다.
오해 4: OCX는 그냥 DLL 아닌가
거칠게 말하면 가깝지만, 조사에서는 거칠게 하지 않는 편이 좋습니다.
.dll만으로는 역할을 읽을 수 없지만, .ocx는 꽤 컨트롤 쪽의 냄새가 납니다.
오해 5: COM은 이미 죽은 기술
적어도 Windows의 세계에서는 그런 표현은 거칠습니다.
표무대에서 조금 내려가 보일 뿐, 설계나 상호 운용의 문맥에서는 지금도 나옵니다.
12. 조사할 때의 체크포인트
COM / ActiveX / OCX를 발견하면 우선 다음을 확인하면 정리하기 쉽습니다.
- 그것은 무엇의 부품인가
- UI 컨트롤인가
- 뷰어인가
- 기기 연계인가
- Office / Access 연계인가
- 어디서 도는가
- Access / VBA인가
- VB6 / MFC인가
- WinForms인가
- IE / IE 모드인가
- 파일과 식별자는 무엇인가
.ocx/.dll/.exe- ProgID
- CLSID
- Type Library
- 등록과 배포는 어떻게 되어 있는가
regsvr32가 필요한가- 의존 DLL은 있는가
- 관리자 권한은 필요한가
- bitness는 맞는가
- 32bit인가
- 64bit인가
- 같은 프로세스에서 돌 필요가 있는가
- 장래 어떻게 다룰 것인가
- 그대로 남길까
- 경계를 만들어 감쌀까
- 교체할까
이쯤을 보지 않고 ActiveX가 있으니까 전부 신규 구현하겠습니다라고 달리면 옛날의 덫을 깔끔하게 밟습니다.
지뢰밭에서 발바닥 건강법을 시작할 필요는 없습니다.
13. 정리
COM / ActiveX / OCX의 차이를 가장 거칠게, 그러나 실무에서 도움이 되는 형태로 말하면 이렇습니다.
- COM은 토대
- ActiveX는 COM 기반의 매립 부품의 문맥
- OCX는 ActiveX 컨트롤에서 자주 보는 파일
즉,
COM은 구조의 이야기ActiveX는 부품의 이야기OCX는 파일의 이야기
입니다.
이 3가지를 나누어 생각할 수 있게 되면,
- 이것은 단순한
.ocx인가 - COM 전체의 문제인가
- 브라우저 의존의 ActiveX인가
- 데스크톱에서 남길 수 있는 부품인가
가 꽤 보기 쉬워집니다.
레거시 기술은 이름이 오래되어서 어려운 것이 아니라 토대, 부품, 파일이 같은 대화에 나와서 까다로운 것입니다.
다만 구조가 보이면 의외로 다룰 수 있는 문제가 됩니다.
14. 참고 자료
- COM이란 무엇인가 - Windows COM의 설계가 지금도 아름다운 이유
- ActiveX / OCX를 지금 어떻게 다룰까 - 남긴다·감싼다·교체한다 판단표
- Component Object Model (COM) - Microsoft Learn
- ActiveX Controls - Win32 apps - Microsoft Learn
- ActiveX Controls - MFC - Microsoft Learn
- ActiveX Control - Access VBA - Microsoft Learn
- What is Internet Explorer (IE) mode - Microsoft Learn
- Use DevTools in Internet Explorer mode (IE mode) - Microsoft Learn
관련 기사
같은 태그를 공유하는 최신 기사입니다. 더 가까운 주제로 지식을 넓힐 수 있습니다.
COM 컴포넌트나 OCX / ActiveX 개발에서 빠지기 쉬운 것 - Visual Studio의 32bit / 64bit, 등록, 관리자 권한의 덫을 정리
COM 컴포넌트와 ActiveX, OCX 개발에서 자주 만나는 0x80040154나 0x80070005를 비트 수, 등록 방식, HKCU와 HKLM 스코프, 관리자 권한이라는 네 축으로 풀어 Visual Studio 2022의 64bit화 시대에...
ActiveX / OCX를 지금 어떻게 다룰 것인가 - 남길지・감쌀지・교체할지 판단표
ActiveX / OCX 자산을 만났을 때 무작정 폐기하지 말고, 그 부품이 무엇을 떠맡고 있는지를 기준으로 남길지・감쌀지・교체할지를 32bit / 64bit, 등록 방식, 브라우저 의존, 벤더 보수까지 함께 따져 판단하는 표를 정리합니다.
Reg-Free COM이란 무엇인가 - 등록 불필요로 COM을 쓰는 구조와, 맞는 장면·맞지 않는 장면
Reg-Free COM은 COM 등록 정보를 매니페스트로 가져 앱 단위 액티베이션 컨텍스트로 해결하는 구조입니다. XCOPY 배포·버전 충돌·롤백을 가볍게 하는 한편, bitness·의존 DLL·TLB·설계 시 참조는 별개임을 정리하고 도입 판단...
COM이란 무엇인가 - Windows COM 설계가 지금도 아름다운 이유
Windows의 COM이 무엇이고 왜 지금도 중요한지, 인터페이스 중심 설계, IUnknown, GUID, 바이너리 호환성, 프로세스 경계를 넘는 재사용이라는 관점으로 정리하여 레거시 자산 활용과 현대적 Windows 개발에서 COM 설계 철학을...
Excel 장표 출력을 어떻게 만들까 - COM 자동화 / Open XML / 템플릿 방식의 판단표
Excel 장표 출력에서 COM 자동화·Open XML·템플릿 차입·기존 VBA 병용을 어떻게 가려 쓸지를 정리합니다. 사용자 PC와 무인 실행, 레이아웃 재사용 같은 요건별로 권장 구성과 빠지기 쉬운 곳까지 짚어 방식 선정의 판단표로 활용할 수...
관련 토픽
이 기사와 가까운 토픽 페이지입니다. 기사를 출발점 삼아 관련 서비스와 다른 기사로 이어집니다.
Windows 기술 토픽
Windows 개발, 장애 조사, 기존 자산 활용에 관한 KomuraSoft LLC 기사를 모은 토픽 허브입니다.
ActiveX 이관
COM / ActiveX / OCX 자산을 유지할지, 감쌀지, 교체할지의 단계적 판단을 정리한 토픽 페이지입니다.
이 주제와 연결되는 서비스
이 기사는 다음 서비스 페이지로 이어집니다. 가까운 입구부터 확인해 주세요.
Windows 앱 개발
상주 처리, 장비 연동, 운영 로그, 유지 보수 가능한 구조가 필요한 Windows 데스크톱 애플리케이션을 지원합니다.
기존 자산 활용 & 이관 지원
COM / ActiveX / OCX 자산, 네이티브 코드, 32비트 의존성을 유지하면서 단계적인 이관 계획을 지원합니다.
저자 프로필
기사 저자의 프로필 페이지입니다.
Go Komura
합동회사 코무라소프트 대표
Windows 소프트웨어 개발, 기술 상담, 장애 조사를 중심으로 재현이 어려운 장애 조사와 기존 자산이 남아 있는 프로젝트에 강점이 있습니다.
공개 링크