슈퍼코딩/주특기(JAVA)

2024.05.24(금) 슈퍼코딩 신입연수원 8주차 Day 5 후기 - 데이터베이스 모델링, JDBC

곰돌이볼 2024. 5. 24. 08:05
  • 강의
    • 78강(MySQL 제약조건 익히기) ~ 81강(DB wrap-up)

데이터베이스 모델링


  • 현실 세계의 데이터를 추상화하여 DB 구조를 설계하는 전체 과정
  • 단계 : 요구사항 분석 → 개념적 데이터 모델링 → 논리적 데이터 모델링 → 물리적 데이터 모델링

요구사항 분석

  • 유저 시나리오 구상
    • 엔티티 추출
  • 요구사항 도출

 

개념적 데이터 모델링

  • 개념적 데이터 모델 : 객체 간의 상호작용을 판단하는 과정
  • 엔티티 간의 관계 설계
  • ERD 그리기 : 선택성과 기수성에 초점 두기
    • ERD : Entity Relationship Diagram

 

논리적 데이터 모델링

  • 비즈니스 정보의 논리적 구조와 규칙을 명확하게 표현하는 과정
  • 정규화 진행
  • 테이블화 및 테이블간의 관계 표현

 

물리적 데이터 모델링

  • 정의된 테이블을 물리적으로 구현하는 과정
  • 하드웨어 과정
    • RDB 선택
    • 스토리지 구성
    • DB 클러스터링
  • DB 설계 및 권한
    • DB 권한 부여
    • 성능 향상을 위한 튜닝

JDBC


// gradle JDBC 설정
dependencies {
    testImplementation platform('org.junit:junit-bom:5.9.1')
    testImplementation 'org.junit.jupiter:junit-jupiter'
    implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.5'

    // jdbc
    implementation 'mysql:mysql-connector-java:8.0.27'
}

 

package practice.day20240524;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class JdbcTest {
    /*
    < 실행 >
    1. 1000원 이상 산 group singer를 구하는 SELECT 문을 JDBC로 실행해보자.
    2. Group_singe에 새로운 singer ”르세라핌”을 넣어 INSERT 문을 JDBC로 실행해보자.
     */

    // Connection 얻기 위한 접근 정보
    private final static String DB_URL = "jdbc:mysql://localhost:3306/chapter_80";
    // jdbc:mysql: : jdbc 프로토콜, mysql 기술
    // localhost:3306 : 서버 URL
    // chapter_80 : MySQL DB
    private final static String DB_USER = "root";
    private final static String DB_PASSWORD = System.getenv("DB_PW");

    public static void main(String[] args) {
        try (Connection connection = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD); // Connection 얻기
             Statement statement = connection.createStatement(); // Statement 얻기
        ) {
            // Statement 생성
            // 1. 1000원 이상 산 group singer를 구하는 SELECT 문을 JDBC로 실행해보자.
            String stringSQL1 = "SELECT * " +
                                "FROM group_singer G" +
                                "   JOIN buy_history B" +
                                "   ON G.mem_id = B.mem_id " +
                                "WHERE B.price >= 1000;";
            ResultSet resultSet1 = statement.executeQuery(stringSQL1);

            // ResultSet 조회
            while (resultSet1.next()) {
                String memId = resultSet1.getString("mem_id");
                String memName = resultSet1.getString("mem_name");
                String price = resultSet1.getString("price");
                System.out.println("memId : " + memId + " memName : " + memName + " price : " + price);
            }

            // 2. Group_singe에 새로운 singer ”르세라핌”을 넣어 INSERT 문을 JDBC로 실행해보자.
            String stringSQL2 = "INSERT INTO group_singer (mem_id, mem_name, mem_number, addr, phone, height, debut_date) " +
                                "VALUES ('M2', '르세라핌2', 2, '서울', '01012345678', 170, '2019-01-01')";
            statement.executeUpdate(stringSQL2);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}