[게임 서버] 7.4 데이터베이스 시작
카테고리: GameServer
태그: GameServer
이 글은 아래의 책을 자세히 정리한 후, 정리한 글을 GPT에게 요약을 요청하여 작성되었습니다.
게임 서버 프로그래밍 교과서, 배현직 저자
📦 7. 데이터베이스 기초
👉🏻 4. 데이터베이스 시작
🛠️ 사용 도구
사용 소프트웨어:
- SQL Server Management Studio 2022
- SQL Server 2025 Express
📝 기본 작업
1. 새 데이터베이스 생성
2. 새 테이블 생성 및 필드 수정
📊 모든 데이터 형식
정수형
| 종류 | 설명 | 특징 | 예시 |
|---|---|---|---|
| bigint | 8바이트 정수 | 매우 큰 범위 (±9경) | 9223372036854775807 |
| int | 4바이트 정수 | 가장 일반적으로 사용 | 345 |
| smallint | 2바이트 정수 | 작은 범위 정수 | 32000 |
| tinyint | 1바이트 정수 | 0~255 | 255 |
| bit | 논리값 | 0, 1, NULL | 1 |
소수형
| 종류 | 설명 | 특징 | 예시 |
|---|---|---|---|
| decimal(p,s) | 고정 소수점 | 정확한 계산 (금융용) | 123.45 |
| numeric(p,s) | decimal과 동일 | 정확한 고정 소수점 | 123.45 |
| float | 부동소수점 | 근사값, 오차 존재 | 123.45 |
| real | float의 소형 | 정밀도 낮음 | 123.45 |
통화형
| 종류 | 설명 | 특징 | 예시 |
|---|---|---|---|
| money | 통화 데이터 | 소수점 4자리 고정 | 1000.2500 |
| smallmoney | 작은 통화 데이터 | 범위 제한 있음 | 500.2500 |
문자열형
| 종류 | 설명 | 특징 | 예시 |
|---|---|---|---|
| char(n) | 고정 길이 문자열 | 부족하면 뒤에 공백 자동 채움 | "a " |
| varchar(n) | 가변 길이 문자열 | 최대 n 길이 | "hello" |
| varchar(MAX) | 대용량 문자열 | 최대 2GB | 긴 본문 텍스트 |
| nchar(n) | 고정 길이 유니코드 | UTF-16, 공백 패딩 | "가 " |
| nvarchar(n) | 가변 길이 유니코드 | UTF-16 | "안녕하세요" |
| nvarchar(MAX) | 대용량 유니코드 | 최대 2GB | 긴 한글 텍스트 |
| text | 구형 대용량 문자열 | ❗Deprecated (varchar(MAX) 권장) | 긴 텍스트 |
| ntext | 구형 유니코드 문자열 | ❗Deprecated (nvarchar(MAX) 권장) | 긴 한글 텍스트 |
바이너리형
| 종류 | 설명 | 특징 | 예시 |
|---|---|---|---|
| binary(n) | 고정 길이 바이너리 | 해시값 등에 사용 | 0xAF23 |
| varbinary(n) | 가변 길이 바이너리 | 바이너리 데이터 | 0x11FF |
| varbinary(MAX) | 대용량 바이너리 | 파일/이미지 저장 | 이미지 파일 |
| image | 구형 이미지 타입 | ❗Deprecated (varbinary(MAX) 권장) | 이미지 |
날짜/시간형
| 종류 | 설명 | 특징 | 예시 |
|---|---|---|---|
| date | 날짜 | yyyy-mm-dd | 2026-03-02 |
| time(n) | 시간 | 소수점 초 정밀도 지정 | 12:30:45 |
| datetime | 날짜+시간 | 정밀도 낮음 (3.33ms) | 2026-03-02 12:30:45 |
| datetime2(n) | 개선된 날짜+시간 | 더 넓은 범위 + 고정밀 | 2026-03-02 12:30:45.1234567 |
| datetimeoffset(n) | 시간대 포함 날짜 | 글로벌 서비스용 | 2026-03-02 12:30:45 +09:00 |
| smalldatetime | 작은 범위 날짜 | 정밀도 낮음 | 2026-03-02 12:30 |
| timestamp | rowversion 값 | 시간 아님, 행 변경 추적 | 0x00000000000007D3 |
특수형
| 종류 | 설명 | 특징 | 예시 |
|---|---|---|---|
| uniqueidentifier | GUID / UUID | 전역 고유값 | 6F9619FF-8B86-D011-B42D-00C04FC964FF |
| geometry | 평면 공간 데이터 | 좌표 기반 | POINT(1 1) |
| geography | 지구 좌표 데이터 | GPS 기준 위도/경도 | - |
| hierarchyid | 계층 구조 표현 | 트리 구조 저장 | /1/3/ |
| sql_variant | 여러 타입 저장 가능 | 권장되지 않음 | 다양한 값 |
| json | JSON 데이터 | 내부적으로 nvarchar 기반 | {“name”:”kim”} |
| xml | XML 데이터 | XML 전용 함수 지원 | <name>kim</name> |
| vector(n) | 벡터 데이터 | AI 임베딩/유사도 검색 | [0.12, 0.98, …] |
🔍 NULL 값
NULL 허용 설정:
- 데이터베이스 필드에서
null 허용을 켜면null을 저장할 수 있다
NULL의 의미:
null은 값 자체가 없음을 의미한다null의 존재 이유는0,""(빈문자열)과 구별하기 위함이다
🧐 정리
자주 사용하는 타입:
- 정수:
int,bigint - 소수:
decimal,float - 문자열:
varchar,nvarchar - 날짜:
datetime2,date - 고유값:
uniqueidentifier
주의사항:
text,ntext,image는 Deprecated → MAX 타입 사용- 금융 계산은
decimal사용 (float은 오차 있음) - 한글 저장 시
nvarchar사용 (varchar는 한글 깨짐) - NULL과 빈 문자열/0은 다른 개념
댓글남기기