# 우리 회사 장부는 이렇게 나눕니다 이 글은 도메인이나 데이터베이스를 모르는 사람을 위한 설명입니다. 설계의 정확한 표와 제약 조건은 [데이터 모델 합의문](01-데이터-모델-합의문.md)에 있습니다. ## 한 줄로 고객이 산 기록, 고객이 지금 쓸 수 있는 권리, 인터넷에 실제로 존재하는 도메인은 서로 다른 물건입니다. 한 상자에 넣지 않습니다. ## 네 가지 물건 백화점을 생각하면 됩니다. | 우리 말 | 백화점으로 치면 | 예 | |---|---|---| | 상품 | 진열대에 붙은 가격표 | ".com 1년 등록 15,000원", "주소 비공개 연 3,000원" | | 주문 | 영수증 | 2026년 3월 12일에 김민수 님이 이 가격으로 샀다는 기록 | | 서비스 | 회원권 | 김민수 님이 2027년 3월까지 abc.com을 쓸 수 있다는 권리 | | 도메인 | 실제 간판 | 인터넷 주소록에 abc.com이 살아 있다는 사실 | 가격표는 내년에 바뀔 수 있습니다. 작년 영수증의 금액은 바뀌면 안 됩니다. 회원권이 끝났다고 간판이 그 순간 사라지지는 않습니다. 간판의 주인이 바뀌어도 예전 영수증은 예전 손님 것입니다. 예전에 문제가 생긴 이유는 간판 번호에 옵션을 매달았기 때문입니다. 아파트 호수에 "주차권", "청소 옵션"을 붙여 두면, 세입자가 바뀌거나 요금이 바뀌거나 계약을 연장할 때마다 그 쪽지가 누구 것인지 헷갈립니다. 주차권은 계약서에 남기고, 호수는 호수로 둡니다. ## 김민수 님의 abc.com ### 구매 김민수 님이 abc.com을 1년 등록하고, 주소 비공개(WHOIS Privacy)를 같이 선택합니다. 진열대에서 두 상품을 고른 것입니다. 아직 인터넷에 도메인이 만들어진 것은 아닙니다. 주문서에는 두 줄이 생깁니다. - abc.com 등록, 15,000원 - 주소 비공개, 3,000원 영수증에 적힌 15,000원과 3,000원은 그 날의 가격입니다. 다음 주에 비공개 요금이 4,000원이 되어도 이 영수증은 3,000원입니다. 금액은 원 또는 미국 달러입니다. 원은 1이 1원이고, 달러는 1이 1센트입니다. 한 줄에는 한 통화만 적습니다. ### 입금 무통장으로 18,000원이 들어오면 두 줄 모두 "돈 들어옴"이 됩니다. 그 다음에야 등록 담당 시스템이 인터넷 주소록에 abc.com을 만들고, 비공개를 켭니다. 돈이 들어왔다고 등록이 끝난 것은 아닙니다. 등록 기계가 실패하면 같은 영수증으로 다시 시도합니다. 고객에게 한 번 더 청구하지 않습니다. 이때 비로소 두 개의 회원권이 생깁니다. - 도메인 회원권: 김민수, abc.com, 2027년 3월까지 - 비공개 회원권: 도메인 회원권에 딸림, 같은 날까지 도메인이라는 간판은 하나고, 그 간판을 지금 다루는 회원권은 도메인 회원권입니다. ### 1년 뒤 연장 갱신은 간판을 새로 만드는 일이 아닙니다. 같은 회원권의 끝을 1년 늘리는 새 영수증입니다. 비공개를 계속 쓰고 있으면 영수증에 줄이 두 개입니다. 비공개를 그 사이에 끊었다면 등록 연장 줄만 있습니다. "간판에 붙어 있던 옵션"을 뒤지는 것이 아니라, 지금 살아 있는 회원권을 보고 영수증을 만듭니다. ### 비공개만 끊고 돈을 일부 돌려줄 때 도메인은 그대로 둡니다. 비공개 회원권만 종료하고, 돌려줄 돈은 비공개를 산 그 영수증 줄을 가리킵니다. 등록비 15,000원은 환불 대상이 아닙니다. 영수증 줄의 금액은 지우개로 고치지 않습니다. "이 줄에서 얼마를 돌려준다"는 별도 기록을 추가합니다. ### 다른 사람에게 넘길 때 회사 안에서 김민수 님의 abc.com을 이서연 님 계정으로 넘기는 경우입니다. 인터넷 주소록의 abc.com은 같은 간판입니다. 간판을 새로 파지 않습니다. 김민수 님의 회원권과 비공개 회원권은 그 자리에서 종료합니다. 이서연 님의 새 회원권을 간판에 연결하고, 끝나던 날짜와 자동 연장 여부는 그대로 복사합니다. 김민수 님이 사 두었던 비공개는 자동으로 따라가지 않습니다. 이서연 님이 필요하면 새로 삽니다. 인터넷 주소록에 적힌 소유자·관리자 이름과, 김민수 님의 호스팅 계정과 메일 회원권은 이 이동으로 바뀌지 않습니다. 호스팅을 넘기려면 호스팅 회원권을 따로 옮깁니다. 디스크 추가분은 그때 종료되고, 서버 계정 자체는 같은 것을 계속 씁니다. 명의변경 수수료는 가격표에 그 상품의 명의변경 가격이 있으면 그 금액이고, 없으면 없습니다. 22,000원을 장부에 못 박지 않습니다. 영수증의 고객은 원래 회원인 김민수 님이고, 새 회원권의 주인은 이서연 님입니다. 두 사람이 같으면 옮기지 않습니다. 가격이 있으면 입금 전에 회원권을 바꾸지 않습니다. 예전에 간판 번호에 옵션을 붙여 두면, 주인이 바뀌는 순간 그 옵션이 새 주인 것으로 보이거나, 누구 영수증인지 알 수 없게 됩니다. ### 도메인에 등록된 소유자·관리자 정보를 고칠 때 이것은 계정 이동이 아닙니다. 김민수 님이 계속 우리 회원권을 가진 채로, 레지스트리에 올라가 있는 관리자 이메일만 바꾸는 일입니다. 새 연락처는 대기 상태로 적어 두고, 레지스트리가 성공했다고 한 뒤에야 옛 연락처를 내립니다. 실패하면 대기 기록만 없애고 옛 연락처를 유지합니다. 국문 이름과 영문 이름은 같은 연락처에 같이 적습니다. 법인이면 조직명이 있어야 합니다. 소유자 연락처 변경이 레지스트리에서 성공하면, 그 시각부터 60일 동안은 다른 등록 회사로 넘어가지 못하게 잠근 것을 고객이 풀지 못합니다. 계정만 이서연 님에게 넘긴 경우에는 이 60일이 시작되지 않습니다. 고객이 발급받는 이전 코드는 장부 칸에 적지 않습니다. 이미 나가기 시작한 이전은 거절할 수 있고, 거절해도 간판을 새로 파지 않습니다. ### 만료 전에 입금을 요청하는 메일 기준일 14일 전과 1일 전에 자동으로 한 통씩 만듭니다. 기준일은 다음 청구일이 있으면 그 날이고, 없으면 회원권이 끝나는 날입니다. 갱신을 그만두기로 한 회원권에는 자동 메일을 보내지 않습니다. 고객이 메일을 못 받았다고 하면, 이미 보낸 메일의 제목과 본문을 그대로 다시 보냅니다. 다시 보낸 기록은 원래 메일에 연결하고, 횟수 제한은 없습니다. 메일은 기준일 30일 전, 7일 전, 1일 전, 당일, 다음 날에 만듭니다. 문자는 보내지 않습니다. 메일에는 누구의 어느 서비스가 어느 날 끝나는지 적고, 연장 금액을 정할 수 있으면 그 금액도 적습니다. ### 네임서버, 레코드, 파킹, 주소 넘기기 우리가 등록 기관인 도메인의 네임서버는 간판에 붙입니다. 개수는 2개에서 4개까지입니다. 그 도메인 밑의 네임서버만 IP를 적고, 글자가 비슷해도 도메인 밖이면 IP를 적지 않습니다. 레코드와 파킹은 간판이 아니라 존에 붙입니다. 바꾸자는 내용은 영수증 줄의 여백에 남기고, 레지스트리나 존 반영이 성공한 뒤에만 현재값을 갈아끼웁니다. 우리 네임서버가 아닌 곳으로 바꾸면 그 성공과 함께 그 존의 레코드만 비웁니다. 그 도메인의 DNSSEC DS 기록은 그때 비우지 않습니다. 그 존에 매달린 다른 존의 레코드는 남습니다. 파킹이나 주소 넘기기를 켜면 맨 위 주소와 www 레코드는 고객 레코드로 두지 않습니다. 파킹 제목과 주소 고정 여부는 존의 공개 방식에 적습니다. DNAME 은 그 이름에 하나만 둡니다. 도메인 메일 포워딩 표와 메일 계정 전달 규칙 표는 두지 않습니다. 다른 회사에 등록된 이름과 2차 도메인은 우리 간판이 아닙니다. 그 이름의 DNS 회원권과 존만 있습니다. 레코드와 명의변경은 되고, 기관 이전 코드와 레지스트리 네임서버 목록은 없습니다. ### 다른 등록 회사로 옮길 때 우리 회사로 들어오는 이전은, 이전이 끝나기 전에는 간판 기록을 만들지 않습니다. 끝나는 순간 새 간판, 회원권 연결, 만료일, 영수증 완료, 인증코드 삭제를 한 번에 합니다. 우리 회사에서 나가는 이전이 끝나면 그 간판은 나간 것으로 표시하고 회원권은 종료합니다. 간판을 새로 파지 않습니다. ### 나갔다가 다시 등록될 때 abc.com을 다른 회사로 옮겼다가, 몇 년 뒤 우리 회사로 다시 등록하는 경우가 있습니다. 주소 글자는 같지만 우리 회사가 관리하는 구간은 새 구간입니다. 새 간판 기록을 만듭니다. 김민수 님 시절의 영수증은 예전 간판 기록에 그대로 붙어 있습니다. ## 돈이 애매할 때 ### 도메인 30개를 한 번에 연장 주문서 한 장에 줄 30개를 적습니다. 입금 한 번으로 30줄을 채웁니다. 간판 30개를 새로 만들지 않고, 회원권 30개의 끝 날짜만 늘립니다. ### 카드로 예치금을 채울 때 주문 줄이 없습니다. 1,000원부터 채울 수 있고, 그 돈에는 세금계산서나 현금영수증을 만들지 않습니다. 주문 대금을 내다 500원이 더 들어온 경우는 1,000원보다 적어도 예치금으로 남습니다. 가상계좌에서 기다리는 입금은 무통장 입금의 대기 상태입니다. ### 예전에 받은 주문서 3장을 한 번에 입금하고, 2,000원이 더 들어온 경우 입금은 한 건입니다. 그 돈을 세 주문서의 줄에 필요한 만큼만 나눠 붙입니다. 2,000원은 고객 예치금으로 적어 두고, 다음 연장 때 그 돈부터 씁니다. 예치금으로 남긴 2,000원에는 세금계산서나 현금영수증을 만들지 않습니다. 그 돈을 다음 연장 줄에 쓸 때, 그 사용분이 증빙 대상입니다. ### 세금계산서와 현금영수증 고객이 내는 금액은 부가세가 포함된 금액입니다. 공급가와 부가세는 그 금액을 11로 나눈 몫을 부가세로 자르고, 나머지를 공급가로 둡니다. 9,001원이면 부가세 818원, 공급가 8,183원입니다. 카드로 낸 금액은 카드 전표가 증빙입니다. 그 금액에는 세금계산서와 현금영수증을 만들지 않습니다. 무통장과 예치금 사용분에만 고객이 고른 하나, 세금계산서 또는 현금영수증을 만듭니다. 개인에게는 세금계산서를 고르게 하지 않습니다. 사업자 정보가 없어도 입금은 받을 수 있고, 정보가 갖춰진 뒤에 문서를 만듭니다. 이미 발행한 문서의 상호와 사업자번호는 나중에 고객 정보가 바뀌어도 고치지 않습니다. 국세청 승인번호가 없는 문서는 취소할 수 있습니다. 승인번호가 있으면 원본은 두고, 차액 문서를 새로 만듭니다. 권리를 줄이는 차감 줄은 예치금이 아니고, 돈을 돌려주는 일과도 다릅니다. 세금계산서를 고를 때 사업자등록증 파일은 받지 않습니다. 상호, 사업자번호, 대표자, 주소, 이메일, 업태, 종목을 프로필 한 행에 적습니다. 사업자번호는 숫자 10자리이고, 같은 회원이 다른 10자리로 바꿀 수 있습니다. 회원을 새로 만들거나 프로필을 두 장 두지 않습니다. 아직 계산서가 없는 결제는 계산서를 만드는 시점의 번호로 나갑니다. 이미 나간 계산서의 환불 차액은 그때의 사업자번호를 유지합니다. 번호를 바꾼다고 기존 계산서가 취소되거나 다른 사업자로 다시 써지지 않습니다. 현금영수증을 고를 때 신분증이나 사업자등록증 파일은 받지 않습니다. 소득공제면 010으로 시작하는 11자리, 또는 011·016·017·018·019로 시작하는 10자리나 11자리를 프로필 한 행에 암호문으로 적습니다. 지출증빙이면 숫자 10자리 사업자번호를 적습니다. 주민등록번호와 카드번호는 적지 않습니다. 같은 회원이 번호를 바꿀 수 있습니다. 회원을 새로 만들거나 프로필을 두 장 두지 않습니다. 아직 영수증이 없는 결제는 영수증을 만드는 시점의 번호로 나갑니다. 이미 나간 영수증의 환불 차액은 그때의 번호를 유지합니다. 번호를 바꾼다고 기존 영수증이 취소되거나 다른 번호로 다시 써지지 않습니다. ### 30개 중 25개 요금만 들어온 경우 25개만 연장 작업을 시작합니다. 나머지 5개는 주문서에 남은 채로 기다립니다. "주문서 전체가 결제되었다"고 도장 찍지 않습니다. 줄마다 돈이 찼는지를 봅니다. ## 호스팅에서 헷갈리기 쉬운 것 서버 운영체제를 Ubuntu로 고르는 것은 가격이 없는 선택입니다. 주문서 여백에 "Ubuntu"라고 적고, 실제 계정에도 Ubuntu라고 적으면 됩니다. 회원권을 하나 더 만들지 않습니다. 디스크를 40GB 돈을 내고 추가하는 것은 회원권입니다. 나중에 60GB로 바꾸면 회원권을 두 장으로 늘리지 않습니다. 같은 회원권의 수량을 40에서 60으로 바꾸고, 그 변경도 영수증 한 줄로 남깁니다. 자동 연장은 팔리는 상품이 아닙니다. "끝나는 날 전에 이 회원권을 자동으로 청구할지"를 회원권에 예/아니오로 적어 두는 것입니다. ### 끝나는 날이 다른데, 같이 맞추고 싶을 때 호스팅 회원권은 2027년 6월 1일에 끝나고, 돈을 내고 붙인 추가 디스크는 2027년 3월 1일에 끝난다고 합시다. 고객이 둘 다 2028년 6월 1일로 맞추길 원하면 영수증은 한 장이고, 연장 줄은 두 개입니다. 호스팅은 12개월 요금입니다. 디스크는 3월부터 이듬해 6월까지, 15개월치로 계산합니다. 디스크 돈만 들어오고 호스팅 돈이 아직이면 디스크의 끝은 늘리지 않습니다. 그 사이에 호스팅이 다른 영수증으로 2028년 6월 1일까지 연장되면, 그때 디스크 줄도 완료합니다. 호스팅을 그 날짜보다 짧게 줄여 맞추지는 않습니다. 이미 산 기간을 줄이는 일은 연장이 아니라 차감입니다. 다음에 자동으로 연장할 때는 이번 맞춤 줄의 15개월을 기간으로 쓰지 않습니다. 가격표에 적힌 원래 기간을 씁니다. 그 뒤에 호스팅만 연장하면 두 끝나는 날은 다시 달라질 수 있습니다. 호스팅을 처음 신청할 때 추가 디스크를 같은 주문서에 넣을 수 있습니다. 기본으로 두 줄의 시작과 끝은 같습니다. 디스크만 더 일찍 끝내도 됩니다. 그 끝은 호스팅 줄의 끝보다 늦을 수 없습니다. 금액은 지금까지 쓰던 달력 비례입니다. 2026년 10월 7일 15시부터 1년이고 디스크 1년 가격이 12,000원이면 디스크도 12,000원입니다. 돈을 내기 전에는 회원권 행을 만들지 않습니다. 이미 쓰는 호스팅에 디스크만 붙이면 끝은 지금 호스팅이 끝나는 날까지입니다. 그보다 짧을 수는 있고, 더 뒤로는 늘리지 못합니다. 호스팅을 더 연장하는 줄이 같은 주문서에 있으면 디스크를 그 새로운 끝까지 넣을 수 있습니다. 호스팅이 2027년 6월 1일에 끝나고 오늘이 2027년 3월 1일이며 호스팅을 2028년 6월 1일까지 연장하면서 디스크를 새로 붙이면, 디스크는 3월 1일부터 2028년 6월 1일까지입니다. 월 9,000원이면 15개월분인 135,000원입니다. 호스팅 연장의 시작일로 디스크 시작을 바꾸지 않습니다. 디스크 돈만 먼저 들어와도 호스팅이 그 날까지 늘어나기 전에는 디스크 끝은 늘지 않습니다. 디스크 줄이 호스팅의 끝나는 날을 대신 밀지는 않습니다. 이미 붙어 있는 디스크를 더 긴 날로 맞추는 것은 새 회원권이 아니라 연장 줄입니다. 수량을 40에서 60으로 바꾸는 것도 같은 회원권의 변경입니다. 트래픽 초과 요금은 끝나는 날을 바꾸지 않습니다. 한 달을 30일로 두거나, 기간이 길다고 깎아 주는 표는 만들지 않습니다. 가격표의 기간에는 일과 시도 있습니다. 3일 가격이 5,000원이면 그 줄은 5,000원이고, 시작 시각부터 서울 날짜로 3일 뒤 같은 시각까지입니다. 2시간 가격은 시작 시각에 그 시간을 더한 끝까지입니다. 끝나는 날을 맞추는 계산은 월 가격과 년 가격만 고릅니다. 이미 낸 기간을 줄이면, 줄인 뒤에 남는 기간을 같은 달력 비례로 계산하고 그 금액을 뺀 나머지를 돌려줍니다. 12개월에 108,000원을 내고 9개월을 유지하면 27,000원을 돌려줍니다. 2027년 3월 1일부터 한 달 9,000원에서 3월 11일 0시까지 유지하면 사용분은 2,903원이고 6,097원을 돌려줍니다. 호스팅을 시작한 시각부터 7일 안에 그 회원권을 끝내면 반복 요금은 남은 한도 전부를 돌려줍니다. 한 번만 내는 설치비는 시작 시각과 관계없이 그대로입니다. 도메인 등록비와 트래픽 초과 요금은 이 달력 비례를 쓰지 않습니다. 끝나는 날만 예약하고 회원권을 바로 끊지 않으면 돈을 돌려주지 않습니다. 시작한 시각은 회원권을 처음 만들 때 그 줄의 시작으로 적고 연장 때 다시 적지 않습니다. 카드와 무통장이 섞여 있으면 카드로 낸 만큼을 먼저 카드로 돌려줍니다. 자동 연장은 가격표의 원래 기간이고, 디스크가 호스팅보다 길어지면 호스팅이 끝나는 날로 자릅니다. 예치금이 있으면 연장 줄에 먼저 쓰고 모자란 만큼만 카드를 냅니다. 디스크 수량을 늘리면 늘어난 수량만 남은 기간만큼 받습니다. 싼 상품으로 바꾸는 금액은 없습니다. 도메인 이름의 마지막이 kr 또는 한국이면 그 줄의 시작부터 7일까지는 남은 한도를 돌려줍니다. 7일이 지난 다년 등록은 쓰고 있는 해는 남기고 그 다음 해만 돌려줍니다. 마지막이 영문 두 글자인 다른 나라 도메인은 등록비와 연장비를 돌려주지 않습니다. 그 밖 도메인은 등록 시작부터 120시간 안에만 등록비를 돌려주고 연장비는 돌려주지 않습니다. 주소 비공개만 끄면 비공개 줄의 남은 기간만 돌려주고 도메인 등록비는 그대로입니다. 트래픽 초과를 더 적게 고치면 줄어든 단위만큼 돌려줍니다. 메일과 DBMS와 보안과 DNS는 호스팅과 같은 비례이고 서버는 깨진 달을 다 쓴 달로 봅니다. 호스팅을 더 비싼 상품으로 바꾸면 남은 기간의 가격 차액만 받습니다. 싼 상품으로는 바꾸지 않습니다. 상품을 일정 기간만 깎으면 그 기간의 가격표만 갈라진다. 퍼센트와 지정 금액은 그 순간 가격으로 고정되고 기간이 끝나면 예전 가격으로 돌아간다. 한 서비스만 퍼센트로 깎으면 연장할 때마다 그때 가격표에서 다시 계산한다. 금액으로 지정하면 그 금액이 그 서비스의 연장 금액으로 남고 다른 서비스에는 번지지 않는다. 정한 시각이 지나면 가격표로 돌아간다. 한 서비스에 두 할인을 겹치지 않는다. 쿠폰 코드는 없다. 표 그림과 데이터베이스 표는 지금까지 정한 칸만 담습니다. 최상위 도메인 표에는 이름과 식별이 필수인지만 있습니다. 레지스트리 계정 번호는 문자열로 두고 그 부모 표는 없습니다. 추가와 수정과 삭제는 그 일이 확정되는 순간에 기록으로 남습니다. 누가 어느 표의 어느 행을 바꿨는지와 바뀌기 전과 후가 남습니다. 비밀번호와 암호문과 카드 키와 기관 이전 코드는 그 기록에 값을 적지 않습니다. 레지스트리가 보낸 사건과는 다른 기록입니다. 인트라넷에 로그인하는 직원은 고객과 다른 표에 둡니다. 아이디와 비밀번호를 저장하는 방식은 고객과 같고, 그만둔 직원은 행을 지우지 않고 로그인만 막습니다. 비밀번호를 15분 안에 다섯 번 틀리면 그 시각부터 15분 동안 로그인할 수 없습니다. 허용한 IP가 없으면 주소는 가리지 않고, 하나라도 있으면 등록한 주소에서만 로그인됩니다. ## 회원 정보, 저장 카드, 트래픽 ### 화면에 보이는 회원 정보 김민수 님의 로그인 아이디, 표시 이름, 이메일은 회원 계정에 그대로 적습니다. 이메일과 이름은 비울 수 없습니다. 이메일은 입금 요청 메일을 받는 주소입니다. 휴대폰은 암호문으로 적고 비울 수 없습니다. 일반 전화, 우편번호, 주소는 비워 둘 수 있고, 적으면 암호문입니다. 이 칸을 고쳐도 도메인에 등록된 소유자 연락처와 세금계산서의 상호는 그대로입니다. 세금 프로필이 없어도 결제는 됩니다. 세금계산서를 고를 수 있는지는 세금 프로필의 구분만 봅니다. ### 가입할 때 반드시 적는 것 가입은 회원 행 하나만 만듭니다. 주문이나 세금 프로필, 카드는 같이 만들어지지 않습니다. 반드시 적는 것은 로그인 아이디, 비밀번호, 이메일, 표시 이름, 휴대폰, 약관 버전입니다. 아이디는 영문 소문자로 시작하고 나중에 바꾸지 못합니다. 비밀번호는 8자 이상이고, 장부에는 그 글자 대신 검사할 수 없는 해시만 남습니다. 가입은 개인·사업자를 묻지 않습니다. 사업자번호는 가입 때 받지 않습니다. 주소와 일반 전화는 나중에 넣어도 됩니다. 소셜 로그인이나 본인인증만으로는 가입되지 않습니다. 약관 글 자체는 표로 두지 않고, 동의한 버전과 가입 시각만 남습니다. ### 저장해 둔 카드로 연장을 낼 때 카드 번호는 저장하지 않습니다. 결제사가 준 토큰은 암호문으로 두고, 같은 토큰인지는 별도의 해시로 가립니다. 끝 네 자리는 그대로 둡니다. 지금 쓰는 기본 카드는 고객당 한 장입니다. 카드를 빼는 순간 기본 표시도 같이 해제됩니다. 한 번만 결제하는 카드는 이 수단 행 없이 기존 카드 결제로 남습니다. 자동으로 카드를 긁는 경우는, 시스템이 만든 주문서이고 연장 줄이 하나일 때뿐입니다. 고객이 직접 만든 주문과 트래픽 초과 줄은 자동으로 긁지 않습니다. 회원권의 끝나는 날이 없으면 그 시스템 주문서를 만들지 않습니다. 같은 회원권의 같은 연장 시작일에 대한 주문서는 한 장입니다. 기본 카드가 없으면 자동 카드 결제를 만들지 않습니다. 입금 요청 메일은 그대로 갑니다. 승인이 실패하면 그 줄은 아직 안 낸 상태로 남고, 예치금에서 메우지 않습니다. 이미 진행 중이거나 성공한 카드 결제가 있으면 또 만들지 않습니다. 실패만 있으면 그 주문에 새 결제 시도를 하나 더 할 수 있습니다. 토큰은 메일 본문에 적지 않습니다. 열쇠로 토큰이 안 열리면 결제를 만들지 않습니다. 그 경우에도 카드 해지는 됩니다. ### 트래픽이 포함량을 넘을 때 호스팅과 서버 회원권만 포함 트래픽을 가집니다. 칸이 비어 있으면 그 회원권은 재지 않습니다. 메일 회원권과 추가 디스크는 재지 않습니다. 0으로 적어 두면 쓴 만큼 모두 청구 대상입니다. 한 기간의 사용량은 한 행입니다. 포함량보다 많이 쓴 만큼만, 1 GiB(1,073,741,824바이트) 단위로 올려 영수증 줄을 만듭니다. 1바이트만 넘어도 1단위입니다. 포함량 안이면 사용량 행만 있고 청구 줄은 없습니다. 이 줄은 회원권이 끝나는 날과 수량을 그대로 둡니다. 돈이 그 줄의 금액과 같아지면 그 자리에서 완료되고, 개통 작업은 없습니다. 입금 전에 사용량이 줄어 단위가 0이 되면 그 청구 줄은 취소하고, 사용량 행은 남깁니다. 이미 정산된 사용량의 숫자는 고치지 않습니다. 고치려면 권리를 줄이는 차감 줄을 새로 만듭니다. 나중에 회원권의 포함량을 바꿔도, 이미 적어 둔 그 기간의 포함량은 그대로입니다. ### DNSSEC DS 기록은 주소 레코드의 종류가 아닙니다. 우리가 등록 기관인 도메인에만 붙입니다. 바꾸자는 목록은 영수증 줄의 여백에 두고, 레지스트리가 성공한 뒤에 통째로 갈아끼웁니다. 빈 목록으로 성공하면 그 도메인의 DS는 없습니다. 실패하면 예전 DS가 남고 같은 작업을 다시 합니다. 우리 네임서버가 아닌 곳으로 바꿔 존 레코드를 비워도 DS는 남습니다. 다른 회사에 등록된 이름의 존에는 DS 행이 없습니다. ### 등록인 생년월일과 사업자번호 식별이 필요한 최상위 도메인만, 등록인 연락처에 생년월일 8자리 또는 사업자번호 10자리를 요구합니다. 개인 연락처는 생년월일, 법인 연락처는 사업자번호입니다. 둘 중 하나만 적힌 연락처는 저장하지 않습니다. 식별이 없으면 그 도메인을 새로 만들거나 등록인 연락처를 바꾸지 못합니다. 관리자 연락처는 식별 없이 바꿉니다. 이 값은 회원 계정, 세금 프로필, 메일 본문에 복사하지 않습니다. 연락처 칸에는 암호문으로만 둡니다. 레지스트리에 보낼 때는 그때 메모리에서 풀어서 보내고, 장부에는 풀린 값을 남기지 않습니다. 계정만 다른 회원에게 넘기는 명의변경은 등록인 연락처를 바꾸지 않습니다. ### 잠가서 저장하는 값 전화, 우편번호, 주소, 등록인 생년월일·사업자번호, 현금영수증에 적는 식별자, 카드 토큰은 데이터베이스에 그대로 적지 않습니다. 값을 검사한 뒤 암호문만 넣습니다. 열쇠는 데이터베이스 밖에 있고, 이미 적어 둔 암호문의 열쇠는 버리지 않습니다. 디스크를 통째로 암호화하는 일과, 인터넷으로 보낼 때의 암호화는 표로 만들지 않습니다. 도메인 연락처의 이름·전화·주소는 그대로 둡니다. 바꾸자는 내용이 영수증 여백에 남기 때문에, 그 칸만 잠그면 같은 값이 여백에 남습니다. 등록인 식별값은 여백에 남기지 않으므로 잠급니다. 세금계산서에 찍히는 상호, 사업자번호, 주소는 발행 문서 그대로 평문입니다. 주민등록번호 13자리는 어느 칸에도 적지 않습니다. ## 날짜가 두 개인 이유 도메인에는 날짜가 두 개 있습니다. - 회원권의 끝: 우리 회사가 고객에게 받은 돈으로 보장하는 날 - 인터넷 주소록의 끝: 전 세계 도메인 명부가 인정하는 날 보통은 비슷합니다. 항상 같지는 않습니다. 명부가 먼저 기간을 늘려 버리는 경우가 있습니다. 그때 고객 돈을 받고 연장 처리를 하면서 연장 명령을 한 번 더 보내면, 기간이 두 번 늘어납니다. 그래서 담당 시스템은 "명령을 보냈는가"가 아니라 "명부의 끝이 우리가 판 끝보다 이미 멀지 않은가"를 확인합니다. 이미 충분하면 명령 없이 완료로 둡니다. 고객이 아직 입금하지 않았는데 명부의 도메인은 살아 있을 수도 있습니다. 회원권은 "입금 대기"이고 간판은 "정상"일 수 있습니다. 둘을 한 단어로 적지 않습니다. ## 하면 안 되는 것 - 도메인 번호에 옵션을 붙이지 않습니다. - 가격표가 바뀌었다고 옛 영수증을 고치지 않습니다. - 환불할 때 "이 도메인에 딸린 것 전부"로 범위를 정하지 않습니다. 영수증의 어느 줄인지를 집습니다. - 돈이 들어오기 전에 그 도메인 이름을 영원히 우리 것만으로 잠그지 않습니다. 잠시 잡아 두었다가, 결제가 실패하거나 시간이 지나면 풀어 줍니다. 결제가 끝난 이름만 확실히 잠급니다. - 등록에 실패했다고 같은 금액을 한 번 더 청구하지 않습니다. 같은 작업을 다시 시도합니다. - 다른 회사에 등록된 이름을 우리 스폰서 간판으로 만들지 않습니다. - 나가는 이전 코드를 장부에 적지 않습니다. - 웹 터미널, 스팸 격리함, 방화벽 IP, 상담 문의, CMS 출금계좌는 이 장부의 표가 아닙니다. 메일·서버·DB·보안은 회원권과 식별 정보만 둡니다. 리눅스와 윈도우 호스팅은 호스팅 상품의 종류이지, 회원권의 새 종류가 아닙니다. - 회원 이름과 주소를 고친다고 도메인 소유자 연락처와 세금계산서 상호가 바뀌지 않습니다. - 카드 번호와 결제 토큰을 메일 본문에 적지 않습니다. 트래픽 초과 요금으로 회원권의 끝나는 날을 늘리지 않습니다. - 쿠폰, 리셀러 단가표, 문자 발송, 계정 담당자, 추가 IP는 이번 장부에 없습니다. - 주민등록번호는 적지 않습니다. 카드 토큰, 회원 전화·주소, 등록인 식별값, 현금영수증 식별자는 평문으로 데이터베이스에 두지 않습니다. 암호화 열쇠는 데이터베이스에 두지 않습니다. - 비밀번호 평문과 해시를 메일에 적지 않습니다. 로그인 아이디는 가입 뒤에 바꾸지 않습니다. ## 단어 사전 설계 문서를 열어 볼 때 이 표만 보면 됩니다. | 이 글의 말 | 설계 문서의 이름 | |---|---| | 가격표, 상품 | `products`, `prices` | | 영수증, 주문서 | `orders` | | 영수증의 한 줄 | `order_items` | | 회원권 | `services` | | 비공개나 추가 디스크 회원권 | 부모를 가리키는 자식 `services` | | 간판, 실제 도메인 | `domains` | | 회원권과 간판의 연결 | `domain_services` | | 입금 | `payments` | | 입금을 어느 줄에 썼는지 | `payment_allocations` | | 예치금 장부 | `customer_balance_entries` | | 세금 프로필 | `customer_tax_profiles` | | 세금계산서, 현금영수증 | `tax_documents` | | 환불 | `refunds`, `refund_lines` | | 이름을 잠시 잡아 둠 | `domain_reservations` | | 등록·연장 작업 | `provisioning_jobs` | | 명부에서 도착한 소식 | `registry_events` | | 결제 없이 고른 설정 | `order_items.config` | | 자동 연장 여부 | `services.auto_renew` | | 입금요청 메일 | `payment_notice_mails` | | 도메인에 등록된 연락처 | `contacts`, `domain_contacts` | | 네임서버 | `domain_nameservers` | | 존, 레코드, 파킹 | `dns_zones`, `dns_records`, `zone_publish` | | 메일·서버·DB·보안 회원권 | `mail_services`, `server_services`, `dbms_services`, `security_services` | | 명의변경의 받는 사람 | `order_items.to_customer_id` | | 해지 예약일 | `services.cancel_at` | | 회원 표시 이름·전화·주소 | `customers` | | 로그인 아이디, 비밀번호 해시 | `customers.login_id`, `customers.password_hash` | | 저장 카드 | `payment_methods` | | 트래픽 사용량 | `service_usage` | | DNSSEC DS | `domain_ds_records` | | 등록인 생년월일·사업자번호 | `contacts.identity_kind`, `contacts.identity_value` | | 카드 토큰 해시 | `payment_methods.billing_key_digest` |