결제 화면 테스트 케이스에서 약관 항목을 봤다. 항목이 여덟이고 그중 몇에만 조건이 붙어 있다.
Table of contents
Open Table of contents
상황 — 약관 항목과 붙은 조건
항목은 이렇다.
구매조건 확인 및 결제 진행 동의
개인정보 수집·이용 및 제3자 제공 동의
결제대행서비스 이용약관 동의
전자금융거래 기본약관
개인정보 수집 및 이용동의
개인정보 제공 및 위탁동의
고유식별번호 수집 및 동의
통신과금서비스 이용약관
이 중 고유식별번호 수집 및 동의 와 통신과금서비스 이용약관 의 기대 결과 칸에 조건이 적혀 있다.
고유식별번호 수집 및 동의
→ 실시간 계좌이체 / 휴대폰결제 시, 노출
통신과금서비스 이용약관
→ 휴대폰결제 시, 노출
실시간 계좌이체 와 휴대폰결제 라는 결제 수단에 따라 노출이 갈린다는 뜻이다.
조건이 안 붙은 나머지 여섯은 항상 나오는 것으로 읽힌다. 고유식별번호 수집 및 동의 처럼 조건이 붙은 것만 사용자가 무엇을 고르느냐에 따라 달라진다.
기대 결과 칸에 조건이 적혀 있다는 것 자체가 눈에 걸린다. 노출 조건은 화면 명세 쪽에 있어야 할 것이 시험 문서로 흘러 들어온 모양이다.
왜 나뉘어 있는가
정리하면 두 무리다.
공통 약관 항상
수단별 약관 그 수단일 때
공통 약관 과 수단별 약관 을 한꺼번에 보여 주면 화면이 단순해진다.
그런데 각 약관이 필요한 상황이 애초에 다르다.
통신과금 관련 → 통신사 결제일 때 필요
고유식별번호 → 본인 확인이 필요한 수단일 때
쓰지도 않는 항목에 동의한 기록이 남는 것이 오히려 문제가 될 수 있다. 카드로 결제한 사람에게 통신과금서비스 이용약관 동의가 남아 있을 이유가 없다.
반대로 필요한 약관을 안 받으면 그쪽이 더 큰 문제가 된다. 휴대폰결제 를 고른 사람에게만 그 약관을 띄우는 구조가 그래서 필요했을 것이다.
비교 — 코드에 둘까 자료로 둘까
이 조건을 어디에 둘지는 갈린다.
[하드코딩] if 결제수단 == 휴대폰 then 통신과금 약관 노출
[데이터] 약관 테이블에 적용 수단 컬럼
결제 수단이 몇 개 안 되면 if 를 쓰는 앞쪽으로도 된다.
수단이 늘거나 약관이 늘면 그 if 가 계속 손대야 하는 자리가 된다. 어떤 수단에 어떤 약관이 필요한지를 terms 표로 두면 행을 고치는 것으로 끝나고 배포가 필요 없다.
앞서 정보고시 항목을 볼 때와 같은 갈림길이다.
[조건이 적고 안 바뀜] 코드에
[조건이 늘고 바뀜] 데이터로
약관은 법이 바뀌면 늘어난다. 전자금융거래 기본약관 처럼 이미 들어와 있는 것들이 그 결과로 보이고 늘어나는 쪽이 분명하면 자료로 두는 편이 맞아 보인다.
주의 — 모두 동의의 반대 방향
약관 영역에 모두 동의 체크박스가 있다.
모두 동의합니다 체크 → 하위 약관 모두 체크
모두 동의합니다 해제 → 하위 약관 모두 해제
모두 동의합니다 하나가 하위 여덟을 움직인다.
여기서 걸리는 것이 있다.
[적혀 있음] 상위를 체크하면 하위가 체크됨
[안 적힘] 하위 하나를 해제하면 상위는?
보통 이런 화면은 하위 하나를 끄면 상위도 꺼지고 하위가 전부 켜지면 상위도 켜진다.
양방향인 동작인데 한 방향만 적혀 있으니 빠뜨린 것으로 보인다. 자주 하는 동작은 눈에 띄고 하나만 빼고 동의하는 경우는 잊기 쉽다.
모두 동의합니다 를 켠 뒤 하나를 끄면 상위가 켜진 채로 남는 구현도 있을 수 있다. 그 상태를 본 사용자는 전부 동의한 것으로 읽을 테니 이 케이스가 빠진 것이 가볍지 않다.
조합이 많으면 경계만 본다
약관이 여덟이면 체크 조합이 이만큼이다.
2^8 = 256
2^8 가지를 다 해 볼 수는 없다.
볼 것은 필수와 선택의 경계다.
전부 체크 → 진행 가능
전부 해제 → 진행 불가
필수 하나만 해제 → 진행 불가
선택 하나만 해제 → 진행 가능
그런데 여덟 중 어느 것이 필수 인지가 이 항목에는 안 적혀 있다.
찾아보면 다른 항목에 있다.
필수 입력 항목
(받는사람 정보 / 결제방법 선택 / 구매자동의 / 약관동의)
미입력일 때, 진행 불가
약관동의 가 통째로 필수 입력 항목 에 들어 있고 개별 약관 중 어느 것이 필수인지는 여기에도 없다. 읽는 사람이 두 곳을 합쳐도 그 경계는 안 나오는 셈이다.
시험하는 사람은 결국 화면을 켜 놓고 하나씩 꺼 보며 알아내게 된다. 문서에 한 칸만 있었으면 안 해도 될 일이다.
설정 — 실패한 선택과 기본값
같은 문서에서 다른 것도 눈에 걸렸다.
선택하신 결제수단을 다음에도 사용
결제 완료 → 다음 결제 시 그 수단 선택된 상태
결제 중단/실패 → 신용카드 선택된 상태
결제 완료 일 때만 기억하고 결제 중단/실패 면 기본값으로 되돌아간다.
이 규칙에는 이유가 있어 보인다.
[실패한 수단을 기억] 다음에도 같은 이유로 실패할 수 있음
[기본값으로] 다른 수단을 시도하게 됨
실패한 수단을 기억해 두면 다음 결제에서 같은 자리에 다시 막힌다. 한도가 모자라거나 그 수단 자체에 문제가 있는 경우가 많기 때문이다.
신용카드 로 되돌아가게 둔 것은 가장 무난한 값을 고른 것으로 보인다. 무엇이 기본이 되느냐보다 실패한 것이 기본이 되지 않는다는 쪽이 핵심이다.
작은 규칙인데 실패가 되풀이되는 경로를 끊고 있다. 기억이 언제나 편의인 것은 아니라는 것을 이 두 줄이 보여 준다.
정리
- 약관 여덟 중 둘이 결제 수단에 따라 노출된다
- 쓰지도 않는 약관에 동의한 기록이 남는 것이 문제가 될 수 있다
- 조건이 늘고 바뀌면 코드가 아니라 표로 두는 편이 낫다
- 표로 두면 행을 고치는 것으로 끝나고 배포가 필요 없다
- 모두 동의는 상위에서 하위로 가는 방향만 적혀 있다
- 양방향 동작인데 한 방향만 있으면 빠뜨린 것이다
- 주 흐름은 적히고 예외 흐름이 빠진다
- 조합이 256가지여도 볼 것은 필수와 선택의 경계다
- 그 경계가 문서 두 곳에 나뉘어 있고 합쳐도 안 나온다
- 실패한 선택을 기억하면 다음에도 같은 자리에서 막힌다
- 기억은 성공했을 때만 한다