공통 입력 정보
상태: 공통 표준 — 2026-10-10 KST 사용자 결정
적용 대상: company-wide — Leysys의 모든 제품·서비스(ERP, 콘솔, 포털, 앱)가 사람·법인·단체·사업자·조직의 정보와 연락처·주소를 받거나 저장하는 곳(화면 라벨, HTML
autocomplete, 코드 식별자, API 필드, DB 컬럼)과 문서·데모·테스트의 예시 값정본 분류: 이 페이지와 아래 다섯 쪽이 회사 공통 표준의 정본입니다. 결정 근거·검토·제품 현황·이행 단계는 leysys-design의 결정 기록
COMMON-FIELDS-2026-10-10에 있습니다. 규칙을 바꿀 때는 정본과 결정 기록을 함께 고칩니다. 입력 화면의 구현은 leysys-design이, 각 제품의 채택 현황·데이터 이행·의도적 편차는 해당 제품 저장소가 소유합니다. 문서 변경은 런타임 채택을 증명하지 않습니다.
ERP든 앱이든 보편적으로 입력하는 정보를 국제 표준에 맞춘 한 벌의 이름과 규칙으로 다룹니다. 이 쪽은 공통 규칙이고, 분야별 필드는 다음 다섯 쪽에 있습니다.
| 쪽 | 다루는 것 |
|---|---|
| 당사자 | 개인·법인·법인 아닌 단체, 세법상 구분, 식별번호, 법적 대표자 |
| 사업자 | 사업자등록·고유번호, 사업장, 세금계산서 항목 |
| 조직 | 회사·단체의 프로필, 부서, 소속(직함) |
| 연락처 | 전화번호·이메일주소·웹·SNS, 담당자 묶음 |
| 주소 | 주소 필드, 주소 종류, 한국 주소 저장 |
원칙
의미를 먼저 정합니다. 법적·세무상 의미는 법령과 공식 등록 체계(법원 등기, 국세청)가 정합니다. 이름은 그 의미가 정해진 뒤에 고릅니다.
이름은 국제 표준에서 고릅니다. 같은 의미의 후보가 여럿이면 다음 순서입니다.
- WHATWG HTML 자동완성 토큰
- schema.org 속성
- vCard(RFC 6350·9554)
국제 대응이 없는 한국 제도는 법령 용어를 영어로 옮긴 이름을 씁니다(예:
businessRegistrationNumber).HTML 자동완성 토큰은 입력 목적을 정의할 뿐 데이터 이름을 정하지 않습니다. Leysys는 회사 결정으로 그 어휘를 데이터 이름에도 씁니다.
토큰·코드·DB가 같은 단어를 씁니다.
autocomplete에는 토큰 그대로, 코드·API에는 단어를 camelCase로 붙이고, DB에는 snake_case로 씁니다.- 예:
mobile tel→mobileTel/mobile_tel,bday→bday,given-name→givenName/given_name. - schema.org 속성은 대소문자까지 그대로 씁니다(
taxID→ DBtax_id).
임의로 줄이지 않습니다.
businessRegNum·mgmtCode같은 줄임 이름은 쓰지 않습니다. 표준 토큰(tel·bday)과 공인된 약어(ISO, KSIC, URL, E.164 등)는 그대로 씁니다.필요한 필드만 둡니다. 모든 레코드에 모든 필드를 만들지 않습니다(레코드 식별 필드의 「있으면 이 규칙으로」와 같습니다).
저장 구조
- 여럿일 수 있는 정보는 목록과 관계로 저장합니다. 식별번호(
identifiers), 주소(addresses), 담당자(contacts), 법적 대표자(legalRepresentatives), 업종 분류(industryClassifications), SNS(socialProfiles)가 해당합니다. 목록 이름은 복수형입니다. - 한 칸 이름 필드는 입력·출력 계약입니다.
residentRegistrationNumber,businessAddressLine1같은 필드는 화면·법정 서식·연동의 입력·출력에서 씁니다. 같은 값을 목록과 한 칸 필드에 두 번 저장하지 않습니다. - API는 중첩 객체로 냅니다. 예:
legalAddress: { postalCode, addressLine1, … },primaryContact: { name, mobileTel, … }. 접두어를 이어 붙인 평면 이름(businessLegalRepresentativeName)은 만들지 않습니다. 평면 접두어 필드 (businessAddressLine1)는 평면 입력·내보내기(CSV 등)에서만 씁니다. - 발행한 문서는 발행 당시 값을 그대로 둡니다. 계약서·세금계산서·영수증에 찍힌 이름·주소·번호는 이후 레코드가 바뀌어도 고치지 않습니다. 같은 값을 두 번 두지 않는다는 원칙의 예외입니다.
값 형식
| 값 | 저장 형식 | 표준 |
|---|---|---|
| 날짜 | YYYY-MM-DD | ISO 8601 |
| 날짜·시각 | 시간대 오프셋을 포함한 ISO 8601. 시간대 이름이 필요하면 IANA 이름(Asia/Seoul) | ISO 8601, IANA tz |
| 나라 | 두 글자 대문자(KR) | ISO 3166-1 alpha-2 |
| 나라 아래 1단계 행정구역 코드 | KR-11 | ISO 3166-2 |
| 통화 | 세 글자(KRW). 금액의 소수 자릿수는 통화를 따름(KRW 0) | ISO 4217 |
| 언어 | ko, ko-KR, en-US | BCP 47 |
| 전화번호 | +821012345678 | ITU-T E.164 |
| 이메일주소 | 입력 그대로 저장(앞뒤 공백만 제거). 같은 주소인지 비교할 때 도메인(@ 뒤)만 대소문자를 무시하고, @ 앞은 그대로 비교 | WHATWG 유효 이메일주소, RFC 5321 |
| 웹 주소 | 유효 URL | WHATWG URL |
| 글자 | UTF-8. 사람에게 보이는 글자(이름·상호·주소)는 NFC로 정규화해 저장. URL·이메일·식별번호는 정규화하지 않음 | Unicode |
- 금액의 반올림과 확정 시점은 각 업무(청구·회계)가 정합니다. 중간 계산의 정밀도와 확정 금액을 구분합니다.
라벨
- 끝을 맞춥니다. 전화 계열은 「번호 / number」, 이메일은 「주소 / address」로 끝냅니다(「휴대전화번호」, 「이메일주소」). 오류 문구 같은 문장도 같은 명사를 씁니다.
- 짧게 줄이지 않습니다. 모바일이나 좁은 칸에서도 「휴대전화」·「전화」·「이메일」·「배송」처럼 끝을 빼지 않고, 화면 폭에 따라 라벨을 바꾸지 않습니다. 좁으면 배치(가로 스크롤·열 폭·라벨과 값을 위아래로)로 풉니다.
- 라벨은 저장되는 필드의 뜻을 따릅니다. 휴대전화 전용 필드에 저장되는 칸은 「전화번호」가 아니라 「휴대전화번호」입니다 (예: 법인 리드의 「담당자 휴대전화번호」). 필드를 대상으로 하는 버튼·시트 제목·배지도 같은 명사를 씁니다 (「이메일주소 변경」).
- 사람 이름은 「이름」, 법인·사업자의 이름은 「상호」(민법 법인·단체는 「명칭」)입니다.
- 「일반전화」·「휴대폰」·「핸드폰」·「이동전화」·「성명」·General phone·First name·Last name은 일반 화면 라벨로 쓰지 않습니다.
- 법정 서식은 서식의 칸 이름을 그대로 씁니다. 세금계산서의 「성명(대표자)」·「상호(법인명)」처럼 법령이 정한 서식을 그리거나 출력할 때가 해당합니다.
입력 안내
- leysys-design의 입력 필드 규칙(
PATTERN-INFO-HINT-PROGRESSIVE-DISCLOSURE, 2026-10-08 KST 개정)을 따릅니다. - 입력 칸 아래 정적 보조 설명은 두지 않습니다. 바꿀 수 없음·단위·입력값 제한(예: 「휴대전화번호만 받습니다」)만 라벨 옆 ⓘ로 알립니다.
- 검증 오류와 동적 상태 문구는 그대로 보여 줍니다.
autocomplete
- 본인 정보를 입력하는 화면(가입, 내 정보, 결제·배송)은 표준 토큰을 씁니다.
- 다른 사람의 정보를 입력하는 화면(직원이 고객·파트너·멤버를 등록하는 콘솔 등)은
autocomplete="off"입니다.off는 브라우저에 대한 요청이지 보장이 아닙니다. 브라우저나 사용자 설정이 무시할 수 있습니다.- 한 화면에 두 종류가 섞이면 필드마다 정합니다.
- 같은 입력 묶음이 반복되면
section-*로 나눕니다(예:section-legal address-line1).section-*은 묶음을 구분할 뿐 뜻이 없습니다. - 표준 토큰의 뜻과 저장값이 다르면 토큰을 쓰지 않습니다. 예를 들어 HTML
sex는 자유 입력 성별 정체성이라, 코드로 받는 성별 칸에는 쓰지 않습니다.
확인 기록
- 휴대전화번호·이메일주소·사업자등록 상태처럼 확인하는 값은 확인 기록을 따로 둡니다.
- 한 번만 남기면 사건 필드 쌍
{필드}VerifiedAt·{필드}VerifiedBy를 둡니다(예:mobileTelVerifiedAt·mobileTelVerifiedBy). 접근 역할 체계의{동사}edAt·{동사}edBy규칙과 같습니다. - 여러 번 확인한 이력이 필요하면 확인 사건 레코드를 둡니다.
- 한 번만 남기면 사건 필드 쌍
- 확인은 확인한 값에 묶입니다. 값이 바뀌면 확인을 해제합니다.
- 외부 기관 확인(국세청 진위확인 등)은 다음을 남깁니다.
- 확인 시각, 확인 출처, 확인에 쓴 값
- 결과: 일치 · 불일치 · 아직 반영 안 됨 · 확인 실패(통신 오류 등). 이 넷을 구분합니다.
- 등록 정보가 일치한다는 확인일 뿐이며, 본인 확인이나 대표권 확인과는 다릅니다.
예시 값
| 항목 | 한국어 화면 | 영어 화면 |
|---|---|---|
| 사람 이름 | 홍길동 | John Doe |
| 휴대전화번호 | 010-1234-5678 | 한국 번호면 그대로(+82 10-1234-5678) |
| 전화번호(유선·인터넷전화)·팩스번호 | 전화 070-1234-5678 · 팩스 070-1234-5679 | 한국 번호면 그대로(+82 70-1234-5678) |
| 미국 전화번호 | — | 202-555-0123 |
| 인증번호 | 123456 | 123456 |
| 이메일주소 | user@example.com | user@example.com |
| 상호 | 주식회사 예시(가상) | Example Inc. (fictitious) |
| 사업자등록번호 | 123-00-45678 | 123-00-45678 |
| 주민등록번호·외국인등록번호·법인등록번호 | ******-******* | ******-******* |
- 전화번호
- 예시는 화면 언어가 아니라 번호가 속한 나라를 따릅니다.
- 010 이동전화의 부여 범위는
010-2XXX–010-9XXX입니다. 예시 번호가 여러 개 필요하면 범위 밖인010-1XXX-XXXX안에서 바꿉니다(예:010-1234-0001). 영구히 연결되지 않는다는 보장은 아니므로 실제 문자 발송 차단은 따로 유지합니다. - 전화번호(유선·인터넷전화)·팩스번호 예시는
070-1234-5678(전화)·070-1234-5679(팩스)입니다. 070 다음 자리가 0·1인 번호(0700·0701)는 부여되지 않아 휴대전화 예시(010-1234-5678)와 같은 원리이고 모양도 같습니다. 여러 개가 필요하면 끝 4자리만 바꿉니다(예:070-1234-0001). - 지역번호(02·031 등) 예시는 쓰지 않습니다.
02-1234-5678처럼 예시로 흔히 쓰던 번호가 실제 번호인 사례가 있습니다. - 실제 가입자 대역 번호는 문서·데모·테스트에 쓰지 않습니다.
- 미국 번호는 북미 번호 계획이 가상 용도로 남긴
555-0100–555-0199만 씁니다.
- 사업자등록번호: 가운데
00은 국세청이 공개한 부여 범위 밖입니다. 화면 표시용 가상값으로만 쓰고, 검증식 테스트나 국세청 진위확인 API에는 쓰지 않습니다.- 사업자 유형(개인사업자·법인사업자)을 보여야 하는 샘플 레코드는 앞 세 자리를
100으로 씁니다(2026-10-17 KST 사용자 결정). 국세청 일련번호 범위(101–999) 밖이라 부여되지 않는 번호입니다. 가운데 두 자리는 보이려는 구분 코드(개인 과세01, 영리법인 본점81, 비영리 단체80등)이고, 마지막 자리는 업계 검증식에 맞춰 경고가 나지 않게 합니다(예:100-01-00011·100-81-00013). 여러 개가 필요하면 일련번호 4자리를 바꾸고 검증번호를 다시 맞춥니다. - 입력 칸 예시(placeholder)는 그대로
123-00-45678입니다.100-XX-XXXXX도 국세청 진위확인 API에는 쓰지 않습니다.
- 사업자 유형(개인사업자·법인사업자)을 보여야 하는 샘플 레코드는 앞 세 자리를
- 13자리 등록번호: 예시도 모두 가립니다. 실제 번호와 겹칠 수 있는 13자리 예시를 쓰지 않습니다.
- 해외 세무번호: 발급국이 부여하지 않는 범위나 발급국 검증 규칙에 어긋나는 값을 씁니다. 예: 미국 EIN은 부여되지 않는 앞자리
00(00-0000001), 독일 부가가치세 번호는 검증 숫자가 맞지 않는 값. 확인할 수 없는 나라는 예시를 가립니다. - 상호: 「(가상)」을 붙입니다. 같은 이름의 실제 업체가 없다고 보장하지는 않습니다.
- 이메일: RFC 2606 예약 도메인(
example.com)을 씁니다. 해석되지 않는 주소가 필요하면user@example.invalid를 씁니다. 예약 도메인도 발송 차단 장치는 아니므로 외부 발송은 따로 막습니다. - 법정 지정값은 예시가 아닙니다. 국세청이 정한 현금영수증 자진발급 번호
010-000-1234가 그 예입니다. - placeholder와 인증번호 칸
- placeholder는 선택입니다. 쓰면 대표 값과 같게 씁니다.
- 인증번호 칸은 비워 두고 붙여넣기와
one-time-code자동완성을 지원합니다.123456으로 통과하는 고정 인증은 문서와 격리된 모의 환경에만 둡니다.
- 테스트 데이터
- 목적별로 둡니다(형식 오류 거부, 앞자리 0, 만료 등).
- 예시 값을 통과시키려고 검증을 느슨하게 하지 않습니다.
- 여러 사람이 나오는 예시는 이름의 문화·길이를 다양하게 씁니다.
채택
- 의미 확인: 필드마다 실제로 무엇을 받는지 먼저 확인합니다(종류 무관·휴대·유선·대표, 개인·법인 등).
- A. 화면: 의미가 그대로인 변경만 합니다. 라벨,
autocomplete, 예시 값, 실제 가입자 대역 번호 교체가 해당합니다. 의미가 바뀌는 필드는 라벨·검증·데이터 계약을 B에서 함께 바꿉니다. - B. 데이터 계약: 코드·API·DB 이름 변경, 목록 구조로의 이전, 값 변환(E.164 등)입니다.
- 최종 상태에 별칭이나 이전 이름 호환 계층을 두지 않습니다.
- 전환은 다음 중 하나로 합니다: 한 번에 전환(원자적 cutover), 유지보수 창, API 버전 전환.
- 전환에 반드시 포함합니다: 기존 데이터 이전(backfill), 접근 규칙·view·trigger·RPC·생성 타입 수정, 되돌리기 검증.
- 운영 데이터가 있는 원격 DB에 적용하는 일은 저장소마다 승인을 받습니다.
- 채택 전 편차는 alert입니다. 이 표준을 이유로 commit·PR·병합을 자동으로 막지 않습니다.
관련 문서
- 레코드 식별 필드 — 고유코드·관리코드·등록번호·유형·상태·이름
- 접근 역할 체계 —
{동사}edAt·{동사}edBy사건 필드 - 자금이체 계좌 역할 명명 — 계좌 정보
- leysys-design
docs/decisions/COMMON-FIELDS-2026-10-10.md— 결정 근거, 검토, 제품 현황, 이행 단계 - HTML Living Standard — Autofill (새 탭)
- MDN —
autocomplete특성 (새 탭) - schema.org (새 탭) — Person · Organization · PostalAddress · ContactPoint
- vCard RFC 6350 (새 탭) · RFC 9554 (새 탭)
- 인터넷전화(나무위키) (새 탭) — 「0700, 0701은 전기통신번호관리세칙 상 존재하지 않는 번호」(070 예시 대역의 근거, 고시 원문은 확인 필요)