개념
정의부터 읽는다
용어 논쟁은 원문 정의를 읽으면 대개 5분 안에 끝난다. ISO/IEC 25010:2023의 정의는 이렇다.
호환성(compatibility) 다른 제품과 정보를 교환하는, 그리고/또는 동일한 공통 환경과 자원을 공유하면서 요구된 기능을 수행하는 제품의 능력
문장이 and/or 로 묶인 두 갈래인 것이 눈에 띈다. 그 두 갈래가 그대로
두 부특성이 된다.
공존성(co-existence) 다른 제품과 공통 환경과 자원을 공유하면서 , 다른 어떤 제품에도 해로운 영향을 주지 않고 요구된 기능을 효율적으로 수행하는 능력
상호운용성(interoperability) 다른 제품과 정보를 교환하고 , 교환된 정보를 상호 사용 하는 능력
비고: 정보는 의미 있는 데이터이며, 정보 교환은 교환을 위한 데이터 변환을 포함한다.
호환성 주특성은 이 둘로 끝난다. 1판(2011)에서도 그랬고 2판(2023)에서도 그대로다. 레슨 2의 대조표에서 확인했듯 호환성은 이번 개정에서 이름도 구성도 바뀌지 않은 특성이다.
두 부특성의 차이 — 방향이 다르다
공존성 "같은 자리에 있어도 서로 방해하지 않는가"
→ 정보를 주고받지 않는다. 그냥 옆에 있을 뿐이다
→ 관심사: 자원 점유, 간섭, 충돌
상호운용성 "주고받은 정보를 서로 쓸 수 있는가"
→ 적극적으로 데이터를 교환한다
→ 관심사: 형식, 의미, 변환한 문장으로 줄이면 공존성은 "안 건드리는가", 상호운용성은 "제대로 건네주는가" 다.
공존성 — 무엇을 검증하는가
공존성은 눈에 잘 안 띄어서 검증에서 자주 빠진다. 그런데 정의를 뜯어보면 확인할 것이 분명하다. 핵심은 "해로운 영향을 주지 않고" 다.
| 공유 자원 | 확인할 것 |
|---|---|
| CPU·메모리 | 우리 제품이 자원을 독점해 다른 제품이 느려지는가 |
| 디스크·I/O | 로그·캐시가 디스크를 채워 다른 제품이 쓸 공간을 없애는가 |
| 네트워크 포트 | 고정 포트를 점유해 다른 제품과 충돌하는가 |
| 파일·레지스트리 경로 | 공용 경로에 쓰거나 덮어쓰는가 |
| 공용 라이브러리·런타임 | 특정 버전을 요구해 다른 제품을 깨뜨리는가 |
| 데이터베이스 | 공용 DB에서 락을 오래 잡아 다른 제품을 막는가 |
| 시스템 설정 | 설치 과정에서 전역 설정을 바꾸는가 |
마지막 두 개가 실무에서 가장 자주 사고를 낸다. 배치 작업이 테이블 락을 길게 잡아 같은 DB를 쓰는 다른 서비스가 타임아웃되는 상황, 설치 스크립트가 시스템 전역 설정을 바꿔 기존 소프트웨어가 죽는 상황이다.
공존성 검증 시나리오 설계
공존성은 우리 제품만 띄워놓고는 절대 검증되지 않는다. 반드시 다른 무언가가 함께 있어야 한다.
[공존성 시험 골격]
1. 공존 대상 목록을 정한다
— 같은 서버·단말에 실제로 함께 설치되는 소프트웨어
— 계약·환경 명세에 명시된 것이 있으면 그것이 1순위
2. 기준선: 대상 소프트웨어만 단독 실행 → 정상 동작과 자원 사용량 기록
3. 우리 제품을 함께 올린다
4. 대상 소프트웨어의 동작과 자원 사용량을 다시 측정
5. 판정: 열화가 허용 범위 이내인가. 기능 실패는 0건인가
6. 반대 방향도 확인: 대상이 우리 제품을 방해하는가6번을 빼먹기 쉽다. 공존성은 양방향 성질이고, 우리가 피해자가 되는 경우도 결함이다.
상호운용성 — 무엇을 검증하는가
정의의 핵심은 "교환하고(exchange), 상호 사용한다(mutually use)" 두 동사다. 데이터가 오갔다는 것만으로는 부족하고, 받은 쪽이 그것을 의미 있게 쓸 수 있어야 한다.
[상호운용성이 깨지는 층]
① 전송 연결·프로토콜·인증
→ 아예 못 붙는다. 가장 알아채기 쉽다
② 구문(syntax) 형식·인코딩·스키마
→ JSON/XML 구조, 필드명, 문자 인코딩, 날짜 포맷
③ 의미(semantics) 같은 필드가 같은 뜻인가
→ "금액"이 부가세 포함인가, 통화 단위는, 반올림 규칙은
→ 가장 늦게 발견되고 가장 비싸다
④ 처리(pragmatics) 순서·상태·재전송
→ 중복 전송 시 어떻게 되는가, 순서가 뒤바뀌면③ 의미 층이 상호운용성 검증의 본론이다. 형식이 맞아서 연동은 "성공"했는데 값의 뜻이 달라서 몇 달 뒤 정산이 틀어지는 사고가 여기서 나온다.
| 의미 층에서 확인할 것 | 예 |
|---|---|
| 단위 | 금액의 통화, 길이의 단위, 시간의 초/밀리초 |
| 시간대·기준 시각 | UTC인가 KST인가, 저장 시각인가 발생 시각인가 |
| 포함 범위 | 부가세 포함 여부, 시작·종료 시각의 경계 포함 여부 |
| 널·빈 값의 뜻 | null 이 "없음"인가 "모름"인가 |
| 코드값 체계 | 상태 코드·분류 코드가 양쪽에서 같은 표를 쓰는가 |
| 정밀도·반올림 | 소수점 자리와 반올림 방향 |
이 목록은 모듈 12에서 배운 계약 테스트(contract testing) 가 다루는 영역과 거의 그대로 겹친다. 계약 테스트는 상호운용성 부특성을 검증하는 구체적 기법 이라고 보면 위치가 정확하다.
이 칸에 들어오지 않는 것
여기가 이 레슨의 핵심이다. 정의 어디에도 "다른 환경에서 동작한다"는 말이 없다.
호환성 칸에 들어오는 것
✓ 같은 서버에 설치된 다른 제품과 자원을 다투지 않는다 → 공존성
✓ 외부 시스템과 데이터를 주고받고 의미대로 해석한다 → 상호운용성
✓ 표준 파일 포맷을 읽고 쓴다 (다른 제품과의 정보 교환) → 상호운용성
호환성 칸에 들어오지 않는 것
✗ 크롬·사파리·엣지에서 화면이 동일하게 보인다
✗ Android 13·14·15에서 모두 동작한다
✗ 태블릿 해상도에서 레이아웃이 깨지지 않는다
✗ Windows·macOS·Linux에서 설치된다
└─ 이들은 전부 '다른 환경에 적응하는 능력' → 적응성 (레슨 4)구분 기준은 하나다 — 상대가 "다른 제품"인가 "다른 환경"인가.
다른 제품과의 관계 → 호환성 (공존성·상호운용성)
다른 환경으로의 이동 → 적응성 (2011 이식성 / 2023 유연성)브라우저는 "다른 제품"처럼 보이지만, 우리 웹 앱 입장에서 브라우저는 우리가 올라타는 실행 환경 이다. 정보를 교환하는 대상이 아니라 우리를 담는 그릇이다. 그래서 적응성이다.
경계가 애매한 사례 판정 연습
실무에서 헷갈리는 것들을 판정해보자.
| 사례 | 판정 | 근거 |
|---|---|---|
| 우리 앱이 카카오 로그인 API와 연동된다 | 상호운용성 | 다른 제품과 정보 교환 |
| 같은 서버의 다른 서비스와 8080 포트가 겹친다 | 공존성 | 공통 자원 공유 시 충돌 |
| iOS 17과 18에서 모두 동작해야 한다 | 적응성 | 다른 실행 환경 |
| 엑셀 파일을 읽고 쓸 수 있어야 한다 | 상호운용성 | 다른 제품과의 정보 교환(포맷) |
| 백신 프로그램이 우리 설치를 차단한다 | 공존성 | 공존 시 해로운 영향 (양방향) |
| 구형 단말에서 메모리 부족으로 느리다 | 적응성 (또는 성능 효율성) | 환경 적응 |
| 우리 SDK를 넣은 앱이 다른 SDK와 충돌한다 | 공존성 | 같은 프로세스 자원 공유 |
| DB를 PostgreSQL에서 MySQL로 바꿔도 동작한다 | 적응성 | 다른 환경 |
| 구 버전 API 클라이언트가 신 버전 서버와 통신된다 | 상호운용성 | 정보 교환 (하위 호환) |
마지막 행이 흥미롭다. "하위 호환성(backward compatibility)"은 일상어로는 호환성이지만, 표준 좌표에서는 상호운용성 이다. 다만 이건 같은 제품의 버전 간 문제라 대체성(replaceability)으로 보는 관점도 있다. 애매한 경우에는 "무엇을 시험했는지"를 항목명에 병기 하면 된다 — 레슨 1의 원칙 그대로다.
측정으로 옮기면 — ISO/IEC 25023
분류를 정했으면 숫자로 잴 차례다. ISO/IEC 25023은 25010의 각 부특성에 대한 측정량을 제공한다. 공존성 측정량 하나를 보자.
공존성 측정량 (CCo-1-G)
X = A / B
A = 해당 제품과 공존할 수 있는 것으로 확인된 다른 소프트웨어 제품의 수
B = 운영 환경에서 공존하도록 명시된 다른 소프트웨어 제품의 총 수단순한 비율이지만, 이 식을 쓰려면 B를 먼저 정의해야 한다 는 점이 중요하다. "공존 대상 목록"이 없으면 측정 자체가 성립하지 않는다. 공존성 시험 골격의 1단계가 바로 이것이었다.
상호운용성 측정량도 같은 구조다 — 명시된 교환 대상·인터페이스 중 실제로 정상 교환된 비율을 본다. 측정량의 상세는 레슨 5에서 다룬다.
사례 — 코드가 한 줄도 안 바뀌었는데 배치가 네 배 느려졌다
온프레미스로 납품하는 리포팅 서버였다. 사내 검증에서 야간 배치는 40분 에 끝났다. 그런데 세 번째 고객사에서 납품 2주 뒤 2시간 50분 으로 늘었다는 연락이 왔다. 그 사이 우리 코드는 한 줄도 바뀌지 않았다.
고객사 서버에는 백신 실시간 검사 와 자산 모니터링 에이전트 가 돌고 있었다. 사내 검증 환경에는 둘 다 없던 것들이다.
| 층 | 무슨 일이 있었나 |
|---|---|
| 우리 제품 | 중간 집계 캐시를 공용 임시 경로에 날짜별로 쌓고 지우지 않았다 |
| 백신 | 새로 생긴 파일을 실시간 전수 검사했다. 2주치가 48만 개 였다 |
| 디스크 | 사용률이 92% 까지 올라 쓰기 지연이 커졌다 |
| 모니터링 에이전트 | 임계 알람 때문에 5분마다 경로를 훑었다 |
| 사내 검증 | "깨끗한 서버"였으므로 끝까지 재현되지 않았다 |
어느 소프트웨어도 규격을 어기지 않았다. 각자 자기 일을 했고, 같은 디스크를 공유한다는 사실만 아무도 시험하지 않았다.
바꾼 것은 셋이다.
- 캐시를 제품 전용 경로 로 옮기고 보존 기간을 7일로 제한했다 — 공용 임시 경로를 떠난 것이 핵심이다
- 납품 가이드에 백신 예외 경로 와 예상 파일 증가량을 수치로 적었다
- 공존성 시험 기준선 환경에 백신이 켜진 서버 를 추가했다
배치는 42분 으로 돌아왔고 디스크 사용률은 11% 에서 정체했다. 이후 납품 3건에서 같은 유형의 장애는 0건 이었고, 그중 1건은 납품 전에 공존성 시험으로 포트 충돌을 먼저 잡았다.
- 공존성 결함은 우리 코드가 안 바뀌어도 생긴다. 회귀 테스트로는 영원히 안 잡힌다
- 깨끗한 검증 환경은 공존성 결함을 숨기는 장치다 — 모듈 7 레슨 3의 환경 패리티와 같은 뿌리다
- 대책의 절반은 코드가 아니라 납품 문서다. 예외 경로와 자원 사용량 명시가 곧 시정 조치가 된다
공존성은 네 시점에서 깨진다
앞의 공유 자원 표가 무엇을 다투는지였다면, 시험 항목을 뽑을 때 더 쓸모 있는 축은 언제 다투는지다.
| 시점 | 전형적 사고 | 시험 항목 |
|---|---|---|
| 설치 | 전역 설정·공용 라이브러리를 덮어쓴다 | 설치 전후 전역 설정 스냅샷 비교 |
| 설치 | 고정 포트를 선점한다 | 그 포트를 쓰는 프로세스가 있는 상태에서 설치 |
| 실행 | 자원을 독점해 옆이 느려진다 | 기준선 대비 열화 측정 |
| 실행 | 공용 DB·파일에 긴 락을 잡는다 | 동시 접근 시 상대의 타임아웃 관찰 |
| 업그레이드 | 공용 런타임을 올려 다른 제품이 깨진다 | 업그레이드 후 다른 제품 을 먼저 확인 |
| 제거 | 공용 구성요소를 같이 지운다 | 제거 후 다른 제품의 기동 확인 |
| 제거 | 흔적을 남겨 재설치나 타 제품 설치를 막는다 | 제거 후 재설치·경쟁 제품 설치 |
마지막 두 행이 거의 시험되지 않는다. 고객에게는 "지워도 멀쩡한가"가 도입 결정 조건이고, 평가판·PoC로 먼저 들어가는 제품일수록 그렇다.
표를 관통하는 요령은 하나다. 각 행의 판정 대상이 우리 제품이 아니다 — 설치 후 볼 것은 옆에 있던 것이 그대로인지다.
섞어 쓰면 무엇이 빠지는가 — 준비물이 다르다
두 부특성을 한 칸에 묶으면 계획서에 한 줄이 남는다. 그 한 줄로는 준비물을 산정할 수 없다.
| 공존성 | 상호운용성 | |
|---|---|---|
| 시험 대상 | 우리 제품 밖 의 소프트웨어 | 상대와의 약속 |
| 미리 있어야 할 것 | 공존 대상 목록과 그 설치본·라이선스 | 인터페이스 명세, 상대 쪽 시험 계정 |
| 협조가 필요한 상대 | 대개 없다. 환경을 우리가 만들면 된다 | 상대 조직. 일정이 최대 변수다 |
| 빠질 때의 증상 | 고객 환경에서만 나는 장애 | 연동은 성공인데 숫자가 틀린다 |
세 번째 행이 역설이다. 공존성은 남의 협조가 필요 없는데도 더 자주 빠진다. 상호운용성은 상대가 있어 일정에 강제로 올라오고, 공존성은 아무도 독촉하지 않는다. 그래서 QA가 스스로 제안하지 않으면 생기지 않는다. 계획서의 호환성 항목 아래가 전부 외부 연동 이면 공존성이 통째로 빠진 것이다. 반대 경우는 거의 못 본다.
선은 하나 그어두자. 적합성 시험과의 층 관계, PICS로 시험 항목을 고르는 절차, 두 제품 사이 기준점에 모니터를 거는 방식 — 즉 시험 유형으로서의 상호운용성 시험 은 모듈 28 레슨 2가 다룬다. 분류가 이 레슨, 수행 절차는 그 레슨이다.
환경마다 공존성이 드러나는 자리가 다르다
모바일. 같은 단말의 다른 앱과 다투는 것은 배터리, 백그라운드 실행 기회, 저장 공간, 알림이다. 쿼터와 제한 규칙은 플랫폼이 판마다 바꾸므로 해당 OS의 최신 개발자 문서로 확인한다. 더 자주 사고를 내는 쪽은 한 단계 안 — 우리 SDK가 고객사 앱에서 다른 SDK와 프로세스를 공유하는 자리 다.
| 충돌 지점 | 증상 |
|---|---|
| 중복 클래스·라이브러리 버전 | 빌드가 깨지거나, 더 나쁘게는 런타임에만 깨진다 |
| 전역 핸들러 선점·초기화 순서 | 크래시 리포터가 둘이면 한쪽만 보고한다. 선후 보장도 없다 |
| 공용 저장 키·전역 HTTP 설정 | 같은 키를 덮거나, 다른 SDK의 통신 동작까지 바꾼다 |
SDK 제품의 공존성 시험은 다른 SDK를 여러 조합으로 넣은 샘플 앱 이 있어야 성립한다. 그 샘플 앱이 공존 대상 목록의 실체다.
브라우저 확장. 여러 확장이 같은 페이지의 같은 DOM에 코드를 주입한다. 둘이 같은 요소를 바꾸면 결과가 설치 순서와 타이밍에 따라 달라진다 — 재현이 가장 어려운 종류다. 자원 쪽은 더 분명하다. 요청 차단 규칙처럼 브라우저가 전역 예산을 두고 설치된 확장 전체가 나눠 쓰는 자원이 있어, 다른 확장이 많이 깔린 사용자에게서만 규칙 일부가 적용되지 않는다. 상한값은 브라우저 판마다 다르니 확장 API 문서 원문으로 확인한다.
엔터프라이즈. 고객사 서버와 PC에는 백신, EDR, DLP, 사내 프록시, 그룹 정책이 이미 있다. 이들은 우리를 방해하는 쪽 으로 작동하는 경우가 많아, 양방향 중 "우리가 피해자"인 사례는 대부분 여기서 나온다.
| 상대 | 전형적 간섭 |
|---|---|
| 백신·EDR | 설치 파일 격리, 실시간 검사로 I/O 지연, 프로세스 주입 차단 |
| DLP·그룹 정책 | 파일 쓰기·클립보드 차단, 레지스트리·실행 정책 전역 고정 |
| 프록시·SSL 검사 | 인증서 체인이 교체돼 TLS 검증이 실패한다 |
이 세 줄이 곧 온프레미스 제품의 공존 대상 목록 초안이다. 고객 환경 조사표에 이것만 넣어도 납품 후 장애가 줄어든다.
실무에서 왜 필요한가
RFP 문장을 정확히 읽는다
레슨 1 과제 3의 문장을 다시 보자.
"제안 시스템은 ISO/IEC 25010의 호환성 요구사항을 충족하여야 하며, 기 구축된 대내외 시스템과의 연계에 문제가 없어야 한다."
앞 절과 뒤 절은 같은 것을 말하고 있다. 뒤 절의 "대내외 시스템 연계"가 곧 상호운용성이다. 즉 이 조항은 브라우저 호환을 요구하는 것이 아니라 연계 시험을 요구 한다.
이 해석이 견적을 바꾼다. 연계 시험은 상대 시스템의 협조 일정 이 최대 변수라, 브라우저 테스트와는 비용 구조가 완전히 다르다. 레슨 1에서 "RFP를 정확히 읽으면 견적이 달라진다"고 한 것이 이 뜻이다.
공존성이 빠진 검증 계획을 잡아낸다
온프레미스로 납품하는 제품, SDK로 배포하는 제품, 에이전트 형태로 서버에 설치되는 제품 — 전부 공존성이 실제 리스크인데 검증 계획에는 거의 안 들어간다. "우리 제품만 깔린 깨끗한 서버"에서만 테스트하고 납품하는 것 이 흔한 패턴이다.
공존 대상 목록을 만들어 제시하는 것만으로 QA의 기여가 명확해진다.
의미 층 검증이 정산 사고를 막는다
상호운용성에서 형식만 맞추고 의미를 안 맞추면, 연동은 성공하고 숫자는 틀린다. 그리고 그 사실은 보통 월말 정산이나 감사 때 발견된다. 단위·시간대·포함 범위 확인은 연동 초기에 30분이면 끝나는 일이다.
채용시장에서의 위치
표준 용어를 "아는지"는 면접에서 잘 묻지 않는다. 묻는 것은 그 구분이 시험 설계를 어떻게 바꿨는지 다. 호환성은 그 차이가 가장 선명한 주제다.
| 질문 | 약한 답 | 강한 답 |
|---|---|---|
| 호환성 테스트 경험을 말해 보세요 | 크롬·사파리·엣지에서 화면을 확인했다 | 그렇게 부르는 것은 25010 기준으로 적응성이고, 표준상 호환성은 공존성과 상호운용성이다. 둘을 각각 어떻게 했는지 말한다 |
| 공존성은 어떻게 검증했습니까 | 다른 앱과 함께 깔아서 돌려 봤다 | 공존 대상 목록을 만들고 상대 단독 기준선을 잡은 뒤 공존 상태의 열화를 측정했다. 반대 방향도 봤다 |
| 상호운용성 통과 판정의 근거는 | 연동 테스트가 모두 성공했다 | 전송·구문·의미·처리 네 층으로 나눠 보고, 의미 층에서 단위·시간대·반올림을 명세와 대조했다 |
| 호환성 결함을 놓친 사례가 있습니까 | 없다 | 고객 환경에만 백신이 있어 I/O 경합이 났다. 이후 기준선 환경을 고객 환경에 맞췄다 |
| RFP의 호환성 요구를 어떻게 견적합니까 | 브라우저 조합 수로 산정한다 | 연계 시험으로 읽는다. 상대 조직 협조 일정이 최대 변수라 비용 구조가 다르다 |
가장 변별력이 큰 질문은 네 번째다. "놓친 사례"에 "없다"로 답하면 공존성을 시험해 본 적이 없다는 뜻으로 읽힌다. 공존성 결함은 깨끗한 환경에서는 아예 나오지 않으므로, 놓친 경험이 있다는 것 자체가 그 환경을 벗어나 본 증거 다. 상대 소프트웨어 이름과 측정값까지 붙으면 반박되지 않는 답이 된다.
두 번째 질문도 변별력이 높은데 이유가 다르다. "함께 깔아 돌려 봤다"는 답은 기준선과 판정 기준이 없다 는 사실을 그대로 노출한다. 기준선, 열화 측정, 양방향 — 이 세 단어가 들어가면 절차로 수행해 본 사람이다. 이 구분이 돈이 되는 자리는 온프레미스 납품 제품, SDK·라이브러리 제품, 고객 환경이 통제되지 않는 분야 의 공고다.