[java, #5] java와 RDBMS

0. 목적

이번 게시물에서는 Spring과 RDBMS 간 통신을 설정하는 방법을 알아본다.

서비스를 제공하기 위해서는 데이터는 필수적으로 필요하며, 그 데이터는 데이터베이스에 저장되고, 호출된다.

자바와 RDBMS를 설정하기 위해서는 4단계를 거쳐야 한다.

① RDBMS 제작
② java와 RDBMS를 연결(콘솔 창 띄우기)
③ java 언어를 사용하여 RDBMS에 명령 전달하기

가장 먼저 데이터베이스를 제작해야 한다. 데이터베이스가 존재해야만 데이터를 저장하고 꺼내올 수 있기 때문이다.
두 번째 단계에서, JPA를 사용하여 java와 RDBMS를 연결한다. 이터베이스를 관리하기 위해 콘솔 창을 띄우고 SQL을 사용하여 실제 데이터를 생성, 입력, 조회해본다. 데이터베이스가 직접 입력되는지 확인하고, 어떤 모습인지 직접 확인해본다.
세 번째 단계에서, java 언어를 사용하여 RDBMS에 명령을 내리는 방법을 알아본다. 그 과정에서 상속이라는 개념을 알아보고 어떤 역할을 하는지, 어떻게 활용할 수 있는지 알아본다.

1. 큰그림

빨간 박스 안에 있는 Repo와 RDBMS 부분을 학습한다. 개념 뿐만 아니라, 구축 방법과 데이터를 보내는 코드 예시를 직접 입력하면서 데이터가 어떻게 오가는지 알아본다.

2. RDBMS

2.1 정의

데이터를 저장하고 관리하는 시스템으로서 아래 2가지로 구성된다.

  • 데이터를 저장하는 DB
  • 데이터 추상화 등 기능을 제공하는 System
  • RDBMS은 Relational Data Base Management System의 약자이다. 한국어로 굳이 해석하면 관계형 데이터베이스 관리 시스템이다.
  • RDBMS의 의미를 해석해보면, '관계형'이라는 단어는 통신을 통해 데이터를 송수신 할 수 있다는 의미로 보인다. '시스템'이라는 단어 또한 데이터가 단순히 저장되는 것이 아니라 본 장치를 이용하여 데이터 관리가 가능하다는 의미를 뒷받침해준다.

2.2 목적

데이터 저장 및 보관

  • 본 장치의 가장 중요한 목적은 Spring으로 부터 전달된 데이터를 데이터베이스에 저장하고 관리하는 것이다.

2.3 구성 요소

① 저장소: DB
② 사용 언어: SQL
③ 관리 기능

  • RDMBS의 DB는 데이터를 저장하는 보관소 역할을 한다. 저장소를 엑셀(EXCEL)로 생각해도 된다. 행과 열로 구성된 저장소에 데이터가 채워지기 때문이다.
  • 데이터베이스를 사용하기 위해 필요한 언어는 SQL이다. SQL을 활용해서 데이터를 생성, 조회, 삭제, 수정할 수 있다.

2.4 사용(관리) 방법

  • RDBMS를 사용하기 위해서, Spring에서 RDBMS를 생성하고 RDBMS를 관리하는 방법을 알아본다.
  • JPA를 활용하기 위해 Spring에 JPA를 설치하고 설정하는 방법을 알아본다.

2.4.1 RDBMS

2.4.1.1 설치 방법

① 설치 위치: src > main > resources > application.properties
② 스크립트 이름: application.properties
③ 스크립트 생성 여부: X
④ 입력 코드 및 의미:

java code 

// 1. 데이터베이스 생성

spring.h2.console.enabled=true 
// spring에 h2 라는 데이터베이스를 사용 가능하게 해줘.


// 2. 데이터베이스 주소 설정

spring.datasource.url=jdbc:h2:mem:testdb 
// h2의 데이터베이스의 주소는 jdbc:h2:mem:testdb 임

2.4.1.2 관리 방법

① 콘솔창 열기

  • url에 localhost:8080/h2-console 입력하기
  • connect 클릭하기

② 언어 입력하기(SQL)
h2의 데이터베이스는 SQL의 명령을 인식한다. SQL 언어를 사용하여 생성, 삽입, 조회 등의 명령을 입력하는 방법은 아래와 같다.

SQL code


// 1. 생성
CREATE TABLE IF NOT EXISTS tutor (
	id bigint(5) NOT NULL AUTO_INCREMENT, // id 필드는 큰 숫자 형식이며, 비어있으면 안되고, 자동 증가한다.
    name VARCHAR(255) NOT NULL, // 이름 필드는 스트링 형식이며, 비어있으면 안된다.
    age int NOT NULL, // 나이 필드는 숫자 형식을 사용하며 비어있으면 안된다.
	PRIMARY KEY(id) // id는 고유값을 가진다.
);

// 2. 삽입
INSERT INTO tutor (name, age) VALUES ('김자바', 24);
// tutor 테이블에 이름과 나이 필드에 각각 '김자바', 24를 삽입한다.

// 3. 조회
SELECT * FROM tutor ~; // tutor 테이블에서 모든 데이터를 조회한다.

2.4.2 JAVA 연결

JPA를 활용

Spring과 RDBMS가 사용하는 언어는 다르다. 그래서 DB와의 소통을 원활하게 하기 위해서 번역기가 필요하다. java 언어를 SQL 언어로 번역하는 툴의 이름은 JPA(Java Persistence API, 자바 영속 API) 이다. 자바를 이용하여 통신한다는 의미를 가지고 있는 듯 하다.

Spring과 RDBMS를 연결하기 위해서는 RDBMS의 Table, SQL에 대응하는 개념을 Spring에 도입해야한다. Spring에서 RDBMS의 Table, SQL에 대응하는 개념은 각각 Domain, repository이다.

2.4.2.1 domain 생성하기

① 목적: TABLE 제작 및 변수 입력, 호출 방법 설정
② 설치 위치: src > main > java > com.sparta.week02 > domain > Course
③ 경로 생성 및 경로 이름: O / domain
④ 스크립트 생성 및 스크립트 명: O / Course.java
⑤ 입력 코드 및 의미

java code 

public class Course {
	
   
  // 1. TABLE 생성
  
  @id // PRIMARY KEY 로 설정하겠다.
  @GeneratedValue(strategy = GenerationType.AUTO) // 자동 증가하겠다.
  private Long id; // private 큰 숫자 형식으로 id를 선언합니다. 
  
  @Column(nullable=false) // 필드명이며, 레코드는 비어있으면 안된다.
  Private String title;
  
  @Column(nullabe=false) // 필드명이며, 레코드는 비어있으면 안된다.
  Private String tutor;
  
  @Column(nullabe=false) // 필드명이며, 레코드는 비어있으면 안된다.
  Private int age;
  
  
  // 2. 조회
  public String getTitle(){
  return this.title; 
  }
  
  public String getTutor(){
  return this.tutor; 
  }


   // 3. 삽입
   public Course(String title, String tutor) {
   this.title = title;
   this.tutor = tutor;
   }

};

2.4.2.2 repository 생성하기

① 설치 위치: src > main > java > com.sparta.week02 > domain > CourseRepository
② 스크립트 이름: CourseRepository.java
③ 스크립트 생성 여부: O
④ 입력 코드 및 의미:

java code 

public interface CourseRepository extends JpaRepository<Course, Long> {
} 
// CourseRepository 메소드 집합을 선언할건데, JpaRepository에서 Course와 Long 형식을 상속해줘.

2.4.2.3 용어 정의

① domain: Spring에서 TABLE에 대응되는 개념
② repository: Spring에서 SQL에 대응되는 개념
③ interface: 멤버 변수가 제외된 메소드 집합

3. 상속

3.1 개요

3.1.1 정의

이미 제작된 클래스를 이용하는 행위를 이르는 용어

'상속'이라는 단어의 의미에 '남겨준다'는 의미가 있음에도 알 수 있듯이, 이미 제작된 코드를 사용하는 것을 상속이라고 한다.

3.1.2 목적

효율적 개발

이미 다른 사람이 제작한 코드를 사용하면 소비되는 시간과 비용을 현저하게 줄일 수 있을 것이다.

3.2 사용 예시

3.2.1 목표

생성 일자 및 수정 일자 만들기

  • 데이터가 생성되고 수정될 때마다 날짜와 시각이 생성되는 상속 코드를 생성합니다.

3.2.2 코드 및 의미

3.2.2.1 코드 @Timestamped

① 설치 위치: src > main > java > com.sparta.week02 > domain > Timestamped
② 스크립트 이름: Timestamped.java
③ 스크립트 생성 여부: O
④ 입력 코드 및 의미:

java code

@MappedSuperClass // 상속했을 때 컬럼으로 인식하도록 함
@EntityListeners(AuditingEntityListener.class) // TABLE(Entity) 형식으로 생성/수정 시간 자동 생성코드
public abstract class Timestamped { // abstract: 상속으로만 사용할 수 있음을 의미

  @CreatedDate // 생성 날짜 및 시간임을 인식하는 코드
  private LocalDateTime createdAt;
  
  @LastModifiedDate // 수정된 날짜 및 시간임을 인식하는 코드
  private LocalDateTime modifiedAt;

}

3.2.2.2 코드 @Course

클래스를 상속받으므로 extends를 삽입한다.

java code

public class Course extends Timestamped
}

3.2.2.3 코드 @Week02Application

java code

@EnableJpaAuditing // 추가: Jpa가 수정할 수 있습니다. 
@SpringBootApplication
public class Week02Application { ...
}

좋은 웹페이지 즐겨찾기