[Spring]Database와 SQL

김세림·2024년 5월 20일

Spring

목록 보기
3/9
post-thumbnail

Database와 SQL


왜 Database와 SQL인데 Spring 카테고리로 들어와있냐하면은! JDBC도 함께 다룰것이기 때문이고, 해당 부분을 공부하는 이유도 Spring에서 메모장 프로젝트를 시작하기에 앞서 우선적으로 정리한 다음에 시작하려고하기 때문이다!

Database

개념

DB는 한마디로 데이터의 집합이라고 할 수 있다.

용어정리

  • DBMS
    • Database Management System의 약자로 Database를 관리하고 운영하는 소프트웨어를 의미한다.
  • RDBMS
    • Relational DBMS의 약자로 관계형 데이터베이스라고 불린다.
    • 테이블이라는 최소단위로 구성되며, 이 테이블은 열(column)과 행(row)로 이루어져있다.
    • 테이블간 FK(외래키)를 통해 다른 데이터를 조합해서 함께 볼 수 있다는 장점이 있다.
      -> 우리는 이 많은 RDBMS중 MySQL을 사용할것이다!

SQL

개념

Structured Query Language의 약자로 RDBMS에서 사용되는 언어이다.

DDL

Data Definition Language 의 약자로 테이블이나 관계의 구조를 생성하는데 사용한다.

  • CREATE : 새로운 데이터베이스 및 테이블 생성
  • ALTER : 데이터베이스와 테이블의 내용을 수정
  • DROP : 데이터베이스와 테이블을 삭제(데이터 및 테이블 전체 삭제)
  • TRUNCATE : 데이터베이스와 테이블을 삭제할 수 있다. 최초 테이블이 만들어졌던 상태 즉, 컬럼값만 남긴다.

DCL

Data Control Language 의 약자로 데이터의 사용 권한을 관리하는데 사용한다.
DCL은 많이 사용하지않아서 예시도 같이 작성해보려고한다.

  • GRANT : 사용자 또는 ROLE에 대해 권한을 부여할 수 있다.
GRANT [객체권한명] (컬럼)
ON [객체명]
TO { 유저명 | 롤명 | PUBLC} [WITH GRANT OPTION];

//ex
GRANT SELECT ,INSERT 
ON mp
TO scott WITH GRANT OPTION;
  • REVOKE : 사용자 또는 ROLE에 부여한 권한을 회수할 수 있다.
REVOKE { 권한명 [, 권한명...] ALL}
ON 객체명
FROM {유저명 [, 유저명...] | 롤명(ROLE) | PUBLIC} 
[CASCADE CONSTRAINTS];

//ex
REVOKE SELECT , INSERT
ON emp
FROM scott
[CASCADE CONSTRAINTS];

DML

Data Manipulation Language 의 약자로 테이블에 데이터를 검색, 삽입, 수정, 삭제하는데 사용한다.

  • INSERT : 테이블에 새로운 row 추가
  • SELECT : 테이블의 row를 선택
  • UPDATE : 테이블의 row의 내용을 수정
  • DELETE : 테이블의 row를 삭제

JDBC란 무엇일까?


Java Database Connectivity의 약자로 DB에 접근할 수 있도록 Java에서 제공하는 API이다.
JDBC에 연결해야하는 DB의 JDBC 드라이버를 제공하면 DB 연결 로직을 변경할 필요없이 DB 변경이 가능하다.
(DB 회사들은 자신들의 DB에 맞도록 JDBC 인터페이스를 구현한 후 라이브러리로 제공하는데 이를 JDBC 드라이버라 부른다.)

따라서, MySQL 드라이버를 사용해 DB에 연결을 하다 PostgreSQL 서버로 변경이 필요할 때 드라이버만 교체하면 손쉽게 DB 변경이 가능합니다.

JdbcTemplate 사용방법

spring 에서 사용하기 위해서는 다음 작업이 필요하다.
1. application.properties에 DB에 접근하기 위한 정보를 작성
(url, username, password, driver-class-name)
2. build.gradle에 JDBC 라이브러리와 MySQL을 등록

// MySQL
implementation 'mysql:mysql-connector-java:8.0.28'
implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'
  1. DB연결이 필요한 곳에서 JdbcTemplate을 주입받아와 사용
private final JdbcTemplate jdbctemplate;

public MemoRepository(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
}

해당 부분은 다음 포스트인 메모 프로젝트에서 조금 더 살펴보도록 하겠다!

0개의 댓글