MYSQL 기초

심영민·2025년 3월 3일
0

유레카

목록 보기
18/33

SQL(Structured Query Language)은 관계형 데이터베이스 관리 시스템(RDBMS)에서 데이터를 정의, 조작, 제어하기 위한 표준 언어이다.

MySQL은 널리 사용되는 오픈 소스 RDBMS로, SQL을 기반으로 데이터를 효율적으로 관리한다. 특히, MySQL은 다양한 운영 체제에서 사용할 수 있고, 웹 애플리케이션 개발에 최적화되어 있어 많은 개발자들이 선호하는 데이터베이스 시스템이다.

프로젝트에서 MySQL을 사용하면 데이터의 안정성과 일관성을 확보하고, 대용량 데이터도 빠르게 처리할 수 있다. 스프링 부트와 같은 프레임워크와 연동하여 개발 효율성을 높일 수도 있다.

예를 들어, 스프링 부트에서는 JPA를 통해 객체와 데이터베이스 테이블을 매핑하여 개발자가 SQL 쿼리 작성에 대한 부담을 줄이고 비즈니스 로직 구현에 집중할 수 있도록 도와준다.
또한, MySQL은 트랜잭션 기능을 제공하여 데이터의 무결성을 보장하고, 백업 및 복구 기능을 통해 데이터 손실에 대비할 수 있다.

위 그림처럼 MYSQL에서 File내부에서 필요한 명령어를 입력할 수 있고, 왼쪽의 스키마로 전체 구조를 파악할 수 있다.

스키마 구성 요소

기본적으로 스키마 인터페이스는 데이터베이스 구조/객체 정의 공간으로 여러 스키마 나열한다.

  • sys:
    • 시스템 스키마로 기본으로 탑재되어 있음
    • DB 시스템 내부 객체 포함
    • 시스템 운영 관련 정보
  • ureca:
    • 사용자 정의 스키마 (내가 정의함)
    • 사용자/앱 생성 객체 포함
  • Tables:
    • 데이터 테이블 목록
    • 행/열 구조 데이터 저장
  • Views:
    • 가상 테이블 목록
    • 테이블 기반 파생 데이터
  • Stored Procedures:
    • 저장 프로시저 목록
    • SQL 코드 집합 (자동화, 로직 구현)
  • Functions:
    • 함수 목록
    • 특정 작업 수행 후 결과 반환

활용:

  • DB 스키마/객체 시각적 확인
  • 테이블, 뷰, 프로시저, 함수 탐색/관리
  • 데이터베이스 구조 파악 및 작업 수행

주요 SQL 명령어

다음은 자주 쓰이는 SQL명령어들이다.

데이터 정의어 (DDL)

  • CREATE TABLE: 테이블 생성
  • ALTER TABLE: 테이블 구조 변경 (열 추가, 수정, 삭제)
  • DROP TABLE: 테이블 삭제
  • CREATE DATABASE: 데이터베이스 생성
  • DROP DATABASE: 데이터베이스 삭제

데이터 조작어 (DML)

  • INSERT INTO: 테이블에 데이터 삽입
  • UPDATE: 테이블 데이터 수정
  • DELETE FROM: 테이블 데이터 삭제
  • SELECT: 테이블 데이터 조회

데이터 제어어 (DCL)

  • GRANT: 사용자 권한 부여
  • REVOKE: 사용자 권한 회수

트랜잭션 제어어 (TCL)

  • START TRANSACTION: 트랜잭션 시작
  • COMMIT: 트랜잭션 확정
  • ROLLBACK: 트랜잭션 취소

SpringBoot와 연동

폴더 구조


위 그림은 스프링부트에서 생성한 자바 프로젝트이고 외부 라이브러리로 mysql을 연동한 구조이다.

구조는 다음과 같다.

  • JRE System Library [JavaSE-21]:
    • Java 21 런타임 환경 라이브러리
    • 프로젝트 실행에 필요한 기본 라이브러리
  • src:
    • 소스 코드 폴더
    • test1:
      • 직접 작성한 Java 코드 패키지
    • MyWorkbench.java:
      • 직접 작성한 핵심 Java 소스 코드 파일
  • Referenced Libraries:
    • 외부 라이브러리 폴더
    • mysql-connector-j-9.2.0.jar:
      • MySQL Connector/J 라이브러리 (9.2.0 버전)
      • Java-MySQL 데이터베이스 연결함

MySQL 연동 GUI 프로그램 (MyWorkbench.java)

package test1;

import java.awt.*;
import java.awt.event.*;
import java.sql.*;

public class MyWorkbench {
    static Connection con; // DB Connection 객체

    public static void main(String[] args) throws Exception {
        Frame f = new Frame();
        TextArea ta = new TextArea();
        Panel p = new Panel();
        TextField tf = new TextField(35); // sql 입력 텍스트필드
        Button btnS = new Button("전체 회원정보 조회");

        f.setLayout(new BorderLayout());
        ta.setEditable(false);  // 텍스트 영역 수정 불가 설정
        f.add(ta, BorderLayout.CENTER);
        f.add(p, BorderLayout.SOUTH);
        p.setLayout(new FlowLayout());
        p.add(tf);
        p.add(btnS);

        dbSet(); // DB 연결 설정

        // Enter 누르면 insert 되도록
        tf.addActionListener(e -> {
            String input = tf.getText();
            String[] parts = input.trim().replaceAll("\\s+", " ").split(" ");

            if (parts.length == 2) {
                try {
                    String sql = "INSERT INTO member(name, age) VALUES(?, ?)";
                    PreparedStatement stmt = con.prepareStatement(sql);
                    stmt.setString(1, parts[0]);
                    stmt.setInt(2, Integer.parseInt(parts[1]));

                    int rowsAffected = stmt.executeUpdate();
                    ta.append(rowsAffected + " 회원 정보가 추가되었습니다.\n\n");
                    stmt.close();
                } catch (SQLException ex) {
                    ex.printStackTrace();
                    ta.setText("입력 오류: " + ex.getMessage());
                } catch (NumberFormatException ex){
                     ta.setText("나이는 숫자로 입력해야합니다.\n");
                }
            } else {
                ta.append("잘못 입력함\n");
            }
        });

        // 전체 회원 조회 버튼 클릭 시 실행
        btnS.addActionListener(e -> {
            try {
                String sql = "SELECT name, age FROM member";
                Statement stmt = con.createStatement();
                ResultSet rs = stmt.executeQuery(sql);

                ta.setText("회원 목록:\n");
                while (rs.next()) {
                    String name = rs.getString("name");
                    int age = rs.getInt("age");
                    ta.append("이름: " + name + ", 나이: " + age + "\n");
                }
                rs.close();
                stmt.close();
            } catch (SQLException ex) {
                ex.printStackTrace();
                ta.setText("SQL 실행 오류: " + ex.getMessage());
            }
        });

        // 창 닫기 = 프로그램 종료
        f.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                try {
                    if (con != null && !con.isClosed()) {
                        con.close();  // DB 연결 종료
                    }
                } catch (SQLException ex) {
                    ex.printStackTrace();
                }
                System.exit(0); // 프로그램 종료
            }
        });

        f.setSize(500, 400);
        f.setVisible(true);
    }

    // DB 연결 설정
    private static void dbSet() throws Exception {
        // 1. JDBC Driver 등록
        Class.forName("com.mysql.cj.jdbc.Driver");

        // 2. Connection (DB연결)
        con = DriverManager.getConnection("jdbc:mysql://localhost/ureca", "ureca", "ureca");
    }
}

주요 기능:

  • GUI 기반 MySQL 데이터베이스 관리
    • AWT 사용 (TextField, TextArea, Button)
    • SQL 쿼리 입력/결과 출력
  • MySQL 데이터베이스 연동
    • java.sql 패키지 사용
    • DriverManager.getConnection(): DB 연결 설정
  • 회원 정보 관리 (member 테이블)
    • 회원 정보 추가 (INSERT INTO)
    • 전체 회원 정보 조회 (SELECT)
  • PreparedStatement 사용
    • SQL 삽입 공격 방지
    • 코드 가독성 향상
  • 예외 처리
    • SQLException, NumberFormatException 처리
    • 오류 메시지 출력
  • 전체 회원 조회
    • 버튼 클릭 이벤트
  • 윈도우 종료 시 DB 연결 종료

코드 구성:

  • dbSet() 메소드:
    • MySQL 드라이버 로드 (Class.forName())
    • DB 연결 설정
  • main() 메소드:
    • GUI 컴포넌트 생성 및 이벤트 리스너 등록
    • TextField: 회원 정보 추가
    • Button: 전체 회원 정보 조회
    • WindowListener: DB 연결 종료
profile
코딩너무어려운대 어떡할과 재학중

0개의 댓글