1. 데이터베이스의 데이터 유형

데이터 유형은 테이블에 저장할 데이터의 형식과 속성을 정의합니다. 잘못된 유형의 데이터를 삽입하려고 하면 데이터베이스는 오류를 발생시킵니다.

데이터 유형의 특징

  1. 숫자형:
    • 정수와 실수 데이터를 저장.
    • 예: NUMERIC, DECIMAL, SMALLINT, BIGINT, FLOAT, NUMBER.
  2. 문자형:
    • 텍스트 데이터를 저장.
    • 예: CHAR, VARCHAR, VARCHAR2.
  3. 날짜/시간형:
    • 날짜와 시간 데이터를 저장.
    • 예: DATE, DATETIME, TIMESTAMP.
  4. 기타:
    • 이진 데이터나 특수 데이터를 저장.
    • 예: BLOB, CLOB, JSON.

2. 주요 데이터 유형 설명

데이터 유형설명

CHAR(s) - 고정 길이 문자열
- 길이가 부족하면 공백으로 채움
- 최대 길이: Oracle 2000바이트, SQL Server 8000바이트
VARCHAR(2) - 가변 길이 문자열
- 실제 데이터 크기만큼 저장
- 최대 길이: Oracle 4000바이트, SQL Server 8000바이트
NUMERIC - 정수, 실수와 같은 숫자 데이터
- Oracle에서는 NUMBER로 표현
- 예: NUMBER(8, 2) (정수 6자리, 소수점 2자리)
DATE - 날짜와 시간 데이터
- Oracle: 1초 단위 관리
- SQL Server: 3.33밀리초 단위 관리

3. CHAR와 VARCHAR (VARCHAR2)의 비교

1) 저장 방식

  • CHAR:
    • 고정 길이 문자열.
    • 선언된 길이에 미달하는 데이터는 공백으로 채워짐.
    • 예: CHAR(5)에 'A'를 저장하면 실제 데이터는 'A '(공백 포함).
    • 적합한 경우: 고정 길이 데이터(예: 사번, 우편번호).
  • VARCHAR (또는 VARCHAR2):
    • 가변 길이 문자열.
    • 선언된 길이에 미달해도 공백을 추가하지 않음.
    • 예: VARCHAR(5)에 'A'를 저장하면 실제 데이터는 'A'.
    • 적합한 경우: 길이가 변할 수 있는 데이터(예: 이름, 주소).

2) 비교 방식

  • CHAR:
    • 공백을 포함하여 비교.
    • 예: 'AA'와 'AA '는 동일('AA ' == 'AA ').
  • VARCHAR:
    • 공백을 다른 문자로 간주하여 비교.
    • 예: 'AA'와 'AA '는 다름.

3) 저장 공간 효율성

  • CHAR:
    • 선언된 길이만큼 공간을 차지.
    • 길이가 고정된 데이터에 적합.
  • VARCHAR:
    • 데이터의 실제 길이만큼 공간을 사용.
    • 저장 공간 효율성이 높음.

4. 사용 사례

데이터 유형적합한 데이터

CHAR - 고정 길이 데이터 (사번, 우편번호, 주민등록번호 등)
VARCHAR - 가변 길이 데이터 (이름, 주소, 이메일 등)

5. 예제 코드

1) CHAR

CREATE TABLE fixed_data (
    id CHAR(10),  -- 고정 길이 10
    code CHAR(5)  -- 고정 길이 5
);

2) VARCHAR

CREATE TABLE variable_data (
    name VARCHAR(50),  -- 최대 50자
    address VARCHAR(100)  -- 최대 100자
);

3) 데이터 비교

-- CHAR 비교
SELECT * FROM fixed_data WHERE id = '12345    '; -- 공백 포함해 동일하게 판단

-- VARCHAR 비교
SELECT * FROM variable_data WHERE name = 'John '; -- 공백 포함 시 다른 값으로 판단

6. 데이터 유형 선택 시 고려사항

  1. 데이터 길이:
    • 고정 길이 → CHAR.
    • 가변 길이 → VARCHAR.
  2. 저장 공간:
    • 저장 공간 최적화가 필요하면 VARCHAR 추천.
  3. 데이터 비교:
    • 공백 무시 → CHAR.
    • 공백 고려 → VARCHAR.

요약

  • CHAR: 고정 길이 문자열, 저장 공간 낭비 가능, 공백 포함 비교.
  • VARCHAR: 가변 길이 문자열, 저장 공간 효율적, 공백은 다른 문자로 취급.
  • 데이터의 특성에 따라 적합한 유형을 선택하는 것이 중요합니다.

1. MySQL Monitor란?

  • 정의:
    MySQL 서버에 기본적으로 제공되는 명령어 기반 프로그램으로, 데이터베이스 관리 및 명령 실행에 사용됩니다.
  • 접속 방법:
    명령줄에서 mysql 명령어를 사용하여 MySQL 서버에 연결.

2. MySQL 접속 명령어

mysql -u[사용자 이름] -p[비밀번호]

예시:

mysql -uroot -p
비밀번호 입력: 1234

호스트와 포트 지정:

mysql -h[호스트 주소] -P[포트 번호] -u[사용자 이름] -p[비밀번호]

3. 데이터베이스 관리

a. 데이터베이스 생성

CREATE DATABASE music CHARACTER SET utf8 COLLATE utf8_general_ci;
  • music: 생성할 데이터베이스 이름.
  • CHARACTER SET utf8: UTF-8 인코딩 설정.
  • COLLATE utf8_general_ci: 대소문자를 구분하지 않는 일반적인 정렬 설정.

b. 데이터베이스 선택

USE music;

4. 테이블 관리

a. 테이블 생성

CREATE TABLE `favorite_music` (
    `title` varchar(255) NOT NULL,
    `musician` varchar(20) NOT NULL,
    `duration` varchar(20) NOT NULL,
    `album` varchar(30) NOT NULL
) ENGINE=innodb;
  • title: 곡 제목 (최대 255자).
  • musician: 가수 이름 (최대 20자).
  • duration: 곡 길이 (최대 20자).
  • album: 앨범 이름 (최대 30자).
  • ENGINE=innodb: 테이블의 스토리지 엔진 설정.

b. 테이블에 데이터 추가

INSERT INTO favorite_music (`title`, `musician`, `duration`, `album`) 
VALUES ('Chasing Pavements', '아델', '3:30', '19');
  • INSERT INTO: 데이터를 추가.
  • VALUES: 열에 추가할 값 설정.

c. 데이터 조회

SELECT * FROM favorite_music;
  • 모든 데이터를 조회.

5. MySQL 종료

  • 명령어:
exit;
  • 단축키:
    • Ctrl + C: MySQL Monitor 종료.

6. 유용한 참고 사항

  • MySQL 명령어는 대소문자를 구분하지 않지만, 관례적으로 SQL 키워드는 대문자로 작성.
  • 테이블 및 데이터베이스 이름은 소문자로 작성하는 것이 일반적.
  • 에러가 발생할 경우 세미콜론(;) 누락 여부 확인.

예제 코드

-- 데이터베이스 생성
CREATE DATABASE music CHARACTER SET utf8 COLLATE utf8_general_ci;

-- 데이터베이스 선택
USE music;

-- 테이블 생성
CREATE TABLE `favorite_music` (
    `title` varchar(255) NOT NULL,
    `musician` varchar(20) NOT NULL,
    `duration` varchar(20) NOT NULL,
    `album` varchar(30) NOT NULL
) ENGINE=innodb;

-- 데이터 삽입
INSERT INTO favorite_music (`title`, `musician`, `duration`, `album`) 
VALUES ('Chasing Pavements', '아델', '3:30', '19');

-- 데이터 조회
SELECT * FROM favorite_music;

-- MySQL 종료
EXIT;

1. Connection Pooling이란?

  • Connection Pooling은 데이터베이스 연결을 효율적으로 관리하기 위한 방법입니다.
  • DB 연결은 클라이언트와 서버 간의 핸드셰이크, 로그인 등으로 시간이 소요되므로, 기존의 연결을 유지하고 재활용하여 성능을 향상시킵니다.
  • ADO.NET에서는 Connection Pooling이 기본적으로 활성화(ON) 되어 있으며, 이를 통해 연결 작업의 비용을 줄입니다.

2. Connection Pooling의 동작 원리

  1. 연결 생성:
    • 클라이언트가 SqlConnection 객체를 생성하고 Open()을 호출하면, 새로운 연결이 생성되고 Connection Pool에 추가됩니다.
    • SQL 서버에는 이를 나타내는 SPID(Session Process ID)가 생성됩니다.
  2. 연결 재활용:
    • 연결이 닫혀도(Connection Close) Pool에 반환되어 대기 상태로 유지됩니다.
    • 새로운 연결 요청이 발생하면 Pool에서 기존 연결을 재사용합니다.
  3. Pool 크기 관리:
    • 최소 연결 수(Min Pool Size): Pool에 유지될 최소 연결 수.
    • 최대 연결 수(Max Pool Size): Pool에 저장될 최대 연결 수. 기본값은 100입니다.
    • 필요 시 Pool 크기를 동적으로 조정하여 리소스를 관리합니다.
  4. Timeout 관리:
    • 연결 요청이 Queue에서 대기할 수 있는 최대 시간(Connection Timeout). 기본값은 15초입니다.
    • Timeout 안에 연결을 확보하지 못하면 예외가 발생합니다.

3. Connection Pool 생성 기준

  • Connection String:
    • 동일한 Connection String을 사용하는 경우 같은 Pool을 공유합니다.
    • Connection String이 조금이라도 다르거나, 옵션 순서가 다르면 별도의 Pool이 생성됩니다.
  • 인증 방식:
    • Windows Authentication: 사용자 계정별로 별도의 Pool이 생성됩니다.
    • SQL Authentication: 공통 Pool을 사용하여 성능이 더 좋습니다.
  • 프로세스와 AppDomain:
    • 프로세스와 AppDomain이 다르면 별도의 Pool이 생성됩니다.

4. Connection Pool 옵션

Connection String에서 설정 가능한 주요 옵션:

옵션설명기본값

Pooling Connection Pooling 활성화 여부. true로 설정 시 활성화. true
Min Pool Size Pool에서 유지할 최소 연결 수. 1
Max Pool Size Pool에서 유지할 최대 연결 수. 100
Connection Timeout 연결 요청 대기 시간. 초 단위로 설정. 15
Enlist 현재 트랜잭션 컨텍스트에 연결을 자동 등록할지 여부. true

예제 Connection String

string connectionString = "Data Source=MyServer;Initial Catalog=MyDB;Integrated Security=true;" +
                          "Min Pool Size=20;Max Pool Size=100;Connection Timeout=15;Pooling=true;";

5. Connection Pool 관리

  • Pool 초기화:
    • SqlConnection.ClearAllPools()를 호출하면 모든 Connection Pool이 초기화되고 연결이 닫힙니다.
    • 사용하지 않는 연결은 자동으로 제거되어 SQL 서버 부하를 줄입니다.

사용 예제

using (SqlConnection conn = new SqlConnection(connectionString))
{
    conn.Open();
    // 데이터베이스 작업 수행
    conn.Close(); // 연결은 Pool로 반환
}
SqlConnection.ClearAllPools(); // Pool 초기화

6. Connection Pool 성능 관리

  • 적절한 Pool 크기 설정:
    • 최소 Pool 크기(Min Pool Size)를 설정하면 서버가 항상 준비된 연결을 유지하므로 대기 시간이 줄어듭니다.
    • 최대 Pool 크기(Max Pool Size)를 통해 과도한 리소스 사용을 제한합니다.
  • Connection String 최적화:
    • 통일된 Connection String을 사용하여 불필요한 Pool 생성을 방지합니다.
  • Idle Timeout:
    • 사용하지 않는 연결은 일정 시간 후 제거됩니다. 이 시간을 관리하여 리소스를 최적화할 수 있습니다.

7. Connection Pool 모니터링

  • SQL Server SPID 확인:
    • SQL Server에서 sys.dm_exec_sessions 및 sys.dm_exec_requests를 사용하여 Pool에 연결된 세션(SPID)을 확인할 수 있습니다.
    SELECT * FROM sys.dm_exec_sessions WHERE is_user_process = 1;
  • ADO.NET 성능 카운터:
    • .NET 성능 카운터를 통해 Pool 상태를 모니터링할 수 있습니다.
    • 사용 가능한 연결 수:
       
      .NET Data Provider for SqlServer -> NumberOfPooledConnections

1. 테이블 생성 구문 형식

CREATE TABLE 테이블_이름 (
    컬럼명1 DATATYPE [DEFAULT 값],
    컬럼명2 DATATYPE [DEFAULT 값],
    컬럼명3 DATATYPE [DEFAULT 값]
);

테이블 생성 규칙

  • 테이블 이름: 적절한 이름을 사용하고 단수형 권장.
  • 컬럼 이름: 중복 불가, 데이터베이스 내에서 일관성 유지.
  • 데이터 유형 지정: 모든 컬럼에 반드시 데이터 유형 지정.
  • 명명 규칙:
    • 문자(A-Z, a-z), 숫자(0-9), _, $, #만 허용.
    • 예약어 사용 금지.
  • SQL 문법: 대소문자 구분하지 않음, 문장 끝에 ; 사용.

2. CREATE TABLE 예제

CREATE TABLE PLAYER (
    PLAYER_ID CHAR(7) NOT NULL,
    PLAYER_NAME VARCHAR2(20) NOT NULL,
    TEAM_ID CHAR(3) NOT NULL,
    E_PLAYER_NAME VARCHAR2(40),
    NICKNAME VARCHAR2(30),
    JOIN_YYYY CHAR(4),
    POSITION VARCHAR2(10),
    BACK_NO NUMBER(2),
    NATION VARCHAR2(20),
    BIRTH_DATE DATE,
    SOLAR CHAR(1),
    HEIGHT NUMBER(3),
    WEIGHT NUMBER(3),

    CONSTRAINT PLAYER_PK PRIMARY KEY (PLAYER_ID),
    CONSTRAINT PLAYER_FK FOREIGN KEY (TEAM_ID) REFERENCES TEAM(TEAM_ID)
);

설명

  • DATE 유형: 별도 크기 지정하지 않음.
  • 제약 조건:
    • NOT NULL: 필수 입력.
    • PRIMARY KEY: 고유 식별 키.
    • FOREIGN KEY: 다른 테이블의 키를 참조.
  • 제약 조건 정의 위치:
    • 컬럼 레벨: 각 컬럼의 정의에 직접 추가.
    • 테이블 레벨: 테이블 생성 마지막에 선언.

3. 제약조건 (CONSTRAINT)

제약조건 설명

구분설명

PRIMARY KEY - 기본키: 행 데이터를 고유하게 식별.
- NULL 입력 불가.
- 자동으로 UNIQUE 인덱스 생성.
UNIQUE KEY - 고유키: 행 데이터를 고유하게 식별.
- NULL 값 허용.
NOT NULL - NULL 값 입력 금지.
- 필수 입력 컬럼.
CHECK - 값의 범위 제한.
- 논리식 평가(TRUE or FALSE).
FOREIGN KEY - 다른 테이블과의 관계를 정의.
- 참조 무결성 제약 옵션 제공.

4. 생성된 테이블 구조 확인 (DESC)

Oracle:

DESC PLAYER;

MySQL:

DESCRIBE PLAYER;

5. SELECT 문을 통한 테이블 생성

SELECT를 사용한 테이블 복제

CREATE TABLE TEMPPLAYER
    AS SELECT * FROM PLAYER;

특징

  • 기존 테이블에서 컬럼과 데이터를 복제.
  • 제약 조건:
    • NOT NULL: 유지.
    • PRIMARY KEY, FOREIGN KEY, CHECK: 적용되지 않음.
  • 제약 조건 추가:
     
ALTER TABLE TEMPPLAYER
ADD CONSTRAINT TEMPPLAYER_PK PRIMARY KEY (PLAYER_ID);

6. 실습 예제

테이블 생성

CREATE TABLE TEAM (
    TEAM_ID CHAR(3) PRIMARY KEY,
    TEAM_NAME VARCHAR2(30) NOT NULL
);

CREATE TABLE PLAYER (
    PLAYER_ID CHAR(7) NOT NULL,
    PLAYER_NAME VARCHAR2(20) NOT NULL,
    TEAM_ID CHAR(3) NOT NULL,
    POSITION VARCHAR2(10),
    BIRTH_DATE DATE,

    CONSTRAINT PLAYER_PK PRIMARY KEY (PLAYER_ID),
    CONSTRAINT PLAYER_FK FOREIGN KEY (TEAM_ID) REFERENCES TEAM(TEAM_ID)
);

테이블 구조 확인

DESC PLAYER;

데이터 삽입

INSERT INTO TEAM (TEAM_ID, TEAM_NAME) VALUES ('001', 'Team A');
INSERT INTO PLAYER (PLAYER_ID, PLAYER_NAME, TEAM_ID, POSITION, BIRTH_DATE)
VALUES ('P001', 'John Doe', '001', 'Forward', TO_DATE('1990-01-01', 'YYYY-MM-DD'));

데이터 조회

SELECT * FROM PLAYER;

1. 데이터베이스란?

  • 정의:
    데이터베이스는 구조화된 데이터 저장소로, 정보를 저장, 관리, 수정, 삭제할 수 있는 어플리케이션.
    • : 엑셀 파일은 간단한 데이터베이스로 볼 수 있음.
  • 특징:
    • 방대한 데이터를 체계적이고 간편하게 분류 가능.
    • 데이터를 효율적으로 저장하고 접근 가능.

2. 데이터베이스의 구성 요소

  1. 데이터베이스 서버:
    • 데이터를 저장, 관리, 수정, 삭제하는 역할.
  2. 데이터베이스 클라이언트:
    • 서버에 요청을 보내 데이터를 검색하거나 명령 실행.
    • : 웹브라우저(크롬, 인터넷 익스플로러)와 웹서버의 관계와 유사.

3. 데이터베이스의 구조

  • 데이터베이스:
    • 연관된 테이블들을 모아둔 데이터 저장 공간.
  • 테이블 구조:
    • Column(열): 데이터의 성격과 타입을 정의.
    • Row(행): 연관된 데이터의 세트.
    • 필드(Field): 행과 열의 교차점.
    • 레코드(Record): 필드에 담긴 구체적인 데이터.

4. 데이터베이스의 종류

a. 관계형 데이터베이스 (RDBMS)

  • 특징:
    • 데이터를 테이블 형식으로 저장.
    • 데이터 간 관계를 명확히 정의.
    • SQL(Structured Query Language)을 사용하여 데이터 관리.
  • :
    • MySQL, Oracle, Microsoft SQL Server (MSSQL).

b. NoSQL 데이터베이스

  • 특징:
    • 비정형 또는 방대한 데이터를 처리하는 데 적합.
    • 관계형 모델이 아닌 데이터 구조 사용 (문서, 키-값, 그래프 등).
  • :
    • MongoDB, Cassandra, Redis.

5. 관계형 데이터베이스 vs NoSQL

특징관계형 데이터베이스 (RDBMS)NoSQL

구조 테이블 (행과 열) 문서, 키-값, 그래프 등
언어 SQL NoSQL 전용 API
유연성 고정된 스키마 동적 스키마
확장성 수직적 확장 수평적 확장
사용 사례 전통적인 데이터 처리 빅데이터, 실시간 분석

6. 데이터베이스 활용 사례

  1. 웹 애플리케이션:
    • 사용자 정보, 게시글, 상품 정보 등 저장.
  2. 빅데이터 분석:
    • 소셜 네트워크(Facebook, Twitter) 데이터를 NoSQL로 처리.
  3. 금융 및 의료:
    • 관계형 데이터베이스를 활용해 거래 기록, 환자 데이터를 관리.

7. 데이터베이스 관리의 주요 작업

  1. CRUD 작업:
    • Create: 데이터 생성.
    • Read: 데이터 조회.
    • Update: 데이터 수정.
    • Delete: 데이터 삭제.
  2. 데이터 정의:
    • 테이블 생성 및 스키마 정의.
  3. 백업 및 복구:
    • 데이터 손실 방지를 위한 백업 작업.

8. 데이터베이스 용어 정리

  • Column (열):
    • 데이터의 속성 또는 타입.
    • 예: 이름, 나이, 주소.
  • Row (행):
    • 하나의 데이터 세트.
    • 예: 특정 사람의 이름과 나이.
  • Field (필드):
    • 행과 열의 교차점에서 값을 저장.
    • 예: 이름-홍길동.
  • Record (레코드):
    • 행에 저장된 구체적인 데이터.
    • 예: 홍길동, 25세, 서울.

요약

  • 데이터베이스는 방대한 데이터를 효율적으로 저장, 관리, 검색하는 도구.
  • 관계형 데이터베이스(RDBMS)는 SQL 기반, NoSQL은 비정형 데이터를 처리.
  • 데이터베이스는 테이블(Column, Row, Field)로 구성되어 데이터를 구조적으로 저장.
  • 웹 애플리케이션, 빅데이터 분석, 금융 등 다양한 분야에서 활용.

+ Recent posts