데이터, 데이터베이스, 그리고 SQL 입문 – 초보자를 위한 기초 가이드
데이터 분석과 대시보드로 레벨업하고 싶은 Excel 사용자들을 위한 안내서
소개
"데이터, 데이터베이스, 그리고 SQL 입문"에 오신 것을 환영합니다 – 이 교재는 Excel 사용자들이 데이터 역량을 확장할 수 있도록 특별히 설계되었습니다. 스프레드시트에 익숙하지만 데이터베이스, SQL, 대시보드의 세계가 궁금하셨다면, 바로 이 책이 제격입니다.
이 책은 여러분이 이미 알고 있는 개념들을 기반으로 Excel과 고급 데이터 도구 사이의 간극을 메워줍니다. 행(row), 열(column), 수식(formula)에 대한 기존 지식을 바탕으로 데이터베이스, SQL 쿼리, 인터랙티브 대시보드 등을 소개할 것입니다.
이 책을 다 읽고 나면 데이터베이스가 어떻게 작동하는지 이해하고, 기본적인 SQL 쿼리를 작성할 수 있으며, 이러한 기술들이 현대 비즈니스에서 사용하는 대시보드 및 분석 도구를 어떻게 구동하는지 알게 될 것입니다. 가장 중요한 점은, 프로그래밍 경험이 전혀 없어도 이 모든 기술을 습득할 수 있다는 것입니다.
그럼 이제 Excel 전문가에서 데이터 분석 전문가로의 여정을 시작해봅시다!
Chapter 1: "데이터"란 도대체 무엇일까?
행(Row)과 열(Column): 데이터의 보편적인 구성 요소
엑셀(Excel)을 다뤄본 경험이 있다면, 이미 데이터의 기본 구성 요소인 행과 열에 익숙할 것입니다. 사실, 여러분은 생각보다 더 데이터 전문가에 가까운 셈이에요!
엑셀, 데이터베이스(Database), 또는 SQL의 맥락에서 "데이터"란, 구조화된 방식으로 정리된 정보를 의미합니다. 일반적인 엑셀 스프레드시트를 떠올려 보세요:
- **열(Columns)**은 각각의 속성이나 특성(예: "고객 이름", "주문 날짜", "총 금액")을 나타냅니다
- **행(Rows)**은 개별 레코드(예: 특정 고객의 주문)를 나타냅니다
- **셀(Cells)**은 행과 열이 교차하는 지점으로, 실제 값이 들어 있는 부분입니다
이런 행-열 구조는 데이터 세계 어디에서나 볼 수 있는 핵심 구성 방식입니다. 간단한 엑셀 시트든, 대기업의 방대한 데이터베이스든, 복잡한 SQL 쿼리를 돌리든, 이 기본 구조는 변하지 않아요.
| Customer Name | Order Date | Total Amount |
|---------------|-------------|--------------|
| John Smith | 2025-01-15 | $125.99 |
| Sarah Johnson | 2025-01-16 | $89.50 |
| Miguel Lopez | 2025-01-16 | $212.75 |
이 기본 구조만 이해해도, 데이터 관리의 핵심 개념 하나는 이미 마스터한 셈입니다. 엑셀과 더 발전된 데이터베이스 시스템의 차이는 구조 자체가 아니라, 규모, 기능, 그리고 데이터를 다루는 방식에 있어요.
구조화 데이터 vs 비구조화 데이터
모든 데이터가 행과 열로 깔끔하게 정리되어 있는 것은 아닙니다. 데이터 세계에서는 데이터를 크게 두 가지 유형으로 나눕니다: **구조화 데이터(Structured Data)**와 비구조화 데이터(Unstructured Data).
구조화 데이터: 엑셀 사용자에게 익숙한 세계
구조화 데이터는 사전에 정의된 모델(스키마, schema)에 따라 정리된 데이터를 말합니다. 엑셀에서 자주 접하는 형식이죠:
- 행과 열의 형태로 깔끔하게 정리되어 있음
- 각 열은 일관된 데이터 타입(문자, 숫자, 날짜 등)을 가짐
- 검색, 필터링이 용이함
- 예시: 고객 정보, 판매 기록, 재고 목록 등
엑셀에서 컬럼 헤더를 정리하고 각 열에 일관된 데이터가 들어가도록 작성했다면, 여러분은 이미 구조화 데이터를 다루고 있는 것입니다. 이런 구조 덕분에 정렬, 필터링, 분석이 쉬워지죠.
비구조화 데이터: 셀의 한계를 넘어
비구조화 데이터는 행과 열 형식으로 깔끔히 들어맞지 않는 데이터를 말합니다. 사전 정의된 구조 없이 다양한 형태로 존재하죠:
- 텍스트 문서, 이메일
- SNS 게시물
- 이미지, 오디오, 비디오 파일
- 기기에서 수집된 센서 데이터 등
예를 들어 생각해보세요:
- 고객 이름과 구매 금액이 정리된 스프레드시트(구조화)
- 고객이 보낸 이메일 문의나 피드백(비구조화)
엑셀은 구조화 데이터를 다루는 데 최적화되어 있지만, 비구조화 데이터는 처리에 한계가 있습니다. 이럴 때는 더 발전된 데이터 시스템이 필요해요.
반구조화 데이터: 그 중간 어디쯤
또한 **반구조화 데이터(Semi-Structured Data)**라는 중간 형태도 있습니다. 이 데이터는 고정된 행-열 구조는 아니지만, 요소를 구분해주는 태그나 마커를 포함합니다.
예시:
- JSON 파일 (많은 웹 애플리케이션에서 사용됨)
- XML 파일
- 이메일 (헤더는 구조화되어 있으나 본문은 자유형식)
반구조화 데이터는 구조화 데이터의 정돈됨과 비구조화 데이터의 자유로움 사이의 간극을 메워주는 역할을 합니다.
왜 "깨끗한 데이터"가 중요한가? (현실적인 사례)
엑셀에서 "지저분한 데이터"로 고생한 적 있으신가요? 예를 들어 이런 경우:
- 이름 형식이 들쑥날쑥 ("John Smith" vs "Smith, John")
- 날짜 형식이 제각각 (12/31/2025, 31-Dec-25, December 31, 2025)
- 숫자가 텍스트로 저장되어 계산 불가
- 한 셀에 쉼표로 여러 값이 입력됨
- 약어가 통일되지 않음 (NY, N.Y., New York 등)
작은 엑셀 파일에서는 그저 불편한 수준일 수 있지만, 대규모 데이터나 데이터베이스로 이관할 경우에는 큰 문제가 됩니다.
지저분한 데이터의 진짜 비용
예를 들어볼게요: 한 리테일 회사가 여러 엑셀 파일에 고객 정보를 저장해두고 있습니다. 하지만 데이터 입력이 일관되지 않아서:
- 동일 고객이 이름 철자 차이로 중복 저장됨
- 일부 주소에는 우편번호가 빠짐
- 전화번호 형식이 제각각
이 회사가 고객 분석이나 마케팅 캠페인을 진행하려고 할 때 이런 문제로 인해:
- 중복 메시지가 같은 고객에게 여러 번 발송되고
- 불완전한 데이터 때문에 일부 고객은 누락되고
- 분석가들이 데이터를 수작업으로 정리하느라 시간 낭비하고
- 잘못된 분석 결과로 인해 비즈니스 의사결정이 틀어질 수도 있습니다
IBM에 따르면, 잘못된 데이터 품질로 인해 미국 경제에 발생하는 손실은 연간 약 3.1조 달러에 달한다고 해요. 작은 규모라도, 지저분한 데이터는 기업에 상당한 문제를 일으킵니다.
GIGO 원칙: Garbage In, Garbage Out
데이터 업계에서는 흔히 "GIGO" 원칙을 이야기합니다. Garbage In, Garbage Out—즉, 입력이 엉망이면 출력도 엉망이라는 뜻이죠.
아무리 분석 기법이 정교하고 데이터베이스가 강력하더라도, 입력된 데이터가 부정확하거나 지저분하면 결과도 신뢰할 수 없습니다.
깨끗한 데이터를 위한 베스트 프랙티스
엑셀에서 SQL, 데이터베이스로 넘어갈수록 데이터 청결은 더 중요해집니다. 다음은 좋은 데이터 품질을 유지하기 위한 몇 가지 실천 방법입니다:
- 일관된 포맷 유지: 데이터 입력 및 형식에 대한 표준을 설정
- 유효성 검사 적용: 엑셀에서는 Data Validation, 데이터베이스에서는 제약 조건 사용
- 정규화(Normalization): 중복을 줄이고 일관성을 높이는 데이터 구조화
- 정기적인 점검 및 정리: 데이터 문제를 주기적으로 확인하고 수정
- 문서화: 데이터 정의와 기준을 명확히 문서로 정리
처음부터 깨끗하고 구조화된 데이터를 유지하면, 데이터 여정에서 수많은 시행착오를 피할 수 있어요.
엑셀 사용자에서 데이터 전문가로
엑셀을 능숙하게 다룰 줄 안다면, 이미 많은 데이터 개념을 이해하고 계신 겁니다. 정보를 행과 열로 정리하고, 필터나 정렬을 사용하고, 계산을 수행하는 방법—all of that is real data work이에요.
이 책에서는 이 기반 위에 데이터베이스와 SQL이라는 새로운 도구들을 쌓아갈 겁니다. 엑셀에서 익힌 개념들이 이름만 다를 뿐, 비슷한 방식으로 확장된다는 걸 보게 될 거예요. 게다가, 더 강력한 기능까지 함께요.
기억하세요: 엑셀에서 쌓은 전문성은 사라지는 게 아닙니다. 데이터 관리와 분석의 더 넓은 세계로 확장되는 것일 뿐이에요.
Chapter 2: 파일 형식 완전 정복
엑셀 파일 (.xlsx) vs. CSV 파일
엑셀에서 데이터를 다뤄본 적이 있다면, 스프레드시트를 저장하거나 열 때 다양한 파일 형식을 접해봤을 것입니다. 가장 일반적으로 사용되는 두 가지 형식은 엑셀 파일(.xlsx)과 CSV 파일(.csv)입니다. 엑셀에서 데이터베이스와 SQL로 넘어가는 과정에서 이 둘의 차이를 이해하는 것은 매우 중요합니다.
엑셀 파일 (.xlsx): 기능이 풍부한 워크북
엑셀의 기본 파일 형식인 .xlsx는 다음과 같은 강력한 기능들을 지원하도록 설계되어 있습니다:
- 여러 개의 워크시트를 하나의 파일에 포함 가능
- 서식 기능 (색상, 글꼴, 조건부 서식 등)
- 자동으로 계산되는 수식
- 차트, 그래프, 시각화 요소
- 매크로와 VBA 코드를 통한 자동화
- 데이터 유효성 검사 규칙으로 입력 제어
- 공동 작업용 댓글 및 메모
파일을 .xlsx 형식으로 저장하면 위 기능들이 모두 보존됩니다. 따라서 엑셀 파일은 분석, 보고서 작성, 마이크로소프트 오피스 생태계 내의 협업에 최적화된 형식입니다.
내부적으로 .xlsx 파일은 여러 개의 XML 파일이 압축된 ZIP 패키지로 구성되어 있으며, 이 XML 파일들은 데이터, 서식, 수식 등 워크북의 다양한 요소를 저장합니다. 이 구조는 엑셀 2007부터 도입된 현대적인 형식으로, 이전 .xls 형식보다 더 효율적이고 손상에 강합니다.
CSV 파일: 단순하고 범용적인 데이터 컨테이너
CSV(Comma-Separated Values) 파일은 훨씬 단순합니다:
- 일반 텍스트 파일로 텍스트 에디터에서도 열 수 있음
- 값들은 쉼표 (또는 다른 구분자)로 분리
- 한 파일에 하나의 테이블만 존재 (여러 시트 불가)
- 서식, 수식, 시각화 없음
- 매크로나 삽입된 객체 없음
텍스트 에디터에서 CSV 파일을 열면 다음과 같이 보입니다:
Name,Department,Salary
John Smith,Marketing,65000
Sarah Johnson,Engineering,78000
Miguel Rodriguez,Sales,71500
엑셀에서 열면 익숙한 표 형태로 나타나지만, 모든 값은 정적인 순수 데이터입니다. 수식은 없으며 단지 계산된 값만 저장됩니다.
실무에서 중요한 주요 차이점
이러한 차이를 이해하면 상황에 맞는 올바른 파일 형식을 선택할 수 있습니다:
1. 호환성
- 엑셀 파일은 Excel 또는 호환 프로그램(예: Google Sheets, LibreOffice)이 필요함
- CSV 파일은 다음을 포함해 거의 모든 데이터 처리 도구에서 열 수 있음:
- 모든 스프레드시트 프로그램
- 텍스트 에디터
- 데이터베이스 시스템
- Python, R, SQL 같은 프로그래밍 언어
이러한 범용성 때문에 CSV 파일은 서로 다른 시스템 간 데이터 전달에 가장 많이 사용됩니다.
2. 파일 크기 및 성능
- 엑셀 파일은 서식, 수식, 여러 시트를 포함하므로 파일 크기가 큼
- CSV 파일은 순수 데이터만 포함하므로 훨씬 작음
- 대용량 데이터셋에서는 CSV가 더 빠르게 로드되고 메모리도 적게 사용
3. 데이터 보존
- 엑셀 파일은 수식, 서식, 여러 시트 등 모든 요소를 보존
- CSV 파일은 값만 보존 – 수식은 계산된 값으로 저장되고, 서식은 사라지며, 하나의 시트만 저장됨
4. 데이터 타입
- 엑셀 파일은 날짜, 숫자, 텍스트 등 적절한 데이터 타입을 유지
- CSV 파일은 모든 데이터를 텍스트로 저장 – 날짜 포맷이 변경되거나 숫자 앞의 0이 사라지는 등의 문제가 발생할 수 있음
파일 내부는 어떻게 생겼을까? 데이터 저장 방식 엿보기
각 파일 형식 내부에서 실제로 어떤 일이 벌어지는지 좀 더 자세히 들여다봅시다.
엑셀 (.xlsx) 파일의 내부
엑셀 파일은 사실 ZIP 아카이브로, 내부에 여러 XML 파일이 포함되어 있습니다. .xlsx 확장자를 .zip으로 바꾸고 압축을 풀어보면 다음과 같은 파일들이 나타납니다:
- workbook.xml – 워크북의 전체 구조 저장
- worksheets/sheet1.xml, sheet2.xml 등 – 각 워크시트의 데이터 저장
- styles.xml – 모든 서식 정보 저장
- sharedStrings.xml – 여러 곳에서 사용되는 텍스트 값 저장
- 기타 파일들 – 차트, 이미지, 기타 기능 관련 정보 저장
이처럼 복잡한 구조 덕분에 엑셀은 다양한 기능을 지원하면서도 압축을 통해 파일 크기를 적당히 유지할 수 있습니다.
CSV 파일의 내부
CSV 파일은 훨씬 간단합니다 – 그냥 텍스트 파일일 뿐입니다:
- 데이터의 각 행이 한 줄씩 존재
- 값들은 쉼표(또는 탭, 세미콜론 등의 구분자)로 구분됨
- 컬럼명이 포함된 헤더 행이 있을 수도 있음
- 서식, 데이터 타입, 구조에 대한 메타데이터 없음
이러한 단순함은 장점이자 단점입니다. CSV는 생성, 읽기, 시스템 간 전송이 매우 쉽지만, 데이터에 대한 복잡한 정보는 저장할 수 없습니다.
언제 엑셀 vs CSV vs 구글 시트?
각 파일 형식은 목적에 따라 알맞은 사용 사례가 있습니다:
다음의 경우 엑셀(.xlsx)을 사용하세요:
- 수식, 서식, 여러 워크시트를 보존해야 할 때
- 복잡한 계산이나 데이터 모델링이 필요한 경우
- 차트나 시각화가 포함된 리포트를 만들 때
- 데이터 유효성 검사, 조건부 서식, 매크로 등이 필요한 경우
- Microsoft Office 환경 내에서 주로 사용되는 경우
- 특정 셀이나 시트를 편집 불가능하게 보호할 필요가 있을 때
다음의 경우 CSV(.csv)를 사용하세요:
- 데이터를 데이터베이스나 외부 시스템에 임포트해야 할 때
- 엑셀이 없는 사용자와 데이터를 공유할 때
- Python, R 등의 프로그래밍 언어와 함께 사용할 때
- 엑셀이 느려지는 대용량 데이터를 다룰 때
- 순수한 데이터 값만 필요하고 수식/서식은 불필요할 때
- 어디서나 작동하는 단순하고 범용적인 형식이 필요할 때
다음의 경우 구글 시트를 사용하세요:
- 실시간 협업이 중요한 경우
- 여러 기기에서 클라우드 기반 접근이 필요한 경우
- 비교적 간단한 데이터 작업을 하는 경우
- 자동 버전 관리 기능이 필요한 경우
- 데이터를 웹에 게시하거나 다른 페이지에 임베드해야 할 때
- Microsoft Office가 없는 사용자와 협업할 때
데이터베이스로 가는 다리
파일 형식을 이해하는 것은 엑셀에서 데이터베이스와 SQL로 넘어가는 과정에서 중요한 단계입니다. 그 이유는 다음과 같습니다:
- CSV 파일은 종종 데이터베이스에 데이터를 임포트할 때 사용됩니다
- 데이터베이스에서 데이터를 추출(export)할 때도 자주 CSV 형식이 사용됩니다
- 엑셀과 CSV의 한계는 대규모 데이터 관리에는 데이터베이스가 필수라는 사실을 부각시킵니다
데이터가 크고 복잡해질수록, 엑셀이나 CSV만으로는 충분하지 않다는 것을 알게 됩니다. 하지만 각 파일 형식을 언제, 어떻게 사용할지 아는 것은 여전히 데이터 전문가로서 중요한 스킬입니다.
다음 챕터에서는 엑셀의 워크북과 워크시트 개념이 데이터베이스의 데이터베이스와 테이블에 어떻게 매핑되는지 알아보며, 보다 강력한 데이터 관리 도구로의 전환을 준비해봅니다.
Chapter 3: 워크북에서 데이터베이스로: 탭을 넘어서 생각하기
엑셀 워크북 = 미니 데이터베이스
엑셀에서 데이터를 오랫동안 정리해왔다면, 사실상 단순한 데이터베이스를 계속해서 만들어 왔다는 사실에 놀랄 수도 있습니다! 엑셀 워크북은 여러 면에서 미니 데이터베이스처럼 작동합니다:
- 구조화된 데이터를 정리된 형식으로 저장할 수 있음
- 정보를 검색하고, 필터링하고, 분석할 수 있음
- 서로 다른 데이터 집합 간의 관계를 유지할 수 있음
- 데이터를 요약하고 리포트하는 도구를 제공함
이런 이유로, 엑셀 사용자들은 본격적인 데이터베이스로 전환할 때 예상보다 더 직관적으로 적응하는 경우가 많습니다. 완전히 새로운 개념을 배우는 것이 아니라, 이미 익숙한 원칙을 확장하는 것에 가깝기 때문입니다.
데이터베이스 마인드셋
엑셀을 단순한 스프레드시트로 사용하는 것과 미니 데이터베이스로 사용하는 것의 가장 큰 차이는 데이터를 바라보는 사고방식에 있습니다:
스프레드시트 마인드셋:
- 계산 및 분석 중심
- 데이터와 수식을 같은 영역에 섞어서 사용
- 병합 셀 및 복잡한 서식을 자주 사용
- 데이터 무결성보다는 시각적 프레젠테이션에 집중
데이터베이스 마인드셋:
- 데이터의 조직화와 무결성에 집중
- 데이터를 깔끔하고 일관되게 구조화
- 병합 셀이나 데이터 작업에 방해되는 서식은 지양
- 단순히 보기 좋게 정리하는 것보다 효율적인 저장과 조회를 우선
엑셀을 사용할 때 데이터베이스 마인드셋을 채택하면, 보다 고급 데이터 관리로 나아가는 첫 걸음을 내딛는 것입니다.
각 워크시트 = 하나의 테이블
데이터베이스 용어에서 테이블(Table) 은 관련된 데이터가 행과 열로 구성된 집합입니다—엑셀 워크시트와 정확히 같은 구조죠! 따라서 워크북의 각 워크시트는 데이터베이스의 하나의 테이블로 간주할 수 있습니다.
예를 들어, 어떤 비즈니스는 다음과 같은 워크시트를 포함한 엑셀 워크북을 사용할 수 있습니다:
- Customers (고객)
- Products (제품)
- Orders (주문)
- Employees (직원)
데이터베이스 시스템에서는 이들이 서로 관련된 네 개의 테이블이 됩니다.
워크시트를 테이블처럼 설계하는 베스트 프랙티스
엑셀 워크시트를 더 정식 데이터베이스 테이블처럼 만들기 위해서는 다음과 같은 원칙을 따르세요:
- 첫 번째 행에 일관된 헤더를 사용
- 데이터 내 빈 행/열을 피하기
- 각 행마다 고유 식별자(ID) 컬럼 포함
- 한 워크시트에는 한 가지 데이터만 포함
- 날짜, 숫자, 텍스트 등 데이터 형식 일관성 유지
- 데이터 영역에서는 셀 병합 사용 금지
- 정렬 또는 필터에 방해되는 복잡한 서식 피하기
이러한 원칙을 지키면 나중에 데이터베이스로 전환하는 과정이 훨씬 쉬워집니다.
워크시트 간 관계 만들기
데이터베이스의 가장 강력한 기능 중 하나는 테이블 간 관계를 설정할 수 있다는 것입니다. 엑셀에서는 VLOOKUP 또는 INDEX/MATCH 같은 함수를 이용해 이 관계를 흉내 낼 수 있습니다.
예를 들어:
- 고객 정보가 담긴 "Customers" 워크시트
- 주문 정보가 담긴 "Orders" 워크시트
이 경우, VLOOKUP을 사용하여 Orders 시트에 고객 정보를 불러올 수 있습니다:
=VLOOKUP(A2, Customers!$A$2:$E$100, 2, FALSE)
이 수식은 Orders 시트의 A2 셀에 있는 고객 ID를 기반으로 Customers 시트에서 해당 고객 이름을 찾아 반환합니다.
이는 기본적으로 워크시트 간의 관계를 만드는 것이며, 이는 데이터베이스에서 키(Key)를 사용해 테이블을 연결하는 방식과 유사합니다.
데이터가 커지거나 복잡해지면?
엑셀은 중소 규모의 데이터 컬렉션에 대해서는 미니 데이터베이스로 잘 작동하지만, 데이터의 크기나 복잡도가 증가할수록 한계를 드러냅니다.
크기 제한
엑셀은 다음과 같은 기술적 한계를 가지고 있습니다:
- 행 제한: 최신 엑셀 기준, 워크시트당 1,048,576행
- 열 제한: 워크시트당 16,384열
- 성능 저하: 약 10만 행부터 느려지기 시작
- 파일 크기: 대용량 파일은 열고 저장하는 데 시간이 오래 걸림
- 메모리 사용량: 전체 워크북을 메모리에 로드하기 때문에 컴퓨터 성능에 부담
복잡성 문제
크기뿐 아니라, 다음과 같은 복잡성 측면에서도 엑셀은 한계를 가집니다:
- 데이터 무결성: 워크시트 간 관계를 강제로 유지할 방법이 없음
- 동시 사용자: 여러 사용자가 동시에 작업하기 어려움
- 복잡한 쿼리: 여러 워크시트를 넘나드는 고급 연산이 어려움
- 자동화: 자동 데이터 처리 및 업데이트 기능이 제한적
- 보안: 기본 비밀번호 외에 세분화된 접근 제어 기능 부족
- 복구 기능: 파일 손상 시 복구가 어렵고 옵션이 제한적
실제 사례: 한계에 부딪힌 순간
어떤 소규모 사업체가 다음과 같은 엑셀 워크북으로 모든 업무를 처리하고 있었다고 가정해 봅시다:
초기에는 다음과 같은 데이터 규모였습니다:
- 고객 500명
- 제품 1,000개
- 주문 5,000건
- 직원 50명
이때까진 엑셀이 잘 작동했습니다. 하지만 시간이 지나면서:
- 고객이 5,000명으로 증가
- 제품은 10,000개로 확장
- 주문은 100,000건으로 폭증
- 여러 직원이 동시에 파일을 편집할 필요가 생김
이제 심각한 문제가 발생하기 시작합니다:
- 파일 열기에 수 분이 걸림
- 저장 시 엑셀이 종종 다운됨
- VLOOKUP 계산이 매우 느려짐
- 누가 어떤 변경을 했는지 알 수 없음
- 두 명 이상이 작업할 때 변경 내용이 유실되기도 함
이런 상황이 바로 엑셀의 한계에 부딪히고, 본격적인 데이터베이스 시스템으로 전환이 필요한 시점입니다.
데이터베이스로 가는 다리
엑셀을 미니 데이터베이스로 이해하면, 더 강력한 데이터베이스 시스템으로 넘어가는 데 큰 도움이 됩니다:
엑셀 개념 | 데이터베이스 대응 개념 |
---|---|
Workbook | Database |
Worksheet | Table |
Row | Record |
Column | Field |
Header Row | Field Names |
VLOOKUP | JOIN Operation |
Filter | WHERE Clause |
PivotTable | GROUP BY Query |
Data Validation | Constraints |
이 매핑을 통해 엑셀 사용자들은 낯선 데이터베이스 개념을 더 친숙하게 받아들일 수 있습니다.
엑셀의 데이터 모델: 전환을 위한 디딤돌
최신 엑셀 버전에는 "데이터 모델(Data Model)" 이라는 기능이 포함되어 있어 스프레드시트에서 데이터베이스로의 전환을 돕습니다:
- 테이블 간 관계를 생성할 수 있음
- 표준 워크시트보다 훨씬 더 큰 데이터셋을 지원
- 더 강력한 피벗 테이블 및 분석 기능 제공
- SQL과 유사한 DAX 언어 사용 가능
엑셀의 데이터 모델 기능을 탐색하는 것은 데이터베이스 사고방식을 익히는 좋은 시작점이 됩니다.
전환을 위한 준비
엑셀의 한계에 도달했다고 느껴진다면, 다음 단계를 따라 데이터베이스로의 전환을 준비하세요:
- 엑셀 데이터를 앞서 설명한 베스트 프랙티스에 따라 정리
- 워크시트 간 데이터 구조와 관계를 문서화
- 각 워크시트에 고유 식별자(Primary Key 후보)를 정의
- 데이터를 정리하여 일관성과 정확성 확보
- 자주 사용하는 쿼리와 리포트를 파악
이러한 준비 과정을 거치면 데이터베이스로의 전환이 훨씬 원활해집니다.
결론
지금까지 엑셀 워크북은 단순한 데이터베이스로 작동해 왔으며, 여러분이 배운 데이터 정리 원칙은 고급 데이터베이스 시스템에도 그대로 적용됩니다. 이 책의 다음 장에서는 엑셀에서 익힌 개념을 보다 강력한 데이터베이스와 SQL에 어떻게 적용할 수 있는지 알아보겠습니다.
잊지 마세요: 처음부터 다시 시작하는 것이 아닙니다—이미 갖고 있는 기반 위에 더 쌓아가는 것입니다. 엑셀에서 데이터를 정리하며 쌓아온 실력은 데이터베이스 테이블을 다룰 때도 큰 자산이 될 것입니다.
Chapter 4: 데이터베이스란 무엇인가?
거대한 스마트 엑셀 워크북이라고 생각해보세요
엑셀에 익숙하다면, 데이터베이스에 대해 생각보다 더 많은 것을 이미 알고 있는 셈입니다. 사실, 데이터베이스는 개념적으로 매우 강력하고 매우 똑똑한 엑셀 워크북과 유사합니다—단지 훨씬 더 큰 데이터셋을 유연하고 정교하게 다룰 수 있는 ‘슈퍼파워’를 가진 버전이라고 보면 됩니다.
당신의 엑셀 워크북이 다음과 같다고 상상해보세요:
- 수백만 개의 행을 저장해도 느려지지 않고
- 수십 명이 동시에 편집해도 충돌이 없으며
- 모든 시트 간 데이터 일관성을 자동으로 보장하고
- 사용자의 권한에 따라 접근 가능한 데이터를 세밀하게 통제하며
- 다른 시스템 및 애플리케이션과 매끄럽게 연결되는
이것이 바로 데이터베이스가 하는 일입니다. 본질적으로 데이터베이스는 컴퓨터 시스템에 전자적으로 저장된, 구조화된 정보의 조직된 집합입니다. 이 정의는 기술적으로 들릴 수 있지만, 엑셀 사용자에게는 꽤 익숙한 개념입니다.
데이터베이스 사고방식
당신이 잘 구조화된 엑셀 워크북을 만들 때:
- 명확한 열 헤더를 사용하고
- 일관된 데이터 형식을 유지하며
- 데이터 영역에 병합 셀이 없고
- 정보 유형별로 별도의 워크시트를 만들고
- 시트 간 데이터를 연결하기 위해 VLOOKUP이나 INDEX/MATCH를 사용한다면...
이미 데이터베이스 설계자처럼 사고하고 있는 것입니다!
차이점은 데이터베이스는 이러한 좋은 습관들을 ‘강제’하고 ‘공식화’한다는 점입니다. 그 덕분에 더 강력하고 확장 가능한 시스템이 되는 것이죠. 데이터베이스는 DBMS (Database Management System, 데이터베이스 관리 시스템) 에 의해 제어되며, 사용자와 데이터 간의 중재자 역할을 하면서 데이터의 조직, 저장, 검색을 처리합니다.
테이블, 행, 열 – 아주 익숙하죠!
오늘날 가장 일반적인 데이터베이스 형태는 관계형 데이터베이스(Relational Database) 로, 엑셀 사용자에게 매우 익숙한 테이블 구조(행과 열)로 데이터를 구성합니다.
엑셀 용어 | 데이터베이스 용어 | 의미 |
---|---|---|
워크시트 | 테이블 (Table) | 관련된 데이터의 집합 |
행 | 레코드 (Record) | 하나의 항목 또는 엔트리 |
열 | 필드 (Field) | 특정 속성 또는 특성 |
헤더 행 | 필드 이름 (Field Names) | 각 열을 설명하는 라벨 |
셀 | 필드 값 (Field Value) | 개별 데이터 항목 |
실제로 어떻게 보이는지 살펴볼까요? 아래는 고객 정보를 추적하는 간단한 엑셀 워크시트입니다:
엑셀 워크시트: Customers
Customer ID | First Name | Last Name | Phone | |
---|---|---|---|---|
1001 | John | Smith | john@example.com | 555-1234 |
1002 | Sarah | Johnson | sarah@example.com | 555-5678 |
1003 | Miguel | Rodriguez | miguel@example.com | 555-9012 |
데이터베이스에서는 다음과 같은 테이블로 동일한 구조를 가집니다:
데이터베이스 테이블: Customers
customer_id | first_name | last_name | phone | |
---|---|---|---|---|
1001 | John | Smith | john@example.com | 555-1234 |
1002 | Sarah | Johnson | sarah@example.com | 555-5678 |
1003 | Miguel | Rodriguez | miguel@example.com | 555-9012 |
다만 몇 가지 차이점이 있을 수 있습니다:
- 필드 이름은 소문자 + 언더스코어를 쓰는 것이 일반적 (컨벤션일 뿐 필수는 아님)
- 데이터 타입에 더 엄격함 (예: 전화번호 필드는 전화번호만 입력 가능)
- 입력 가능한 데이터에 대해 규칙을 강제함 (예: 고객 ID는 유일해야 함)
그러나 기본 구조인 "행과 열로 데이터 조직" 방식은 완전히 동일합니다.
기본 키와 관계 – 시트 간 VLOOKUP 같은 개념
데이터베이스의 가장 강력한 기능 중 하나는 서로 다른 테이블 간 관계를 정의하고 유지하는 방식입니다. 엑셀에서 VLOOKUP이나 INDEX/MATCH를 사용해 시트 간 데이터를 참조한 적이 있다면 이미 이 개념에 익숙합니다.
기본 키 (Primary Key): 유일한 식별자
엑셀에서 시트 간 데이터를 참조할 때는 보통 고객 ID나 주문 번호 같은 공통된 값을 기준으로 조회합니다. 데이터베이스 용어로 이 고유 식별자를 기본 키(Primary Key) 라고 부릅니다.
기본 키는 다음과 같은 조건을 만족해야 합니다:
- 각 레코드를 유일하게 식별
- 중복값이 없어야 함
- 비어 있을 수 없음 (NULL 불가)
위 예시에서 customer_id
가 바로 기본 키 역할을 합니다.
외래 키 (Foreign Key): 관계를 만드는 열
이번에는 주문 테이블이 있다고 가정해 봅시다:
데이터베이스 테이블: Orders
order_id | order_date | amount | customer_id |
---|---|---|---|
5001 | 2025-01-15 | 120.50 | 1001 |
5002 | 2025-01-20 | 75.25 | 1002 |
5003 | 2025-02-01 | 200.00 | 1001 |
여기서 customer_id
가 두 테이블에 모두 등장합니다. Orders 테이블에서는 외래 키(Foreign Key) 로, Customers 테이블의 기본 키를 참조하여 두 테이블 간 관계를 형성합니다.
엑셀에서는 아래와 같은 수식을 사용해 Orders 시트에서 고객 이름을 찾아올 수 있습니다:
=VLOOKUP(D2, Customers!A:B, 2, FALSE)
데이터베이스에서는 이 관계가 정식으로 정의되고, 시스템에 의해 강제됩니다. 즉:
- 존재하지 않는
customer_id
값으로는 주문을 추가할 수 없음 - 고객 정보가 변경되면 주문 테이블에서도 자동으로 반영
- 주문이 있는 고객을 삭제하려 하면 시스템이 이를 막거나 관련된 주문을 자동 처리함
관계의 유형
데이터베이스는 다음과 같은 관계 유형을 지원합니다:
-
일대일(One-to-One): 하나의 레코드가 다른 하나의 레코드와만 연결됨
- 예: 사람과 여권 정보
-
일대다(One-to-Many): 하나의 레코드가 여러 개 레코드와 연결됨
- 예: 고객과 주문 (한 고객이 여러 주문 가능)
- 가장 일반적인 관계 형태
-
다대다(Many-to-Many): 여러 레코드가 여러 레코드와 연결됨
- 예: 학생과 과목 (학생은 여러 과목을 듣고, 과목도 여러 학생이 수강)
- 이를 위해 중간에 조인 테이블(Junction Table)이 필요함
엑셀에서 서로 다른 시트에 관련 데이터를 유지하면서 VLOOKUP 등을 사용해 연결했다면, 이미 이런 관계를 간단히 구현해 본 것입니다.
데이터베이스 생태계
행과 열로 구성된 테이블은 친숙하지만, 데이터베이스는 그보다 더 큰 생태계 안에서 작동합니다:
-
DBMS (Database Management System): 데이터베이스를 관리하고 쿼리 처리 및 접근 제어를 담당하는 소프트웨어
- 예: MySQL, PostgreSQL, Microsoft SQL Server, Oracle
-
SQL (Structured Query Language): 데이터베이스와 소통하기 위한 표준 언어
- 이 책의 후반에서 자세히 다룰 예정
-
데이터베이스 서버: DBMS가 설치되어 실행되는 컴퓨터, 보통 데이터베이스 성능에 최적화되어 있음
-
클라이언트 애플리케이션: 데이터베이스에 접속하여 데이터를 추가/조회/수정/삭제하는 프로그램
- 예: 사용자 정의 애플리케이션, 리포트 도구, 심지어 엑셀도 가능!
엑셀에서 데이터베이스로 – 마인드셋 전환
데이터베이스를 배우기 시작할 때, 엑셀에서 익숙한 개념을 데이터베이스 용어로 매핑하면 도움이 됩니다:
엑셀 개념 | 데이터베이스 개념 |
---|---|
워크북 | 데이터베이스 |
워크시트 | 테이블 |
행 | 레코드 |
열 | 필드 |
헤더 행 | 필드 이름 |
VLOOKUP | JOIN 연산 |
필터 | WHERE 절 |
피벗테이블 | GROUP BY 쿼리 |
데이터 유효성 검사 | 제약 조건 (Constraints) |
이름 정의 범위 | 뷰 (View) |
매크로 | 저장 프로시저 (Stored Procedure) |
이 매핑이 완벽하지는 않지만, 데이터베이스의 기본 개념을 이해하는 데 매우 유용한 출발점이 됩니다.
결론
엑셀에 익숙하다면, 이미 데이터베이스를 이해할 수 있는 튼튼한 기반을 가지고 있는 셈입니다. 행과 열로 구성된 테이블 구조는 그대로 유지되며, 시트 간 참조를 통한 데이터 연결 방식은 테이블 간 관계 설정과 유사합니다.
앞으로 우리는 엑셀로는 어렵거나 불가능한 작업들을 데이터베이스가 어떻게 해결하는지 알아볼 것입니다. 하지만 잊지 마세요—완전히 처음부터 시작하는 것이 아닙니다. 당신의 엑셀 경험은 데이터베이스 세계에 진입하는 데 훌륭한 출발점입니다.
Chapter 5: 데이터베이스가 강력한 이유
수백만 개의 행을 멈추지 않고 처리하기
대용량 Excel 파일을 다뤄본 적이 있다면 잘 아실 겁니다. 스크롤이 느려지고, 계산이 오래 걸리며, 심하면 Excel이 완전히 멈춰버리는 경우도 있죠. 이는 Excel이 전체 워크북을 컴퓨터 메모리에 로드하기 때문인데, 메모리에는 한계가 있습니다.
반면, 데이터베이스는 방대한 데이터를 효율적으로 처리하도록 설계되어 있습니다. 어떻게 이런 일이 가능한지 알아봅시다:
최적화된 스토리지
Excel과 달리, 데이터베이스는 모든 데이터를 메모리에 한꺼번에 불러오지 않습니다. 필요한 데이터만 선택적으로 불러오는 정교한 기술을 사용하므로, 수백만 또는 수십억 개의 행이 있는 테이블도 성능 문제 없이 처리할 수 있습니다.
예를 들어, 500개의 매장에서 일일 매출을 추적하는 소매 회사는 하루에 50,000건의 거래 기록을 생성할 수 있습니다. 1년이면 1,800만 건이 넘는 기록이 쌓이게 되죠! Excel이라면 감당하기 어려운 양이지만, 잘 구성된 데이터베이스는 이러한 규모를 무리 없이 처리합니다.
인덱싱
데이터베이스는 데이터 검색 속도를 높이기 위해 **인덱스(index)**라는 특수한 데이터 구조를 사용합니다. 책의 색인처럼, 원하는 정보를 전부 읽지 않고도 빠르게 찾을 수 있도록 도와줍니다.
예를 들어, 고객을 성(last_name)으로 자주 검색한다면, last_name
컬럼에 인덱스를 추가함으로써 검색 속도를 100배까지 향상시킬 수 있습니다. Excel에서는 모든 데이터를 처음부터 끝까지 스캔해야 하므로 비교가 어렵습니다.
쿼리 최적화
데이터베이스는 단순히 사용자의 명령을 그대로 실행하지 않습니다. 쿼리를 분석하여 가장 효율적인 실행 계획을 수립한 후 데이터를 검색합니다. 이 쿼리 최적화(query optimization) 과정은 자동으로 이루어지며, 성능 향상에 큰 도움을 줍니다.
디스크 기반 연산
Excel은 전체 워크북을 RAM(메모리)에 올려야 하지만, 데이터베이스는 메모리에 다 담을 수 없는 연산도 디스크와 메모리 간의 효율적인 데이터 이동을 통해 처리할 수 있습니다. 즉, 데이터베이스는 컴퓨터의 메모리 용량을 초과하는 크기의 데이터도 다룰 수 있습니다—Excel에서는 불가능한 일입니다.
스크롤 대신 쿼리하기
Excel에서 정보를 찾으려면 보통 스크롤하거나, 필터를 적용하거나, Ctrl+F로 검색합니다. 작은 데이터셋에서는 괜찮지만, 데이터가 커지면 이런 방법은 비효율적입니다. 데이터베이스는 훨씬 강력한 방법을 제공합니다: 바로 쿼리(query)입니다.
SQL의 힘
**SQL(Structured Query Language)**은 데이터베이스와 소통하는 표준 언어입니다. 데이터를 직접 탐색하는 대신, 원하는 정보를 SQL로 명시하면 데이터베이스가 정확하게 해당 데이터를 찾아줍니다.
예를 들어, Excel에서 "뉴욕 거주 고객 중 지난달에 $1,000 이상을 지출한 고객"을 찾으려면 필터링과 수작업이 필요하지만, SQL에서는 단순한 쿼리 한 줄로 해결됩니다:
SELECT customer_name, email, total_spent
FROM customers
WHERE state = 'NY' AND total_spent > 1000
AND purchase_date >= '2025-03-01'
ORDER BY total_spent DESC;
이 쿼리는 원하는 정보를 정확히 기술하고 있으며, 데이터베이스가 결과를 빠르게 정렬해서 반환합니다. SQL은 이후 챕터에서 자세히 다룰 예정이지만, 이 예시만으로도 수작업 대신 쿼리가 얼마나 강력한지 알 수 있습니다.
복잡한 계산을 간단하게
데이터베이스는 대규모 데이터셋에서의 계산에 매우 강력합니다. Excel에서는 복잡한 수식이나 VBA 매크로가 필요한 작업도, SQL 쿼리로 간단히 처리할 수 있습니다.
예를 들어, 상품 카테고리별 월별 평균 주문 금액을 계산하려면 Excel에서는 여러 단계가 필요하지만, SQL에서는 한 줄로 가능합니다:
SELECT
product_category,
MONTH(order_date) as month,
AVG(order_amount) as average_order_value
FROM orders
GROUP BY product_category, MONTH(order_date)
ORDER BY product_category, month;
일관된 결과
여러 사람이 같은 Excel 파일을 작업하다 보면 필터나 정렬 기준, 수식이 서로 달라져서 결과가 일관되지 않을 수 있습니다.
데이터베이스에서는 모두가 같은 데이터 소스에 대해 같은 SQL 쿼리를 사용하므로, 누가 작업하든 결과는 항상 동일합니다. 이로 인해 협업 시 혼란을 줄이고 정확성을 높일 수 있습니다.
다중 사용자 접근과 버전 관리
Excel의 큰 한계 중 하나는 협업 기능입니다. "다른 사용자가 편집 중인 파일입니다"라는 메시지를 본 적 있으시죠? 또는 수많은 버전의 파일을 병합해야 했던 경험도요.
동시 접근
데이터베이스는 다중 사용 환경을 염두에 두고 설계되었습니다. 수십, 수백 명의 사용자가 동시에 같은 데이터베이스를 읽고 수정할 수 있으며, 충돌이 발생하지 않도록 다음과 같은 기술을 사용합니다:
- 트랜잭션 관리: 여러 변경사항을 하나의 "트랜잭션"으로 묶어, 전부 성공하거나 전부 실패하게 합니다. 일부만 반영되는 상황을 방지합니다.
- 잠금 메커니즘: 전체 데이터베이스가 아닌, 변경 중인 특정 레코드만 잠궈 다른 사용자의 작업을 방해하지 않습니다.
- 충돌 해결: 두 사용자가 동시에 같은 데이터를 수정할 경우, 미리 정의된 규칙에 따라 충돌을 해결합니다.
더 이상 "버전 지옥" 없음
Excel에서는 Sales_Report_v3_Final_ACTUALLY_FINAL_2.xlsx
같은 파일 이름이 흔하죠. 데이터베이스에서는 이런 일이 없습니다:
- 항상 최신 데이터를 실시간으로 작업
- 모든 변경사항은 실시간으로 반영
- 파일을 이메일로 주고받거나 수동 병합할 필요 없음
감사 로그 (Audit Trail)
대부분의 데이터베이스 시스템은 누가, 언제, 어떤 데이터를 변경했는지 추적할 수 있습니다. 이를 통해:
- 특정 레코드의 변경 이력 확인
- 특정 데이터의 변경자 식별
- 필요 시 변경사항 롤백
- 데이터 추적이 필요한 규제 요건 충족
이런 수준의 추적을 Excel에서 구현하려면 복잡한 매크로와 모든 사용자의 철저한 관리가 필요하며, 그마저도 완벽하지 않습니다.
데이터 무결성과 검증
Excel에서는 거의 모든 셀에 무엇이든 입력할 수 있습니다. 때로는 유용하지만, 데이터 품질 문제로 이어질 수 있습니다. 데이터베이스는 정확성과 일관성을 확보하기 위한 강력한 메커니즘을 제공합니다.
데이터 타입 강제
데이터베이스의 각 컬럼은 고정된 데이터 타입을 갖습니다:
- 텍스트 컬럼: 문자 (이름, 설명 등)
- 숫자 컬럼: 숫자 (가격, 수량 등)
- 날짜 컬럼: 날짜 및 시간
- 불리언 컬럼: 참/거짓 값
이 타입들은 자동으로 강제됩니다. 숫자 컬럼에 "abc"를 넣으려고 하면 데이터베이스가 거부해, 데이터 손상을 방지합니다.
제약조건과 규칙
데이터베이스는 데이터가 반드시 따라야 하는 규칙(제약조건, constraints)을 정의할 수 있습니다:
- NOT NULL: 값이 반드시 있어야 함
- UNIQUE: 중복된 값 허용 안 됨
- CHECK: 특정 조건을 만족해야 함 (예: price > 0)
- DEFAULT: 값이 없을 때 자동으로 설정되는 기본값
- FOREIGN KEY: 다른 테이블과의 관계 유효성 검증
이러한 제약은 자동으로 적용되어 잘못된 데이터를 입력할 수 없습니다. Excel에도 데이터 유효성 검사가 있지만, 선택 사항이며 우회하기 쉽습니다.
참조 무결성
이전 챕터에서 다룬 primary key와 foreign key를 기억하시나요? 데이터베이스는 이 관계를 자동으로 강제하여 **참조 무결성(referential integrity)**을 유지합니다:
- 존재하지 않는 고객에 대한 주문을 생성할 수 없음
- 주문이 있는 고객을 삭제할 수 없음 (삭제 시 어떻게 할지 명확히 해야 함)
- 고객 ID가 바뀌면 관련된 모든 참조가 자동으로 업데이트됨
Excel에서는 VLOOKUP과 데이터 유효성 검사를 사용하더라도 이 수준의 무결성을 유지하기 어렵습니다.
보안과 접근 제어
Excel에서의 보안은 거의 전부 아니면 전무입니다. 파일을 가진 사람은 거의 모든 것을 볼 수 있고, 수정할 수도 있습니다. 데이터베이스는 훨씬 정교한 보안 기능을 제공합니다.
사용자 인증
데이터베이스는 사용자가 로그인하여 인증을 거치도록 요구합니다. 이 인증은 다음과 같은 역할을 합니다:
- 사용자의 신원 확인
- 접근 이력(감사 로그) 생성
- 개인화된 접근 권한 부여
세분화된 권한 제어
인증된 사용자에게는 다음과 같은 구체적인 권한이 부여됩니다:
- SELECT: 데이터 조회
- INSERT: 새 데이터 추가
- UPDATE: 기존 데이터 수정
- DELETE: 데이터 삭제
- EXECUTE: 저장 프로시저 또는 함수 실행
이 권한은 다음 수준에서 조정 가능합니다:
- 데이터베이스 전체
- 특정 테이블
- 특정 컬럼
- 특정 행 (조건 기반 접근 제어)
예를 들어, 영업 사원은 자신의 지역 고객만 볼 수 있고, 매니저는 전체 고객을 볼 수 있으며, 인사 담당자는 이름은 볼 수 있지만 급여는 볼 수 없습니다. 반면, 급여 담당자는 모두 확인 가능하죠.
Excel에서는 이런 세밀한 제어가 불가능하며, 여러 파일을 나누어 관리해야만 유사한 효과를 낼 수 있습니다.
결론: 데이터베이스의 장점
Excel은 여전히 훌륭한 도구지만, 데이터 양이 많아지고 협업이 중요해질수록, 데이터베이스는 뛰어난 성능, 협업 지원, 무결성 보장, 보안성 측면에서 압도적인 장점을 제공합니다.
다음 챕터에서는 관계형 데이터베이스의 구조와 테이블 간 데이터 연결 방식에 대해 자세히 알아보겠습니다. 이는 SQL이라는 강력한 언어를 배우기 위한 기초가 됩니다.
정규화(Normalization): 데이터를 효율적으로 구성하기
데이터를 별도의 관련된 테이블로 구성하는 과정을 정규화(Normalization) 라고 합니다. 정규화는 다음과 같은 목적을 가진 일련의 규칙(정규형, Normal Forms)을 따릅니다:
- 중복된 데이터 제거
- 데이터 종속성의 논리적 정합성 확보
- 데이터베이스를 더 유연하고 효율적이며 확장 가능하게 만들기
이 장에서는 정규화에 대해 깊이 다루지는 않지만, 핵심 원칙은 데이터를 논리적인 테이블로 나누고 이들 간의 관계를 정의하는 것입니다. 즉, 모든 데이터를 하나의 거대한 테이블에 넣는 대신 관련된 항목들을 나누어 저장하는 것이죠.
이는 복잡한 Excel 워크북을 각각의 목적에 따라 여러 시트로 나누는 방식과 유사합니다. 하나의 시트에 모든 정보를 몰아넣는 것보다 훨씬 체계적입니다.
Excel에서 관계형 데이터베이스로: 실용적인 예시
이제 Excel 워크북을 관계형 데이터베이스로 변환하는 실용적인 예제를 살펴보겠습니다.
작은 비즈니스를 위한 Excel 워크북이 있고, 다음과 같은 시트들이 있다고 가정해 봅시다:
- Customers: 고객 연락처 정보
- Products: 제품 정보 및 가격
- Orders: 주문 정보 (고객 및 제품 포함)
Orders 시트는 다음과 같을 수 있습니다:
Order ID | Date | Customer Name | Customer Email | Product | Quantity | Price | Total |
---|---|---|---|---|---|---|---|
1001 | 1/15/2025 | John Smith | john@example.com | Laptop | 1 | $999.99 | $999.99 |
1002 | 1/16/2025 | Sarah Jones | sarah@example.com | Mouse | 2 | $24.99 | $49.98 |
1003 | 1/16/2025 | John Smith | john@example.com | Monitor | 1 | $249.99 | $249.99 |
이 Excel 데이터를 관계형 데이터베이스로 변환하려면 다음과 같은 단계를 따릅니다:
- 엔터티(Entities) 식별하기 (주요 객체): Customers, Products, Orders
- 각 엔터티에 대해 별도의 테이블 생성 및 적절한 컬럼 정의
- 각 테이블에 Primary Key 설정
- Foreign Key를 사용하여 테이블 간 관계 설정
결과적으로 다음과 같은 데이터베이스 설계가 됩니다:
Customers Table:
Customer_ID (PK) | Name | Phone | |
---|---|---|---|
C001 | John Smith | john@example.com | 555-1234 |
C002 | Sarah Jones | sarah@example.com | 555-5678 |
Products Table:
Product_ID (PK) | Name | Description | Price |
---|---|---|---|
P001 | Laptop | 15" Notebook Computer | $999.99 |
P002 | Mouse | Wireless Mouse | $24.99 |
P003 | Monitor | 24" HD Monitor | $249.99 |
Orders Table:
Order_ID (PK) | Date | Customer_ID (FK) |
---|---|---|
1001 | 1/15/2025 | C001 |
1002 | 1/16/2025 | C002 |
1003 | 1/16/2025 | C001 |
Order_Items Table:
Order_Item_ID (PK) | Order_ID (FK) | Product_ID (FK) | Quantity | Price |
---|---|---|---|---|
OI001 | 1001 | P001 | 1 | $999.99 |
OI002 | 1002 | P002 | 2 | $24.99 |
OI003 | 1003 | P003 | 1 | $249.99 |
여기서 주목할 점은 원래 Excel에는 없던 Order_Items라는 새로운 테이블이 추가되었다는 것입니다. 이는 하나의 주문에 여러 개의 제품이 포함될 수 있기 때문에 Orders와 Products 간의 다대다(Many-to-Many) 관계를 나타내기 위해 **중간 테이블(Junction Table)**이 필요한 구조입니다.
결론
관계형 데이터베이스는 데이터를 별개의 테이블로 나누고, Primary Key와 Foreign Key를 통해 이들 간의 관계를 설정합니다. 이 구조는 데이터의 중복을 제거하고, 무결성을 향상시키며, 데이터를 더 유연하게 조회하고 분석할 수 있도록 해줍니다.
Excel에 익숙하다면, 관계형 데이터베이스를 여러 개의 시트로 구성된 워크북이라고 생각하면 됩니다. 단, VLOOKUP 대신 데이터베이스는 JOIN을 통해 자동으로 관계를 처리해줍니다.
이제 앞으로 이 책에서는 관계형 데이터베이스와 상호작용하는 방법, 즉 SQL을 통해 데이터를 질의하고 조작하는 방법을 배워나갈 것입니다. SQL의 많은 개념들이 Excel과 유사한 점이 있어서, 여러분은 예상보다 훨씬 쉽게 전환할 수 있을 것입니다.
Chapter 7: SQL vs. Python vs. Excel – 무엇이 다를까?
SQL = 데이터베이스와의 대화
이 책을 따라오고 있다면 이제 데이터베이스가 무엇이며 왜 강력한지 이해했을 것이다. 하지만 실제로 데이터베이스와 어떻게 작업할까? 그때 등장하는 것이 바로 SQL이다.
SQL(Structured Query Language, 구조화 질의 언어)은 데이터베이스와 소통하기 위한 표준 언어이다. SQL은 오직 하나의 목적, 즉 데이터베이스와 대화하기 위해 설계된 특수한 언어라고 생각하면 된다. 파리에서 프랑스어로 대화하듯이, 데이터베이스와 대화하려면 SQL을 사용해야 한다.
Excel 사용자에게는 SQL이 처음엔 다소 어렵게 느껴질 수 있지만, 사실 굉장히 논리적인 언어이다. 여러 면에서 SQL 명령어는 Excel에서 익숙한 작업들과 유사하다:
- Excel에서 데이터를 필터링할 때, SQL의
WHERE
절과 비슷한 작업을 하는 것이다 - Excel에서 데이터를 정렬할 때, SQL의
ORDER BY
절과 유사하다 - Excel에서 VLOOKUP을 사용해 다른 시트에서 데이터를 가져올 때, SQL의
JOIN
과 유사한 작업이다
주요 차이점은 Excel은 버튼과 메뉴가 있는 시각적 인터페이스를 사용하는 반면, SQL은 텍스트 기반 명령어를 작성한다는 것이다. 하지만 그 내부의 논리는 상당히 비슷하다.
Python = 범용 프로그래밍 언어 (자동화, 분석에 탁월)
SQL이 데이터베이스 작업에 특화된 언어라면, Python은 거의 모든 작업을 수행할 수 있는 범용 프로그래밍 언어이다. Python은 배우기 쉬우면서도 데이터 작업을 위한 강력한 라이브러리들이 있어 데이터 분석 분야에서 인기를 얻고 있다.
Python에서 데이터 작업에 자주 사용되는 라이브러리는 다음과 같다:
- pandas: 데이터 조작 및 분석을 위한 라이브러리 (Excel의 업그레이드 버전이라고 생각하면 됨)
- NumPy: 수치 계산 및 배열 처리
- matplotlib, seaborn: 시각화 및 차트 작성
- scikit-learn: 머신러닝 및 예측 모델링
Python은 자동화에 특히 강점이 있어, 데이터를 처리하고 리포트를 생성하며 데이터베이스를 자동으로 업데이트하는 스크립트를 작성할 수 있다. 또한, Excel이나 SQL만으로는 하기 힘든 복잡한 분석에도 적합하다.
Excel = 직관적인 인터페이스, 수동 조작
대부분에게 익숙한 도구인 Excel은 직관적인 시각적 인터페이스를 제공한다. 데이터를 직접 보고 셀을 클릭하여 바로 변경할 수 있어, 즉각적인 피드백이 가능하다. 이러한 특성 때문에 빠른 탐색이나 간단한 분석에는 매우 유용하다.
Excel의 강점은 다음과 같다:
- 시각적 인터페이스와 즉각적인 피드백
- 대부분의 비즈니스 사용자에게 익숙함
- Ad-hoc 분석과 빠른 계산에 적합
- 내장된 차트 및 시각화 기능
- 기본 작업에는 코딩이 불필요
하지만 데이터 규모가 크거나 분석이 복잡해질 경우 Excel은 한계를 드러낸다. 이럴 때 SQL과 Python이 빛을 발한다.
언제 어떤 도구를 사용할까?
Excel을 사용할 때
Excel은 다음과 같은 상황에서 가장 적합하다:
- 소규모~중간 규모 데이터셋: 스프레드시트에 무리 없이 들어갈 정도의 데이터 (보통 10만 행 이하)
- 빠른, Ad-hoc 분석: 데이터베이스 설정이나 코드 작성 없이 빠르게 분석할 필요가 있을 때
- 시각적 탐색: 데이터를 직접 보고 상호작용하며 탐색할 때
- 간단한 시각화: 기본적인 차트나 그래프가 필요할 때
- 비기술 사용자: 데이터를 다루는 사람이 코딩에 익숙하지 않을 때
SQL을 사용할 때
SQL은 다음과 같은 상황에서 강력하다:
- 대규모 데이터셋: 수백만 행의 데이터를 다룰 때 (Excel이 버티지 못함)
- 데이터가 데이터베이스에 있을 때: 이미 데이터베이스에 저장된 데이터 작업
- 데이터 무결성: 값과 관계에 대한 규칙을 엄격히 유지해야 할 때
- 다중 사용자 접근: 여러 사용자가 동시에 동일한 데이터를 작업해야 할 때
- 복잡한 조인: 여러 테이블의 데이터를 복잡하게 결합해야 할 때
- 표준화된 리포트: 정기적으로 반복되는 쿼리가 필요할 때
Python을 사용할 때
Python은 다음과 같은 경우에 적합하다:
- 자동화: 동일한 분석을 반복적으로 수행해야 할 때
- 복잡한 분석: 고급 통계나 머신러닝을 포함한 분석이 필요할 때
- 커스텀 시각화: 고도로 커스터마이징된 혹은 인터랙티브한 시각화가 필요할 때
- 데이터 클렌징: 복잡하고 지저분한 데이터를 전처리할 필요가 있을 때
- 다양한 데이터 소스 처리: 데이터베이스, API, 파일, 웹 등 여러 소스를 다룰 때
- 재현 가능한 연구: 분석 과정 전체를 기록으로 남겨야 할 때
공통 데이터 작업 비교
도구별로 자주 수행하는 데이터 작업을 어떻게 처리하는지 비교해보자:
데이터 필터링
Excel:
- 데이터 범위 선택
- [데이터] 탭에서 "필터" 클릭
- 드롭다운 화살표로 조건 설정
SQL:
SELECT *
FROM employees
WHERE department = 'Sales';
Python:
# employees라는 pandas DataFrame 기준
sales_employees = employees[employees['department'] == 'Sales']
데이터 정렬
Excel:
- 데이터 범위 선택
- [데이터] 탭에서 "정렬" 클릭
- 열과 정렬 순서 지정
SQL:
SELECT *
FROM employees
ORDER BY salary DESC;
Python:
# salary 기준 내림차순 정렬
sorted_employees = employees.sort_values(by='salary', ascending=False)
합계 계산
Excel:
- 합계 내고 싶은 셀 선택
=SUM(B2:B10)
입력 또는 AutoSum(Σ) 클릭
SQL:
SELECT SUM(salary) AS total_salary
FROM employees;
Python:
# 총 salary 계산
total_salary = employees['salary'].sum()
피벗 테이블 / 그룹화
Excel:
- 데이터 선택
- [삽입] > [피벗 테이블]
- 행, 열, 값 영역에 필드 드래그
SQL:
SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department;
Python:
# 부서별 평균 salary 계산
dept_salaries = employees.groupby('department')['salary'].mean()
서로 다른 소스의 데이터 병합
Excel:
- VLOOKUP 또는 INDEX/MATCH 사용
- 또는 Power Query로 테이블 병합
SQL:
SELECT e.name, d.department_name
FROM employees e
JOIN departments d ON e.department_id = d.id;
Python:
# employees와 departments DataFrame 병합
result = pd.merge(employees, departments,
left_on='department_id',
right_on='id')
세 가지 도구의 통합 사용
현실에서는 많은 데이터 전문가가 이 세 가지 도구를 함께 사용하며 각 도구의 장점을 활용한다:
- 데이터는 데이터베이스에 저장하고, SQL로 필요한 부분만 추출
- Python으로 데이터 클렌징, 분석, 자동화 수행
- Excel로 결과를 비즈니스 사용자에게 공유
예를 들면:
- SQL 쿼리로 지난달 판매 데이터를 데이터베이스에서 추출
- Python으로 트렌드 분석과 예측 모델 수행
- 결과를 Excel로 내보내서 영업팀이 확인하고 발표자료로 사용
이런 통합 접근법은 SQL의 데이터 처리 능력, Python의 분석/자동화 능력, Excel의 접근성과 친숙함을 모두 활용할 수 있게 해준다.
학습 경로 추천
Excel 사용자라면, 데이터 분석 능력을 확장하기 위한 추천 학습 경로는 다음과 같다:
-
SQL부터 시작: SQL은 Excel에서 자연스럽게 넘어가기 좋은 다음 단계이다. 개념이 유사하고 문법도 비교적 간단하다. SELECT 쿼리, 필터링, 정렬, 기본적인 조인에 집중하자.
-
이후에 Python 배우기: SQL에 익숙해졌다면, 좀 더 고급 분석을 위해 Python을 배우자. 특히 pandas 라이브러리는 Excel 사용자에게 친숙하게 느껴질 수 있다.
-
Excel은 계속 사용: Excel을 버릴 필요는 없다! 여전히 빠른 분석이나 동료들과의 결과 공유에 유용하다.
각 도구는 데이터 작업에 있어 자신만의 역할이 있다. Excel을 대체하려는 것이 아니라, Excel이 잘 못하는 영역을 다른 도구로 보완하는 것이 목표이다.
결론
Excel, SQL, Python은 데이터 전문가의 툴킷에서 서로를 보완하는 도구이다. Excel은 직관적인 시각 인터페이스를, SQL은 대규모 데이터베이스 작업을, Python은 유연성과 고급 분석 기능을 제공한다.
각 도구의 장단점을 이해함으로써 상황에 맞는 최적의 도구를 선택할 수 있다. 그리고 종종, 이들을 조합해 사용하는 것이 최고의 전략이 된다.
다음 챕터에서는 SQL의 문법과 기능에 대해 더 자세히 살펴보겠다.
Chapter 8: SQL 소개
SQL을 데이터베이스를 위한 수식으로 생각하기
엑셀(Excel)에 익숙하다면, 이미 수식의 강력함을 잘 알고 있을 것입니다. 엑셀 수식은 데이터를 변환하고 계산하며 인사이트를 도출하는 데 사용됩니다. SQL은 데이터베이스에서 비슷한 역할을 하지만, 훨씬 더 강력하고 유연합니다.
엑셀 수식이 특정한 문법(등호로 시작하고, 특정 함수명을 사용하는 등)을 따르듯이, SQL도 고유한 문법을 가지고 있습니다. 예를 들어 엑셀에서 =SUM(B2:B10)
을 사용해 값을 더하듯이, SQL에서는 SELECT SUM(salary) FROM employees
를 사용해 같은 작업을 수행할 수 있습니다.
핵심적인 차이점은 SQL은 개별 셀이 아닌 전체 테이블 단위로 작동한다는 점입니다. 이 덕분에 대용량 데이터셋을 처리할 때 매우 효율적입니다.
SQL이란?
SQL(발음은 "시퀄" 또는 알파벳 S-Q-L)은 Structured Query Language의 약자입니다. 관계형 데이터베이스(Relational Database)와 상호작용하기 위한 표준 언어로, 1970년대부터 사용되어 왔습니다.
SQL은 다음과 같은 특징을 가집니다:
- 선언형(Declarative): 어떻게가 아닌 무엇을 원하는지 기술합니다
- 표준화됨(Standardized): 기본 명령어는 다양한 데이터베이스 시스템 간에 비슷하게 작동합니다
- 강력함(Powerful): 간결한 명령어로 복잡한 데이터 작업을 수행할 수 있습니다
- 특화됨(Specialized): 관계형 데이터베이스를 위한 전용 언어입니다
SQL에는 여러 가지 "방언"(예: MySQL, PostgreSQL, Microsoft SQL Server, Oracle 등)이 있지만, 기본적인 명령어와 구조는 공통적입니다. 한 시스템에서 기본기를 익히면 다른 시스템으로의 전환도 수월합니다.
SQL 명령어의 기본 구조
대부분의 SQL 명령어는 사용자가 원하는 작업을 논리적으로 표현합니다. 가장 일반적인 명령어는 데이터를 조회하는 SELECT
입니다. 기본적인 SELECT
문은 다음과 같습니다:
SELECT column1, column2
FROM table_name
WHERE condition
ORDER BY column1;
각 구성 요소를 살펴보면 다음과 같습니다:
- SELECT: 조회하고자 하는 컬럼을 지정합니다
- FROM: 해당 컬럼이 속한 테이블을 지정합니다
- WHERE: 조건에 따라 행을 필터링합니다 (선택 사항)
- ORDER BY: 결과를 정렬합니다 (선택 사항)
이 구조는 마치 자연어로 데이터를 요청하는 방식과 유사합니다: "이 테이블에서 이런 조건에 맞는 행의 이 컬럼들을 이 순서로 보여줘."
주요 SQL 명령어와 엑셀의 대응 기능
SELECT = 컬럼 선택
SQL의 SELECT
문은 보고 싶은 컬럼을 지정합니다:
SELECT first_name, last_name, salary
FROM employees;
엑셀에서 불필요한 컬럼을 숨기고 원하는 데이터만 보는 것과 비슷합니다.
WHERE = 필터 적용
SQL의 WHERE
절은 조건에 따라 행을 필터링합니다:
SELECT *
FROM employees
WHERE department = 'Sales';
엑셀의 필터 기능을 사용해 Department 컬럼이 "Sales"인 행만 표시하는 것과 동일합니다.
GROUP BY = 피벗 테이블
SQL의 GROUP BY
절은 데이터를 집계합니다. 이는 엑셀의 피벗 테이블 기능과 유사합니다:
SELECT department, AVG(salary) as average_salary
FROM employees
GROUP BY department;
각 부서별 평균 급여를 계산하며, 엑셀에서 범주별 평균값을 피벗 테이블로 계산하는 방식과 비슷합니다.
JOIN = 다른 시트에서 VLOOKUP이나 INDEX/MATCH 사용
SQL의 JOIN
은 여러 테이블의 데이터를 조합합니다:
SELECT e.first_name, e.last_name, d.department_name
FROM employees e
JOIN departments d ON e.department_id = d.id;
엑셀에서 VLOOKUP이나 INDEX/MATCH로 다른 시트에서 데이터를 가져오는 것과 유사합니다.
ORDER BY = 데이터 정렬
ORDER BY
절은 결과를 정렬합니다:
SELECT *
FROM employees
ORDER BY salary DESC;
엑셀에서 열을 높은 값에서 낮은 값으로 정렬하는 것과 같습니다.
SQL 데이터 타입
엑셀에서 텍스트, 숫자, 날짜 등 다양한 데이터 타입이 존재하듯, SQL에서도 각 컬럼에 대해 명시적인 데이터 타입을 지정합니다. 주요 SQL 데이터 타입은 다음과 같습니다:
- INTEGER: 정수 (예: 1, 42, -99)
- DECIMAL 또는 NUMERIC: 소수점을 포함한 숫자 (예: 10.5, 3.14159)
- VARCHAR: 가변 길이 텍스트 (예: 이름, 주소 등)
- DATE: 날짜 (예: 2025-04-07)
- BOOLEAN: 참/거짓 값
테이블을 생성할 때 각 컬럼의 데이터 타입을 지정하면 데이터의 일관성을 유지하고 적절한 연산이 가능해집니다.
기본 SQL 연산
SQL 초보자가 꼭 알아야 할 기본 연산들을 알아봅시다.
데이터 조회
가장 기본적인 SQL 연산은 SELECT
문을 이용한 데이터 조회입니다:
-- 모든 컬럼과 행 조회
SELECT * FROM customers;
-- 특정 컬럼만 조회
SELECT first_name, last_name, email FROM customers;
-- 중복 제거된 값 조회
SELECT DISTINCT city FROM customers;
데이터 필터링
데이터를 필터링하려면 WHERE
절을 사용합니다:
-- 조건 일치
SELECT * FROM products WHERE category = 'Electronics';
-- 숫자 비교
SELECT * FROM products WHERE price > 100;
-- 복수 조건
SELECT * FROM products
WHERE category = 'Electronics' AND price < 500;
-- 패턴 매칭
SELECT * FROM customers WHERE email LIKE '%gmail.com';
LIKE
연산자는 와일드카드를 이용한 패턴 매칭을 지원합니다:
%
: 임의 개수의 문자_
: 임의의 한 문자
데이터 정렬
결과를 정렬하려면 ORDER BY
를 사용합니다:
-- 기본 오름차순 정렬
SELECT * FROM products ORDER BY price;
-- 내림차순 정렬
SELECT * FROM products ORDER BY price DESC;
-- 복수 기준 정렬
SELECT * FROM customers ORDER BY state, city;
결과 수 제한
많은 SQL 방언에서 결과 행 수를 제한할 수 있습니다:
-- 상위 10개 행만 조회
SELECT * FROM products LIMIT 10;
계산 및 변환
SQL은 계산과 데이터 변환을 위한 함수들을 제공합니다:
-- 집계 함수
SELECT
COUNT(*) as total_customers,
AVG(age) as average_age,
MIN(age) as youngest,
MAX(age) as oldest
FROM customers;
-- 문자열 함수
SELECT
first_name,
last_name,
CONCAT(first_name, ' ', last_name) as full_name,
UPPER(email) as email_uppercase
FROM customers;
-- 날짜 함수
SELECT
order_date,
YEAR(order_date) as order_year,
MONTH(order_date) as order_month
FROM orders;
데이터 그룹화
카테고리별로 데이터를 집계하려면 GROUP BY
를 사용합니다:
-- 주(state)별 고객 수
SELECT state, COUNT(*) as customer_count
FROM customers
GROUP BY state
ORDER BY customer_count DESC;
-- 제품 카테고리별 매출 합계
SELECT
category,
SUM(price * quantity) as total_sales
FROM order_items
JOIN products ON order_items.product_id = products.id
GROUP BY category;
GROUP BY
를 사용할 때 HAVING
절로 그룹을 필터링할 수 있습니다:
-- 총 매출이 $10,000를 초과하는 제품 카테고리
SELECT
category,
SUM(price * quantity) as total_sales
FROM order_items
JOIN products ON order_items.product_id = products.id
GROUP BY category
HAVING SUM(price * quantity) > 10000;
SQL vs. 엑셀: 실용적 비교
SQL이 엑셀과 어떻게 다른지 이해하기 위해 공통적인 데이터 작업을 비교해봅시다:
예제: 부서별 평균 급여 찾기
엑셀:
- 데이터 범위 선택
- 삽입 > 피벗 테이블
- "Department"를 행으로 드래그
- "Salary"를 값으로 드래그
- 값 필드 설정을 "평균"으로 변경
SQL:
SELECT department, AVG(salary) as average_salary
FROM employees
GROUP BY department;
예제: 상위 5명 고액 연봉자 찾기
엑셀:
- 데이터 범위 선택
- 데이터 > 정렬
- Salary 기준 내림차순 정렬
- 상위 5행 확인
SQL:
SELECT first_name, last_name, salary
FROM employees
ORDER BY salary DESC
LIMIT 5;
예제: 부서별 직원 수 세기
엑셀:
- 데이터 범위 선택
- 삽입 > 피벗 테이블
- "Department"를 행으로 드래그
- "Name"을 값으로 드래그 (기본 Count로 설정됨)
SQL:
SELECT department, COUNT(*) as employee_count
FROM employees
GROUP BY department;
예제: 2024년에 채용된 직원 찾기
엑셀:
- 데이터 범위 선택
- 필터 버튼 클릭
- "Hire Date" 컬럼을 2024년으로 필터
SQL:
SELECT *
FROM employees
WHERE YEAR(hire_date) = 2024;
자주 발생하는 SQL 실수
SQL을 처음 접할 때 주의해야 할 일반적인 실수들입니다:
-
세미콜론(;) 누락: 대부분의 SQL 문장은 세미콜론으로 끝나야 합니다
-
잘못된 따옴표 사용: 대부분의 SQL에서는 텍스트는 작은 따옴표('), 컬럼/테이블 이름은 큰 따옴표(")를 사용합니다 (필요한 경우)
-
컬럼/테이블 이름 오타: SQL 키워드는 보통 대소문자를 구분하지 않지만, 테이블과 컬럼 이름의 대소문자 구분 여부는 DBMS에 따라 다릅니다
-
WHERE 절 생략: WHERE 없이 전체 테이블을 조회하면 큰 테이블에서는 비효율적일 수 있습니다
-
= NULL 사용: NULL 값을 비교할 때는
IS NULL
을 사용해야 합니다:-- 잘못된 예 SELECT * FROM customers WHERE phone = NULL; -- 올바른 예 SELECT * FROM customers WHERE phone IS NULL;
-
JOIN의 동작 방식 오해: INNER, LEFT, RIGHT JOIN은 테이블 간 매칭되지 않는 행에 대해 다른 결과를 반환합니다
결론
SQL은 데이터베이스를 다루기 위한 강력한 언어이며, 그 개념 대부분은 엑셀에서 이미 익숙한 작업들과 평행을 이룹니다. SQL을 "데이터베이스를 위한 수식"이라고 생각하면, 엑셀에서의 경험을 기반으로 SQL을 더 쉽게 이해하고 활용할 수 있습니다.
다음 장에서는 실제 SQL 쿼리를 작성하며, 엑셀의 일반 작업들을 SQL로 어떻게 변환하는지를 단계별 예제를 통해 실습해보겠습니다.
Chapter 9: 첫 번째 SQL 쿼리 작성하기 (엑셀 예제 포함)
시각화: Excel 테이블 → SQL 테이블
SQL 쿼리를 작성하기 전에, 여러분이 익숙한 Excel 테이블과 우리가 쿼리할 SQL 테이블 간의 시각적 연관을 명확히 해봅시다.
다음과 같은 고객 정보가 담긴 Excel 워크시트를 가지고 있다고 상상해 보세요:
Customer_ID | First_Name | Last_Name | City | State | |
---|---|---|---|---|---|
1 | John | Smith | john.smith@email.com | Chicago | IL |
2 | Sarah | Johnson | sarah.j@email.com | New York | NY |
3 | Michael | Williams | mw@email.com | Los Angeles | CA |
4 | Emma | Brown | emma.b@email.com | Houston | TX |
5 | James | Jones | james.jones@email.com | Phoenix | AZ |
SQL 데이터베이스에서는 이 테이블이 customers
라는 이름의 테이블로 동일한 구조로 존재하게 됩니다. 컬럼명은 Excel 헤더와 같고, 각 행은 데이터베이스의 하나의 레코드입니다.
우리가 SQL 쿼리를 작성하는 것은, 마치 Excel에서 필터링, 정렬, 분석을 하듯이 이 테이블에 대해 "질문"을 던지는 것입니다.
단계별: 필터, 피벗, 요약의 SQL 버전은?
Excel에서 자주 사용하는 작업들을 SQL에서는 어떻게 표현하는지 알아봅시다.
1. 데이터 필터링 (Excel 필터 → SQL WHERE)
Excel에서:
- 데이터 탭 클릭
- 필터 선택
- "State" 컬럼에서 드롭다운 화살표 클릭
- "NY"만 체크하고 확인 클릭
SQL에서:
SELECT *
FROM customers
WHERE state = 'NY';
이 쿼리는 뉴욕에 있는 고객의 모든 컬럼을 반환합니다:
Customer_ID | First_Name | Last_Name | City | State | |
---|---|---|---|---|---|
2 | Sarah | Johnson | sarah.j@email.com | New York | NY |
2. 특정 컬럼 선택 (Excel 컬럼 숨기기 → SQL SELECT)
Excel에서:
- 필요 없는 컬럼을 우클릭
- "숨기기" 선택
- First_Name, Last_Name, City만 보이게 설정
SQL에서:
SELECT first_name, last_name, city
FROM customers;
모든 고객에 대해 지정된 컬럼만 반환합니다:
First_Name | Last_Name | City |
---|---|---|
John | Smith | Chicago |
Sarah | Johnson | New York |
Michael | Williams | Los Angeles |
Emma | Brown | Houston |
James | Jones | Phoenix |
3. 데이터 정렬 (Excel 정렬 → SQL ORDER BY)
Excel에서:
- 데이터 범위 선택
- 데이터 탭에서 정렬 클릭
- Last_Name 기준 오름차순 정렬
SQL에서:
SELECT *
FROM customers
ORDER BY last_name;
고객들을 성 기준으로 알파벳 순으로 정렬한 결과입니다:
Customer_ID | First_Name | Last_Name | City | State | |
---|---|---|---|---|---|
4 | Emma | Brown | emma.b@email.com | Houston | TX |
5 | James | Jones | james.jones@email.com | Phoenix | AZ |
2 | Sarah | Johnson | sarah.j@email.com | New York | NY |
1 | John | Smith | john.smith@email.com | Chicago | IL |
3 | Michael | Williams | mw@email.com | Los Angeles | CA |
4. 요약 만들기 (Excel 피벗 테이블 → SQL GROUP BY)
Excel에서:
- 데이터 범위 선택
- 삽입 > 피벗 테이블
- "State"를 행으로 드래그
- "Customer_ID"를 값으로 드래그하여 상태별 고객 수 계산
SQL에서:
SELECT state, COUNT(*) as customer_count
FROM customers
GROUP BY state
ORDER BY customer_count DESC;
각 주(state)별 고객 수를 세고 많은 순으로 정렬한 결과:
State | customer_count |
---|---|
NY | 1 |
IL | 1 |
CA | 1 |
TX | 1 |
AZ | 1 |
5. 여러 작업 조합하기
Excel에서는 특정 주에 대해 필터링하고, Last_Name으로 정렬하고, 일부 컬럼만 보이도록 설정할 수 있습니다. SQL에서는 이 모든 작업을 하나의 쿼리로 결합할 수 있습니다:
SELECT first_name, last_name, city
FROM customers
WHERE state IN ('NY', 'CA')
ORDER BY last_name;
이 쿼리는:
- first_name, last_name, city 컬럼만 선택하고
- NY 또는 CA에 있는 고객만 필터링한 후
- 성(last_name) 기준으로 정렬합니다.
결과:
First_Name | Last_Name | City |
---|---|---|
Sarah | Johnson | New York |
Michael | Williams | Los Angeles |
실습: Excel 작업을 SQL 쿼리로 바꾸기
이번에는 조금 더 복잡한 예제를 통해 연습해봅시다. 두 개의 Excel 워크시트가 있다고 가정합니다: orders
와 products
Orders 워크시트:
Order_ID | Customer_ID | Order_Date | Total_Amount |
---|---|---|---|
101 | 1 | 2025-01-15 | 120.50 |
102 | 3 | 2025-01-20 | 45.99 |
103 | 2 | 2025-01-25 | 75.25 |
104 | 1 | 2025-02-01 | 200.00 |
105 | 5 | 2025-02-05 | 65.75 |
Products 워크시트:
Product_ID | Product_Name | Category | Price |
---|---|---|---|
P1 | Laptop | Electronics | 899.99 |
P2 | Mouse | Electronics | 24.99 |
P3 | Coffee Maker | Kitchen | 79.99 |
P4 | Blender | Kitchen | 49.99 |
P5 | Headphones | Electronics | 149.99 |
Order_Items 워크시트 (orders와 products 연결):
Order_ID | Product_ID | Quantity |
---|---|---|
101 | P2 | 1 |
101 | P5 | 1 |
102 | P4 | 1 |
103 | P3 | 1 |
104 | P1 | 1 |
105 | P2 | 1 |
105 | P4 | 1 |
이제 Excel 작업과 그에 상응하는 SQL을 살펴봅시다:
작업 1: John Smith가 주문한 모든 주문 찾기
Excel에서:
- VLOOKUP을 사용하여 customers 시트에서 John Smith의 Customer_ID 찾기
- Orders 시트에서 해당 Customer_ID로 필터링
SQL에서:
SELECT o.*
FROM orders o
JOIN customers c ON o.customer_id = c.customer_id
WHERE c.first_name = 'John' AND c.last_name = 'Smith';
결과:
Order_ID | Customer_ID | Order_Date | Total_Amount |
---|---|---|---|
101 | 1 | 2025-01-15 | 120.50 |
104 | 1 | 2025-02-01 | 200.00 |
작업 2: 제품 카테고리별 총 매출 계산
Excel에서:
- VLOOKUP을 사용하여 Order_Items에 Category 컬럼 추가
- 피벗 테이블로 Category 행, (Price × Quantity)의 합계 계산
SQL에서:
SELECT p.category, SUM(p.price * oi.quantity) as total_sales
FROM order_items oi
JOIN products p ON oi.product_id = p.product_id
GROUP BY p.category;
결과:
category | total_sales |
---|---|
Electronics | 1074.97 |
Kitchen | 129.98 |
작업 3: 가장 많이 주문된 인기 상품 찾기
Excel에서:
- Order_Items로 피벗 테이블 생성
- Product_ID를 행에 추가
- Order_ID 개수 계산
- Count 기준 내림차순 정렬
SQL에서:
SELECT p.product_name, COUNT(oi.order_id) as order_count
FROM order_items oi
JOIN products p ON oi.product_id = p.product_id
GROUP BY p.product_id, p.product_name
ORDER BY order_count DESC;
결과:
product_name | order_count |
---|---|
Mouse | 2 |
Blender | 2 |
Laptop | 1 |
Coffee Maker | 1 |
Headphones | 1 |
작업 4: 총 지출이 $100 이상인 고객 찾기
Excel에서:
- Orders로 피벗 테이블 생성
- Customer_ID를 행으로
- Total_Amount 합계를 값으로
- 합계 > 100으로 필터링
SQL에서:
SELECT c.first_name, c.last_name, SUM(o.total_amount) as total_spent
FROM orders o
JOIN customers c ON o.customer_id = c.customer_id
GROUP BY c.customer_id, c.first_name, c.last_name
HAVING SUM(o.total_amount) > 100;
결과:
first_name | last_name | total_spent |
---|---|---|
John | Smith | 320.50 |
점진적으로 복잡한 쿼리 만들기
SQL의 장점 중 하나는 쿼리를 점진적으로, 간단한 것부터 시작해서 필요에 따라 복잡하게 만들 수 있다는 점입니다. 그 과정을 단계별로 살펴봅시다:
Step 1: 기본 SELECT 문으로 시작
SELECT *
FROM customers;
모든 고객 정보를 반환합니다.
Step 2: 결과 필터링
SELECT *
FROM customers
WHERE state IN ('NY', 'CA');
뉴욕(NY)과 캘리포니아(CA)에 있는 고객만 반환합니다.
Step 3: 특정 컬럼만 선택
SELECT customer_id, first_name, last_name
FROM customers
WHERE state IN ('NY', 'CA');
NY와 CA 고객의 ID 및 이름만 반환합니다.
Step 4: 다른 테이블과 JOIN
SELECT c.customer_id, c.first_name, c.last_name, o.order_id, o.order_date
FROM customers c
JOIN orders o ON c.customer_id = o.customer_id
WHERE c.state IN ('NY', 'CA');
NY 또는 CA에 있는 고객의 정보와 해당 고객이 주문한 주문 정보를 함께 반환합니다.
Step 5: 집계 함수 추가
SELECT c.customer_id, c.first_name, c.last_name,
COUNT(o.order_id) as order_count,
SUM(o.total_amount) as total_spent
FROM customers c
JOIN orders o ON c.customer_id = o.customer_id
WHERE c.state IN ('NY', 'CA')
GROUP BY c.customer_id, c.first_name, c.last_name;
NY와 CA에 있는 각 고객의 주문 수(order_count)와 총 지출(total_spent)을 계산합니다.
Step 6: 집계 결과 필터링
SELECT c.customer_id, c.first_name, c.last_name,
COUNT(o.order_id) as order_count,
SUM(o.total_amount) as total_spent
FROM customers c
JOIN orders o ON c.customer_id = o.customer_id
WHERE c.state IN ('NY', 'CA')
GROUP BY c.customer_id, c.first_name, c.last_name
HAVING COUNT(o.order_id) > 0;
주문을 한 건이라도 한 고객만 결과에 포함시킵니다.
Step 7: 결과 정렬
SELECT c.customer_id, c.first_name, c.last_name,
COUNT(o.order_id) as order_count,
SUM(o.total_amount) as total_spent
FROM customers c
JOIN orders o ON c.customer_id = o.customer_id
WHERE c.state IN ('NY', 'CA')
GROUP BY c.customer_id, c.first_name, c.last_name
HAVING COUNT(o.order_id) > 0
ORDER BY total_spent DESC;
총 지출이 많은 순서로 고객을 정렬합니다.
이처럼 SQL 쿼리는 점진적으로 복잡하게 쌓아갈 수 있기 때문에, 작성과 디버깅이 훨씬 수월해집니다.
Excel 사용자에게 유용한 SQL 쿼리 패턴
다음은 Excel 사용자에게 특히 익숙한 SQL 쿼리 패턴들입니다:
패턴 1: "VLOOKUP" JOIN
Excel에서는 VLOOKUP으로 다른 테이블의 데이터를 가져옵니다. SQL에서는 JOIN을 사용합니다:
SELECT o.order_id, o.order_date, c.first_name, c.last_name
FROM orders o
JOIN customers c ON o.customer_id = c.customer_id;
패턴 2: "피벗 테이블" Group By
Excel의 피벗 테이블은 데이터 요약에 강력한 도구입니다. SQL에서는 GROUP BY를 사용합니다:
SELECT
YEAR(order_date) as order_year,
MONTH(order_date) as order_month,
SUM(total_amount) as monthly_sales
FROM orders
GROUP BY YEAR(order_date), MONTH(order_date)
ORDER BY order_year, order_month;
패턴 3: "필터" WHERE
Excel의 필터 기능과 같은 역할을 SQL에서는 WHERE로 수행합니다:
SELECT *
FROM products
WHERE category = 'Electronics' AND price < 100;
패턴 4: "IF" CASE
Excel의 IF 함수와 같은 조건 처리를 SQL에서는 CASE 문으로 작성합니다:
SELECT
product_name,
price,
CASE
WHEN price < 50 THEN 'Budget'
WHEN price BETWEEN 50 AND 100 THEN 'Mid-range'
ELSE 'Premium'
END as price_category
FROM products;
패턴 5: "CountIf" HAVING
Excel의 COUNTIF 기능은 SQL의 HAVING 절과 함께 GROUP BY로 구현할 수 있습니다:
SELECT category, COUNT(*) as product_count
FROM products
GROUP BY category
HAVING COUNT(*) > 5;
첫 번째 SQL 쿼리를 위한 팁
SQL 쿼리를 작성할 때 유용한 팁은 다음과 같습니다:
- 단순하게 시작하세요: 기본 SELECT 문으로 시작하고 점진적으로 확장하세요.
- 의미 있는 별칭(alias)을 사용하세요: customers는
c
, orders는o
등 간단한 별칭으로 가독성을 높이세요. - 쿼리를 깔끔하게 정리하세요: 줄바꿈과 들여쓰기를 사용해 구조적으로 작성하세요.
- SELECT로 먼저 테스트하세요: UPDATE나 DELETE 전에 SELECT로 조건을 검증하세요.
- 주석을 사용하세요:
--
를 사용하여 복잡한 로직에 주석을 추가하세요. - 필요한 컬럼만 선택하세요:
SELECT *
대신 필요한 컬럼만 지정하세요. - JOIN 조건을 확인하세요: 테이블 간 연결이 정확한지 항상 검증하세요.
마무리
이번 장에서는 SQL 쿼리를 작성하는 법을 익히며, 익숙한 Excel 작업이 SQL에서는 어떻게 표현되는지 살펴보았습니다. 많은 Excel 기능들이 SQL에서도 직접적으로 매핑됩니다:
- Excel 필터 → SQL WHERE
- Excel 정렬 → SQL ORDER BY
- Excel 피벗 테이블 → SQL GROUP BY
- Excel VLOOKUP → SQL JOIN
- Excel 수식 → SQL 함수 및 표현식
기존의 Excel 경험을 활용하면 SQL을 더 쉽게 이해하고 사용할 수 있습니다. 데이터가 커지고 복잡해질수록 SQL의 강력함과 유연성이 빛을 발하게 될 것입니다.
다음 장에서는 SQL이 데이터 생태계에서 어떤 역할을 하는지, 그리고 대시보드나 비즈니스 인텔리전스 툴에서 어떻게 활용되는지를 살펴보겠습니다.
Chapter 10: 대시보드란 무엇인가?
대시보드 vs. 리포트
엑셀을 어느 정도 다뤄본 사람이라면 월간 매출 요약, 재고 현황 시트, 재무제표 등 다양한 리포트를 만들어본 경험이 있을 겁니다. 이런 리포트들은 유용하지만, 특정 시점의 데이터를 정적으로 보여주는 경우가 많습니다.
반면, **대시보드(dashboard)**는 가장 중요한 데이터를 시각적으로 동적으로 표현해, 현재 비즈니스 상황을 한눈에 파악할 수 있게 해줍니다. 정적인 사진과 실시간 영상 피드의 차이를 생각하면 이해가 쉽습니다.
엑셀 리포트가 지난달 지역별 매출을 보여준다면, 대시보드는 다음과 같은 정보를 제공할 수 있습니다:
- 오늘 매출과 어제/지난주/지난달 비교
- 자동 업데이트되는 매출 추이
- 목표 대비 실적을 시각적으로 표시
- 즉각적인 대응이 필요한 이상 징후
- 필터링 및 탐색이 가능한 인터랙티브 요소
대시보드와 리포트의 주요 차이점은 다음과 같습니다:
리포트 | 대시보드 |
---|---|
정적인 시점의 정보 | 동적이며 실시간 정보가 많음 |
상세하고 포괄적임 | 핵심 지표(KPI)에 집중 |
텍스트 중심 | 시각적 요소 중심 |
심층 분석용 | 빠른 이해를 위한 용도 |
정기적으로 배포 | 지속적으로 사용 가능 및 자동 업데이트 |
수동 업데이트 필요 | 자동 업데이트 가능 |
대시보드의 핵심 기능 (KPI, 트렌드, 필터)
핵심성과지표 (KPIs)
KPI는 비즈니스의 바이탈 사인과도 같습니다. 의사가 심박수, 혈압, 체온으로 건강을 확인하듯, 대시보드는 KPI를 통해 비즈니스 성과를 진단합니다.
효과적인 대시보드는 중요한 KPI를 강조해서, 전략적 목표에 대한 진행 상황을 쉽게 파악하게 합니다. 예시:
- 세일즈 대시보드 KPI: 매출, 전환율, 평균 주문 금액, 제품 카테고리별 매출
- 마케팅 대시보드 KPI: 리드 수, 획득당 비용(CPA), 캠페인 ROI, 웹사이트 트래픽
- 재무 대시보드 KPI: 이익률, 현금 흐름, 미수금, 비용 비율
- HR 대시보드 KPI: 이직률, 채용 소요 시간, 교육 이수율, 직원 만족도
엑셀에서는 이들을 여러 시트나 파일에 나눠 추적하지만, 대시보드는 시각적 신호(예: 빨강/노랑/초록, 화살표 등)와 함께 하나로 통합해 보여줍니다.
트렌드
KPI의 현재 값도 중요하지만, 그 값이 시간에 따라 어떻게 변했는지를 아는 것이 더 중요할 수 있습니다. 대시보드는 다음과 같은 방식으로 트렌드를 시각화합니다:
- 라인 차트: 시간에 따른 성과 변화
- 스파크라인: 현재 값 옆의 미니 추이선
- 비교 지표: 이전 기간 대비 변화율 표시
- 예측 요소: 과거 데이터를 기반으로 미래 성과 예측
예를 들어, 단순히 오늘 웹사이트 방문자 수가 1,500명이라는 것보다는, 지난 30일 간의 스파크라인과 +12% 증가 표시를 함께 보여주는 것이 더 유용합니다.
필터
대시보드의 가장 강력한 기능 중 하나는 필터를 통한 인터랙티브성입니다. 엑셀의 기본 필터 기능과 달리, 대시보드의 필터는 직관적이며 여러 시각 요소에 동시에 영향을 줍니다.
일반적인 대시보드 필터 예시:
- 날짜 범위: 특정 기간의 데이터 조회
- 지역 필터: 특정 지리적 위치 중심으로 분석
- 제품 카테고리: 제품군별 성과 분석
- 고객 세그먼트: 고객 그룹별 행동 분석
이러한 필터 덕분에 하나의 대시보드로도 다양한 질문에 답할 수 있고, 새로운 리포트를 만들 필요가 줄어듭니다.
대시보드의 유형
대시보드의 유형은 목적과 대상에 따라 다릅니다. 적절한 유형을 이해하면 필요에 맞는 대시보드를 설계할 수 있습니다.
운영 대시보드 (Operational Dashboards)
목적: 일상 운영 및 활동 모니터링
업데이트 빈도: 실시간 또는 거의 실시간
대상: 현장 직원, 매니저
포커스: 현재 성과 및 즉시 해결이 필요한 이슈
운영 대시보드는 자동차의 계기판과 유사하며, 실시간 상태 및 경고를 보여줍니다.
구성요소:
- 현재 상태 지표
- 최근 활동 메트릭
- 알림 및 경고
- 목표 대비 실적 비교
예시: 콜센터 대시보드 – 통화량, 대기 시간, 상담원 상태, 서비스 레벨 준수
전략 대시보드 (Strategic Dashboards)
목적: 장기 목표 및 전략적 성과 추적
업데이트 빈도: 주간, 월간 또는 분기별
대상: 경영진 및 임원
포커스: KPI 및 장기 트렌드
전략 대시보드는 비즈니스 전반의 전략적 목표 달성 현황을 고위 수준에서 보여줍니다.
구성요소:
- 전략 목표에 맞춘 KPI
- 장기 트렌드
- 목표 대비 비교
- 요약 중심 데이터
예시: 경영진 대시보드 – 연간 목표 대비 누적 매출, 시장 점유율, 고객 만족도, 주요 재무 비율
분석 대시보드 (Analytical Dashboards)
목적: 데이터 탐색, 패턴 분석, 인사이트 도출
업데이트 빈도: 필요 시
대상: 분석가, 매니저, 의사결정자
포커스: 데이터 탐색 및 원인 분석
분석 대시보드는 인터랙티브성이 높고, 심층 분석을 위한 다양한 기능을 제공합니다.
구성요소:
- 드릴다운 기능
- 고급 필터 및 세그먼트
- 다양한 데이터 뷰
- 애드혹 분석 기능
예시: 마케팅 분석 대시보드 – 캠페인별 성과 분석, 채널/세그먼트/기간별 비교, KPI 드릴다운
전술 대시보드 (Tactical Dashboards)
목적: 중기 의사결정 및 계획 수립 지원
업데이트 빈도: 일간 또는 주간
대상: 부서장, 팀 리더
포커스: 성과 최적화, 자원 배분
전술 대시보드는 운영과 전략의 중간 역할을 하며, 팀 단위의 성과 최적화에 중점을 둡니다.
구성요소:
- 부서/팀별 메트릭
- 자원 활용도 지표
- 프로젝트 진행 현황
- 중기 트렌드 분석
예시: 생산 관리 대시보드 – 효율성 지표, 품질 지표, 재고 수준, 생산 일정
엑셀 대시보드 vs. 더 강력한 도구들
엑셀에서 시각화 기능을 활용해 대시보드 비슷한 시트를 만들어 본 사람도 많을 겁니다. 엑셀 대시보드는 많은 경우 유효하지만, 더 복잡하고 데이터 중심적인 상황에서는 전문 도구가 유리합니다.
엑셀이 잘하는 것
엑셀은 다음과 같은 조건에서는 훌륭한 대시보드 도구입니다:
- 데이터 양이 적당할 때: 수천 행은 무리 없지만, 수십만 행 이상은 성능 저하
- 데이터 소스가 제한적일 때: 수작업 또는 간단한 연결로 처리 가능
- 소규모 팀일 때: 엑셀 사용자가 한정된 경우 공유가 쉬움
- 요구사항이 단순할 때: 기본 차트, 표, 조건부 서식으로 대부분 커버 가능
- 예산이 제한적일 때: 엑셀이 이미 조직에 설치되어 있는 경우
엑셀 대시보드 구성 예시:
- 피벗 테이블로 데이터 요약
- 차트 생성
- 슬라이서로 필터 적용
- 조건부 서식으로 시각화
- 데이터 연결로 새로 고침 설정
더 강력한 도구가 필요한 시점
다음과 같은 상황에서는 엑셀의 한계를 느낄 수 있습니다:
- 대규모 데이터 처리 한계: 수십만 행에서 성능 저하
- 자동 업데이트 어려움: 실시간 데이터 처리 제한
- 인터랙티브 기능 제한: 슬라이서 외에 동적인 상호작용 부족
- 복잡한 데이터 연결 어려움: 여러 DB 연동 및 유지 관리 번거로움
- 협업 기능 부족: 엑셀을 사용하지 않는 사용자와의 공유 어려움
- 시각화 한계: 전문 도구에 비해 시각화 기능 제한
전문 대시보드 도구 예시: Tableau, Power BI, Looker
이들 도구는 다음과 같은 강점을 가집니다:
- 수백만 행 처리 가능
- 데이터베이스와 직접 연결, 자동 새로 고침
- 강력한 인터랙션 (드릴다운, 크로스 필터 등)
- 고급 시각화 가능
- 협업 기능 내장
- 모바일 접근성 보장
- 다른 앱/웹사이트에 임베딩 가능
전환 가이드: 엑셀에서 대시보드로
엑셀을 넘어 대시보드 전문 도구를 고려한다면, 다음과 같은 단계로 전환을 준비할 수 있습니다:
- 엑셀로 시작: 대시보드 설계의 기초를 익히고 필요 사항 정의
- Power BI Desktop 탐색: 엑셀 사용자에게 익숙한 인터페이스
- SQL 기초 학습: 대부분의 대시보드 도구는 데이터베이스 기반
- 요구사항 정리: 데이터 양, 업데이트 주기, 시각화 요소, 사용자 등
- 도구 평가: Power BI, Tableau, Looker 등 비교
- 작게 시작: 특정 비즈니스 니즈를 해결하는 작은 대시보드부터
- 피드백 기반으로 확장: 점진적으로 개선 및 확장
결론
대시보드는 엑셀 스프레드시트를 넘어선 데이터 시각화 및 분석의 진화된 형태입니다. 주요 지표 모니터링, 트렌드 파악, 데이터 기반 의사결정을 위한 동적 시각화 인터페이스를 제공합니다.
엑셀은 기본적인 대시보드 요구에 충분할 수 있지만, 더 큰 데이터셋, 실시간 연동, 고급 시각화, 협업 등의 필요가 커질수록 전문 도구의 장점이 분명해집니다.
엑셀, 데이터베이스, SQL에 익숙해지고 있는 지금, 대시보드는 그 여정의 마지막 조각으로서 데이터 인사이트를 비즈니스 성공으로 연결시켜줍니다.
다음 챕터에서는 구체적인 대시보드 도구들을 비교하고, 어떤 도구가 상황에 맞는지 선택하는 방법을 알아보겠습니다.
Chapter 11: 실무에서 사용하는 도구들
Tableau, Power BI, Looker와 같은 도구 소개
Excel에서 더 정교한 데이터 분석 도구로 넘어가면, 강력한 비즈니스 인텔리전스(BI) 및 대시보드 도구들을 접하게 됩니다. 이러한 도구들은 데이터베이스와 연결되고, 대용량 데이터를 처리하며, 데이터를 시각적으로 생동감 있게 표현하는 인터랙티브 시각화를 제공합니다.
가장 인기 있는 대시보드 도구들을 살펴보고, 각각의 장점, 유사점, 차이점을 이해해봅시다.
Tableau
Tableau는 시장에서 가장 강력한 데이터 시각화 도구 중 하나로 평가받고 있습니다. 2003년에 설립되어 조직이 데이터를 시각화하고 이해하는 방식을 혁신했습니다.
주요 기능:
- 다양한 차트 유형을 지원하는 뛰어난 시각화 기능
- 직관적인 드래그 앤 드롭 인터페이스
- 강력한 데이터 탐색 및 인사이트 발견 기능
- 거의 모든 데이터 소스에 연결 가능
- 데스크톱, 서버, 클라우드 배포 옵션
- 탄탄한 커뮤니티 및 방대한 학습 리소스
Excel 사용자 관점: Excel에서 차트를 만드는 것을 즐겼다면 Tableau의 시각화 접근 방식을 분명히 좋아할 것입니다. 인터페이스가 약간 비슷한 느낌이 나며, 필드를 선택해 ‘선반(Shelf)’에 올리는 방식은 Excel에서 차트를 만드는 과정과 유사합니다. 그러나 Tableau는 훨씬 더 다양한 시각화 옵션과 인터랙티브 기능을 제공합니다.
Tableau의 계산 언어는 Excel 사용자가 친숙하게 느낄 수 있으며, SUM, AVERAGE, IF 문과 같은 유사한 함수들을 사용하지만 문법은 다소 다릅니다.
Power BI
Microsoft의 Power BI는 특히 Microsoft 제품을 사용하는 조직 내에서 빠르게 인기를 얻고 있는 도구입니다. 경쟁력 있는 가격에 종합적인 BI 기능을 제공합니다.
주요 기능:
- Excel, Azure 등 다른 Microsoft 제품과의 원활한 통합
- 사용자 지정 계산식을 위한 DAX (Data Analysis Expressions)
- 데이터 변환을 위한 Power Query (Excel과 동일한 기술)
- AI 기반 인사이트 및 자연어 질의 기능
- 데스크톱, 서비스(클라우드), 모바일 버전 제공
- 매월 기능 업데이트
Excel 사용자 관점: Power BI는 Excel 사용자에게 가장 익숙한 전환 경로를 제공합니다. Power BI의 Power Query는 Excel과 동일하며, 시각화 개념 또한 Excel의 차트와 유사합니다. Excel의 피벗 테이블을 사용해본 경험이 있다면, Power BI의 데이터 모델링 및 시각화 방식이 친숙하게 느껴질 것입니다.
Power BI의 DAX는 Excel의 수식 개념을 확장하지만, 연관된 테이블 간의 계산 방식에는 중요한 차이가 있습니다.
Looker (Google Cloud)
Looker는 BI에 대해 색다른 접근 방식을 제공합니다. 조직 전체에서 비즈니스 메트릭을 일관되게 정의하는 시맨틱 모델링 계층에 중점을 둡니다.
주요 기능:
- 중앙 집중형 데이터 모델 생성을 위한 LookML
- 강력한 데이터 거버넌스 기능
- 애플리케이션에 대시보드를 통합할 수 있는 임베디드 분석 기능
- 인사이트 공유를 위한 협업 기능
- 클라우드 기반 아키텍처
- Google Cloud Platform과의 통합
Excel 사용자 관점: Looker는 Tableau나 Power BI보다 Excel 사용자에게 더 큰 도약이 필요합니다. LookML이라는 코드 기반 언어로 데이터 모델을 정의해야 하며, Excel처럼 시각적인 인터페이스는 아닙니다. 하지만 데이터 모델이 설정되면 시각화 생성은 비교적 간단해집니다.
Looker Studio (구 Google Data Studio)
Looker Studio는 모든 기술 수준의 사용자를 위해 설계된 Google의 무료 데이터 시각화 및 리포팅 도구입니다.
주요 기능:
- 무료로 사용 가능
- Google Analytics, Google Ads 등과의 쉬운 통합
- 공유 가능하고 협업 가능한 리포트
- 빠른 시작을 위한 템플릿 갤러리 제공
- 웹사이트에 리포트 임베딩 가능
- 다양한 데이터 소스를 위한 커뮤니티 커넥터 지원
Excel 사용자 관점: Looker Studio는 Excel 사용자에게 비교적 쉬운 학습 곡선을 제공합니다. 인터페이스가 직관적이고, 시각화 개념도 익숙하게 느껴집니다. 큰 비용을 들이지 않고 Excel을 넘어서는 첫걸음을 떼기에 적합한 도구입니다.
그 외 주목할 만한 도구
다른 주요 대시보드 도구들도 있습니다:
- Qlik Sense: 모든 데이터 요소 간 관계를 유지하는 연관 엔진으로 유명
- Domo: 비즈니스 사용자 중심의 클라우드 기반 플랫폼
- Sisense: 인칩 처리 기술을 통해 대규모 복잡한 데이터셋을 효율적으로 처리
비교: 언제 어떤 도구를 사용할 것인가?
적절한 대시보드 도구를 선택하는 것은 필요성, 기술 수준, 조직 환경에 따라 다릅니다. 다음은 의사 결정을 돕기 위한 비교입니다:
Power BI: Microsoft 중심 조직에 적합
Power BI가 적합한 경우:
- 조직이 Microsoft 제품을 광범위하게 사용 중인 경우
- 비용 효율적이면서도 좋은 시각화 기능이 필요한 경우
- 팀이 Excel에 익숙하고 비슷한 경험을 원하는 경우
- 다양한 소스(예: Excel 파일)에서 데이터를 통합해야 하는 경우
- AI 기반 인사이트 및 자연어 질의가 필요한 경우
예시 시나리오: Excel 스프레드시트와 SQL Server 데이터베이스를 주로 사용하는 재무 부서가 예산 추적 및 재무 리포트를 위한 대시보드를 만들고자 할 때 Power BI는 친숙한 인터페이스, Excel 통합성, 합리적인 라이선스 비용으로 탁월한 선택입니다.
Tableau: 고급 시각화가 필요한 경우
Tableau가 적합한 경우:
- 고급 시각화가 주요 요구사항인 경우
- 커스터마이징 가능한 인터랙티브 대시보드가 필요한 경우
- 데이터 탐색 및 인사이트 발견이 중요한 경우
- 다양한 데이터 소스를 결합해야 하는 경우
- 비용보다 기능이 더 중요한 경우
예시 시나리오: 마케팅 분석팀이 웹 분석, CRM, 마케팅 자동화 플랫폼 데이터를 결합하여 고객 여정에 대한 복잡한 시각화를 만들어야 할 때 Tableau는 탁월한 시각화 기능과 강력한 데이터 결합 능력으로 이상적입니다.
Looker: 엔터프라이즈 데이터 거버넌스에 적합
Looker가 적합한 경우:
- 조직 전반에서 일관된 메트릭 정의가 중요한 경우
- 비즈니스 로직을 위한 중앙 시맨틱 계층이 필요한 경우
- LookML을 다룰 수 있는 개발자가 있는 경우
- 애플리케이션 내 임베디드 분석이 필요한 경우
- Google Cloud Platform을 많이 사용하는 경우
예시 시나리오: 대형 e-commerce 기업이 “활성 고객”이나 “고객 생애 가치” 같은 메트릭을 모든 부서에서 일관되게 사용해야 할 때 Looker의 시맨틱 모델링 계층은 한 번 정의한 메트릭을 모든 대시보드에서 재사용할 수 있게 해줍니다.
Looker Studio: 단순하고 무료 대시보드에 적합
Looker Studio가 적합한 경우:
- 기본적인 대시보드가 필요한데 비용이 부담스러운 경우
- 이미 Google Analytics 등의 Google 서비스를 사용 중인 경우
- 데이터 규모가 중간 수준인 경우
- 리포트를 웹사이트에 공개하거나 공유해야 하는 경우
- 대시보드 초심자로서 학습을 시작하고 싶은 경우
예시 시나리오: 소규모 사업자가 웹사이트 성과 및 온라인 광고 결과를 추적하는 대시보드를 만들고자 할 때, Looker Studio는 무료이며 Google Analytics와 직접 통합되고 사용이 쉬워 매우 적합합니다.
SQL이 대시보드의 백엔드에서 작동하는 방식
대시보드 도구는 시각적인 인터페이스를 제공하지만, 그 뒤에서는 SQL이 데이터 조회 및 처리를 담당하는 경우가 많습니다. 이 관계를 이해하면 더 효율적이고 효과적인 대시보드를 만들 수 있습니다.
SQL과 대시보드의 연결
대시보드 도구와 상호작용할 때 일반적으로 다음과 같은 단계가 진행됩니다:
- 연결(Connection): 도구가 드라이버 또는 API를 통해 데이터베이스에 연결
- 쿼리 생성(Query Generation): 필드를 드래그하거나 필터를 적용하면 SQL 쿼리가 자동 생성
- 쿼리 실행(Query Execution): 생성된 SQL 쿼리가 데이터베이스 서버에서 실행됨
- 데이터 반환(Data Retrieval): 결과가 대시보드 도구로 반환됨
- 시각화(Visualization): 반환된 데이터를 기반으로 시각화 구성
예시:
대시보드 동작: 올해의 제품 카테고리별 총 매출을 보여주는 막대 차트 생성
생성된 SQL:
SELECT
product_category,
SUM(sales_amount) AS total_sales
FROM
sales
WHERE
sale_date BETWEEN '2025-01-01' AND '2025-12-31'
GROUP BY
product_category
ORDER BY
total_sales DESC;
대시보드 동작: 특정 지역만 필터링
업데이트된 SQL:
SELECT
product_category,
SUM(sales_amount) AS total_sales
FROM
sales
WHERE
sale_date BETWEEN '2025-01-01' AND '2025-12-31'
AND region = 'Northeast'
GROUP BY
product_category
ORDER BY
total_sales DESC;
도구별 SQL 처리 방식
Power BI
Power BI는 두 가지 주요 모드로 데이터베이스와 작동합니다:
- Import 모드: 데이터를 Power BI의 메모리 내 엔진으로 가져와 내부에서 시각화 처리 (Excel의 Power Pivot과 유사)
- DirectQuery 모드: 실시간으로 SQL 쿼리를 생성하고 실행하여 항상 최신 데이터를 표시하지만 성능은 낮을 수 있음
Power BI는 또한 직접 SQL 쿼리를 작성해 데이터베이스와 연결하는 기능을 제공합니다.
Tableau
Tableau는 SQL 생성 효율성이 높은 것으로 유명합니다:
- Live 연결: 실시간 쿼리 생성 및 실행 (Power BI의 DirectQuery와 유사)
- Extract 모드: 데이터를 Tableau 전용 포맷으로 추출해 성능 향상 (Power BI의 Import와 유사)
“Show Me” 기능은 선택된 필드에 따라 적절한 시각화를 제안하며, 그에 맞는 SQL을 자동 생성합니다.
Looker
Looker는 LookML이라는 고유 언어로 접근합니다:
- LookML 정의: 차원, 측정값, 관계를 정의
- SQL 생성: 사용자가 시각화를 생성할 때 Looker가 SQL을 자동 생성
- 쿼리 최적화: 파생 테이블, 증분 처리 등 SQL 최적화 기능 내장
SQL 이해의 이점
대시보드 도구의 시각적 인터페이스만 사용하더라도 SQL을 이해하면 다음과 같은 장점이 있습니다:
- 성능 최적화: SQL 생성 방식을 알면 성능이 뛰어난 대시보드를 설계할 수 있음
- 문제 해결: 데이터가 예상대로 표시되지 않을 때 SQL을 통해 원인을 파악 가능
- 고급 커스터마이징: 시각적 인터페이스로 불가능한 복잡한 작업을 SQL로 처리 가능
- 데이터 준비: 대시보드 생성을 위한 뷰나 저장 프로시저 작성 가능
실제 예시: SQL에서 대시보드까지
시나리오: 판매 성과 대시보드
리테일 회사에서 판매 성과 대시보드를 만든다고 가정해 봅시다. SQL 데이터베이스에는 주문, 고객, 제품, 영업사원 테이블이 있습니다.
Step 1: SQL 쿼리 작성
SELECT
p.category AS product_category,
c.region AS customer_region,
r.name AS sales_rep,
EXTRACT(MONTH FROM o.order_date) AS month,
EXTRACT(YEAR FROM o.order_date) AS year,
SUM(o.quantity * o.unit_price) AS total_sales,
COUNT(DISTINCT o.order_id) AS order_count,
COUNT(DISTINCT o.customer_id) AS customer_count
FROM
orders o
JOIN
customers c ON o.customer_id = c.customer_id
JOIN
products p ON o.product_id = p.product_id
JOIN
sales_reps r ON o.sales_rep_id = r.sales_rep_id
WHERE
o.order_date BETWEEN '2024-01-01' AND '2024-12-31'
GROUP BY
p.category,
c.region,
r.name,
EXTRACT(MONTH FROM o.order_date),
EXTRACT(YEAR FROM o.order_date);
Step 2: 대시보드 도구에서 데이터베이스 연결
Power BI 기준:
- SQL 데이터베이스에 연결
- 위 쿼리를 직접 사용하거나 관련 테이블 선택
- 테이블 간 관계 설정 (모델 뷰)
Step 3: 시각화 생성
- 월별 매출 추세 라인 차트
- 제품 카테고리별 매출 막대 차트
- 고객 지역별 매출 지도 시각화
- 상위 영업사원 테이블
Step 4: 인터랙티브 요소 추가
- 날짜 범위 선택기
- 제품 카테고리 필터
- 지역 필터
- 영업사원 드롭다운
Step 5: 성능 최적화
- 자주 사용하는 메트릭에 대한 뷰 생성
- 대용량 데이터셋에 대해 증분 새로고침 사용
- 데이터베이스 테이블에 인덱스 추가
- 일별/월별/분기별로 사전 집계된 데이터 사용 고려
결론
Tableau, Power BI, Looker와 같은 대시보드 도구는 조직이 데이터를 시각화하고 분석하는 방식을 혁신했습니다. Excel은 여전히 유용하지만, 이러한 전문 도구들은 대시보드 생성, 데이터 연결, 인터랙티브 분석 측면에서 훨씬 더 강력한 기능을 제공합니다.
이러한 도구의 백엔드에서 SQL이 어떻게 작동하는지를 이해하면, 더 효율적인 대시보드를 만들 수 있고 데이터베이스 관리와 데이터 시각화 사이의 간극을 메울 수 있습니다.
다음 장에서는 데이터, 데이터베이스, SQL, 대시보드가 현대 분석 워크플로우에서 어떻게 유기적으로 연결되는지 살펴보며, 원시 데이터에서 인사이트로 이어지는 여정을 완성하겠습니다.
Chapter 12: 점을 연결하기
현대 분석 워크플로우에서 SQL의 역할
이 책 전반에 걸쳐 우리는 Excel에서 데이터베이스, SQL, 그리고 대시보드로의 여정을 탐색했습니다. 이 마지막 장에서는 이러한 모든 요소들이 현대 분석 워크플로우에서 어떻게 함께 작동하는지를 연결해 보겠습니다.
원시 데이터로부터 실행 가능한 인사이트에 도달하기까지의 과정에는 여러 단계가 있으며, 이 중 여러 지점에서 SQL이 핵심적인 역할을 수행합니다. 이 워크플로우를 살펴보며 각 요소가 전체 그림에 어떻게 기여하는지 알아보겠습니다.
전체 분석 워크플로우
일반적인 현대 분석 워크플로우는 다음과 같은 주요 단계를 포함합니다:
- 데이터 수집 및 저장: 다양한 소스로부터 데이터를 수집하고 데이터베이스에 저장
- 데이터 준비 및 변환: 분석을 위한 데이터 정제 및 구조화
- 데이터 모델링: 관계 및 비즈니스 로직 정의
- 분석 및 시각화: 대시보드 및 리포트 생성
- 공유 및 협업: 인사이트를 이해관계자와 공유
SQL은 이들 단계 중 다수에서 연결 고리 역할을 하며, 원시 데이터를 의미 있는 인사이트로 전환하는 언어로 작동합니다.
예시: Raw Data → SQL Query → Clean Table → Dashboard
구체적인 예시를 통해 각 구성 요소가 실무에서 어떻게 함께 작동하는지를 살펴보겠습니다.
시나리오: 이커머스 판매 분석
당신은 온라인 소매업체에서 근무하고 있으며, 다양한 제품 카테고리, 지역, 시점에 따른 판매 실적을 보여주는 대시보드를 만들어야 한다고 가정해 봅시다.
Step 1: 데이터 수집 및 저장
회사에서는 다음과 같은 다양한 소스로부터 데이터를 수집합니다:
- 이커머스 플랫폼의 거래 데이터
- CRM 시스템의 고객 정보
- 재고 관리 시스템의 제품 정보
- 광고 플랫폼의 마케팅 캠페인 데이터
이 데이터는 고객(customers), 제품(products), 주문(orders), 주문 항목(order_items), 마케팅 캠페인(marketing_campaigns)에 대한 테이블로 구성된 관계형 데이터베이스에 저장됩니다.
Step 2: SQL을 이용한 데이터 준비
대시보드를 만들기 전에 관련 테이블을 조인하고 주요 지표를 계산하여 데이터를 준비해야 합니다. 다음은 이를 위한 SQL 쿼리 예시입니다:
-- 판매 분석용 뷰 생성
CREATE VIEW sales_analysis AS
SELECT
o.order_id,
o.order_date,
c.customer_id,
c.name AS customer_name,
c.city,
c.state,
c.country,
p.product_id,
p.name AS product_name,
p.category,
p.subcategory,
oi.quantity,
oi.unit_price,
(oi.quantity * oi.unit_price) AS sales_amount,
m.campaign_name
FROM
orders o
JOIN
customers c ON o.customer_id = c.customer_id
JOIN
order_items oi ON o.order_id = oi.order_id
JOIN
products p ON oi.product_id = p.product_id
LEFT JOIN
marketing_campaigns m ON o.campaign_id = m.campaign_id;
이 SQL 쿼리는 다음과 같은 작업을 수행합니다:
- 여러 테이블을 조인하여 관련 정보를 통합
- 각 주문 항목의 매출액을 계산
- 대시보드 생성에 사용할 수 있는 포괄적인 뷰 생성
Step 3: 데이터 모델링
데이터가 준비되면, 이제 관계를 정의하고 계산된 지표를 생성해야 합니다. Power BI 또는 Tableau와 같은 툴에서 다음과 같은 작업을 수행할 수 있습니다:
- 관계 정의: sales_analysis 뷰를 날짜, 제품, 고객 등의 차원 테이블과 연결
- 계산 지표 생성: 다음과 같은 지표 정의
- 연간 누적 매출 (Year-to-date sales)
- 매출 성장률
- 이익률 (Profit margin)
- 고객 획득 비용 (Customer acquisition cost)
예: Power BI에서 DAX를 사용하여
YTD Sales =
TOTALYTD(SUM(sales_analysis[sales_amount]), 'Date'[Date])
Sales Growth % =
DIVIDE(
SUM(sales_analysis[sales_amount]) - [Sales Same Period Last Year],
[Sales Same Period Last Year]
)
Step 4: 대시보드 생성
이제 데이터를 시각화하여 생생하게 표현할 수 있습니다:
- 판매 추세 차트: 시간에 따른 매출을 보여주며 제품 카테고리로 필터링 가능
- 제품 카테고리 분포: 각 제품 카테고리별 매출 비중 표시
- 지역별 매출 지도: 지역별 성과 시각화
- 상위 고객 테이블: 가장 많은 소비를 한 고객 목록
- 캠페인 성과 비교: 다양한 마케팅 캠페인의 성과 비교
Step 5: 대시보드 상호작용 기능 추가
대시보드를 더 유용하게 만들기 위한 상호작용 요소 추가:
- 날짜 범위 선택기: 특정 기간에 집중할 수 있도록 지원
- 제품 카테고리 필터: 카테고리 및 서브카테고리 필터링 가능
- 지역 필터: 국가, 주, 도시 단위로 분석 가능
- 드릴다운 기능: 요약에서 세부 정보로 탐색 가능
Step 6: 공유 및 협업
마지막으로 대시보드를 이해관계자와 공유합니다:
- 공유 플랫폼에 게시: Power BI Service, Tableau Server, Looker 등에 업로드
- 자동 새로고침 설정: 정기적인 데이터 업데이트 예약
- 접근 권한 구성: 적절한 사람들에게 적절한 접근 권한 부여
- 이메일 구독 생성: 주요 이해관계자에게 정기 업데이트 발송
분석 워크플로우 전반에서의 SQL 역할
각 단계에서 SQL이 어떻게 기여하는지 살펴봅시다:
1. 데이터 접근 및 조회
SQL은 관계형 데이터베이스에 저장된 데이터에 접근하는 기본 언어입니다. Excel의 데이터 연결 기능이나 BI 툴을 사용할 때, SQL 쿼리가 백그라운드에서 실행되며 데이터를 가져옵니다.
예: Power BI가 SQL 데이터베이스에서 테이블을 선택할 때 생성하는 쿼리
SELECT * FROM customers WHERE country = 'USA'
2. 데이터 변환
SQL은 원시 데이터를 분석 가능한 형태로 변환하는 데 탁월합니다:
-- 제품 카테고리별 월간 매출 계산
SELECT
DATE_TRUNC('month', order_date) AS month,
category,
SUM(sales_amount) AS monthly_sales
FROM
sales_analysis
GROUP BY
DATE_TRUNC('month', order_date),
category
ORDER BY
month, category;
이러한 변환은 다음에서 수행될 수 있습니다:
- 데이터베이스 내 (뷰나 저장 프로시저 사용)
- BI 툴 내 (SQL 쿼리 자동 생성)
- ETL(추출-변환-적재) 과정의 일부로
3. 데이터 모델링 지원
데이터 모델링은 주로 BI 툴에서 이루어지지만, SQL은 이를 다음과 같이 지원할 수 있습니다:
- 비즈니스 엔티티를 나타내는 뷰 생성
- 외래 키를 통한 관계 정의
- 공통 지표의 사전 계산
- 비즈니스 로직의 DB 수준 구현
예:
-- 고객 세그먼트용 뷰 생성
CREATE VIEW customer_segments AS
SELECT
customer_id,
name,
CASE
WHEN total_purchases > 10000 THEN 'Premium'
WHEN total_purchases > 5000 THEN 'Gold'
WHEN total_purchases > 1000 THEN 'Silver'
ELSE 'Bronze'
END AS segment
FROM
(SELECT
c.customer_id,
c.name,
SUM(oi.quantity * oi.unit_price) AS total_purchases
FROM
customers c
JOIN
orders o ON c.customer_id = o.customer_id
JOIN
order_items oi ON o.order_id = oi.order_id
GROUP BY
c.customer_id, c.name) AS customer_totals;
4. 성능 최적화
SQL은 대시보드 성능 최적화에 중요한 역할을 합니다:
-- 빠른 대시보드 쿼리를 위한 인덱스된 머터리얼라이즈드 뷰 생성
CREATE MATERIALIZED VIEW sales_summary AS
SELECT
DATE_TRUNC('month', order_date) AS month,
category,
country,
SUM(sales_amount) AS total_sales,
COUNT(DISTINCT order_id) AS order_count,
COUNT(DISTINCT customer_id) AS customer_count
FROM
sales_analysis
GROUP BY
DATE_TRUNC('month', order_date),
category,
country;
CREATE INDEX idx_sales_summary ON sales_summary(month, category, country);
이러한 최적화는 대시보드가 대용량 데이터셋에서도 빠르게 반응할 수 있도록 도와줍니다.
첫 번째 간단한 대시보드 만들기 (또는 먼저 Excel에서 흉내 내보기)
Excel에서 더 발전된 분석 툴로 전환하기 전, Excel에서 간단한 대시보드를 먼저 만들어 보는 것이 도움이 될 수 있습니다.
Excel에서 대시보드 만들기
기본적인 판매 대시보드를 Excel에서 만드는 방법은 다음과 같습니다:
-
데이터 준비:
- 데이터를 표 형태로 정리
- Excel 테이블 (삽입 > 표) 기능 활용
- 데이터 준비를 위해 Power Query 사용 권장 (데이터 > 가져오기 및 변환)
-
피벗 테이블(PivotTable) 생성:
- 삽입 > 피벗 테이블
- 관련 필드를 행, 열, 값 영역에 추가
- 필요한 경우 계산 필드 생성
-
시각화 추가:
- 피벗 테이블 데이터를 선택
- 삽입 > 차트를 통해 적절한 시각화 생성
- 추세 표시를 위해 스파크라인 사용 고려
-
상호작용 요소 추가:
- 삽입 > 슬라이서를 통해 필터 추가
- 여러 피벗 테이블에 슬라이서를 연결하여 동기화된 필터링 구현
- 날짜 필터링을 위한 타임라인 슬라이서 사용 고려
-
대시보드 포맷팅:
- 시각화를 논리적으로 배치
- 일관된 서식 및 색상 사용
- 제목 및 설명 추가
- 조건부 서식을 통한 시각적 강조 고려
BI 툴로 전환하기
Excel에서 대시보드를 만든 경험을 바탕으로 BI 툴로의 전환을 진행할 수 있습니다:
-
같은 데이터셋 사용:
- Excel 대시보드에 사용한 동일한 데이터를 활용
- 결과 비교를 통해 정확성 확보 가능
-
유사한 시각화 재현:
- Excel에서 만든 차트와 테이블을 동일하게 구현
- 익숙한 시작점 제공
-
추가 기능 탐색:
- Excel에서 제공하지 않는 상호작용 기능 추가
- 다양한 시각화 유형 실험
- 더 복잡한 필터링 및 드릴다운 구현
-
성능 최적화:
- 효율적인 데이터 모델링 방법 학습
- 최적화된 측정값 작성 방법 이해
- 대용량 데이터 처리 옵션 탐색
Excel-SQL-대시보드의 연결
Excel 사용자가 SQL과 대시보드로 전환할 때, 이 도구들이 서로 어떻게 관련되어 있고 각각을 언제 사용하는지 이해하는 것이 중요합니다.
Excel이 유용한 경우
Excel은 다음 상황에서 여전히 유용합니다:
- 애드혹 분석: 빠른 계산 및 탐색
- 개인 생산성: 개인 분석 작업
- 소규모 데이터셋: 제한된 데이터 볼륨일 때
- 특수 계산: 복잡한 금융 모델 또는 통계 분석
- 데이터 입력: 데이터 수집 및 정리
- 프로토타이핑: 다른 도구에 구현하기 전 분석 접근 방식 테스트
SQL이 필요한 경우
SQL은 다음과 같은 경우 필수적입니다:
- 대용량 데이터 처리: 수백만 행의 데이터 처리
- 데이터베이스 접근: 사내 DB에서 데이터 추출
- 데이터 준비: 분석 전 정제 및 변환
- 데이터 처리 자동화: 정기적인 데이터 변환 작업 스케줄링
- 비즈니스 로직 구현: 조직 전체에 일관된 계산 제공
- 성능 최적화: 사전 집계 데이터를 통한 대시보드 성능 향상
대시보드 툴이 강력한 경우
대시보드 툴은 다음과 같은 경우에 탁월합니다:
- 인터랙티브 시각화: 동적이고 필터 가능한 뷰 생성
- 인사이트 공유: 분석 결과를 이해관계자와 공유
- 실시간 모니터링: KPI 및 지표의 실시간 추적
- 데이터 통합: 다양한 시스템의 데이터 통합
- 협업 분석: 팀 기반 데이터 작업 지원
- 데이터 기반 스토리텔링: 인사이트를 시각적으로 표현
통합 시나리오
이 도구들은 다음과 같이 함께 작동할 수 있습니다:
-
Excel → SQL → 대시보드:
- Excel에서 분석 프로토타입 작성
- SQL로 데이터 준비 구현
- 대시보드 툴에서 최종 시각화 생성
-
대시보드 + Excel 내보내기:
- 대시보드에서 주요 분석 수행
- 세부 분석을 위해 특정 데이터를 Excel로 내보내기
-
SQL 뷰를 Excel과 대시보드에 공유:
- 비즈니스 로직이 포함된 SQL 뷰 생성
- Excel과 대시보드 툴 모두 해당 뷰에 연결
- 분석 전반에 걸쳐 일관된 정의 유지
현대 분석 워크플로우를 위한 베스트 프랙티스
이러한 통합된 분석 접근 방식을 구현할 때 다음의 베스트 프랙티스를 고려하세요:
1. 목적을 명확히 하라
- 분석 시작 전 명확한 비즈니스 질문 정의
- 가장 중요한 지표 및 KPI 식별
- 누가 대시보드를 사용할지, 어떻게 사용할지 이해
- 사용자의 기술 수준에 맞춘 설계
2. 견고한 데이터 기반 구축
- 가능한 한 소스에서부터 데이터 품질 확보
- 데이터 정의 및 비즈니스 규칙 문서화
- 비즈니스 엔티티를 반영하는 일관된 데이터 모델 구축
- 적절한 데이터 거버넌스 및 보안 구현
3. 성능에 최적화된 설계
- 필요한 경우 데이터 사전 집계
- 자주 조회되는 컬럼에 인덱스 생성
- 대시보드 성능을 위한 머터리얼라이즈드 뷰 또는 캐시 사용
- 현실적인 데이터 볼륨으로 테스트
4. 효과적인 대시보드 설계
- 특정 비즈니스 질문에 답하는 데 집중
- 각 대시보드에 5~7개의 핵심 시각화로 제한
- 데이터 특성에 맞는 적절한 시각화 유형 사용
- 비교 및 목표치를 통해 맥락 제공
- 직관적인 필터링 및 탐색 기능 제공
5. 데이터 리터러시 증진
- 사용자가 데이터를 해석할 수 있도록 지원
- 문서 및 교육 제공
- 대시보드 내 정의 및 설명 포함
- 지속적인 피드백을 통해 대시보드 개선
결론: 데이터 여정은 계속된다
이 책 전반에 걸쳐 우리는 익숙한 Excel의 세계에서 시작해, 데이터베이스, SQL, 그리고 대시보드의 강력한 세계로 이동했습니다. 이 도구들이 서로를 어떻게 보완하는지, 그리고 SQL이 원시 데이터와 실행 가능한 인사이트를 연결하는 접착제 역할을 한다는 것을 살펴보았습니다.
데이터 여정을 계속하면서, 각 도구가 현대 분석 생태계에서 어떤 역할을 하는지 기억하세요:
- Excel은 애드혹 분석에 유연성과 친숙함을 제공
- 데이터베이스는 구조화된 저장소와 효율적인 데이터 관리를 제공
- SQL은 강력한 데이터 조회 및 변환 기능을 제공
- 대시보드 툴은 인터랙티브한 시각화와 인사이트 공유를 가능케 함
이러한 구성 요소가 어떻게 맞물리는지를 이해함으로써, 이제 Excel만으로는 해결할 수 없는 한계를 넘어, 현대 데이터 도구의 전체 기능을 활용할 준비가 되어 있습니다. 이는 더 큰 데이터셋을 다루고, 더욱 임팩트 있는 시각화를 만들며, 더 깊은 인사이트를 통해 비즈니스 의사결정을 이끌 수 있는 역량을 의미합니다.
이 책을 통해 배우게 된 기술들—데이터 구조의 이해, SQL 쿼리 작성, 효과적인 대시보드 구축—은 계속 성장하는 데이터 분석 분야에서 여러분의 탄탄한 기반이 되어줄 것입니다.
여러분이 판매 데이터를 분석하든, 마케팅 성과를 추적하든, 재무 지표를 모니터링하든, 혹은 그 외 다른 데이터 기반 도메인을 탐색하든, 이제 원시 데이터를 실행 가능한 인사이트로 전환하는 데 필요한 도구와 지식을 갖추게 되었습니다.
여러분의 데이터 여정은 여기서 끝이 아닙니다—이제 시작일 뿐입니다. 계속 배우고, 탐구하고, 데이터와 의사결정 사이의 점들을 연결해 나가세요.