TIL 2023/11/03 DataBase SQL

YEONGDO·2023년 11월 3일

14. Update, Delete 구현

1) Update 구현

@PutMapping("/memos/{id}")
public Long updateMemo(@PathVariable Long id, @RequestBody MemoRequestDto requestDto) {
    // 해당 메모가 DB에 존재하는지 확인
    if(memoList.containsKey(id)) {
				// 해당 메모 가져오기
        Memo memo = memoList.get(id);

        // memo 수정
        memo.update(requestDto);
        return memo.getId();
    } else {
        throw new IllegalArgumentException("선택한 메모는 존재하지 않습니다.");
    }
}

Memo 클래스에 수정하는 기능의 메서드 update 생성

public void update(MemoRequestDto requestDto) {
    this.username = requestDto.getUsername();
    this.contents = requestDto.getContents();
}

2) Delete 구현

@DeleteMapping("/memos/{id}")
public Long deleteMemo(@PathVariable Long id) {
    // 해당 메모가 DB에 존재하는지 확인
    if(memoList.containsKey(id)) {
        // 해당 메모 삭제하기
        memoList.remove(id);
        return id;
    } else {
        throw new IllegalArgumentException("선택한 메모는 존재하지 않습니다.");
    }
}

15. DataBase 와 SQL

Database

  • Database를 한 마디로 정의하면 ‘데이터의 집합’ 이라고 할 수 있다.
    DB는 우리가 매일 사용하는 카톡 메시지, 인스타그램의 사진등의 정보를 저장하고 관리해 준다.

1) DBMS

  • DBMS 는 ‘Database Management System’ 의 약자로 Database를 관리하고 운영하는 소프트웨어를 의미한다.

2) RDBMS

  • RDBMS는 ‘Relational DBMS’의 약자로 관계형 데이터베이스라고 불린다.
  • RDBMS는 테이블(table)이라는 최소 단위로 구성되며, 이 테이블은 열(column)과 행(row)으로 이루어져 있다.
  • 테이블간 FK(Foreign Key)를 통해 다른 데이터를 조합해서 함께 볼수 있다라는 장점이 있다.

RDBMS는 Oracle, MySQL, PostgreSQL 등이 있다.

SQL

  • SQL은 ‘Structured Query Language’ 의 약자로 RDBMS에서 사용되는 언어, 수 많은 정보를 Database에서 조작하고 관리하기 위해서는 SQL 언어를 사용해야한다.

1) DDL

  • ‘Data Definition Language’ 의 약자로 테이블이나 관계의 구조를 생성하는데 사용 (CREATE, ALTER, DROP, TRUNCATE)

CREATE : 새로운 데이터베이스 및 테이블을 생성.

CREATE DATABASE 데이터베이스이름;
CREATE TABLE 테이블이름
(
		필드이름1 필드타입1,
    필드이름2 필드타입2,
    ...
);

ALTER : 데이터베이스와 테이블의 내용을 수정.

ALTER TABLE 테이블이름 ADD 필드이름 필드타입;
ALTER TABLE 테이블이름 DROP 필드이름;
ALTER TABLE 테이블이름 MODIFY COLUMN 필드이름 필드타입;

DROP : 데이터베이스와 테이블을 삭제할 수 있다. 데이터 및 테이블 전체를 삭제

DROP DATABASE 데이터베이스이름;
DROP TABLE 테이블이름;

TRUNCATE : 데이터베이스와 테이블을 삭제할 수 있다. 최초 테이블이 만들어졌던 상태 즉, 컬럼값만 남김

TRUNCATE DATABASE 데이터베이스이름;
TRUNCATE TABLE 테이블이름;

2) DCL

  • ‘Data Control Language’ 의 약자로 데이터의 사용 권한을 관리하는데 사용 (GRANT, REVOKE)

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];

3) DML

  • ‘Data Manipulation Language’ 의 약자로 테이블에 데이터를 검색, 삽입, 수정, 삭제하는데 사용
INSERT : 테이블에 새로운 row를 추가할 수 있다.
INSERT INTO 테이블이름(필드이름1, 필드이름2, 필드이름3, ...) VALUES(데이터값1, 데이터값2, 데이터값3, ...);
INSERT INTO 테이블이름 VALUES(데이터값1, 데이터값2, 데이터값3, ...);

SELECT : 테이블의 row를 선택

SELECT 필드이름 FROM 테이블이름 [WHERE 조건];

UPDATE : 테이블의 row의 내용을 수정

UPDATE 테이블이름 SET 필드이름1=데이터값1, 필드이름2=데이터값2, ... WHERE 필드이름=데이터값;

DELETE : 테이블의 row를 삭제

DELETE FROM 테이블이름 WHERE 필드이름=데이터값;

16. JDBC

  • 애플리케이션 서버에서 DB에 접근 하기 위해서는 여러가지 작업이 필요하다.
    1. 우선 DB에 연결하기 위해 커넥션을 연결해야한다.
    2. SQL을 작성한 후 커넥션을 통해 SQL을 요청한다.
    3. 요청한 SQL에 대한 결과를 응답 받는다.

  • 이러한 문제를 해결하기위해 JDBC 표준 인터페이스가 등장
  • JDBC는 Java Database Connectivity로 DB에 접근할 수 있도록 Java에서 제공하는 API
  • JDBC에 연결해야하는 DB의 JDBC 드라이버를 제공하면 DB 연결 로직을 변경할 필요없이 DB 변경이 가능
    • DB 회사들은 자신들의 DB에 맞도록 JDBC 인터페이스를 구현한 후 라이브러리로 제공하는데 이를 JDBC 드라이버라고 한다.
  • 따라서, MySQL 드라이버를 사용해 DB에 연결을 하다 PostgreSQL 서버로 변경이 필요할 때 드라이버만 교체하면 손쉽게 DB 변경이 가능

1) JdbcTemplate

  • JDBC의 등장으로 손쉽게 DB교체가 가능해졌지만 아직도 DB에 연결하기 위해 여러가지 작업 로직들을 직접 작성해야한다는 불편함이 남았다.
  • 이러한 불편함을 해결하기 위해 커넥션 연결, statement 준비 및 실행, 커넥션 종료 등의 반복적이고 중복되는 작업들을 대신 처리해주는 JdbcTemplate이 등장



마치며..

내일이면 주말이지만 주말같지가 않다. 개인 과제도 월요일날 제출이고 아직 2주차 강의들을 더 들어야한다 ㅜㅜ 2주차엔 Entity와 영속성, JPA 등이 나를 기다리고있을텐데 피할 수 없으면 즐기자.. 에휴.. 암튼 일주일간 그래도 열심히 공부해서 뿌듯하다!!

profile
개발 블로그

0개의 댓글