Below you will find pages that utilize the taxonomy term “Data”
gcp web_analytics sample schema
GCP의 Web Analytics 샘플 데이터셋은 BigQuery에서 제공되는 Google Analytics 360 샘플 데이터로, 다음 테이블에 존재합니다:
bigquery-public-data.google_analytics_sample.ga_sessions_*
이 데이터는 Google Analytics의 방문 세션(ga_sessions)을 기준으로 구성되어 있으며, **중첩된 구조 (RECORD)**와 **반복 필드 (REPEATED)**를 포함합니다.
🧩 샘플 스키마 요약 (상위 수준)
✅ 기본 필드
| 필드명 | 타입 | 설명 |
|---|---|---|
fullVisitorId |
STRING | 고유 방문자 ID |
visitId |
INTEGER | 세션 ID |
visitNumber |
INTEGER | 방문 순서 (ex: 첫 방문 = 1) |
visitStartTime |
INTEGER | UNIX timestamp |
date |
STRING | YYYYMMDD 형식 날짜 |
✅ RECORD 필드 (중첩 구조)
trafficSource (RECORD)
| 필드명 | 타입 |
|---|---|
| source | STRING |
| medium | STRING |
| campaign | STRING |
| keyword | STRING |
| adContent | STRING |
device (RECORD)
| 필드명 | 타입 |
|---|---|
| browser | STRING |
| operatingSystem | STRING |
| isMobile | BOOLEAN |
| deviceCategory | STRING |
geoNetwork (RECORD)
| 필드명 | 타입 |
|---|---|
| continent | STRING |
| country | STRING |
| city | STRING |
totals (RECORD)
| 필드명 | 타입 |
|---|---|
| visits | INTEGER |
| hits | INTEGER |
| pageviews | INTEGER |
| bounces | INTEGER |
| transactions | INTEGER |
| transactionRevenue | INTEGER |
✅ hits 필드 (REPEATED RECORD)
1개의 세션 내 여러 행동(페이지뷰, 이벤트 등)이 기록됩니다.
WHERE RAND() < 0.001
WHERE RAND() < 0.001은 SQL에서 **표본 추출 (sampling)**을 할 때 자주 사용하는 패턴입니다. 이 조건의 의미는 다음과 같습니다:
✅ 의미
WHERE RAND() < 0.001
RAND()는 0과 1 사이의 난수를 반환합니다.RAND() < 0.001은 약 0.1% 확률로 TRUE가 됩니다.- 따라서 이 조건을 만족하는 약 0.1%의 행(row) 만 필터링되어 결과에 포함됩니다.
✅ 용도
- 테스트용 샘플 데이터 추출
- 대용량 테이블에서 분석하거나 디버깅할 때 전체 데이터를 쓰지 않고 일부만 뽑기 위함
- 랜덤 서브셋 생성
- 데이터 균형 확인, 속도 향상 등
✅ 예제
SELECT *
FROM big_table
WHERE RAND() < 0.001;
→ big_table에서 무작위로 약 0.1% 행을 추출합니다.
CREATE_MODEL 진행상태 확인
BigQuery에서 create model을 실행 후
This query will process 41.76 MB (ML) when run. Depending on the model type and training data size, the training job can take minutes or even hours.
이런 메시지가 하단에 출력되고는, 이 녀석이 진행중인지 도통 알수가 없는 상태가 되어, 혹시나 하고 진헹상태를 찾아볼수 있는가 싶었지만.
SELECT
job_id,
state,
creation_time,
start_time,
end_time,
error_result
FROM
`region-us`.INFORMATION_SCHEMA.JOBS_BY_USER
WHERE
job_type = 'QUERY'
AND statement_type = 'CREATE_MODEL'
ORDER BY
creation_time DESC
LIMIT 10;
역시나 결과가 안 나온다.
ML.FEATURE_CROSS
좋은 질문입니다!
ML.FEATURE_CROSS()와 CONCAT()는 비슷한 결과를 내지만, 목적과 내부 처리 방식에서 차이가 있습니다.
✅ 공통점
둘 다 **여러 문자열 피처를 결합(cross)**해서 새로운 하나의 피처를 만듭니다.
예:
CONCAT('US', '_', 'mobile') → 'US_mobile'
ML.FEATURE_CROSS(['US', 'mobile']) → 'US_mobile'
❗ 차이점 요약
| 항목 | ML.FEATURE_CROSS() |
CONCAT() |
|---|---|---|
| 목적 | 머신러닝 특화: 교차 피처 생성 | 일반적인 문자열 연결 |
| 자동 최적화 | 내부적으로 범주형 피처로 자동 처리 | 단순한 문자열, 모델에선 수치형 취급될 수도 |
| 입력 타입 제한 | STRING 또는 BYTES만 허용 | 다양한 타입 지원 (숫자, 날짜 등 가능) |
| 모델 의도 표현 | “이건 feature crossing이다"라고 명시적 표현 | 단순 연결 → 모델이 교차 피처인지 모름 |
| 해시 처리 지원 | 내부적으로 가능 (옵션 없음, 향후 지원 가능) | 없음 |
🧠 실전 팁
- 모델에 교차 피처임을 명확히 알리고 싶을 때 →
ML.FEATURE_CROSS()사용 - 그냥 텍스트 가공이나 임시 출력용 →
CONCAT()사용
✅ 예제 비교
-- 교차 피처로 학습 시
ML.FEATURE_CROSS([country, device_category]) AS crossed_feature
-- 단순 문자열 가공 (모델은 수치형으로 오해할 수도 있음)
CONCAT(country, '_', device_category) AS crossed_feature
둘 다 같은 문자열 'US_mobile'을 만들지만, 모델이 인식하는 방식은 다릅니다.
Data Dredging
좋은 질문입니다.
“Data Dredging”(데이터 채굴, 또는 p-hacking)은 통계와 데이터 과학에서 아주 위험한 오류이자 비윤리적인 실수 중 하나입니다.
📌 Data Dredging이란?
Data Dredging이란,
의미 있는 결과를 찾기 위해 데이터를 반복적으로 분석해서 우연히 나온 통계적 유의성을 발견하는 행위입니다.
즉,
- 원래 가설도 없이
- 데이터 안에서 아무 의미나 찾아보려다
- 우연히 나오는 “그럴듯한” 결과에 의미를 부여하는 것.
🎯 왜 문제가 될까?
| 문제점 | 설명 |
|---|---|
| 🎲 우연한 발견 | 수많은 분석 중 일부는 단순히 우연히 유의하게 나올 수 있음 |
| 📈 잘못된 인사이트 | 실제로는 관련이 없는 변수 사이에 잘못된 관계가 발견됨 |
| 💥 재현 불가 | 다른 데이터셋에서는 다시 같은 결과가 안 나옴 |
| 📉 모델 과적합 위험 | 학습 데이터에만 맞춘 결과 → 일반화 성능 저하 |
🧪 예시
예를 들어:
Principal Component Analysis (PCA)
좋습니다!
Principal Component Analysis (PCA) — 바로 정확하고 깔끔하게 정리해드리겠습니다.
🎯 PCA란?
**PCA (주성분 분석)**는 고차원 데이터를 저차원으로 압축하면서,
데이터의 가장 중요한 특징(분산)을 최대한 보존하는 차원 축소(dimensionality reduction) 기법입니다.
즉,
- 데이터를 요약하면서
- 정보 손실을 최소화하고
- 새로운 축(Principal Components) 을 찾는 방법입니다.
🚀 PCA를 쓰는 이유
| 목적 | 설명 |
|---|---|
| 차원 축소 | feature 수가 많으면 계산이 느리고 과적합(overfitting) 위험 → 줄여서 효율적으로 만듦 |
| 노이즈 제거 | 덜 중요한 축을 제거하면서 데이터의 핵심 구조를 보존 |
| 시각화 | 고차원(>3D) 데이터를 2D/3D로 투영해서 쉽게 볼 수 있게 함 |
| 속도 향상 | 학습이나 추론 시 feature 수 줄여서 처리 속도 빠르게 |
📚 쉽게 예시
예를 들어:
Bucketized Feature + Crossed Feature
좋은 질문입니다!
GCP (특히 Vertex AI Feature Store나 BigQuery ML에서) “bucket type feature“은 매우 자주 나오는 개념인데, 쉽게 정리해드릴게요.
🎯 “Bucketized Feature"란?
**연속적인 숫자형 feature(numeric feature)**를 구간(buckets)으로 나눠서, 범주형(categorical) feature처럼 처리하는 방식입니다.
Bucket type은 GCP에서는 주로
- Feature Store feature schema 정의 시,
- BigQuery ML 모델 훈련 시 (
TRANSFORMATIONS)
사용됩니다.
🚀 왜 bucket 처리를 할까?
| 이유 | 설명 |
|---|---|
| 비선형성 표현 | 숫자값 자체보다 “어느 구간에 속했는지"가 더 중요한 경우 많음 (예: 나이, 가격 등) |
| 모델 복잡도 감소 | 작은 숫자 차이를 신경 쓰지 않고 구간 단위로 학습 |
| 해석 용이성 증가 | 모델 결과를 사람이 이해하기 쉬워짐 (“나이 30~39세 그룹”) |
| Outlier(이상치) 영향 감소 | 너무 큰 숫자에 덜 민감하게 만듦 |
📚 쉽게 예시
| 원래 값 (연속형 숫자) | Bucket 처리 결과 |
|---|---|
| 22 | 20–30 구간 (bucket 2) |
| 27 | 20–30 구간 (bucket 2) |
| 35 | 30–40 구간 (bucket 3) |
| 47 | 40–50 구간 (bucket 4) |
| 82 | 80–90 구간 (bucket 8) |
- 예를 들어, 나이(age) 를 10살 단위 버킷으로 나누는 식입니다.
✨ GCP 용어로 구체적으로 말하면
- Feature Store나 BQML에서는 feature type을 정의할 때
"bucketized"옵션을 줄 수 있습니다.
예시:
Vertex AI Feature Store에 Entity를 선언해서 사용하는 이유
좋은 질문입니다!
**GCP**(Google Cloud Platform)에서 **SQL 테이블**을 직접 쓰지 않고, 굳이 **Vertex AI Feature Store**에 **Entity**를 선언해서 사용하는 이유를 설명드릴게요.
---
# 🎯 핵심 요약
> **Feature Store는 모델 학습(training)과 예측(serving) 시 같은 Feature를 일관되게 쓰기 위해 만든 시스템**입니다.
> 그냥 SQL 테이블을 쓰면 여러 문제(데이터 불일치, 실시간 대응 실패 등)가 생기기 때문입니다.
---
# 🚀 구체적인 이유 정리
| 항목 | 설명 |
|:---|:---|
| **Train/Serving Skew 방지** | <br>**모델 학습할 때** 쓴 Feature 값과, **실제 서비스할 때** 쓸 Feature 값이 달라지면 성능이 나빠집니다.<br>→ Feature Store는 동일 Feature를 관리해서 이걸 막아줍니다. |
| **Feature 재사용** | <br>다른 모델에서도 같은 Feature를 쉽게 재사용할 수 있습니다.<br>→ 중복 계산/중복 저장 방지 |
| **Feature 버전 관리 (Feature Versioning)** | <br>Feature가 바뀌어도 버전을 관리해서<br>과거 모델 재학습(retrain)이나 롤백이 가능합니다. |
| **온라인(Serving) Feature 제공** | <br>API처럼 빠르게 실시간 Feature 조회가 가능.<br>→ SQL은 보통 batch 처리가라 느림 |
| **Metadata 관리** | <br>Feature 이름, 타입, 생성 방식, 품질, 설명 등 메타데이터를 체계적으로 관리할 수 있습니다. |
| **Consistency and Monitoring** | <br>Feature 값 품질 모니터링(드리프트 체크, null 값 검사 등) 가능 |
| **Scaling** | <br>대규모 데이터에 대해서도 안정적인 성능 제공 (특히 실시간 inference에서 중요) |
---
# ✨ 쉽게 말하면
| 그냥 SQL 테이블 쓰면 | Feature Store 쓰면 |
|:---|:---|
| 학습 때 따로 뽑고, 서비스 때 따로 뽑아야 함 → 일관성 깨짐 | 하나로 관리 → 학습/서비스 일관성 보장 |
| Feature마다 매번 새로 쿼리 작성 | 재사용 가능 (한번 등록하면 끝) |
| 실시간 조회 어렵고 느림 | 빠른 실시간 조회 API 제공 |
| 데이터 품질 체크 힘듦 | Feature 품질 자동 모니터링 |
---
# 📦 예를 들어서
**상황:**
- `user_id`, `recent_purchases`, `avg_session_time` 이런 feature를 SQL에서 직접 뽑아서 모델 학습했다고 칩시다.
- 나중에 실서비스(Serving)에서는 다른 사람이 비슷한 쿼리를 새로 짜서 가져옴 → 값이 달라질 위험 있음 (Train/Serving Skew 발생!)
- Feature Store에 `Entity: user_id`를 등록하고, Feature `recent_purchases`, `avg_session_time`를 등록하면, 학습과 Serving이 같은 데이터를 확실하게 사용합니다.
---
# 🚀 한 문장 요약
> **Feature Store를 쓰는 이유는 "학습과 서비스 간 데이터 불일치를 막고, Feature를 일관성 있게, 재사용 가능하게, 빠르게 관리하기 위해서"입니다.**
---
## 📚 추가로 궁금할 수 있는 것
- Vertex AI Feature Store 구조 (EntityType, Feature, FeatureStore)
- Feature Store Online/Offline Serving 예시
- Vertex AI Feature Store vs BigQuery ML 직접 연결 비교
필요하면 바로 이어서 예제/그림도 만들어드릴게요! 🔥
**혹시 "Vertex AI Feature Store를 SQL 테이블로 등록하는 흐름"이나 "Python으로 Feature Store에 등록하는 예시 코드"도 보고 싶나요?** 🚀
(2분 안에 준비해드릴 수 있어요!)
RFC 3339 형식이란?
좋은 질문입니다!
RFC 3339 형식은 날짜와 시간을 표준적으로 표현하는 규칙입니다.
아주 많이 쓰이기 때문에 확실히 이해해두면 유용합니다.
🎯 RFC 3339 형식이란?
RFC 3339는 날짜(Date)와 시간(Time)를 표기하는 공식 표준 포맷입니다.
ISO 8601 포맷을 기반으로 하되,
컴퓨터 시스템/네트워크용으로 조금 더 엄격하게 규정된 형태입니다.
주로
- API 통신 (REST API, GraphQL)
- 로그 기록 (Cloud Logging, Databases)
- 타임스탬프 저장 (BigQuery, PostgreSQL)
에서 RFC3339 형식이 기본입니다.
📚 기본 포맷
YYYY-MM-DDTHH:MM:SSZ
또는
YYYY-MM-DDTHH:MM:SS±hh:mm
| 요소 | 의미 |
|---|---|
YYYY |
연도 (Year) |
MM |
월 (Month) |
DD |
일 (Day) |
T |
날짜와 시간 구분자 (고정) |
HH |
시 (Hour, 24시간제) |
MM |
분 (Minute) |
SS |
초 (Second) |
Z |
UTC 기준 시간 (Z는 “Zulu Time” = UTC) |
±hh:mm |
UTC로부터의 오프셋 (Time zone 차이) |
🎯 예시
| 타입 | 예시 | 설명 |
|---|---|---|
| UTC 기준 | 2025-04-29T08:30:00Z |
2025년 4월 29일 08:30 (UTC) |
| 한국시간 (KST, UTC+9) | 2025-04-29T17:30:00+09:00 |
같은 시각, 한국 기준 |
| 다른 타임존 | 2025-04-29T02:30:00-06:00 |
UTC-6 지역 기준 |
📦 주의할 점
-
T는 꼭 있어야 합니다. (날짜와 시간 구분자)
Avro 파일 형식이란?
좋습니다!
Avro 파일 포맷에 대해 정확하고 쉽게 설명드릴게요.
🎯 Avro 파일 형식이란?
Apache Avro는 데이터를 효율적으로 저장하고 전송하기 위한
바이너리 기반의 파일 포맷입니다.
주로 빅데이터 시스템(예: Hadoop, Kafka, BigQuery 등)에서 많이 사용됩니다.
📦 Avro의 주요 특징
| 항목 | 설명 |
|---|---|
| Schema 기반 | 파일 안에 **데이터 구조(Schema)**를 함께 저장 |
| 바이너리 형식 | 사람 눈에는 안 보이는 이진 데이터로 저장 → 빠르고 작음 |
| Self-describing | 파일 안에 Schema가 들어있어서 따로 설명서 없이 읽을 수 있음 |
| 빠른 읽기/쓰기 | 고속 직렬화/역직렬화 (serialization/deserialization) 가능 |
| 언어 독립성 | Java, Python, C++, Go 등 다양한 언어에서 읽고 쓸 수 있음 |
🎯 Avro 파일 구조 (간단)
[ 파일 헤더 (magic bytes + metadata + schema) ]
[ 데이터 블록 1 ]
[ 데이터 블록 2 ]
[ ... ]
- Header: Schema와 metadata가 들어 있음
- Block: 실제 레코드 데이터가 저장되어 있음
🎯 Schema 예시 (JSON 형식)
Avro Schema는 JSON 포맷으로 작성됩니다. 예를 들면:
console + data
gcloud config set project qwiklabs-gcp-02-806cc13914e8
gcloud config list project
bq show bigquery-public-data:samples.shakespeare
bq query --use_legacy_sql=false \
'SELECT
word,
SUM(word_count) AS count
FROM
`bigquery-public-data`.samples.shakespeare
WHERE
word LIKE "%raisin%"
GROUP BY
word'
Use the bq ls command to list any existing datasets in your project:
# 현재 내 dataset
bq ls
# 오픈 데이터셋
bq ls bigquery-public-data:
# make dataset
bq mk babynames
curl -LO http://www.ssa.gov/OACT/babynames/names.zip
unzip names.zip
# 스키마 지정해서 업로드
bq load babynames.names2010 yob2010.txt name:string,gender:string,count:integer
# 확인
bq show babynames.names2010
bq query "SELECT name,count FROM babynames.names2010 WHERE gender = 'F' ORDER BY count DESC LIMIT 5"
# 지우는 것도 가능
bq rm -r babynames
CVID-19 오픈 데이터 세트
Visualize Data
무엇보다도 디지털 소비는 클라우드 데이터 팀이 데이터와 상호 작용하는 매체를 이해하는 것. 다음으로, 데이터 시각화를 공유할 대상 고객이 누구인지 아는것이 중요. 하지만 디지털 매체의 경우, 청중이 데이터와 어떻게 상호작용하는지, 그리고 상호작용을 통해 무엇을 기대하는지도 고려해야 함. 클라우드 데이터 분석가로서 귀하의 대상 고객은 여러 곳에서 얻은 정보를 사용합니다. 그리고 사용자들은 정보가 최신이고 대화형기를 기대합니다. 또한 그들은 중요한 콘텐츠만 표시하기 위해 데이터를 필터링하고 싶어할 것입니다.
디지털 사용자는 직관적이고 사용하기 쉬우며, 지침이나 설명이 거의 없거나 전혀 없는 사용자 경험을 기대합니다.
Serverless dataflow
- Beam의 가장 큰 특징은 이식성임.
- 이식성 API(Portability API)라고 불림.
- SDK와 러너가 서로 균일하게 작동할 수 있음
[Separating compute and storage with Dataflow]
-
Dataflow
-
Dataflow Shuffle Service GroupByKey: GroupByKey는 전체 데이터를 셔플하기 때문에 비용이 크고, 성능 저하가 있을 수 있어요. 가능하면 CombinePerKey 같은 변형으로 대체하는 것이 좋습니다. CoGroupByKey: 두 개 이상의 데이터셋을 key 기준으로 join할 때. 예: 사용자 정보와 구매 이력, 학생과 성적 등. 각 PCollection은 key-value 쌍이어야 하며, key는 동일한 타입이어야 함 Combine: 데이터에 대해 집계 연산을 수행하는 트랜스폼입니다. 예를 들어 합계, 평균, 최대값 등을 구할 수 있어요. 두 가지 주요 변형이 있습니다: CombineGlobally: 전체 데이터에 대해 집계 CombinePerKey: key별로 집계
Trifacta
Google StudyLab을 살펴보다 Dataprep에서 Trifacta를 발견하고 매우 흥미로와한다. 이미 데이터 준비분야에서는 오래된 내용인것 같지만, 정보가 많지 않은 이유는 무엇일까 궁금하지만, 찾은 동영상은 이것을 참고하면 될 것 같다.
통상적인 ETL도구 모습이다.
![]() |
|---|
| Flow라는 이름으로 부르고 있다. |
데이터 소스가 아주 많은데..
![]() |
|---|
| Add Dataset |
- 과연 얼마나 효과적으로 작용할 것인지는 해보기 전에는 모른다.
추가하기 전에 미리보기가 가능하다.
![]() |
|---|
| Dataset Preview |
- 이렇다는 이야기는 요청이 있을 떄 준비하는것이겠지?
- 설마 미리보기를 미리 다 만들어 두나?
데이터셋을 추가하면 기본 흐름을 잡아준다마는.
![]() |
|---|
| Dataset-Recipe-Output |
- 딱히 효과적이라고 느끼지 못했다.
레시피로 들어가면 보여지는 저 준비 이미지가
![]() |
|---|
| Load Data |
- 이 녀석에가 가장 인상적이었던 부분은 데이터 각 컬럼을 분석해서 컬럼 상단에 표시한다는 점이다
- 이것은 이 도구가 지향하고 있는바. 준 데이터의 준비를 위한것이라는 목적에 매우 부합하는 UI라는 생각이 들었다
- 저 준비이미지는가 나타내는 각 컬럼의 시계열분포를 의미하는 형상이 매우 적절하다는 생각이다.
데이터가 로딩된 모습
![]() |
|---|
| Column head |
- 각 컬럼의 특성(데이터 형)을 인식한 것이 인상적이다
- 그것을 바탕으로 오류(붉게 표시된 부분) 여부까지 표시한다
- 물론 데이터의 분포를 시계열과 %로 표시하는 것은 기본이다.
- 그런데 그 표시가 준부가 아니다. 그것을 기반으로 조작이 가능하다.
컬럼 상세
![]() |
|---|
| Column details |
- Unique Values 하나만 해도 충분히 도움이 될 거 같다.
컬럼내 데이터 필터를 위한 선택
![]() |
|---|
| 시계열에서 특정 조건을 선택한 모습 |
- 컬럼 헤더에서 시계열의 한 조건을 선택하면 아래 실제 데이터가 하일라이트 되는 것은 누가 생각해 낸 아이디어일까?
![]() |
|---|
| Image Desc. |
![]() |
|---|
| Image Desc. |
![]() |
|---|
| Image Desc. |
![]() |
|---|
| Image Desc. |
![]() |
|---|
| Image Desc. |
Course 3
[The data journey]
- Collection
- Processing: 데이터를 사용 가능한 형식으로 변환. 문제를 식별하기 위해 데이터를 검토+탐색+정리+구성 및 표준화.
- Storage: 비지니스 요구에 따라 로컬 또는 클라우드에 데이터를 저장.
- Analyze: 사용자에게 필요한 통찰력을 발견하기 위해 추세와 패턴을 식별
- Activate: 활성화. 관계자에게 시각화를 제시하고 데이터에서 얻은 통찰력을 홣용하여 의사결정과 조치를 취하는 최종 결과.
데이터의 여정은 선형적이지 않다는 것이 중요.
-
Iterative
-
Repeated
-
Tailored
-
Transformation
[The data pipeline]
- Extraction
- Transformation
- Loading
[And]
- Data transformation plan
- Transformation strategies
[Data collection steps]
Data ananysis Course 2
Course 2
- Data storage
- Data connection
- Data types
- Data structures
- Table schemas
- Batch and streaming data processing
- Denormalized data
- Data governance
- Metadata
- Data catalogs
- Data lakehouse architecture
- Dataplex
- Identify and trace data sources
- Access data libraries
- Explore data reference architectures
- Manage tables in BigQuery
- Add and export data
- Query tables
- Access data from Google Cloud services
- Manage Dataproc
- Benefits of data partitioning
Manage Access Control with Google Cloud IAM | Google Cloud Labs 통찰력은 그것을 얻은 데이터만큼만 유효합니다. 시작하기 전에 데이터 소스가 정확하고 전반적인 그림을 정확하게 나타내는지 확인하세요.
Systems of Record(SOR)란?
Google Data storage and connection이라는 강의를 보고 있는데, Systems of record라는 단어가 나왔고. 그 번역을 보고 있으려니 무슨 개소린가 싶었지만.
금융권 기준으로 계정계를 말하는것으로 생각해도 될 거 같기는한데. 기술이 어려운게 아니라. 문화적 용어가 상이해서 어렵다.
**System of Record (SOR)**과 **Transactional Database (TDB)**는 관련 개념이지만, 목적과 역할이 다릅니다. SOR은 데이터 관리의 개념, TDB는 데이터 저장소의 유형입니다.
이렇게 설명하면 말이된다.
🔹 Systems of Record(SOR)란?
**System of Record (SOR)**는 기업이나 조직에서 가장 신뢰할 수 있는 공식 데이터 저장소를 의미합니다.
즉, 특정 데이터를 최종적으로 보관하고 유지하는 “진실의 단일 원본(Single Source of Truth)” 역할을 합니다.












