DP-900에서 관계형 데이터 문제는 "어떤 SQL 구문이 무엇을 하는가"와 "Azure SQL 제품 중 어느 것을 언제 써야 하는가"를 묻습니다. 이 글에서는 테이블과 키의 개념부터 SQL 기초 문법, Azure SQL 제품군까지 비개발자도 이해할 수 있게 풀어봅니다.
관계형 데이터란 무엇인가요?
동네 주소록을 생각해 보세요. 이름, 전화번호, 주소를 각각 칸에 나눠 적고 행 한 줄이 한 사람을 나타냅니다. 이것이 바로 관계형 데이터의 기본 모습입니다.
관계형 데이터베이스는 데이터를 표(테이블) 형태로 저장합니다. 마치 엑셀 스프레드시트처럼, 열(Column)은 데이터의 속성(이름, 나이, 이메일 등)을 나타내고 행(Row)은 개별 데이터 항목 하나를 나타냅니다. 그리고 여러 표를 서로 연결해서 복잡한 정보를 효율적으로 저장하는 것이 핵심입니다.
| 개념 | 설명 | 일상 비유 | |------|------|----------| | 테이블 (Table) | 데이터를 저장하는 표 | 엑셀 시트 한 장 | | 행 (Row) | 테이블의 개별 데이터 레코드 | 주소록의 한 사람 | | 열 (Column) | 데이터의 속성 | 주소록의 이름/전화번호 칸 | | 스키마 (Schema) | 테이블의 구조 정의 | 표의 칸 이름과 데이터 형식 규칙 |
키(Key) — 데이터를 연결하는 고리
기본 키 (Primary Key)
학교에서 학번을 부여하는 이유를 생각해 보세요. 같은 이름의 학생이 여럿 있을 수 있어도 학번은 반드시 유일합니다. 기본 키가 바로 이것입니다. 테이블의 각 행을 유일하게 식별하는 값으로, 중복이 없고 NULL이 될 수 없습니다.
예를 들어 고객 테이블에서 customer_id가 기본 키라면, customer_id = 1001인 행은 전 세계에 딱 하나만 존재합니다.
외래 키 (Foreign Key)
이제 주문 테이블을 만든다고 합시다. 주문마다 "누가 주문했는지" 적어야 합니다. 이때 고객 정보를 통째로 복사해 넣는 대신, 고객 테이블의 customer_id를 참조합니다. 이 참조하는 값이 외래 키입니다.
외래 키 덕분에 고객 정보가 바뀌어도 한 곳(고객 테이블)만 수정하면 됩니다. 주문 테이블에는 customer_id만 저장하면 되므로 데이터가 중복되지 않습니다.
| 키 종류 | 역할 | 특성 | |--------|------|------| | 기본 키 (Primary Key) | 행을 고유하게 식별 | 중복 불가, NULL 불가 | | 외래 키 (Foreign Key) | 다른 테이블의 기본 키 참조 | 참조 무결성 보장 |
!기본 키(Primary Key) vs 외래 키(Foreign Key)
정규화 — 중복을 없애는 설계 원칙
왜 데이터를 중복해서 저장하면 안 될까요? 구체적인 예를 보겠습니다.
정규화하지 않은 주문 테이블을 상상해 보세요:
| 주문ID | 고객이름 | 고객전화번호 | 상품명 | |-------|---------|------------|-------| | 1001 | 김민준 | 010-1234-5678 | 노트북 | | 1002 | 김민준 | 010-1234-5678 | 마우스 | | 1003 | 이서연 | 010-9876-5432 | 키보드 |
김민준의 전화번호가 바뀌면 어떻게 될까요? 1001번, 1002번 행을 모두 찾아서 고쳐야 합니다. 주문이 100건이라면 100번 수정해야 합니다. 하나라도 빠뜨리면 데이터가 불일치하게 됩니다.
정규화는 이런 문제를 해결합니다. 고객 정보는 고객 테이블에 한 번만 저장하고, 주문 테이블에는 고객 ID만 참조합니다. 이렇게 하면 전화번호가 바뀌어도 고객 테이블 한 곳만 수정하면 됩니다.
정규화의 핵심 목표: 데이터 중복 최소화 데이터 불일치 방지 수정·삭제 이상 현상 제거
SQL 기본 구문
SQL(Structured Query Language)은 데이터베이스와 대화하는 언어입니다. 영어 문장처럼 읽히도록 설계되어 있어서, 문법을 처음 보더라도 의미를 어느 정도 이해할 수 있습니다.
SELECT — 데이터 조회
"고객 테이블에서 이름과 이메일을 가져오세요"라고 말하는 것과 같습니다.
SELECT: 가져올 열 지정 FROM: 어느 테이블에서 WHERE: 조건 필터
INSERT — 데이터 추가
새로운 행 하나를 테이블에 추가합니다.
UPDATE — 데이터 수정
기존 행의 값을 변경합니다. WHERE 없이 쓰면 전체 행이 수정되므로 주의해야 합니다.
DELETE — 데이터 삭제
조건에 맞는 행을 삭제합니다. WHERE 없이 쓰면 테이블 전체가 삭제되므로 매우 주의해야 합니다.
JOIN — 두 테이블 연결
고객 테이블과 주문 테이블을 연결해서 "누가 무엇을 주문했는지" 한눈에 봅니다. 외래 키로 연결된 두 테이블을 하나로 합쳐서 조회합니다.
| SQL 구문 | 하는 일 | 비유 | |---------|--------|------| | SELECT | 데이터 읽기 | 주소록에서 이름 찾기 | | INSERT | 새 행 추가 | 주소록에 새 사람 등록 | | UPDATE | 기존 행 수정 | 전화번호 고치기 | | DELETE | 행 삭제 | 주소록에서 항목 지우기 | | JOIN | 두 표 합치기 | 학생 명단과 성적표 합치기 |
데이터베이스 객체
뷰 (View) — 저장된 조회 창
뷰는 자주 쓰는 복잡한 SELECT 쿼리를 "창문"처럼 저장해 두는 것입니다. 뷰를 열면 마치 테이블처럼 보이지만, 실제로는 쿼리가 실행되는 것입니다.
예를 들어 "서울 고객만 보는 창문"을 뷰로 만들어 두면, 복잡한 SQL을 매번 입력하지 않고 뷰 이름만 호출하면 됩니다. 보안 측면에서도 유용합니다. 원본 테이블 전체를 노출하지 않고 필요한 열만 뷰로 보여줄 수 있습니다.
저장 프로시저 (Stored Procedure) — 저장된 레시피
요리 레시피를 한 번 작성해 두면 매번 처음부터 만들 필요가 없듯이, 자주 실행하는 SQL 명령 묶음을 저장 프로시저로 저장해 두면 이름 하나로 실행할 수 있습니다. 비즈니스 로직을 데이터베이스 안에 캡슐화하고, 여러 애플리케이션에서 재사용할 수 있습니다.
인덱스 (Index) — 책 뒤의 색인
두꺼운 책에서 특정 단어를 찾을 때 처음부터 읽지 않고 뒤쪽 색인을 먼저 찾습니다. 인덱스가 바로 이것입니다. 데이터베이스가 테이블 전체를 스캔하지 않고 원하는 행을 빠르게 찾도록 도와줍니다. 조회 속도가 대폭 빨라지지만, 쓰기(INSERT/UPDATE/DELETE) 성능은 약간 저하될 수 있습니다.
| 객체 | 역할 | 비유 | |------|------|------| | 뷰 (View) | 복잡한 쿼리를 저장된 가상 테이블로 | 즐겨찾기 필터 창문 | | 저장 프로시저 | SQL 명령 묶음을 이름으로 저장·실행 | 저장된 요리 레시피 | | 인덱스 | 빠른 조회를 위한 데이터 구조 | 책 뒤 색인 |
Azure SQL 제품군 — 언제 무엇을 쓰나요?
Microsoft는 SQL Server 기반의 여러 관리형 서비스를 Azure에서 제공합니다. 모두 SQL을 사용하지만, 관리 수준과 유연성이 다릅니다.
Azure SQL Database
완전 관리형 PaaS 서비스입니다. 데이터베이스 엔진, 패치, 백업, 고가용성을 Azure가 모두 처리합니다. 개발자는 데이터와 쿼리에만 집중하면 됩니다.
어떤 경우에 쓰나요? 새로 개발하는 클라우드 네이티브 애플리케이션, 혹은 기존 SQL Server 앱을 클라우드로 옮기면서 관리 부담을 줄이고 싶을 때 선택합니다. 서버를 직접 관리할 필요가 없으므로 소규모 팀에도 적합합니다.
특징: 서버리스 옵션: 사용하지 않을 때 자동으로 일시 중지, 요청이 오면 자동 재개 vCore 또는 DTU 구매 모델 선택 가능 엘라스틱 풀: 여러 데이터베이스가 자원을 공유해 비용 절감
Azure SQL Managed Instance
Azure SQL Database보다 기존 SQL Server에 더 가까운 서비스입니다. SQL Server Agent, linked server 등 완전한 SQL Server 기능을 지원합니다. PaaS 방식이지만 SQL Server 인스턴스 수준의 기능이 필요할 때 사용합니다.
어떤 경우에 쓰나요? 사내 SQL Server를 클라우드로 마이그레이션할 때, 최소한의 코드 변경으로 "리프트 앤 시프트(Lift and Shift)"가 필요할 때 적합합니다.
SQL Server on Azure VM (IaaS)
가상 머신에 SQL Server를 직접 설치하고 운영하는 방식입니다. 운영 체제부터 SQL Server 설정까지 모두 직접 관리합니다. 완전한 제어권이 필요하지만 그만큼 관리 부담도 가장 큽니다.