Now Loading ...
-
💾[Database] H2 Database란 무엇인가요?
💾[Database] H2 Database란 무엇인가요?
H2 Database는 Java로 구현된 오픈 소스의 경량형 관계형 데이터베이스(RDBMS) 입니다.
주로 테스트 및 개발 환경에서 빠르고 간편하게 데이터베이스를 사용하고자 할 때 활용됩니다.
H2는 메모리 기반 또는 파일 기반으로 동작할 수 있어, 설치 과정 없이 애플리케이션에 내장하여 사용할 수 있는 것이 특징입니다.
1️⃣ H2 Database의 주요 특징.
1️⃣ 경량성(Lightweight)
데이터베이스 엔진의 크기가 작고 빠르며, 메모리 기반으로 동작 시 매우 높은 성능을 제공합니다.
2️⃣ Java로 구현.
Java로 작성되어 Java 기반 애플리케이션과 통합이 용이하며, 플랫폼 독립적입니다.
3️⃣ 내장형 및 독립형.
1️⃣ 내장형 모드(Embedded mode)
애플리케이션에 내장되어 애플리케이션과 함께 실행.
2️⃣ 독립형 모드(Server mode)
독립된 서버로 동작하며, 다른 클라이언트가 접속 가능.
4️⃣ 메모리 기반 및 디스크 기반.
메모리 기반 모드에서는 데이터를 메모리에 저장하여 초고속 성능 제공(애플리케이션 종료 시 데이터 소멸).
디스크 기반 모드에서는 데이터를 파일에 저장하여 지속성을 유지.
5️⃣ SQL 표준 준수.
SQL 표준을 지원하며, 다른 데이터베이스와 유사한 명령어를 사용할 수 있습니다.
6️⃣ 웹 콘솔 제공.
사용하기 편리한 웹 기반 관리 콘솔을 제공하여 SQL 쿼리 실행 및 데이터 확인 가능.
7️⃣ 오픈 소스.
Apache 2.0 라이선스에 따라 무료로 사용 가능.
2️⃣ H2 Database의 주요 활용.
1️⃣ Spring Boot와의 통합.
Spring Boot에서 기본적으로 내장된 데이터베이스로 설정되어 개발 및 테스트 환경에서 자주 사용됩니다.
application.properties에 설정을 추가하면 쉽게 사용할 수 있습니다.
2️⃣ 단위 테스트.
실제 데이터베이스 연결 없이 H2를 사용해 테스트 환경을 구성할 수 있습니다.
3️⃣ 빠른 프로토타이핑.
애플리케이션 개발 초기 단계에서 데이터베이스 설계를 빠르게 실험하고 검증할 수 있습니다.
4️⃣ 학습용.
관계형 데이터베이스 및 SQL 학습에 적합합니다.
3️⃣ H2 Database 설정 예시.
1️⃣ Maven Dependency 추가.
H2 Database를 사용하려면 Maven 프로젝트에 다음 의존성을 추가합니다.
```xml
com.h2database
h2
runtime
### 2️⃣ Spring Boot 설정.
- Spring Boot에서는 `application.properties` 또는 `application.yml` 파일에 H2 설정을 추가합니다.
```properties
# H2 Database 설정
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=""
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
spring.datasource.url=jdbc:h2:mem:testdb : 메모리 기반 데이터베이스를 사용합니다.
spring.h2.console.enabled=true : H2 콘솔을 활성화합니다.
spring.h2.console.path=/h2-console : H2 콘솔의 접속 경로를 지정합니다.
3️⃣ H2 웹 콘솔 접속
애플리케이션을 실행한 후, 브라우저에서 http://localhost:8080/h2-console로 접속합니다.
JDBC URL : jdbc:h2:mem:testdb
User Name : sa
Password : ""
4️⃣ H2 사용 시 주의 사항.
1️⃣ 데이터 영속성.
메모리 모드에서는 애플리케이션 종료 시 데이터가 사라지므로, 영속성을 유지하려면 파일 기반 (jdbc:h2:file:~/testdb)을 사용해야 합니다.
2️⃣ 운영 환경에서는 부적합.
H2는 주로 개발 및 테스트 환경에서 사용됩니다.
운영 환경에서는 MySQL, PostgreSQL, Orcle 등 더 강력한 데이터베이스를 사용해야 합니다.
3️⃣ 동시성 제한.
단일 사용자 또는 소규모 동시 작업에는 적합하지만, 많은 트랜잭션이 필요한 경우 성능이 떨어질 수 있습니다.
5️⃣ H2 Database의 장점.
간단한 설정과 사용성.
빠른 성능(특히 메모리 모드).
SQL 표준 준수로 학습 및 프로토타이핑에 적합,
Spring Boot와의 완벽한 호환성.
6️⃣ H2 Database의 단점.
대규모 데이터 및 복잡한 트랜잭션 처리에 한계.
운영 환경에서는 적합하지 않음.
영속성 관리가 부족(메모리 기반 모드 사용 시).
7️⃣ 결론.
H2 Database는 경량성과 편의성을 갖춘 데이터베이스로, 주로 개발과 테스트에 최적화된 도구입니다.
빠른 프로토타이핑 및 학습 환경이 필요할 때 활용하면 효율적입니다.
-
-
💾[Database] 스키마(Schema)란 무엇일까요?
💾[Database] 스키마(Schema)란 무엇일까요?
스키마(Schema)는 데이터베이스의 구조를 정의하는 용어로, 데이터베이스에서 데이터가 어떻게 저장되고, 어떻게 조직화되는지를 설명하는 데 사용됩니다.
스키마(Schema)는 데이터베이스의 논리적 설계를 나타내면, 테이블, 뷰, 인덱스, 트리거, 저장 프로시저, 제약 조건 등과 같은 데이터베이스 객체들이 어떻게 구성되는지를 정의합니다.
1️⃣ 스키마의 주요 요소.
1️⃣ 테이블(Table).
스키마(Schema)에서 가장 기본적인 요소로, 데이터를 행(Row)과 열(Column) 형식으로 저장합니다.
각 테이블은 하나의 엔티티(예: 사용자, 제품 등)를 표현하며, 테이블의 열(Column)은 속성을, 행은 각 개체의 데이터를 나타냅니다.
2️⃣ 컬럼(Column).
테이블의 각 필드를 나타내며, 데이터 유형(정수, 문자열 등)과 제약 조건(예: NOT NULL, UNIQUE)이 설정됩니다.
스키마(Schema)에서 컬럼(Column, 열)의 이름, 데이터 타입, 크기 등을 정의합니다.
3️⃣ 기본 키(Primary Key)
테이블에서 각 행(Row)을 고유하게 식별할 수 있는 특정 열(또는 열의 조합)입니다.
스키마(Schema)에서 기본 키(Primary Key)는 특정 테이블에서 중복되지 않는 값으로 정의됩니다.
4️⃣ 외래 키(Foreign Key)
다른 테이블의 기본 키(Primary Key)와 연결되는 열(Column)로, 두 테이블 간의 관계를 정의하는 데 사용됩니다.
스키마(Schema)에서 외래 키(Foreign Key)는 데이터베이스 테이블 간의 참조 무결성을 유지하도록 합니다.
5️⃣ 인덱스(Index)
검색 성능을 향상시키기 위해 테이블의 특정 열(Column)에 대한 인덱스를 정의합니다.
스키마(Schema)에서 인덱스는 데이터의 효율적인 검색을 위한 추가적인 구조를 나타냅니다.
6️⃣ 뷰(View)
하나 이상의 테이블에서 데이터를 추출하여 보여주는 가상의 테이블입니다.
데이터베이스 내에 물리적으로 저장되지 않고, SQL(Structured Query Language) 쿼리 결과를 통해 생성됩니다.
7️⃣ 제약 조건(Constraints)
데이터 무결성을 보장하기 위해 테이블이나 열(Column)에 적용되는 규칙입니다.
예를 들어, NOT NULL, UNIQUE, CHECK, FOREIGN KEY 등의 제약 조건이 스키마에 정의됩니다.
2️⃣ 스키마의 종류.
1️⃣ 논리적 스키마(Logical Schema)
데이터베이스의 전체적인 논리적 구조를 나타냅니다.
테이블, 뷰, 인덱스 등의 논리적인 구조를 정의하며, 데이터베이스 사용자들이 데이터를 어떻게 볼지를 설명합니다.
2️⃣ 물리적 스키마(Physical Schema)
데이터가 실제로 데이터베이스에 어떻게 저장되는지를 나타냅니다.
이는 하드웨어 레벨에서 데이터가 저장되는 방식을 설명하며, 데이터 파일, 인덱스 파일 등이 포함됩니다.
3️⃣ 사용자 스키마(User Schema)
특정 사용자에게 보여지는 데이터베이스 구조를 나타냅니다.
일반적으로 사용자는 전체 데이터베이스가 아닌, 특정 뷰나 테이블만 접근할 수 있도록 설정됩니다.
3️⃣ 스키마 예시.
스키마는 SQL을 통해 정의할 수 있으며, 이를 통해 데이터베이스의 구조가 설정됩니다.
예를 들어, 사용자 테이블의 스키마는 다음과 같이 정의할 수 있습니다.
CREATE TABLE Users (
user_id INT PRIMARY KEY, -- 기본 키
username VARCHAR(50) NOT NULL -- NULL을 허용하지 않음
email VARCHAR(100) UNIQUE, -- 고유한 값
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
위 스키마 정의에서는 User 테이블이 생성되며, 다음과 같은 구조를 가집니다.
user_id: 기본 키(Primary Key)로, 고유한 사용자 식별자입니다.
username: 사용자의 이름을 저장하며, NULL을 허용하지 않습니다.
email: 사용자의 이메일을 저장하며, 고유한 값이어야 합니다.
created_at: 사용자가 생성된 시간을 나타내며, 기본값으로 현재 시간을 저장합니다.
4️⃣ 스키마의 역할.
데이터 구조 정의
스키마는 데이터베이스 내의 모든 데이터 구조를 정의합니다.
이는 테이블, 열(Column), 제약 조건 등을 명확하게 정의함으로써 데이터베이스의 일관성을 유지합니다.
데이터 무결성 유지
스키마는 제약 조건과 규칙을 설정하여 데이터의 무결성을 보장합니다.
예를 들어, 외래 키(Foreign Key) 제약 조건은 데이터 간의 참조 무결성을 유지합니다.
데이터베이스 관리
스키마 데이터베이스의 관리를 용이하게 하며, 개발자나 DBA(Database Administrator)가 데이터 구조를 설계하고 유지보수할 수 있도록 돕습니다.
5️⃣ 요약.
스키마(Schema)는 데이터베이스 구조의 설계를 나타내며, 데이터가 어떻게 저장되고 조직되는지를 정의합니다.
테이블(Table), 열(Column), 인덱스(Index), 뷰(View), 제약 조건(Constraints) 등이 스키마에 포함되며, 이를 통해 데이터베이스의 일관성과 무결성을 보장합니다.
스키마(Schema)는 데이터베이스의 논리적 구조를 정의하는 데 매우 중요한 요소이며, 데이터베이스의 효율적인 운영과 관리에 필수적입니다.
-
💾[Database] 데이터베이스 URL이란 무엇일까요?
💾[Database] 데이터베이스 URL이란 무엇일까요?
데이터베이스 URL은 애플리케이션이 데이터베이스에 연결할 때 사용되는 고유한 주소입니다.
URL은 애플리케시연이 데이터베이스 서버를 찾고, 연결할 데이터베이스를 지정하기 위한 정보를 포함하고 있습니다.
이 URL은 데이터베이스 종류에 따라 고유한 형식으로 작성되며, 보통 프로토콜, 서버 위치(호스트), 포트 번호, 데이터베이스 이름 등을 포함합니다.
1️⃣ 데이터베이스 URL의 기본 형식.
데이터베이스 URL은 보통 다음과 같은 형식을 따릅니다.
jdbc:<데이터베이스 유형>://<호스트>:<포트>/<데이터베이스 이름>?<옵션들>
각 부분의 의미는 다음과 같습니다.
jdbc
Java Database Connectivity의 약자로, JDBC URL임을 나타냅니다.
JDBC(Java Database Connectivity)를 사용하여 데이터베이스와 연결하는 표준 방식입니다.
<데이터베이스 유형>
사용하는 데이터베이스의 유형을 나타냅니다.
예를 들어, MySQL, PostgreSQL, Oracle, SQL Server 등이 여기에 들어갑니다.
<호스트>
데이터베이스가 실행되고 있는 서버의 주소를 나타냅니다.
로컬에서 실행될 경우 localhost를 사용하고, 원격 서버의 경우 서버 IP 주소나 도메인 이름을 사용합니다.
<포트>
데이터베이스 서버가 수신 대기 중인 네트워크 포트 번호입니다.
각 데이터베이스는 기본 포트가 있지만, 필요에 따라 다른 포트를 사용할 수도 있습니다.
MySQL: 3306
PostgreSQL: 5432
Oracle: 1521
<데이터베이스 이름>
연결할 데이터베이스의 이름입니다.
같은 데이터베이스 서버에서 여러 데이터베이스를 운영할 수 있으므로, 연결할 데이터베이스를 명시합니다.
<옵션들>
추가적으로 데이터베이스 연결을 위한 옵션을 전달할 수 있습니다.
예를 들어, 인코딩 방식이나 SSL 사용 여부 등의 설정이 여기에 포함될 수 있습니다.
📝 SSL(Secure Socket Layer)
네트워크 상에서 데이터를 안전하게 암호화하여 전송하기 위한 보안 프로토콜입니다.
SSL은 클라이언트와 서버 간의 통신을 암호화하여, 데이터가 전송되는 동안 제3자가 이를 도청하거나 위조하지 못하도록 보호합니다.
SSL은 특히 웹 브라우저와 웹 서버 간의 안전한 통신을 보장하는 데 널리 사용되었습니다.
현재는 SSL의 후속 버전인 TLS(Transport Layer Security)가 SSL을 대체하여 사용되고 있지만, 보통 사람들은 여전히 SSL이라는 용어를 사용해 TLS도 함께 지칭합니다.
2️⃣ 데이터베이스 URL 예시.
1️⃣ MySQL
jdbc:mysql://localhost:3306/mydatabase?useSSL=false&serverTimezone=UTC
mysql : MySQL 데이터베이스 사용
localhost : 데이터베이스 서버의 주소 (로컬에서 실행 중인 경우)
3306 : MySQL의 기본 포트 번호
mydatabase : 연결할 데이터베이스 이름
useSSL=false : SSL 사용 여부 (이 예시에서는 사용하지 않음)
serverTimezone=UTC : 서버의 타임존 설정
2️⃣ PostgreSQL
jdbc:postgresql://localhost:5432/mydatabase
postgresql : PostgreSQL 데이터베이스 사용
localhost : 데이터베이스 서버 주소
5432 : PostgreSQL의 기본 포트 번호
mydatabase : 연결할 데이터베이스 이름
3️⃣ Oracle
jdbc:oracle:thin:@localhost:1521:ORCL
oracle:thin : Oracle의 JDBC 드라이버 사용
localhost : 데이터베이스 서버 주소
1521 : Oracle의 기본 포트 번호
ORCL : 데이터베이스 서비스 이름
4️⃣ SQL Server
jdbc:sqlserver://localhost:1433;databaseName=mydatabase;integratedSecurity=true;
sqlserver : Microsoft SQL Server 사용
localhost : 데이터베이스 서버 주소
1433 : SQL Sever의 기본 포트 번호
mydatabase : 연결할 데이터베이스 이름
integratedSecurity=true : 통합 보안(Windows 인증) 사용
5️⃣ H2(In-Memory Database)
jdbc:h2:mem:testdb
h2:mem : H2 데이터베이스의 메모리 모드 사용
testdb : 메모리 내에서 사용할 데이터베이스 이름
3️⃣ 데이터베이스 URL 사용 방법.
데이터베이스 URL은 주로 Spring Boot와 같은 프레임워크나 JDBC(Java Database Connectivity) API를 통해 데이터베이스에 연결할 때 설정합니다.
예를 들어, Spring Boot에서 application.properties나 application.yml 파일에 데이터베이스 URL을 지정할 수 있습니다.
👉 application.properties에서 데이터베이스 URL 설정.
spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase?useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=secret
👉 JDBC API로 데이터베이스 연결 예시
String url = "jdbc:mysql://localhost:3306/mydatabase?useSSL=false&serverTimezone=UTC";
String username = "root";
String password = "secret";
Connection conn = DriverManager.getConnection(url, username, password);
4️⃣ 데이터베이스 URL의 구성 요소 요약.
프로토콜(JDBC) : jdbc:로 시작하며 JDBC(Java Database Connectivity)를 사용한 데이터베이스 연결을 의미합니다.
데이터베이스 유형 : 사용할 데이터베이스의 종류(MySQL, PostgreSQL, Oracle 등)를 지정합니다.
서버 주소(호스트와 포트) : 데이터베이스 서버의 위치를 나타냅니다(로컬 또는 원격).
데이터베이스 이름 : 연결하려는 데이터베이스의 이름을 지정합니다.
추가 옵션 : SSL 사용, 타임존 설정 등 추가적인 설정이 필요할 때 URL에 포함될 수 있습니다.
5️⃣ 요약.
데이터베이스 URL은 애플리케이션이 데이터베이스에 연결할 때 사용하는 고유한 주소로, 데이터베이스 유형, 서버 주소, 포트 번호, 데이터베이스 이름 등의 정보를 포함하여 연결 설정을 정의합니다.
-
💾[Database] 관계형 데이터베이스(Relational Database, RDB)란 무엇일까요?
💾[Database] 관계형 데이터베이스(Relational Database, RDB)란 무엇일까요?
관계형 데이터베이스(Relational Database, RDB)는 테이블 형식으로 데이터를 저장하고, 테이블 간의 관계를 정의하여 데이터를 관리하는 데이터 모델입니다.
이를 관리하기 위해 데이터베이스 관리 시스템(Database Management System, DBMS)이 사용되며, RDB(Relational Database, 관계형 데이터베이스)를 관리하는 DBMS(Database Management System, 데이터베이스 관리 시스템)는 관계형 데이터베이스 관리시스템(RDBMS, Relational Database Management System)이라고 합니다.
관계형 데이터베이스(Relational Database, RDB)는 데이터를 행(Row)과 열(Column)로 구성된 테이블(Table)에 저장되며, 각 테이블은 서로 관계를 맺어 구조화된 데이터를 관리하고 검색하기 쉽게 합니다.
1️⃣ 관계형 데이터베이스(RDB, Relational Database)의 주요 특징.
1️⃣ 테이블 구조.
관계형 데이터베이스(RDB, Relational Database)는 데이터를 테이블 형태로 저장합니다.
각 테이블은 행(Row)과 열(Column)로 구성되며, 행(Row)은 레코드(Record)라고 하고, 열(Column)은 속성(Attribute) 또는 필드(Field)라고 부릅니다.
예를 들어, “사용자”라는 테이블이 있다면, 각 행(Row)은 사용자 정보(이름, 이메일, 나이 등)를 나타내고, 각 열(Column)은 사용자 정보를 설명하는 속성(Attribute)을 나타냅니다.
2️⃣ 관계.
관계형 데이터베이스(Relational Database, RDB)는 여러 테이블 간의 관계를 정의할 수 있습니다.
키(Key)를 사용해 테이블 간의 관계를 맺고, 데이터를 참조하고 연결할 수 있습니다.
예를 들어, “사용자” 테이블과 “주문” 테이블이 있다고 하면, “사용자” 테이블의 기본 키(Primary Key)가 “주문” 테이블에 외래 키(Foreign Key)로 사용되며, 사용자와 주문 간의 관계를 나타낼 수 있습니다.
3️⃣ 고유한 키(Primary Key).
각 테이블에는 고유한 키(Primary Key)가 있습니다.
이 키는 테이블의 각 레코드(Record)를 유일하게 식별하는 역할을 합니다.
기본 키(Primary Key)는 중복될 수 없으며, 이를 통해 데이터를 정확하게 검색하고 관리할 수 있습니다.
4️⃣ 데이터 무결성 및 일관성.
관계형 데이터베이스(Relational Database, RDB)는 데이터 무결성(Integrity)과 일관성(Consistency)을 유지하도록 설계되었습니다.
이를 통해 데이터의 정확성과 신뢰성을 보장할 수 있습니다.
제약 조건(Constraints)을 통해 데이터의 무결성(Integrity)을 유지합니다.
예를 들어, NOT NULL 제약 조건을 사용하여 특정 열이 항상 값을 가져야 한다는 것을 보장하거나, FOREIGN KEY 제약 조건을 사용해 테이블 간의 관계를 유지합니다.
5️⃣ SQL(Structured Query Language)
관계형 데이터베이스(Relational Database, RDB)는 데이터를 관리하기 위해 SQL(Structured Query Language)이라는 언어를 사용합니다.
SQL(Structured Query Language)은 데이터를 조회, 삽입, 수정, 삭제하는 데 사용되는 표준 언어입니다.
SQL(Structured Query Language)은 관계형 데이터베이스(Relational Database, RDB)에서 데이터 검색과 조작을 위한 강력한 도구입니다.
예: 데이터를 삽입하기 위한 INSERT문, 데이터를 조회하기 위한 SELECT문, 데이터를 수정하기 위한 UPDATE문, 데이터를 삭제하기 위한 DELETE문 등이 있습니다.
2️⃣ 관계형 데이터베이스(Relational Database, RDB)의 구성 요소.
1️⃣ 테이블(Table)
관계형 데이터베이스(Relational Database, RDB)의 기본 단위입니다.
데이터는 행(Row)과 열(Column)로 구성된 테이블에 저장됩니다.
예: 사용자(Users) 테이블, 주문(Order) 테이블
2️⃣ 기본 키(Primary Key)
각 테이블에서 고유하게 레코드를 식별하는 열(Column)입니다.
중복될 수 없으며, 각 행(Row)을 유일하게 구분할 수 있습니다.
예: 사용자 테이블의 user_id 열(Column)은 기본 키(Primary Key)로 사용될 수 있습니다.
3️⃣ 외래 키(Foreign Key)
다른 테이블의 기본 키(Primary Key)를 참조하는 열(Column)로, 테이블 간의 관계를 정의합니다.
외래 키(Foreign Key)는 두 테이블을 연결하는 역할을 하며, 데이터 간의 일관성을 유지하는 데 도움을 줍니다.
예: 주문(Orders) 테이블에서 user_id 열이 사용자(Users) 테이블의 user_id를 참조하는 경우, 이를 외래키(Foreign Key)라고 합니다.
4️⃣ 속성(Attribute)
테이블의 열(Column)을 의미하며, 각 속성(Attribute)은 특정 유형의 데이터를 저장합니다.
예를 들어, 사용자 테이블에서 name, email, age와 같은 속성이 있을 수 있습니다.
5️⃣ 레코드(Record)
테이블의 행(Row)을 의미하며, 하나의 레코드는 테이블에 저장된 데이터의 한 항목을 나타냅니다.
예를 들어, 사용자 테이블의 한 행(Row)은 한 사용자의 정보를 나타냅니다.
3️⃣ 관계형 데이터베이스(Relational Database, RDB)의 예시.
예를 들어, 전자상거래 웹사이트를 위한 데이터베이스를 설계한다고 가정해봅시다.
여기에는 사용자와 주문 정보를 저장하기 위해 두 개의 테이블이 있을 수 있습니다.
1️⃣ 사용자(Users) 테이블.
user_id(기본 키, Primary Key)
name`
email
address
2️⃣ 주문(Orders) 테이블.
order_id(기본 키, Primary Key)
user_id(외래 키, Foreign Key, 사용자와의 관계를 나타냄)
product
quantity
3️⃣ 설명.
이 예에서, 사용자 테이블과 주문 테이블은 user_id를 통해 관계를 맺고 있습니다.
이를 통해 특정 사용자가 어떤 주문을 했는지 쉽게 조회할 수 있습니다.
4️⃣ 관계형 데이터베이스 관리시스템(RDBMS, Relational Database Management System)의 예.
MySQL
오픈 소스 관계형 데이터베이스 관리시스템(RDBMS, Relational Database Management System)으로, 웹 애플리케이션에서 많이 사용됩니다.
PostgreSQL
오픈 소스 관계형 데이터베이스 관리시스템(RDBMS, Relational Database Management System)로, 확장성과 표준 준수에 중점을 둔 관계형 데이터베이스 관리시스템(RDBMS, Relational Database Management System)입니다.
Oracle
대규모 상업용 데이터베이스로, 높은 성능과 보안성을 자랑하는 관계형 데이터베이스 관리시스템(RDBMS, Relational Database Management System)입니다.
Microsoft SQL Server
마이크로소프트에서 개발한 관계형 데이터베이스 관리시스템(RDBMS, Relational Database Management System)으로, 기업 환경에서 많이 사용됩니다.
5️⃣ 관계형 데이터베이스(Relational Database, RDB)의 장점.
1️⃣ 데이터 무결성 보장.
관계형 데이터베이스(Relational Database, RDB)는 제약 조건(Constraints)을 통해 데이터의 무결성을 보장합니다.
예를 들어, 외래 키(Foreign key)를 통해 테이블 간의 참조 무결성을 유지하고, 데이터의 일관성을 확보합니다.
2️⃣ SQL을 통한 데이터 관리.
관계형 데이터베이스(Relational Database)는 SQL(Structured Query Language)이라는 표준 언어를 사용하여 데이터를 검색, 삽입, 수정, 삭제할 수 있습니다.
SQL은 관계형 데이터베이스에서 데이터를 쉽게 관리할 수 있도록 해줍니다.
3️⃣ 데이터 중복 최소화.
관계형 데이터베이스(Relational Database, RDB)는 데이터를 여러 테이블로 나누고, 중복을 최소화하여 저장합니다.
이로 인해 데이터 저장소의 효율성이 증가하고, 데이터 일관성을 유지할 수 있습니다.
4️⃣ 데이터 보안.
관계형 데이터베이스(Relational Database, RDB)는 사용자 권한을 관리하여, 데이터에 대한 접근을 제어하고 보안을 강화할 수 있습니다.
6️⃣ 관계형 데이터베이스의 단점.
1️⃣ 복잡한 구조.
데이터가 여러 테이블에 분산되어 저장되기 때문에, 데이터의 구조가 복잡해질 수 있습니다.
특히, 데이터간의 관계가 많아질수록 관리와 설계가 어려워질 수 있습니다.
2️⃣ 확장성의 한계.
관계형 데이터베이스(Relational Database, RDB)는 데이터의 수평적 확장(데이터를 여러 서버로 나누어 저장)이 어려운 경우가 많습니다.
데이터가 크고 관계가 복잡할수록 확장성과 성능에 제약이 있을 수 있습니다.
3️⃣ 고정된 스키마.
관계형 데이터베이스(Relational Database, RDB)는 고정된 스키마를 사용합니다.
즉, 테이블 구조(열(Row)의 수와 이름 등)가 정해진 후, 이를 변경하기 어렵습니다.
데이터 구조가 자주 변경되는 경우 유연성이 떨어질 수 있습니다.
7️⃣ 관계형 데이터베이스(Relational Database, RDB)와 NoSQL 데이터베이스의 차이.
1️⃣ 관계형 데이터베이스(Relational Database, RDB)
데이터를 테이블 형태로 저장하며, 테이블 간의 관계를 정의합니다.
SQL(Structured Query Language)을 사용하여 데이터를 관리합니다.
일관성과 무결성을 중요하게 다루며, 고정된 스키마 구조를 가집니다.
2️⃣ NoSQL 데이터베이스
데이터를 유연한 구조로 저장하며, 문서(Document), 키-값(Key-Value), 그래프(Graph) 등 다양한 방식으로 데이터를 저장할 수 있습니다.
스키마가 유연하여 데이터 구조가 자주 변경될 때 유리합니다.
관계형 데이터베이스(Relational Database, RDB)에 비해 수평적 확장이 용이하며, 대규모 분산 시스템에 적합합니다.
8️⃣ 결론.
관계형 데이터베이스(Relational Database, RDB)는 데이터를 테이블 형태로 저장하고, 여러 테이블 간의 관계를 정의하여 데이터를 효율적으로 관리하는 데이터베이스 관리 시스템입니다.
SQL을 사용해 데이터를 관리하며, 데이터 무결성과 일관성을 유지하는 데 강점을 가집니다.
대표적인 관계형 데이터베이스로는 MySQL, PostgreSQL, Oracle 등이 있으며, 복잡한 관계를 가지는 정형 데이터 관리에 적합합니다.
-
💾[Database] 데이터베이스에서 테이블을 만든다는 의미는 무엇일까?
💾[Database] 데이터베이스에서 테이블을 만든다는 의미는 무엇일까?
데이터베이스에서 테이블을 만든다는 것은, 데이터를 저장할 구조를 정의하는 것을 의미합니다.
테이블은 데이터베이스 내에서 정보를 저장하는 기본 단위로, 행(Row) 과 열(Column) 로 구성된 표(Table) 형태로 관리합니다.
1️⃣ 테이블 생성의 의미.
1. 데이터 구조의 정의.
테이블을 만든다는 것은 특정 유형의 데이터를 저장할 수 있는 데이터 구조를 정의하는 것입니다.
각 열(Column)은 저장될 데이터의 속성을 나타내며, 각 행(Row)은 데이터의 개별 항목(레코드) 나타냅니다.
예를 들어, Users 테이블을 만든다면 사용자에 대한 정보를 저장할 수 있도록, 이름, 이메일, 나이와 같은 속성을 정의하는 것입니다.
2. 데이터 타입 설정.
테이블의 각 열(Column)은 특정 데이터 타입을 가집니다.
데이터 타입은 해당 열(Column)에 어떤 종류의 데이터가 저장될 수 있는지를 결정합니다.
예를 들어, name 열(Column)은 문자열 데이터를 저장하고 age 열(Column)은 숫자 데이터를 저장할 수 있습니다.
3. 제약 조건 설정.
테이블 생성 시, 제약 조건을 설정하여 데이터의 무결성을 보장할 수 있습니다.
예를 들어, 기본 키(Primary Key)를 설정하여 각 레코드를 고유하게 식별하거나, 특정 열(Column)에 NOT NULL 제약을 걸어 해당 열(Column)이 비어 있을 수 없도록 설정할 수 있습니다.
2️⃣ 예시: 테이블 생성.
CREATE TABLE Users (
id INT KEY, -- Primary Key: 각 사용자를 고유하게 식별
name VARCHAR(100) NOT NULL, -- 이름: 문자열, null 값을 허용하지 않음
email VARCHAR(100) UNIQUE, -- 이메일: 고유한 문자열
age INT, -- 나이: 정수
created_at TIMESTAMP -- 생성 시간: 타임스탬프
);
위의 SQL 예시는 Users라는 테이블을 정의하는 것입니다.
테이블이 정의되면 해당 구조에 맞게 데이터를 저장할 수 있습니다.
id 열은 정수형 데이터 타입으로, 각 사용자를 고유하게 식별하는 기본 키(Primary Key)입니다.
name 열은 VARCHAR(100) 데이터 타입으로 최대 100자의 문자열을 저장하며, null 값을 허용하지 않습니다.
email 열은 UNIQUE 제약을 가집니다. 즉, 테이블 내에서 중복된 이메일이 저장될 수 없습니다.
age 열은 정수형 데이터를 저장할 수 있습니다.
created_at 열은 타임스탬프로, 데이터가 생성된 시간을 기록하는 열입니다.
3️⃣ 테이블 생성의 목적
1. 데이터 저장 및 관리.
테이블을 생성하면, 해당 구조에 맞게 데이터를 저장할 수 있습니다.
각 행(Row)은 하나의 레코드를 나타내며, 테이블에 정의된 각 열(Column)은 그 레코드의 속성을 나타냅니다.
2. 데이터 무결성 보장.
테이블을 생성할 때 정의하는 제약 조건(Primary Key, Foreign Key, Unique, Not Null 등)은 데이터의 정확성과 일관성을 보장합니다.
3. 효율적인 데이터 조회.
테이블을 통해 데이터를 구조화하여 저장하면, SQL 쿼리를 통해 효율적으로 데이터를 검색, 수정, 삭제할 수 있습니다.
적절한 인덱스와 관계 설정을 통해 데이터베이스 성능을 최적화할 수 있습니다.
4️⃣ 테이블을 만든 후
테이블을 만든 후, 해당 테이블에 데이터를 삽입하고, 필요에 따라 데이터를 조회, 수정, 삭제할 수 있습니다.
테이블은 데이터베이스에서 데이터를 논리적으로 그룹화하고 관리하는 핵심적인 역할을 합니다.
-
💾[Database] 데이터베이스 모델링.
💾[Database] 데이터베이스 모델링.
1️⃣ 정보 시스템 구축의 개요.
정보 시스템을 구축하기 위해서는 일반적으로 “분석-설계-구현-시험-유지.보수”라는 5단계를 거칩니다.
분석은 프로젝트의 첫 번째 단계로 시스템 분석 또는 요구 사항 분석이라고도 합니다.
요구 사항 분석은 ‘무엇을(what)’할지 결정하는 것으로, 이 단계에는 사용자 인터뷰와 업무 조사 등을 수행합니다.
분석은 프로젝트의 첫 단추를 끼우는 중요한 단계이므로 당연히 많은 시간 동안 심혈을 기울여야 합니다.
두 번째로 설계 단계는 시스템 설계 또는 프로그램 설계라고도 하며, 구축하고자 하는 시스템을 ‘어떻게(how)’ 설계할 것인지 결정합니다.
설계 단계가 끝나면 그 결과 문서를 프로그래머(또는 코더)에게 넘겨주고, 프로그래머는 설계서에 있는 대로 프로그램을 작성하기만 하면 됩니다.
따라서 일반적으로는 시스템 설계가 끝나면 가장 큰 작업을 마친 것으로 여깁니다.
대부분의 프로젝트에서는 분석과 설계 단계가 전체 공정의 50% 이상을 차지합니다.
2️⃣ 데이터베이스 모델링과 필수 용어.
데이터베이스 모델링이란 현실 세계에서 사용되는 데이터를 MySQL에 어떻게 옮겨놓을지 결정하는 과정으로, 정보 시스템 구축 시 분석과 설계 단계에서 가장 중요한 작업 중 하나입니다.
인터넷 쇼핑몰을 생각해봅시다.
인터넷 쇼핑몰에는 사람(또는 회원)이 필요합니다.
그렇다면 이 사람을 어떻게 MySQL에 넣을까요?
데이터베이스에서는 사람을 나타내는 여러 가지 특성(속성)을 추출하여 저장합니다.
어떤 사람의 신분을 증명하는 신분증에 이름, 주민등록번호, 주소 등의 정보가 있는 것과 비슷한 개념입니다.
일상 생활에서 판매하는 제품도 마찬가지입니다.
제품 자체를 컴퓨터에 넣을 수는 없으니 제품명, 가격, 제조일, 제조사, 남은 수량 등을 저장합니다.
이때 정보가 단편적으로 저장되는 것이 아니라 테이블이라는 형식에 맞춰 저장됩니다.
지금까지 설명한 사람과 제품에 관한 정보를 테이블에 구현하면 다음 그림과 같습니다.
테이블의 구조와 관련 용어.
데이터.
토마스, 컴퓨터, 2019-07-01과 같이 테이블에 저장된 하나하나의 단편적인 정보를 데이터라고 합니다.
즉 정보는 있으나 아직 체계화되지 않은 상태입니다.
테이블.
회원이나 제품의 데이터를 입력하기 위해 표 형태로 만든 것을 말합니다.
위 그림에서는 인터넷 쇼핑몰을 구현하기 위해 회원 정보를 보관할 회원 테이블과 제품 정보를 보관할 제품 테이블을 합쳐서 총 2개의 테이블을 만들었습니다.
데이터베이스.
테이블이 저장되는 저장소로, 위 그림과 같이 원통 모양으로 표현합니다.
위 그림에는 3개의 데이터베이스가 있으며, 각 데이터베이스는 각각의 고유한 이름을 가지고 있습니다.
DBMS.
DataBase Management System의 약자로, 데이터베이스를 관리하는 시스템 또는 소프트웨어를 말합니다.
예를 들어 MySQL과 같은 것이 DBMS이다.
위 그림에서는 DBMS가 3개의 데이터베이스를 관리하고 있습니다.
열(필드).
각 테이블은 열(Column)로, 구성됩니다.
위 그림의 회원 테이블은 ‘아이디’, ‘회원 이름’, ‘주소’라는 3개의 열로 구성되어 있습니다.
데이터 형식.
열의 데이터 형식을 말합니다.
회원 테이블의 회원 이름 열은 당연히 숫자가 아닌 문자 형식이어야 합니다.
또한 제품 테이블의 가격 열은 숫자(특히 정수) 형식이어야 합니다.
가격에 ‘고가’같은 글자가 들어가서는 안 되기 때문입니다.
데이터 형식은 테이블을 생성할 때 열 이름과 함꼐 지정합니다.
행(레코드).
실질적인 데이터를 말합니다.
회원 테이블의 ‘Thomas/토마스/경기도 부천시 중동’은 하나의 행으로 ‘행 데이터’라고도 부릅니다.
행(Row)은 회원 테이블에서 회원이 몇 명인지, 행 데이터가 몇 개 있는지와 동일한 의미입니다.
회원 테이블의 행은 4개, 즉 4명의 회원이 존재합니다.
기본키(주키).
기본키는 각 행을 구분하는 유일한 열을 말합니다.
기본키는 중복되면 안 되고 비어 있어서도 안 됩니다.
또한 각 테이블에는 기본키가 하나만 지정되어 있어야 합니다.
회원 테이블의 기본키는 아이디 열에 지정되어 있는데, 만약 기본키를 회원 이름 열에 지정하면 어떻게 될까요?
기본키는 각 행을 구분하는 유일한 열이라고 했는데, ‘토마스’라는 이름만으로 그 사람이 경기도 부천시 중동에 산다는 것을 확신할 수 있나요?
만약 ‘토마스’라는 이름이 또 있다면?
현실적으로 같은 이름을 가진 사람이 있을 수 있기 때문에 회원 이름 열은 기본키로 지정하기에 부적합합니다.
그렇다면 주소 열은 어떨까요?
마찬가지로 주소만 가지고 유일한 사람이라고 단정지을 수 없습니다.
같은 집에 여러 사람이 살 수도 있기 때문입니다.
마지막의 아이디 열은 어떤가요?
쇼핑몰 사이트에 가입해봤다면 회원 가입을 할 때 아이디를 만들면서 버튼을 클릭해본 경험이 있을 것 입니다.
즉 아이디는 중복되지 않게 지정해야 합니다.
또한 쇼핑몰 사이트에 회원 가입을 할 때 아이디를 만들지 않고는 가입할 수 없습니다.
결국 모든 회원은 아이디를 가지고 있고 모든 회원의 아이디가 각각 다르기 때문에 아이디는 기본키로 지정하기에 매우 적절합니다.
한편 회원 테이블에 주민등록번호나 이메일 열이 있다면 역시 중복되지 않고 비어있지도 않으므로 기본키로 지정할 수 있습니다.
외래키
위 그림에서는 나타나 있지 않지만 외래키는 두 테이블의 관계를 맺어주는 키를 말합니다.
SQL(구조화된 질의 언어)
DBMS에서 어떤 작업을 하고 싶다면 어떻게 해야 할까요?
사람끼리 주고 받는 언어로 말할 수는 없습니다.
DBMS에서 어떤 작업을 하고 싶다면 DBMS가 알아듣는 말로 해야 할 텐데, 이때 사용하는 것이 바로 SQL입니다.
SQL은 사람과 DBMS가 소통하기 위한 말(언어)입니다.
-
-
-
💾[Database] 데이터베이스의 정의와 특징.
💾[Database] 데이터베이스의 정의와 특징.
1️⃣ 데이터베이스 : 여러 사용자나 응용 프로그램이 공유하고 동시에 접근 가능한 ‘데이터의 집합’ 이라고 정의할 수 있습니다.
2️⃣ DBMS(DataBase Management System) : ‘데이터베이스’를 ‘관리,운영하는 소프트웨어’ 입니다.
🙋♂️ 데이터베이스
‘데이터 저장 공간’ 자체를 의미하기도 합니다.
DBMS 중 하나인 MySQL에서는 ‘데이터베이스’를 ‘자료가 저장되는 디스크 공간(주로 파일로 구성됨)’으로 취급합니다.
위 그림은 데이터베이스, DBMS, 사용자, 응용 프로그램의 관계를 보여줍니다.
위 그림에서 보듯이 DBMS는 데이터베이스를 관리하는 역할을 하는 소프트웨어입니다.
여러 사용자나 응용 프로그램은 DBMS가 관리하는 데이터에 동시에 접속하여 데이터를 공유합니다.
👉 즉, DBMS에서는 데이터베이스에서 사용되는 데이터가 집중 관리됩니다.
🙋♂️ 데이터베이스와 DBMS
데이터베이스를 DBMS와 혼용해서 같은 용어처럼 사용하는 경우도 흔히 있습니다.
바라보는 시각에 따라 그렇게 사용하는 것이 틀린 것은 아니지만
저는 데이터베이스를 ‘데이터의 집합’ 또는 ‘데이터의 저장 공간’으로 보고,
DBMS는 데이터베이스를 운영하는 ‘소프트웨어’라는 의미로 공부하겠습니다.
DBMS에는 MySQL 외에도 많은 종류의 프로그램이 있습니다.
MySQL
MariaDB
PostgreSQL
Oracle
SQL Server
DB2
Access
SQLite
…
🙋♂️ 위 명시된 리스트는 2018년 기준 많이 사용되는 DBMS입니다.
3️⃣ DBMS 또는 데이터베이스의 몇 가지 중요한 특징.
👉 데이터 무결성
데이터베이스 안의 데이터는 어떤 경로를 통해 들어왔든 오류가 있어서는 안 되는데 이를 무결성(Integrity)이라고 합니다.
무결성을 지키기 위해 데이터베이스는 제약 조건(constraint)을 따릅니다.
예를 들어 학생 데이터에서 모든 학생은 학번이 반드시 있어야 하고 학번이 중복되면 안 된다는 제약 조건을 생각해봅시다.
이 제약 조건을 충실히 지킨다면 학번으로도 학번으로도 학생 데이터에서 학생을 정확히 찾을 수 있습니다.
즉, 학번은 무결한 데이터를 보장하는 요소이며, 자동 발급기로 성적 증명서나 재학 증명서를 뗄 떼 학번만 조회해도 정확한 자료를 줄력할 수 있습니다.
👉 데이터의 독립성
데이터베이스의 크기를 변경하거나 데이터 파일의 저장소를 변경하더라도 기존에 작성된 응용 프로그램은 전혀 영향을 받지 않습니다.
즉 데이터베이스와 응용 프로그램은 서로 의존적인 관계가 아니라 독립적인 관계입니다.
예를 들어 데이터베이스가 저장된 디스크가 새것으로 변경되어도 기존에 사용하던 응용 프로그램은 아무런 변경 없이 계속 사용할 수 있습니다.
👉 보안
데이터베이스 안에 데이터는 아무나 접근할 수 있는 것이 아니라 데이터를 소유한 사람이나 데이터에 접근이 허가된 사람만 접근할 수 있습니다.
또한, 같은 데이터에 접근할 때도 사용자의 계정에 따라서 각각 다른 권한을 갖습니다.
최근 들어 고객 정보 유출 사고가 빈번하여 보안(Security)은 데이터베이스에서 더욱 중요한 이슈가 되고 있습니다.
👉 데이터 중복 최소화
데이터베이스에서는 동일한 데이터가 여러 군데 중복 저장되는 것을 방지합니다.
학교를 예로 들면, 학생 정보를 이용하는 교직원들(학생처, 교무처, 과사무실 등)이 각 직원마다 별도의 엑셀 파일로 학생 정보를 관리하면 한 명의 학생 정보가 각각의 엑셀 파일에 중복 저장됩니다.
그러나 데이터베이스에 통합하여 관리하면 하나의 테이블에 데이터를 저장한 후 응용 프로그램마다 이를 공유하여 사용할 수 있어 데이터의 중복을 최소화할 수 있습니다.
👉 응용 프로그램 제작 및 수정 용이
기존 파일 시스템에서는 각각의 파일 포맷에 맞춰 응용 프로그램을 개발했습니다.
그러나 데이터베이스를 이용하면 통일된 방식으로 응용 프로그램을 작성할 수 있고 유지,보수 또한 쉽습니다.
👉 데이터의 안전성 향상
대부분의 DBMS는 데이터의 백업/복원 기능을 제공합니다.
따라서 데이터가 손상되는 문제가 발생하더라도 원래의 상태로 복원 또는 복구할 수 있습니다.
Touch background to close