데이터 분석을 배우다 보면 꼭 듣게 되는 단어가 바로 정규화(normalization)다. 처음 들었을 때는 무슨 복잡한 수학 공식 같았고, "내가 실무에서 이걸 꼭 알아야 할까?"라는 생각도 들었다. 그런데 실제로 HR 데이터를 다루고, 부트캠프 프로젝트를 경험하면서 정규화의 힘을 절실히 느꼈다. 오늘은 HR 데이터 관점에서 정규화의 개념과 중요성을 정리해보려 한다.

정규화란, 데이터를 "깔끔하게" 정리하는 법
정규화는 데이터를 중복 없이, 논리적으로 잘게 나누고 연결하는 방법이다. 좀 더 쉽게 말하면, "엑셀에 복붙하다가 같은 데이터가 여러 번 반복되어서 생기는 오류를 예방하는 설계 원칙"이다.
예를 들어, 아래와 같은 엑셀 HR 인사카드를 상상해보자.
사번
|
이름
|
부서명
|
부서위치
|
직급
|
평가점수
|
교육명
|
1001
|
김지연
|
인사팀
|
본사 3층
|
대리
|
87
|
신입교육, 보상교육
|
1002
|
이철수
|
물류팀
|
물류센터1
|
사원
|
80
|
안전교육
|
이 표에서 문제가 되는 건, 부서명/부서위치, 교육명 등 여러 정보가 한 줄에 다 들어가 있다는 점이다. 만약 "인사팀"의 위치가 바뀌면? 여러 행을 모두 수정해야 한다. 또, 한 직원이 여러 교육을 받으면? 쉼표로 이어서 기록하니, 나중에 분석할 때 매우 번거로워진다.
물류회사에서 HR 업무를 할 때도 이런 상황이 자주 발생했다. 인사 데이터 관리는 철저해야 하는데, 엑셀로 관리하면서 같은 정보를 여러 시트에 중복 입력하는 실수가 잦았다. 이게 바로 정규화가 필요한 이유다.
HR 데이터 정규화, 한눈에 보기
정규화의 목적은 다음과 같다.
- 데이터 중복 방지 – 같은 정보가 여러 군데 반복 저장되지 않는다.
- 데이터 일관성 유지 – 한 곳만 바꿔도 전체 데이터에 자동 반영된다.
- 관계 설정 용이 – 테이블 간 연결(관계)이 명확하다.
- 분석/쿼리의 효율성 증가 – 대용량 데이터에서도 빠르고 정확하게 결과를 뽑아낼 수 있다.
HR 데이터를 실제로 정규화하면 아래와 같이 쪼개진다.
1. 직원 테이블 (employees)
emp_id
|
이름
|
부서ID
|
직급ID
|
입사일
|
상태
|
1001
|
김지연
|
D01
|
J02
|
2021-01-05
|
재직
|
1002
|
이철수
|
D02
|
J01
|
2022-03-10
|
퇴사
|
2. 부서 테이블 (departments)
부서ID
|
부서명
|
위치
|
D01
|
인사팀
|
본사 3층
|
D02
|
물류팀
|
물류센터1
|
3. 직급 테이블 (positions)
직급ID
|
직급명
|
J01
|
사원
|
J02
|
대리
|
4. 교육 테이블 (trainings)
교육ID
|
교육명
|
T01
|
신입교육
|
T02
|
보상교육
|
T03
|
안전교육
|
5. 교육 이수 내역 (training_history)
emp_id
|
교육ID
|
이수일자
|
1001
|
T01
|
2021-01-10
|
1001
|
T02
|
2021-06-20
|
1002
|
T03
|
2022-03-15
|
→ 정규화를 하면, 데이터가 "세분화"되고, 테이블 간 연결(외래키)로 하나의 인물/부서/교육의 모든 정보를 손쉽게 모을 수 있다.
정규화의 단계, HR 데이터로 이해하기
데이터베이스 이론에서는 정규화를 여러 단계(제1정규형~제5정규형)로 나누는데, HR 데이터로 대표적인 세 단계를 간단히 설명해보겠다.
- 제1정규형(1NF): 원자값 분해
모든 속성값은 더 이상 나눌 수 없는 하나의 값만 가져야 한다.
정규화 전: 교육명에 "신입교육, 보상교육"처럼 여러 값이 한 셀에 있음 정규화 후: 교육 이수 내역 테이블에서 한 직원이 여러 교육을 들으면 여러 행으로 표현
- 제2정규형(2NF): 부분적 함수 종속 제거
기본키에 완전히 종속적이지 않은 속성들을 별도 테이블로 분리한다.
정규화 전: 부서위치가 사번+이름(복합키)이 아닌 부서명에만 종속됨 정규화 후: 부서 관련 정보를 별도 테이블로 분리
- 제3정규형(3NF): 이행적 종속 제거
기본키가 아닌 속성들 간의 종속관계를 제거한다.
정규화 전: 직급명이 사번에 직접 종속되지 않고 직급코드를 통해 간접 종속됨 정규화 후: 직급 정보를 별도 테이블로 분리
실제 HR 데이터, 정규화하지 않으면?
직접 경험을 예로 들면, 물류회사 HR팀에서 인사 데이터를 엑셀로 관리했을 때 '직원' 시트, '부서' 시트, '교육' 시트가 따로 없이 하나에 모든 정보를 넣었다. 퇴사자가 많아지자 어느 순간 데이터가 꼬이고, 같은 부서명이 두 가지로 쓰이거나(예: "인사팀", "HR팀"), 교육 내역을 일일이 복사해서 입력하다 실수가 자주 생겼다.
매월 인사 통계를 뽑을 때마다 데이터 정리부터 시작했고, 이는 불필요한 시간 낭비였다. 이때 "정규화"의 개념을 알았다면 정말 시간을 아끼고, 오류를 줄였을 것이다.
부트캠프에서는 이런 문제점을 해결하는 방법으로 정규화 개념을 배웠고, 프로젝트에서 직접 HR 데이터베이스를 정규화해서 구축해보니 그 효과를 확실히 체감할 수 있었다.
정규화, SQL 쿼리로 확인해보기
정규화된 데이터는 SQL 쿼리에서 강력한 힘을 발휘한다. 예를 들어 "부서별 교육 이수 현황"을 구하고 싶을 때, 여러 테이블을 조인(JOIN)해서 쉽게 뽑아낼 수 있다.
SELECT d.부서명, COUNT(DISTINCT th.emp_id) AS 교육이수자수
FROM employees e
JOIN departments d ON e.부서ID = d.부서ID
JOIN training_history th ON e.emp_id = th.emp_id
GROUP BY d.부서명;
정규화가 실무에 미치는 영향
1. 데이터 유지·관리의 효율성
- 부서명/직급/교육명 등 변경 시 한 곳만 수정하면 전체 데이터 자동 반영
- 신규 교육 도입/부서 신설/직급 변경도 쉽다
- 데이터 입력 시간 단축, 오류 감소
2. 분석/집계의 편리함
- 기간별, 부서별, 교육별 등 다양한 관점에서 분석 가능
- 중복/누락 없이 정확한 집계 가능
- 복잡한 HR 분석 쿼리도 쉽게 작성 가능
3. 데이터 오류, 인재 관리 실패 방지
- 잘못된 중복 데이터로 인한 보고서 오류 최소화
- 이직률, 교육 이수율 등 핵심 HR지표 신뢰성 보장
- 경영진에게 제공하는 HR 통계의 정확성 향상
"정규화" 어렵게 느껴질 때, 이렇게 생각해보자
정규화는 "같은 정보를 여러 번 입력하지 않기 위한 데이터 쪼개기"다. 그리고 테이블은 각자 하나의 주제만 관리한다. 직원은 직원, 부서는 부서, 교육은 교육. 서로 필요한 정보는 "코드(외래키)"로 연결한다.
엑셀에서 VLOOKUP, INDEX-MATCH 등으로 시트 간 정보 끌어올 때 "아, 이게 정규화 기반 설계의 원리구나!" 라고 생각하면 훨씬 쉬워진다. 사실 Excel에서도 테이블 간 관계를 설정하고 데이터 모델을 만들면 Power Query나 피벗 테이블을 더 효과적으로 활용할 수 있다. 이것도 일종의 정규화 개념을 적용한 것이다.
정규화와 비정규화: 균형 찾기
하지만 정규화만이 능사는 아니다. 때로는 의도적으로 정규화를 포기하고 데이터를 중복시키는 '비정규화(Denormalization)'가 필요한 경우도 있다.
예를 들어, 매번 직원별 평균 평가점수를 계산하는 것이 부담된다면, 그 결과를 별도 테이블에 저장해두는 것이 효율적일 수 있다. 이는 데이터 일관성과 성능 사이의 트레이드오프다.
부트캠프 프로젝트에서도 처음에는 모든 테이블을 완벽하게 정규화했지만, 대시보드 성능을 위해 일부 집계 테이블은 의도적으로 비정규화했던 경험이 있다. 실무에서는 이런 균형감이 중요하다는 걸 배웠다.
마치며: 정규화가 만드는 '실무 데이터의 기본기'
나는 앞으로 HR 데이터를 활용한 분석가가 되고 싶다. 그런데 분석 실력만큼 중요한 게 바로 데이터가 얼마나 잘 정리되어 있는가다. 정규화는 그 시작점이자, 데이터를 '자산'으로 만드는 핵심 원칙이다.
정규화를 모르면 중복, 누락, 오류에 시달릴 수밖에 없다. 정규화를 알면, 나중에 SQL, 파이썬, 머신러닝 등 고급 분석 기술도 훨씬 쉽게 따라갈 수 있다.
취업 면접에서도 DB 설계나 SQL 질문이 나올 때 정규화 개념을 명확히 설명할 수 있다면 큰 점수를 얻을 수 있을 것이다. 특히 HR 데이터를 예로 들어 설명한다면 나의 도메인 지식과 기술 지식을 동시에 어필할 수 있다.
데이터는 '정리'가 먼저다. 그리고 그 첫걸음이 정규화다. 앞으로 실무 데이터베이스 설계, HR 데이터 분석 프로젝트를 할 때, 정규화가 내 업무를 어떻게 바꿔줄 수 있을지 항상 먼저 생각해보고 싶다.
오늘의 한줄 요약: 정규화는 HR 데이터의 기본기다. 중복 없는 데이터 구조가 정확한 분석, 빠른 관리, 신뢰할 수 있는 HR 전략의 시작임을 잊지 말자.
'HR애널리틱스 기록' 카테고리의 다른 글
[HR노트] 근로기준법 핵심요약 – 근로자 정의부터 해고까지 한눈에 (0) | 2025.05.22 |
---|---|
[21일차] 데이터로 푸는 HR: SQL JOIN으로 채용-근무-퇴사 한 번에 분석하기 (3) | 2025.05.21 |
[19일차] 이직 예측, 머신러닝으로 확장하면 어떻게 될까? (3) | 2025.05.19 |
[18일차] 실무 HR 데이터로 SQL 쿼리 작성하기 – 이직률 예측 분석 (5) | 2025.05.18 |
[17일차] 실무형 HR 보고서, 서브쿼리와 뷰로 자동화하는 법 (0) | 2025.05.17 |