IT에서 말하는 도메인이란
처음에는 보통 google.com, naver.com 같은 인터넷 주소를 떠올린다. 하지만 백엔드, 데이터베이스, 네트워크, 보안, DDD, AI 분야로 넘어가면 도메인의 의미가 조금씩 달라진다.
도메인이라는 단어의 기본 뜻은 영역, 범위, 분야이다.
즉, IT에서 도메인은 문맥에 따라 “주소의 영역”, “업무의 영역”, “데이터 값의 범위”, “지식의 분야” 처럼 다르게 해석된다.
1. 인터넷 주소로서의 도메인
가장 흔하게 접하는 도메인은 웹사이트 주소이다.
예를 들어 다음과 같은 것들이 있다.
google.com
naver.com
dev-burnern.dev
github.com
사람은 숫자로 된 IP 주소보다 문자로 된 이름을 기억하기 쉽다.
그래서 142.250.xxx.xxx 같은 IP 주소 대신 google.com 같은 도메인 이름을 사용한다.
즉, 인터넷 주소로서의 도메인은 쉽게 말하면 다음과 같다.
사람이 기억하기 쉬운 웹사이트 이름
예를 들어 개인 블로그를 운영할 때 dev-burnern.dev 같은 도메인을 구매해서 Vercel, GitHub Pages, AWS 같은 서비스에 연결할 수 있다.
2. DNS에서의 도메인
도메인 이름만 있다고 해서 바로 웹사이트에 접속할 수 있는 것은 아니다.
브라우저는 결국 서버의 IP 주소를 알아야 한다.
이때 사용되는 시스템이 DNS이다.
DNS는 Domain Name System의 약자로, 도메인 이름을 IP 주소로 바꿔주는 시스템이다.
예를 들어 사용자가 브라우저에 다음 주소를 입력했다고 하자.
dev-burnern.dev
그러면 DNS는 이 도메인이 어느 서버를 가리키는지 찾아준다.
DNS에서 자주 등장하는 설정은 다음과 같다.
| DNS 레코드 | 의미 |
|---|---|
| A Record | 도메인을 IPv4 주소에 연결 |
| AAAA Record | 도메인을 IPv6 주소에 연결 |
| CNAME | 도메인을 다른 도메인에 연결 |
| MX | 이메일 서버 설정 |
| TXT | 인증, 보안, 소유권 확인 등에 사용 |
| NS | 도메인을 관리하는 네임서버 지정 |
예를 들어 Vercel에 개인 도메인을 연결할 때 A Record나 CNAME을 설정하는 이유가 여기에 있다. |
정리하면 DNS에서의 도메인은 다음과 같다.
도메인 이름이 실제 서버를 찾아갈 수 있도록 관리되는 이름 체계
3. 이메일 도메인
이메일에서도 도메인이라는 개념이 사용된다.
예를 들어 다음 이메일 주소를 보자.
user@gmail.com
admin@company.com
contact@dev-burnern.dev
여기서 @ 뒤에 있는 부분이 이메일 도메인이다.
gmail.com
company.com
dev-burnern.dev
이메일 도메인은 해당 이메일이 어느 메일 서버를 사용하는지 알려준다.
예를 들어 user@gmail.com은 gmail.com 도메인의 메일 시스템을 사용한다.
회사 이메일인 name@company.com은 해당 회사 도메인을 사용하는 이메일이다.
이메일 도메인을 제대로 사용하려면 DNS에서 MX Record 설정이 필요하다.
또한 스팸 방지와 보안을 위해 SPF, DKIM, DMARC 같은 TXT 레코드 설정도 함께 사용된다.
정리하면 이메일 도메인은 다음과 같다.
이메일 주소에서 메일을 주고받는 서버와 소속을 나타내는 영역
4. 네트워크 도메인
네트워크 분야에서도 도메인이라는 단어가 사용된다.
대표적으로 Windows Domain, Active Directory Domain 같은 개념이 있다.
회사나 학교에서는 여러 컴퓨터, 사용자 계정, 권한, 보안 정책을 한 번에 관리해야 한다.
이때 같은 정책으로 묶인 네트워크 영역을 도메인이라고 부른다.
예를 들어 회사 내부에서 다음과 같은 작업을 중앙에서 관리할 수 있다.
직원 계정 관리
컴퓨터 접 근 권한 관리
공유 폴더 접근 제어
로그인 정책 설정
보안 정책 적용
즉, 네트워크 도메인은 단순한 웹사이트 주소가 아니라 조직 내부의 컴퓨터와 사용자를 관리하는 영역에 가깝다.
정리하면 네트워크 도메인은 다음과 같다.
같은 관리 정책과 인증 체계를 공유하는 네트워크 영역
5. 비즈니스/서비스 도메인
백엔드 개발에서 가장 중요한 도메인 개념 중 하나는 비즈니스 도메인이다.
비즈니스 도메인은 서비스가 다루는 업무 영역을 의미한다.
예를 들어 쇼핑몰 서비스를 만든다고 하면 주요 도메인은 다음과 같다.
회원
상품
장바구니
주문
결제
배송
리뷰
쿠폰
배달 앱이라면 도메인이 이렇게 나뉠 수 있다.
사용자
가게
메뉴
주문
결제
배달
리뷰
정산
여기서 도메인은 단순한 테이블 이름이나 클래스 이름이 아니다.
서비스가 실제로 해결해야 하는 업무 영역을 의미한다.
예를 들어 주문 도메인은 단순히 주문 데이터를 저장하는 것이 아니라 다음과 같은 규칙을 포함한다.
사용자는 상품을 주문할 수 있다.
결제가 완료되어야 주문이 확정된다.
주문 취소는 배송 시작 전까지만 가능하다.
쿠폰은 특정 조건에서만 사용할 수 있다.
정리하면 비즈니스/서비스 도메인은 다음과 같다.
서비스가 해결하려는 실제 업무 영역
6. DDD에서의 도메인
DDD는 Domain-Driven Design, 즉 도메인 주도 설계이다.
DDD에서 도메인은 소프트웨어가 해결하려는 핵심 문제 영역을 뜻한다.
예를 들어 쇼핑몰에서 정말 중요한 것은 단순 CRUD가 아니다.
주문은 언제 생성되는가?
결제 실패 시 주문 상태는 어떻게 되는가?
배송이 시작된 주문은 취소할 수 있는가?
환불은 어떤 조건에서 가능한가?
DDD는 이런 비즈니스 규칙을 중심으로 소프트웨어를 설계하는 방식이다.
DDD에서는 다음과 같은 개념들이 자주 등장한다.
| 개념 | 의미 |
|---|---|
| Entity | 식별자를 가진 도메인 객체 |
| Value Object | 값 자체가 중요한 객체 |
| Aggregate | 관련된 객체를 하나로 묶은 단위 |
| Repository | 도메인 객체를 저장하고 조회하는 역할 |
| Domain Service | 특정 Entity에 넣기 애매한 도메인 로직 |
| Bounded Context | 도메인 의미가 일관되게 유지되는 경계 |
예를 들어 User라는 단어도 서비스마다 의미가 다를 수 있다. |
쇼핑몰에서는 구매자일 수 있고, 관리자 시스템에서는 운영자일 수 있으며, 배송 시스템에서는 수령자일 수 있다.
DDD에서는 이런 의미가 섞이지 않도록 Bounded Context를 나눈다.
정리하면 DDD에서의 도메인은 다음과 같다.
소프트웨어가 해결해야 할 핵심 비즈니스 문제 영역
7. 데이터베이스에서의 도메인
데이터베이스에서도 도메인이라는 단어가 사용된다.
데이터베이스에서 도메인은 어떤 컬럼이 가질 수 있는 값의 범위를 의미한다.
예를 들어 age 컬럼이 있다고 하자.
age: 0 이상 150 이하의 정수
이때 age의 도메인은 0~150 사이의 정수라고 볼 수 있다.
다른 예시는 다음과 같다.
| 컬럼 | 도메인 |
|---|---|
| gender | M, F |
| price | 0 이상의 숫자 |
| 이메일 형식을 만족하는 문자열 | |
| order_status | READY, PAID, SHIPPED, CANCELED |
| created_at | 날짜와 시간 |
| 데이터베이스에서 도메인을 명확히 정하면 잘못된 데이터가 들어오는 것을 막을 수 있다. |
예를 들어 주문 상태가 다음 값만 가져야 한다고 하자.
READY
PAID
SHIPPED
CANCELED
그런데 실수로 HELLO, DONE, 123 같은 값이 들어오면 데이터의 신뢰성이 깨진다.
그래서 데이터베이스에서는 CHECK 제약조건, ENUM, NOT NULL, FOREIGN KEY 등을 사용해 값의 범위를 제한한다.
정리하면 데이터베이스에서의 도메인은 다음과 같다.
컬럼이나 속성이 가질 수 있는 값의 범위
