DBMS
- 클라이언트의 저장공간 문제
- 웹을 실행하면 저장공간이 메모리를 사용하게 되어 용량이 제한적임.
- 가비지 콜렉터가 메모리를 관리하지만, 지속적인 데이터 저장을 위해선 다른 저장공간 필요.
- 해결책: 데이터를 다른 머신(DBMS)으로 전가하여 저장.
- 리소스 관리 및 표준화
- 데이터를 저장하는 대표적인 리소스: 파일 시스템, DBMS
- 각 DBMS(Oracle, MySQL 등)마다 데이터 저장 방식이 다름.
- 개발자 편의성을 위해 ANSI SQL이라는 공통된 표준이 도입됨.
- 클라이언트는 표준 SQL로 요청을 보내고, DBMS는 이를 해석하여 데이터 처리.
- DBMS도 데이터를 메모리에 저장하므로, 전원이 꺼지면 데이터가 날아갈 수 있음.
- 이를 방지하기 위해 영구적인 파일 시스템을 사용.
- 파일 I/O 코드와 DBMS 성능
- 직접 파일 I/O 코드를 작성해야 하는 경우도 있음.
- 하지만, DBMS가 내부적으로 파일 I/O를 담당하므로 개발자가 직접 구현할 필요가 줄어듦.
- DBMS의 성능은 파일 I/O 코드의 성능에 크게 영향을 받음.
DBMS와 데이터 관리 개념
- Database (sys): 시스템 데이터베이스 (DBMS 자체의 관리용 데이터 저장)
- Database (사용자 정의 이름): 사용자가 직접 생성한 데이터베이스
- Database = Schema
- 데이터베이스와 스키마는 같은 개념으로 사용됨
- 도메인(Domain) = 문제 영역
- 예: 쇼핑몰이 문제 영역이라면, 고객, 상품, 구매 등의 데이터를 추출 (추상화)
- 테이블(Table): 추상화된 데이터를 저장하는 실체
- 도메인의 데이터를 어떻게 추출할지, 어떤 관계를 맺을지는 방법론에 따라 설계
- RDBMS (관계형 DBMS) : 엔티티(= 테이블) 간의 관계를 설정하고, 더 상세한 설계를 수행
- NoSQL : SQL 기반이 아니더라도, 다른 방식으로 데이터를 관리하는 시스템
SQL
데이터 타입
- 문자형: CHAR, VARCHAR
- 숫자형: INT, FLOAT, DECIMAL 등
- 날짜형: DATE, DATETIME, TIMESTAMP 등
- 기타 다양한 데이터 타입 존재
SQL 언어 분류
- DDL (Data Definition Language, 데이터 정의 언어)
- CREATE, ALTER, DROP, TRUNCATE 등
- DML (Data Manipulation Language, 데이터 조작 언어)
- INSERT, UPDATE, DELETE, SELECT 등
- DCL (Data Control Language, 데이터 제어 언어)
- GRANT, REVOKE 등
- TCL (Transaction Control Language, 트랜잭션 제어 언어)
- COMMIT, ROLLBACK, SAVEPOINT 등
주요 SQL문법
CREATE DATABASE testDB; -- 데이터베이스 생성
DROP DATABASE testDB; -- 데이터베이스 삭제
SHOW DATABASES; -- 현재 존재하는 데이터베이스 목록 조회
BACKUP DATABASE testDB; -- 데이터 백업 (데이터 내보내기 용도로 사용 가능)
ALTER TABLE table_name ADD column_name datatype; -- 테이블에 컬럼 추가
INSERT INTO table_name (column1, column2) VALUES (value1, value2); -- 데이터 삽입
CREATE INDEX index_name ON table_name (column_name); -- 인덱스 생성
TRUNCATE TABLE table_name; -- 테이블 초기화 (데이터만 삭제, 구조 유지)
제약조건
NULL -- NULL 값을 허용
NOT NULL -- NULL 값 허용 안 함
UNIQUE -- 중복값 허용 안 함
PRIMARY KEY -- 기본 키 설정 (고유 + NOT NULL)
FOREIGN KEY -- 다른 테이블의 키를 참조하는 외래 키
CHECK -- 특정 조건 만족 여부 검사
DEFAULT -- 기본값 설정
트랜잭션(Transaction)
한 번에 처리해야 할 작업의 단위
JDBC
JDBC(Java Database Connectivity): Java에서 DB와 연결하고 SQL을 실행하기 위한 API
주의점: 컴파일은 되지만 실행하려면 JDBC 드라이버가 필요
package test1;
import java.sql.*;
public class Test {
public static void main(String[] args) {
// JDBC 6단계
try {
//1. Driver 등록
Class.forName("com.mysql.cj.jdbc.Driver");
//2. Connection
Connection con = DriverManager.getConnection("jdbc:mysql://localhost/ureca", "ureca", "ureca");
//3. Statement 생성
Statement stmt=con.createStatement();
//4. SQL 전송
ResultSet rs = stmt.executeQuery("select * from member");
//5. 결과 얻기
while(rs.next()) {
String id = rs.getString("id");
String pw = rs.getString("password");
String name = rs.getString("name");
int age = rs.getInt("age");
System.out.println(id + " : " + pw + " : " + name + " : " + age);
}
//6. 자원 닫기
rs.close();
stmt.close();
con.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
- Driver 등록
- Connection 객체 생성 (DB 연결)
- Statement 객체 생성 (SQL 실행 준비)
- SQL 실행 (쿼리 전송)
- 결과 처리
- 자원 해제 (close())
SQL API
ResultSet: executeQuery() → SELECT 전용
int i: executeUpdate() → INSERT, UPDATE, DELETE 등 실행 후 변경된 행 수 반환
SQL 실행 객체
Statement
- 매 요청마다 SQL 실행 계획(Plan)을 새로 생성 → 비효율적
- 웹 환경에서는 요청이 많으므로 성능 저하 발생
PreparedStatement
- SQL을 미리 컴파일하여 같은 실행 계획을 재사용 → 성능 향상
- func(data)가 없어도 최초 실행 시 실행 계획이 만들어짐
CallableStatement
- SQL 함수나 저장 프로시저가 없으면 실행 불가
- 저장 프로시저를 호출할 때 사용
Statement | 기본적인 SQL 실행 객체. 요청마다 새로운 쿼리 실행 계획(Plan) 생성 |
PreparedStatement | 미리 SQL을 컴파일하여 재사용 가능. 같은 쿼리 실행 시 더 효율적 |
CallableStatement | 저장 프로시저(Stored Procedure) 호출 시 사용. 반드시 함수 필요 |
'[LG 유플러스] 유레카 > Today I Learned' 카테고리의 다른 글
[TIL][03.05] secu.properties, MVC, 자원 자동 해제, 의존성 주입, Http Session (0) | 2025.03.06 |
---|---|
[TIL][03.04] SQL, DISTINCT, WHERE, JOIN, MVC, Annotation, fetch, async/await (0) | 2025.03.05 |
[TIL][02.27] Git, conflict, tag, fork, reset, rebase, merge, revert, GitHub (0) | 2025.02.27 |
[TIL][02.26] Git, GitHub, git명령어, branch, Merge, Conflict (0) | 2025.02.27 |
[TIL][02.25] 백트래킹, N-Queens, 위상정렬 (0) | 2025.02.25 |