Eternity's Chit-Chat

aeternum.egloos.com



진화적인 설계-2.소프트웨어 아키텍처와 메타포 2부 Evolutionary Design

요구사항의 늪
“이번 프로젝트의 목표는 가장 많은 가입자에게 서비스되고 있고 가장 많은 종류의 요금제가 제공되고 있는 문자 요금제와 통화 요금제를 개선하는 것입니다.”

기획팀장이 요금제와 관련된 문서를 나누어 주며 포문을 열었다. 프로젝트 승인이 나자마자 관련 TF팀이 꾸려졌고 속속 회사의 핵심 인력들이 팀으로 배정되었다. 회사 입장에서도 많은 기대를 하고 있음을 실감할 수 있었다. 우선 팀원들이 도메인을 이해하는 것이 우선이라는 생각에 기획팀장을 초청해 신규 요금제에 대한 간략한 설명을 듣기로 했다.

“우선 문자 요금제부터 설명 드리겠습니다. 문자 요금제의 규칙은 매우 단순합니다. 가입자가 핸드폰을 사용해서 문자 메시지를 전송할 경우 통신사는 두 가지 항목을 기준으로 요금을 계산하게 됩니다. 하나는 ‘메시지 블록당 요금’이고, 다른 하나는 ‘무료 메시지 블록 수’ 입니다. 나누어 드린 문서의 10페이지에 있는 표를 보시죠.”

페이지를 펼치자 문자 요금제를 정리한 표를 볼 수 있었다.

요금제

무료 메시지 블록

메시지 블록 요금

20블록 전송 요금

표준 요금제

0

40

20 X 40 = 800

맞춤 요금제

50

60

한도를 초과하지 않았으므로 0

<표 1> 문자 요금제의 종

“’메시지 블록 당 요금’과 ‘무료 메시지 블록 수’는 가입자가 약정한 요금제에 따라 달라집니다. ‘표준 요금제’의 경우 블록 당 40원이라는 비교적 저렴한 요금이 부과되는 대신 무료 혜택을 제공하지 않습니다. 이에 비해 한달 간 50블록의 메시지를 무료로 발송할 수 있는 ‘맞춤 요금제’의 경우 ‘표준 요금제’ 보다 좀 더 비싼 블록 당 60원이 부과됩니다. 요금 계산은 매우 간단합니다. ‘표준 요금제’에 가입한 사용자가 한 달 동안 20블록의 문자 메시지를 발송할 경우 800원의 데이터 요금이 부과되지만, ‘맞춤 요금제’에 가입한 사용자의 경우에는 무료 한도를 초과하지 않았으므로 데이터 요금이 부과되지 않죠.”

“설명 중에 죄송합니다만 블록이라는 개념이 뭐죠?”

설명을 듣고 있던 팀원 한 명이 고개를 갸웃거리며 질문했다.

“블록이란 단일 네트워크 송신 작업을 통해 발송 가능한 문자의 최대 수를 의미합니다. 저희 회사의 경우 문자 메시지를 영문 100자, 한글 50자 단위의 블록으로 나누어 전송합니다. 즉, 가입자가 51개의 한글 문자로 구성된 문자 메시지를 전송할 경우의 블록 수는 2가 되죠.”

“문자 요금은 전송하는 문자 메시지 수가 아니라 문자 메시지를 구성하는 블록의 수에 따라 계산된다는 말씀이신가요?”

기획 팀장은 예상한 질문이라는 듯이 여유롭게 대답했다.

“그렇습니다. 표에 보시는 것처럼 블록 당 요금이 40원인 경우 50개 이하의 문자로 구성된 문자 메시지는 40원이 부과되는 반면 50개를 초과한 경우에는 80원이 부과되죠. 저희 회사에서는 SMS라고 통칭해서 부르고 있습니다만 사실 정확하게 말하면 블록의 수에 따라 SMS(Short Message Service)와 LMS(Large Message Service)로 구분됩니다. 한 가지 더 강조하고 싶은 사항은 요금을 계산할 때 블록의 수뿐만 아니라 수신 핸드폰의 수 역시 요금 계산에 반영된다는 점입니다. 즉, 문자 메시지를 수신하는 핸드폰의 수에 비례해서 요금이 부과되어야 합니다.”

“표에 ‘무료 메시지 블록 수’라는 항목이 있는 것을 보니 가입자가 전송한 전체 메시지 블록 수를 알아야 할 것 같네요. 표에 적힌 맞춤 요금제를 정확하게 계산하려면 해당 메시지가 50번째로 전송된 블록인지 51번째로 전송된 블록인지를 식별할 수 있어야만 혜택을 제공할 지 여부를 판단할 수 있을 테니까요.”

예, 맞습니다. 정확한 요금 계산을 위해서는 요금제에 명시된 무료 메시지 블록 수와 블록 당 요금뿐만 아니라 과금 시점까지 발송한 총 블록 수 역시 알고 있어야 합니다. 요금 계산과 관련된 핵심 설계는 요금제의 규칙과 총 블록 수라는 두 가지 핵심 개념 간의 관계를 간단하면서도 명확하게 표시하는 것이어야 합니다. 문자 요금제에 대해서는 큰 이슈가 없을 것이라고 생각합니다.”

이제부터 요금제 중 가장 복잡한 체계를 가진 통화 요금제에 대한 설명이 이어질 것이다. 설명을 듣기 전인데도 벌써부터 머리가 아파오는 것 같았다.

“지금부터 통화 요금제의 규칙을 설명 드리도록 하겠습니다. 통화 요금제의 규칙은 문자 요금제의 그것보다 약간 더 복잡하기 때문에 이야기에 집중해 주시기 바랍니다. 회사에서 채택하고 있는 일반적인 전략은 가입자가 선호하는 시간대에 따라 요금을 차등 부과하는 방식입니다. 평일보다 공휴일에 통화량이 많은 가입자는 공휴일 할인 요금제를 선택해서 요금을 절약할 수 있고, 야간 시간대에 통화량이 많은 가입자는 야간 할인 요금제를 선택해서 요금을 절약할 수 있죠. 통화 패턴에 커다란 편차가 없는 경우에는 동일한 통화 요금이 부과되는 기본 요금제를 선택하는 것이 유리하겠죠.”

이처럼 가입자가 선호하는 시간대를 선택할 수 있도록 하는 이유는 회사 입장에서 피크 타임에 통화량이 몰리는 위험을 미연에 방지하고 다양한 시간대로 통화량을 분산시킴으로써 가입자에게 제공하는 서비스의 품질을 일정하게 유지할 수 있도록 하기 위해서다. 대부분의 통신사들이 주간보다 야간 요금을 더 저렴하게 책정하고 공휴일보다 평일 요금을 더 저렴하게 책정하는 것도 동일한 이유 때문이라고 할 수 있다.

15페이지를 보시면 회사에서 앞으로 제공하게 될 신규 통화 요금제를 정리한 표가 있을 것입니다.”

 

 

구간별 방식

초기 A분 동안 B초 당 C

A ~ D분까지 B초 당 D

D분 초과 시 B초 당 G

초기 1분 동안 10초당 50

초기 1분 이후 10초당 20

시간대별 방식

A시부터 B시까지 C초당 D

B시부터 C시까지 C초당 E

00시부터 19시까지 10초당 18

19시부터 24시까지 10초당 15

요일별 방식

평일에는 A초당 B

공휴일에는 A초당 C

평일에는 10초당 38

공휴일에는 10초당 19

고정요금 방식

A초당 B

10초당 18

<표 2> 통화 요금제 유형

“통화 요금제에는 ‘구간별 방식’, ‘시간대별 방식’, ‘요일별 방식’, ‘고정요금 방식’의 4가지 유형이 제공될 예정입니다. 표만으로도 쉽게 이해하실 수 있을 것이라 생각되지만 간략하게나마 설명 드리도록 하겠습니다. 설명을 드리기 전에 잠깐 시간을 드릴 테니 표를 주의 깊게 살펴 보시기 바랍니다.”

여기 저기에서 보고서를 넘기는 소리가 들려왔다. 표를 살펴 보니 예상했던 것 보다 요금제가 복잡해 보이지는 않았다. 기획팀장의 이야기처럼 굳이 설명을 듣지 않아도 각 요금제 유형이 무엇을 의미하는 지 예상하기가 어렵지는 않았다. 목이 칼칼한 듯 생수로 목을 축인 기획팀장이 말을 이었다.

“자, 전체 통화 요금제를 간단히 살펴 볼까요? ‘구간별 방식’이란 전체 통화 시간을 분할한 후 분할된 구간 별로 요금을 부과하는 방식입니다. 예를 들면 통화 시간을 초기 1분과 1분 이후로 분할하고 초기 1분 동안은 10초당 50원을, 그 후에는 10초당 20원을 부과하는 방식이 여기에 해당합니다. ‘시간대별 방식’이란 말 그대로 하루 24시간을 시간대로 나눈 후 분할된 시간대 별로 요금을 부과하는 방식입니다. 0시부터 19시까지는 10초당 18원, 19시부터 24시까지는 10초당 15원을 부과하는 경우가 바로 ‘시간대별 방식’이라고 보시면 됩니다. ‘요일별 방식’은 각 요일별로 요금을 차등 부과하는 방식을 의미합니다. 평일에는 10초당 38원, 공휴일에는 10초당 19원을 부과하는 것이 ‘요일별 방식’의 한 예입니다. 마지막으로 ‘고정 요금 방식’은 일정 시간 단위로 동일한 요금을 부과하는 방식입니다. 시간이나 요일과 무관하게 무조건 10초당 9원을 부과한다면 ‘고정 요금 방식’이라고 생각하시면 됩니다.”

요금제 유형이란 사용자의 통화량에 따라 요금을 부과하는 기준이라고 보면 된다. 각기 다른 가입자가 동일한 시간에 통화를 하더라도 사용자가 가입한 요금제 유형에 따라 부과되는 요금이 달라진다. 모든 통화 요금은 위 4가지 방식 중 한 가지 방식에 따라 계산된다.

“페이지를 넘기시면 회사에서 제공하는 모든 요금제를 나열한 표가 나옵니다. 모든 요금제는 앞서 설명 드린 유형에 따라 과금 방식이 결정됩니다. 요금제 유형에 대한 설명을 잘 들으셨다면 표를 이해하시는데 무리가 없을 것으로 생각됩니다.”

 

요금제명

 

 

생활맞춤요금제

표준

10초당 18

고정요금 방식

표준 플러스

00~19시까지 10초당 18

19~24시까지 10초당 15

시간대별 방식

낮 시간 할인

18~09시까지 10초당 18

09~18시까지 10초당 15

시간대별 방식

특별혜택요금제

다이어트

평일 10초당 38

공휴일 10초당 19

요일별 방식

1분 통화할인

초기 1분 동안 50

초기 1분 이후 10초당 20

구간별 방식

파워 9

10초당 9

고정요금 방식

...

...

...

...

<표 3> 통화 요금제의 종류

기획팀장의 말처럼 회의에 표를 읽는 것만으로도 통화 요금제를 이해하는데 큰 무리는 없을 것 같았다. 그러나 요금제를 이해하는 것과 시스템을 구현하는 것 사이에는 큰 차이점이 존재한다. 문제 도메인을 솔루션 도메인으로 1:1로 맵핑할 수 있다면 문제가 없겠지만 소프트웨어 개발이라는 현실은 그리 간단하지만은 않다.

요금제 자체를 이해하는 것은 문제가 되지 않는다. 이제 문제는 통화 요금제와 문자 요금제의 다양성과 변화 가능성을 유연하게 흡수할 수 있는 아키텍처를 어떻게 구축할 것인가를 결정하는 것이다.


덧글

  • 최영목 2011/08/09 20:14 # 삭제

    '요금제 자체를 이해하는 것은 문제가 되지 않는다. 이제 문제는 통화 요금제와 문자 요금제의 다양성과 변화 가능성을 유연하게 흡수할 수 있는 아키텍처를 어떻게 구축할 것인가를 결정하는 것이다.'

    마지막 이 한마디에 글을 읽는 제 가슴도 확 막히는군요 ^^;;; 너무 재밌습니다. 스터디삼아 위에 나온 부분을 설계해보는 것도 굉장히 재미있을 것 같아요 ^^
  • 이터너티 2011/08/16 21:13 #

    재미있을 것 같네요. ^^
    개발하신 내용을 함께 공유해 주시면 저한테도 도움이 될 것 같습니다.
※ 로그인 사용자만 덧글을 남길 수 있습니다.