Post

Database

01. DBMS 와 CRUD

DBMS(Database Management System)은 데이터베이스를 체계적으로 관리하기 위한 시스템입니다.

  • RDBMS (Relational Database Management System): 정형화된 데이터를 관리하는 시스템으로, 데이터를 테이블 형태로 저장하며 SQL을 사용하여 데이터를 조작합니다.
  • NoSQL (Not Only SQL): 비정형 데이터를 관리하는 시스템으로, 테이블이 아닌 다양한 형식으로 데이터를 저장하며, 대규모 분산 데이터를 처리하는 데 적합합니다.

CRUD는 데이터베이스와 관련된 기본적인 작업을 의미하는 약어입니다. CRUD는 다음과 같은 네 가지 기본 작업을 나타냅니다: Create, Read, Update, Delete.

  1. Create (생성):
    • 데이터베이스에 새로운 데이터를 생성하는 작업입니다.
    • 예를 들어, 사용자가 회원가입을 하면 사용자 정보를 데이터베이스에 새로 생성하는 것이 Create 작업에 해당됩니다.
  2. Read (읽기):
    • 데이터베이스에서 데이터를 조회하는 작업입니다.
    • 예를 들어, 사용자가 로그인하면 사용자의 프로필 정보를 데이터베이스에서 읽어와서 화면에 표시하는 것이 Read 작업에 해당됩니다.
  3. Update (갱신):
    • 데이터베이스의 기존 데이터를 수정하거나 업데이트하는 작업입니다.
    • 예를 들어, 사용자가 프로필 수정 페이지에서 이름이나 이메일 주소를 변경하면 이 변경 사항을 데이터베이스에 반영하는 것이 Update 작업에 해당됩니다.
  4. Delete (삭제):
    • 데이터베이스에서 기존 데이터를 삭제하는 작업입니다.
    • 예를 들어, 사용자가 회원 탈퇴를 요청하면 해당 사용자의 데이터를 데이터베이스에서 삭제하는 것이 Delete 작업에 해당됩니다.

CRUD는 대부분의 소프트웨어 애플리케이션에서 가장 기본적이고 핵심적인 데이터 조작 작업이며, 이 작업들이 제대로 구현되어야 데이터의 유효성과 일관성을 유지할 수 있습니다.

02. 관계형 데이터베이스

관계형 데이터베이스(Relational Database)는 데이터를 테이블(table) 형태로 저장하고 관리하는 데이터베이스의 한 유형입니다. 각 테이블은 행(row)과 열(column)로 구성되며, 행은 개별 레코드(record)를, 열은 해당 레코드의 속성(attribute)이나 필드(field)를 나타냅니다.

  1. 구조화된 데이터: 데이터를 정형화된 테이블 형태로 저장하며, 각 테이블은 고유의 스키마(schema)를 가집니다.
  2. 데이터 무결성: 데이터의 일관성과 정확성을 보장하기 위해 무결성 제약 조건(integrity constraints)을 사용합니다. 예를 들어, 기본 키(primary key)와 외래 키(foreign key)를 통해 데이터의 고유성과 관계를 유지합니다.
  3. SQL 사용: 데이터를 조회, 삽입, 갱신, 삭제하기 위해 SQL(Structured Query Language)을 사용합니다. SQL은 관계형 데이터베이스와 상호작용하기 위한 표준 언어입니다.
  4. 데이터 간 관계: 테이블 간의 관계를 정의할 수 있습니다. 이는 조인(join) 연산을 통해 여러 테이블의 데이터를 결합하여 사용할 수 있게 합니다.
  5. 트랜잭션 지원: ACID(Atomicity, Consistency, Isolation, Durability) 특성을 지원하여, 데이터베이스 작업이 안전하고 일관성 있게 처리되도록 합니다.

테이블 정의

  • 사용자 테이블 (Users) | UserID (PK) | UserName | Email | |————-|———-|—————-| | 1 | Alice | alice@example.com | | 2 | Bob | bob@example.com |

  • 주문 테이블 (Orders) | OrderID (PK) | UserID (FK) | Product | Quantity | |————–|————-|————–|———-| | 101 | 1 | Laptop | 1 | | 102 | 2 | Smartphone | 2 |

여기서 Users 테이블의 UserID는 기본 키이고, Orders 테이블의 UserID는 외래 키로 Users 테이블과의 관계를 나타냅니다.

장점

  1. 데이터 일관성 유지: 관계형 모델은 데이터를 구조화하여 일관성을 유지하는 데 뛰어납니다.
  2. 강력한 쿼리 기능: SQL을 통해 복잡한 쿼리를 수행할 수 있으며, 여러 테이블 간의 데이터를 쉽게 조합할 수 있습니다.
  3. 보안 및 권한 관리: 사용자 권한을 설정하고 관리하여 데이터 접근을 제어할 수 있습니다.
  4. 확장성: 스키마와 데이터의 확장성이 뛰어나며, 새로운 테이블과 관계를 쉽게 추가할 수 있습니다.

단점

  1. 확장성 문제: 대규모 분산 데이터베이스 환경에서는 성능이 저하될 수 있습니다.
  2. 복잡한 설계: 스키마 설계가 복잡하고, 관계 설정 및 유지 관리가 어려울 수 있습니다.
  3. 고정된 스키마: 데이터 구조가 고정되어 있어, 유연한 데이터 모델링이 어려울 수 있습니다.

대표적인 RDBMS

  • MySQL
  • PostgreSQL
  • Oracle Database
  • Microsoft SQL Server
  • SQLite

03. 인스턴스와 SQL

데이터베이스 인스턴스는 데이터베이스 관리 시스템(DBMS)에서 독립적으로 실행되는 데이터베이스 환경을 말합니다. 각 인스턴스는 메모리와 디스크 공간을 할당받아 데이터를 저장하고 관리할 수 있으며, 여러 사용자나 애플리케이션은 각자의 인스턴스에 접속하여 데이터를 처리할 수 있습니다. 간단히 말해, 데이터베이스 인스턴스는 독립적인 데이터 저장소를 제공합니다.

인스턴스 생성 (CREATE DATABASE)

1
2
-- 새로운 데이터베이스 인스턴스 생성
CREATE DATABASE mydatabase;

인스턴스 삭제 (DROP DATABASE)

1
2
-- 데이터베이스 인스턴스 삭제
DROP DATABASE mydatabase;

SQL 문

SQL(Structured Query Language)은 관계형 데이터베이스 관리 시스템(RDBMS)에서 데이터를 조작하기 위해 사용하는 언어입니다.

  • DDL (Data Definition Language): 데이터베이스 구조를 정의하거나 수정하는 명령어입니다. 예시로는 CREATE, ALTER, DROP 등이 있습니다.

  • DML (Data Manipulation Language): 데이터를 조회하거나 조작하는 명령어입니다. 예시로는 SELECT, INSERT, UPDATE, DELETE 등이 있습니다.

  • DCL (Data Control Language): 데이터베이스 사용자에게 권한을 부여하거나 박탈하는 명령어입니다. 예시로는 GRANT, REVOKE 등이 있습니다.

테이블 생성 (CREATE TABLE)

1
2
3
4
5
6
7
-- 새로운 주문 테이블 생성
CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    product_name VARCHAR(50),
    quantity INT,
    order_date DATE
);

테이블 삭제 (DROP TABLE)

1
2
-- 주문 테이블 삭제
DROP TABLE orders;

데이터 조회 (SELECT)

1
2
-- 사용자 테이블에서 모든 사용자의 이름과 이메일 조회
SELECT name, email FROM users;

데이터 삽입 (INSERT)

1
2
-- 새로운 사용자 추가
INSERT INTO users (name, email) VALUES ('John Doe', 'john.doe@example.com');

데이터 수정 (UPDATE)

1
2
-- 사용자 이름을 'John Smith'로 수정
UPDATE users SET name = 'John Smith' WHERE id = 1;

데이터 삭제 (DELETE)

1
2
-- ID가 2인 사용자 삭제
DELETE FROM users WHERE id = 2;

Alias

Alias(별칭)는 SQL 문에서 테이블이나 컬럼에 임시 이름을 부여하는 기능입니다. 이는 주로 가독성을 높이거나 쿼리를 단순화하는 데 사용됩니다. Alias는 AS 키워드를 사용하여 지정하며, 생략할 수도 있습니다.

컬럼 Alias

컬럼에 별칭을 지정하면 쿼리 결과에서 해당 별칭으로 컬럼이 표시됩니다.

1
2
SELECT name AS 이름, email AS 이메일
FROM member;

위 쿼리는 name 컬럼을 이름으로, email 컬럼을 이메일로 표시합니다.

테이블 Alias

테이블에 별칭을 지정하면 쿼리 내에서 해당 별칭으로 테이블을 참조할 수 있습니다. 특히, 복잡한 조인(join) 문을 작성할 때 유용합니다.

1
2
3
SELECT m.name, m.email
FROM member AS m
JOIN orders AS o ON m.email = o.member_email;

여기서 member 테이블은 m으로, orders 테이블은 o로 참조됩니다.

애프터리스크 (Asterisk, *)

애프터리스크(*)는 SQL 문에서 모든 컬럼을 선택할 때 사용됩니다. 주로 SELECT 문에서 사용되며, 테이블의 모든 컬럼을 포함한 결과를 반환합니다.

1
SELECT * FROM member;

사용자 생성 (CREATE USER)

1
CREATE USER username IDENTIFIED BY 'password';
  1. 로컬 호스트에서만 접근 가능한 사용자 생성:
    1
    
    CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
    

    이 경우 'username'이라는 사용자는 로컬 호스트(localhost)에서만 접속할 수 있습니다.

  2. 특정 IP 주소에서 접근 가능한 사용자 생성:
    1
    
    CREATE USER 'username'@'192.168.1.100' IDENTIFIED BY 'password';
    

    이 경우 'username'이라는 사용자는 IP 주소가 192.168.1.100인 호스트에서만 접속할 수 있습니다.

  3. 모든 호스트에서 접근 가능한 사용자 생성:
    1
    
    CREATE USER 'username'@'%' IDENTIFIED BY 'password';
    

    이 경우 'username'이라는 사용자는 모든 호스트(%는 모든 호스트를 의미)에서 접속할 수 있습니다.

유저 권한 설정 예시

MySQL에서는 GRANT 문을 사용하여 사용자에게 권한을 부여합니다. 여러 종류의 권한을 특정 데이터베이스나 테이블에 대해 설정할 수 있습니다.

  1. 모든 데이터베이스에 대한 권한 부여:
    1
    
    GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost';
    

    이 경우 'username'이라는 사용자에게 로컬 호스트에서 모든 데이터베이스와 모든 테이블에 대한 모든 권한을 부여합니다.

  2. 특정 데이터베이스에 대한 권한 부여:
    1
    
    GRANT SELECT, INSERT, UPDATE, DELETE ON database_name.* TO 'username'@'localhost';
    

    이 경우 'username'이라는 사용자에게 로컬 호스트에서 database_name 데이터베이스의 모든 테이블에 대해 SELECT, INSERT, UPDATE, DELETE 권한을 부여합니다.

  3. 특정 테이블에 대한 권한 부여:
    1
    
    GRANT SELECT, INSERT ON database_name.table_name TO 'username'@'localhost';
    

    이 경우 'username'이라는 사용자에게 로컬 호스트에서 database_name 데이터베이스의 table_name 테이블에 대해 SELECT와 INSERT 권한을 부여합니다.

  4. 모든 데이터베이스에 대한 권한을 특정 IP 주소의 호스트에 부여:
    1
    
    GRANT ALL PRIVILEGES ON *.* TO 'username'@'192.168.1.100';
    

    이 경우 'username'이라는 사용자에게 IP 주소가 192.168.1.100인 호스트에서 모든 데이터베이스와 모든 테이블에 대한 모든 권한을 부여합니다.

FLUSH PRIVILEGES

FLUSH PRIVILEGES는 사용자와 권한 관리에 관련된 변경 사항을 즉시 반영하는 명령입니다. 보통 다음과 같은 경우에 사용됩니다:

  • 새로운 사용자를 추가하거나 삭제한 후에는 FLUSH PRIVILEGES를 실행하여 MySQL에게 새로운 사용자 관리 권한 변경을 알립니다.
1
FLUSH PRIVILEGES;

04. 쿼리문 심화

데이터베이스에서 데이터를 효율적으로 관리하고 표시하기 위해 다양한 기능과 기법이 사용됩니다. 각 기능에 대한 간략한 설명은 다음과 같습니다:

데이터 표시 포맷

데이터 표시 포맷은 데이터를 특정 형식으로 변환하여 출력하는 방법입니다. 이는 주로 날짜, 시간, 숫자 등의 포맷을 변환하는 데 사용됩니다.

  • 날짜 형식 변환 (MySQL):
    1
    2
    
    SELECT DATE_FORMAT(register_date, '%Y-%m-%d') AS formatted_date
    FROM member;
    
  • 숫자 형식 변환 (PostgreSQL):
    1
    2
    
    SELECT TO_CHAR(price, '999,999.00') AS formatted_price
    FROM products;
    

페이징 처리

페이징은 많은 양의 데이터를 페이지별로 나누어 조회하는 기법입니다. 이는 웹 애플리케이션에서 검색 결과를 페이지별로 보여줄 때 주로 사용됩니다.

  • MySQL:
    1
    2
    
    SELECT * FROM member
    LIMIT 10 OFFSET 20;
    
  • PostgreSQL:
    1
    2
    
    SELECT * FROM member
    LIMIT 10 OFFSET 20;
    

이 예시는 10개의 결과를 20번째 행부터 가져옵니다.

뷰 테이블 (View Table)

뷰는 하나 이상의 테이블에서 데이터를 조회하는 가상 테이블입니다. 뷰를 사용하면 복잡한 쿼리를 단순화하고 재사용할 수 있습니다.

  • 뷰 생성 (MySQL):
    1
    2
    3
    4
    
    CREATE VIEW member_view AS
    SELECT name, email, register_date
    FROM member
    WHERE marketing_yn = 1;
    
  • 뷰 조회:
    1
    
    SELECT * FROM member_view;
    

함수 (Function)

함수는 데이터베이스 내에서 특정 작업을 수행하고 결과를 반환하는 코드 블록입니다. 주로 재사용 가능한 코드나 계산 작업을 정의하는 데 사용됩니다.

  • MySQL 사용자 정의 함수:
    1
    2
    3
    4
    5
    
    CREATE FUNCTION get_discount(price DECIMAL(10, 2))
    RETURNS DECIMAL(10, 2)
    BEGIN
      RETURN price * 0.9;
    END;
    
  • 함수 호출:
    1
    
    SELECT get_discount(100);
    

프로시저 (Procedure)

프로시저는 데이터베이스 내에서 복잡한 작업을 수행하는 코드 블록입니다. 여러 SQL 문을 포함할 수 있으며, 반복적인 작업을 자동화하는 데 사용됩니다.

  • MySQL 저장 프로시저:
    1
    2
    3
    4
    5
    6
    
    CREATE PROCEDURE update_member_status(IN member_email VARCHAR(100))
    BEGIN
      UPDATE member
      SET status = 'active'
      WHERE email = member_email;
    END;
    
  • 프로시저 호출:
    1
    
    CALL update_member_status('johndoe@example.com');
    

이러한 기능들은 데이터베이스의 효율적인 관리와 데이터를 효과적으로 표시하는 데 중요한 역할을 합니다. 각 기능은 특정 요구 사항과 상황에 맞게 적절히 사용될 수 있습니다.

트리거 (Trigger)

트리거는 특정 이벤트가 발생할 때 자동으로 실행되는 데이터베이스 객체입니다. 트리거는 데이터의 일관성과 무결성을 유지하는 데 유용하며, 데이터베이스에서 발생하는 특정 이벤트(INSERT, UPDATE, DELETE)에 대해 자동으로 응답하는 메커니즘을 제공합니다.

트리거의 주요 특징
  1. 자동 실행: 트리거는 특정 테이블에 대해 정의된 이벤트가 발생하면 자동으로 실행됩니다.
  2. 이벤트 기반: 트리거는 주로 데이터 수정 이벤트(INSERT, UPDATE, DELETE)에 반응합니다.
  3. 행 트리거와 문 트리거:
    • 행 트리거 (Row Trigger): 각 행에 대해 실행됩니다.
    • 문 트리거 (Statement Trigger): 각 SQL 문에 대해 한 번 실행됩니다.
  4. BEFORE와 AFTER: 트리거는 이벤트가 발생하기 전(BEFORE)이나 후(AFTER)에 실행될 수 있습니다.
트리거의 사용 예

트리거는 다양한 용도로 사용될 수 있으며, 그 예시는 다음과 같습니다:

  • 데이터 변경 이력 추적
  • 데이터 유효성 검사
  • 연관 테이블의 데이터 동기화
  • 자동 계산 및 업데이트
트리거 예제

다음은 MySQL에서 트리거를 생성하는 예제입니다:

  1. BEFORE INSERT 트리거:
    • 새 회원이 등록되기 전에 register_date를 현재 시간으로 설정하는 트리거.
      1
      2
      3
      4
      
      CREATE TRIGGER before_member_insert
      BEFORE INSERT ON member
      FOR EACH ROW
      SET NEW.register_date = NOW();
      
  2. AFTER UPDATE 트리거:
    • 회원의 정보가 업데이트된 후 변경 이력을 member_audit 테이블에 기록하는 트리거.
      1
      2
      3
      4
      5
      6
      7
      
      CREATE TRIGGER after_member_update
      AFTER UPDATE ON member
      FOR EACH ROW
      BEGIN
      INSERT INTO member_audit (email, change_date, old_name, new_name, old_phone_no, new_phone_no)
      VALUES (OLD.email, NOW(), OLD.name, NEW.name, OLD.phone_no, NEW.phone_no);
      END;
      
트리거 관리

트리거는 데이터베이스 시스템에서 직접 관리되며, 트리거를 생성하거나 삭제할 수 있습니다.

  • 트리거 삭제:
    1
    
    DROP TRIGGER IF EXISTS before_member_insert;
    

트리거는 데이터베이스의 무결성과 일관성을 유지하는 데 중요한 역할을 하며, 올바르게 사용하면 데이터 관리 작업을 자동화하고 오류를 줄일 수 있습니다. 하지만 잘못된 트리거는 예상치 못한 동작을 초래할 수 있으므로 신중하게 설계하고 테스트해야 합니다.

05. ERD

ERD(Entity-Relationship Diagram)는 데이터베이스 설계에서 개체와 개체 간의 관계를 시각적으로 나타내는 도구입니다. ERD는 데이터 모델링의 초기 단계에서 사용되며, 데이터베이스의 구조와 관계를 이해하고 설계하기 위해 중요한 도구입니다.

  1. 개체(Entity):
    • 사각형으로 표현됩니다.
    • 데이터베이스에서 저장할 개별적인 항목이나 객체를 나타냅니다.
    • 예를 들어, “고객”, “주문”, “제품” 등이 개체가 될 수 있습니다.
  2. 속성(Attribute):
    • 타원으로 표현됩니다.
    • 개체가 가지는 특성이나 속성을 나타냅니다.
    • 예를 들어, “고객” 개체의 속성으로는 “고객 ID”, “이름”, “주소” 등이 있을 수 있습니다.
  3. 관계(Relationship):
    • 다이아몬드로 표현됩니다.
    • 개체 간의 관계를 나타내며, 어떻게 서로 연결되어 있는지를 표현합니다.

    • 일대일(One-to-One): 하나의 개체 인스턴스가 다른 개체 인스턴스와 하나의 관계를 가집니다. 이 관계는 보통 두 개체 사이에서 공유 속성이 있을 때 사용됩니다.
    • 일대다(One-to-Many 또는 1:N): 한 개체 인스턴스가 다른 개체 인스턴스 여러 개와 관계를 가질 수 있습니다. 예시로 하나의 고객이 여러 개의 주문을 가질 수 있습니다.
    • 다대일(Many-to-One 또는 N:1): 여러 개체 인스턴스가 하나의 개체 인스턴스와 관계를 가질 수 있습니다. 예시로 여러 주문이 하나의 고객에 의해 생성될 수 있습니다.
    • 다대다(Many-to-Many 또는 M:N): 여러 개체 인스턴스가 서로 다른 여러 개체 인스턴스와 관계를 가질 수 있습니다. 이 경우 보통 연결 테이블(중간 테이블)이 사용되어 관계를 해결합니다. 예시로, 여러 학생이 여러 과목을 수강할 수 있습니다.

    • 예를 들어, “주문”과 “고객” 사이에는 일대다 관계가 있을 수 있습니다 (하나의 고객이 여러 개의 주문을 가질 수 있음).
  4. 기본 키(Primary Key):
    • 개체의 주요 식별자를 나타냅니다.
    • 주로 밑줄이 그어진 속성으로 표시됩니다.
    • 데이터베이스 내에서 개체의 각 인스턴스를 고유하게 식별할 수 있게 합니다.
  5. 외래 키(Foreign Key):
    • 다른 개체와의 관계를 통해 연결된 키를 나타냅니다.
    • 다른 개체의 기본 키를 참조하여 그 관계를 정의합니다.

데이터 모델링 툴

  1. Erwin: Erwin은 가장 오래된 데이터 모델링 도구 중 하나로, 강력한 데이터베이스 설계 기능을 제공합니다. 대규모 기업에서 널리 사용되며, 데이터베이스 구조를 ERD로 시각화하고 관리할 수 있습니다.

  2. Oracle SQL Developer Data Modeler: 오라클의 SQL 개발자 도구 패밀리 중 하나로, 데이터 모델링 기능을 포함하고 있습니다. Oracle 데이터베이스와의 통합이 잘 되어 있어 Oracle 환경에서 데이터베이스 설계를 용이하게 할 수 있습니다.

  3. Microsoft Visio: Microsoft Visio는 다목적 비즈니스 그래픽 소프트웨어이지만, ERD를 포함한 데이터 모델링을 지원합니다. 특히 MS SQL Server와의 통합을 강화한 기능을 제공합니다.

  4. MySQL Workbench: MySQL 데이터베이스를 위한 공식 데이터 모델링 도구로, ERD 설계 외에도 SQL 쿼리 작성 및 데이터베이스 관리 기능을 제공합니다.

  5. PowerDesigner: SAP의 데이터 모델링 도구로, 다양한 데이터베이스 플랫폼을 지원하며, 비즈니스 프로세스 모델링과 통합된 기능을 제공합니다.

06. ORM & JPA

ORM (Object-Relational Mapping)

ORM은 객체 지향 프로그래밍 언어의 객체를 관계형 데이터베이스의 테이블에 매핑하는 기술입니다. 이를 통해 개발자는 SQL을 직접 작성하지 않고도 데이터베이스 작업을 객체 지향적으로 수행할 수 있습니다. ORM은 쿼리문을 직접 작성해야하는 SQL Mapper와 다르게 데이터베이스와의 상호작용을 추상화하여, 객체 모델을 사용해 데이터베이스 작업을 할 수 있게 합니다.

JPA (Java Persistence API)

JPA는 자바 표준 ORM API로, 자바 객체와 관계형 데이터베이스 간의 매핑을 정의하고 관리하는 API입니다. JPA는 자바 애플리케이션에서 데이터베이스와의 상호작용을 추상화하여, 코드의 가독성과 유지보수성을 높입니다. JPA는 다음과 같은 주요 기능을 제공합니다:

  • 엔티티 매핑: 자바 클래스와 데이터베이스 테이블 간의 매핑을 정의합니다.
  • 엔티티 관리: 엔티티의 생명주기를 관리합니다 (생성, 읽기, 업데이트, 삭제).
  • 쿼리: 객체 지향 쿼리 언어(JPQL)를 사용하여 데이터베이스 쿼리를 수행합니다.
  • 트랜잭션 관리: 데이터베이스 트랜잭션을 관리합니다.

  • JPA는 표준, ORM은 구현체: JPA는 자바에서 ORM을 사용하기 위한 표준 API를 정의한 것입니다. ORM은 JPA가 정의한 표준을 구현하는 기술입니다.
  • JPA 구현체로서의 ORM 프레임워크: Hibernate, EclipseLink, OpenJPA와 같은 ORM 프레임워크는 JPA 표준을 구현합니다. 이들 프레임워크는 JPA 인터페이스를 구현하여 JPA의 기능을 제공합니다.

JPA의 @Entity 어노테이션

JPA에서 @Entity 어노테이션은 자바 클래스가 데이터베이스 테이블과 매핑되는 엔티티임을 나타냅니다. 이 어노테이션을 클래스에 적용함으로써, JPA는 해당 클래스를 데이터베이스의 테이블로 인식하고, 클래스의 인스턴스는 테이블의 행(row)으로 매핑됩니다.

  1. 엔티티 정의:
    • @Entity 어노테이션은 클래스가 JPA 엔티티임을 나타냅니다. JPA는 이 클래스를 데이터베이스 테이블과 매핑합니다.
    • 예를 들어, @Entity가 붙은 Memo 클래스는 memo라는 테이블과 매핑됩니다.
  2. 기본 생성자 요구:
    • JPA는 엔티티를 인스턴스화할 때 기본 생성자를 필요로 합니다. 따라서, 엔티티 클래스는 기본 생성자를 반드시 정의해야 합니다.
    • 기본 생성자는 접근 제한자가 public이어야 하며, 이 생성자는 JPA에 의해 자동으로 호출됩니다.
  3. 테이블 매핑:
    • 엔티티 클래스는 기본적으로 클래스 이름을 데이터베이스 테이블 이름으로 매핑합니다. @Table 어노테이션을 사용하여 테이블 이름을 명시적으로 지정할 수 있습니다.

요약

  • ORM: 객체 지향 프로그래밍 언어의 객체를 관계형 데이터베이스의 테이블에 매핑하는 기술.
  • JPA: 자바 표준 ORM API로, 자바 객체와 관계형 데이터베이스 간의 매핑을 정의하고 관리하는 API.
  • 연관성: JPA는 자바에서 ORM을 사용하기 위한 표준을 정의하며, Hibernate와 같은 ORM 프레임워크는 JPA 표준을 구현합니다.

명명 규칙

참여하는 플젝 컨벤션 설정에 따라 달라질 수 있지만 보통 아래와 같은 규칙을 따릅니다.

  1. 카멜 케이스 (CamelCase):
    • 주로 Java, JavaScript, TypeScript 등 객체 지향 언어에서 사용됩니다.
    • calculateAverageGrade, getFirstName와 같이 사용됩니다.
  2. 파스칼 케이스 (PascalCase):
    • 클래스명을 작성할 때 주로 사용됩니다.
    • C#, Pascal, TypeScript 등에서 주로 사용됩니다.
    • PersonDetails, CalculateAverageGrade와 같이 사용됩니다.
  3. 스네이크 케이스 (snake_case):
    • c, Python, Ruby, PHP 등에서 주로 사용됩니다.
    • calculate_average_grade, number_of_students와 같이 사용됩니다.
    • SNAKE_CASE와 같이 대문자로 구성하면 주로 DB에서 사용됩니다.
  4. 케밥 케이스 (kebab-case 또는 hyphen-case):
    • HTML, CSS, URL 경로 등에서 주로 사용됩니다.
    • JavaScript에서도 변수명으로 사용될 때가 있습니다.
    • HTML에서 id="main-content", CSS에서 .header-container, JavaScript에서 get-first-name와 같이 사용됩니다.
This post is licensed under CC BY 4.0 by the author.