티스토리 뷰

1. Hibernate

 (1) Hibernate란 무엇인가? 

Hibernate Overview

위의 그림과 같이 Java app에서 hibernate framework를 사용해서 database의 data를 저장하고 회수 할 수 있다.

database에서 java객체를 저장하거나 지속할 수 있는 프레임워크라고 보면된다.

 

 (2) Hibernate의 장점

 - Hibernate는 low-level SQL을 다룰 수 있다.

 - 내가 개발해야하는 JDBC 코드의 양을 최소화 시킬 수 있다.

 - Hibernate는 Object-to-relational mapping(ORM)을 제공한다. 따라서 db로 부터 object를 저장하고 회수하는 app을 만들기가 쉽다.

 

 (3) ORM(Object-to-relational mapping)이란

ORM이란 객체(클래스)와 관계(관계형 데이터 베이스)와의 설정을 의미한다. 객체 지향 프로그래밍은 클래스, 즉 객체를 사용하는 반면 관계형 데이터베이스는 테이블을 사용한다. 여기서 객체 모델과 관계형 모델간의 불일치가 존재하는데, 이 객체간의 관계를 바탕으로 SQL을 자동 생성하여 불일치를 해결하는것이 ORM이다.

 * 출처 : velog.io/@alskt0419/ORM%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C...-iek4f0o3fg

 

ORM이란?

이 포스트에서는 ORM의 기본적인 개념과 장단점을 설명하고 Sequelize와 Prisma의 장단점에 대한 내용을 다룹니다. 🤔ORM이란?? ORM(Object-relatinal mapping)이란 객체(클래스)와 관계(관계형 데이터 베이스)

velog.io

 - 개발자는 Java class와 database table 사이에 mapping을 정의한다. 개발자가 hibernate에게 어떻게 java class나 object가 db나 data에 어떻게 연결할지, map하는지를 알려주어야 한다.

이러한 mapping을 xml configuration file이나 java annotation을 사용하여 설정할 수 있다.

 

 (4) Hibernate를 이용해 java 객체를 저장 / 회수 하는법

 1) 저장하는법

다음 게시글에서 다루겠지만, session이라는 특별한 hibernate 객체를 이용해서 sessionl.save(객체)를 통해 객체를 넘겨준다. 그러면 백그라운드에서 hibernate가 그 java object를 이미 정의한 mapping에 근거하여(Student객체에 설정, 다음 게시물에서 다룸) 그 정보를 가지고 적절한 테이블과 column에 저장한다. 모든것을 hibernate가 대신 해주는 것이다.

session.save()를 하면 hibernate가 실제 id, 즉 primary key를 return해준다. 이것을 객체 회수하기 위해서 사용할 수 있다.

JDBC를 이용할때 직접 SQL 코드를 적어야 했고, value 세팅과 sql statement를 직접 실행해 주어야 했다. 하지만 여기서는 hibernate가 모두 자동으로 해준다(ORM기능)

 

 2) 회수하는법

많은 방법이 있지만 Primary key를 이용하여 회수할 수 있다.

session.get(객체.class, primary key)를 통해서 hibernate가 백그라운드에서 객체와 연결된 테이블에서 primary key와 id가 매칭하는 객체에 해당하는 클래스를 찾아 그것을 return해줄것이다.

 

3) java object를 querying하는 방법

 * Query란 : 데이터베이스에 정보를 요청 하는 것이다.

위의 그림에서 모든 Student 객체를 얻고 싶을때, 어떻게 해야하는가.

session.createQuery("from Student")로 만들고 해당 쿼리를 query.getResultList()로 가지고 student table로 부터 모든 object의 list를 가지고 와서 Student 객체의 list로 return해준다. 

"from Student" 와 같은 언어는 HQL(Hibernate Query Language)을 사용하는데, 나중에 다시 다룰것이다.

Student의 list를 가지고 있으면 이것을 활용해서 server application이나 JSP app안에서 사용할 수 있고, JSF, spring MVC등 많은 곳에서 사용 할 수 있다. 많은 low-level work를 해주기 때문에 모든 low-level code를 적지 않아도된다.

 

Hibernate를 이용해 앞으로 CRUD apps를 만들어 볼것이다. (Create, Read, Update, Delete object)

* low-level과 high-level이란 : en.wikipedia.org/wiki/High-_and_low-level

겉잡아 말해서 low-level은 세부적이고 구체적인, 미시적 level이라는 것이고 high-level은 추상적이고 포괄적인, 거시적 level이라는 것이다. 

 

High- and low-level - Wikipedia

"high-level" redirects here. For other uses, see High level. High-level and low-level, as technical terms, are used to classify, describe and point to specific goals of a systematic operation; and are applied in a wide range of contexts, such as, for insta

en.wikipedia.org

2. Hibernate 환경설정 

 (1) Required software

 - java 개발 환경

 - 데이터베이스 서버

 - hibernate jar file과 jdbc driver

 

 (2) 이클립스에서 hibernate설정

 - 이클립스 프로젝트 생성

 - hibernate file 다운로드

 - MySQL JDBC driver 다운로드

 - JAR file을 eclipse project에 추가하기(build path)

 

1) Database 생성

데이터베이스 서버로 MySQL을 사용할 것이기 때문에 MySQL을 다운 받았고, 거기에

CREATE USER 'hbstudent'@'localhost' IDENTIFIED BY 'hbstudent';
GRANT ALL PRIVILEGES ON * . * TO 'hbstudent'@'localhost';

ALTER USER 'hbstudent'@'localhost' IDENTIFIED WITH mysql_native_password BY 'hbstudent'; 를 실행하고 hbstudent를 만든 다음에, hbstudent에 다음 sql을 추가한다.

CREATE DATABASE  IF NOT EXISTS `hb_student_tracker`;
USE `hb_student_tracker`;
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `first_name` varchar(45) DEFAULT NULL,
  `last_name` varchar(45) DEFAULT NULL,
  `email` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1; 를 실행하여 table을 만들어 기본 세팅을 해준다.

 

2) hibernate jar file과 jdbc driver 설정

이클립스에 lib폴더를 만들어 hibernate orm최근것을 다운받아 복붙하고, MySQL 페이지에 들어가 community version의 connect j(JDBC driver)를 platform independent로 다운받아 안에 있는 jar file을 복붙해준다. 그리고 이클립스 property통해서 추가하면 된다. 

 

3) 정리

 * JDBC(Java Database Connectivity) : 자바에서 데이터베이스에 접속 할 수 있도록 하는 자바 API이다.

 * API(Application Programming Interface) : 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다. 

간단히 말해서 프로그램과 프로그램을 연결해주는 일종의 다리라 보면 된다. 내가 만든 프로그램이 개인개발자, 기업, 기관이 제공하는 기능, 프로그램 등을 활용할 수 있게끔 도와주는 중간 매개체.

핵심은 mySQL다운하고, 위 코드를 통해서 hbstudent를 만들고, connect j(JDBC driver)를 통해서 연결하고 hibernate를 추가해 Hibernate가 JDBC와 소통해 Java 코드와 database를 매핑해주는 것이다.

 

3. JDBC connection Test

package com.luv2code.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;

public class TestJdbc {

	public static void main(String[] args) {
		
		String jdbcUrl = "jdbc:mysql://localhost:3306/hb_student_tracker?useSSL=false&serverTimezone=UTC";
		String user = "hbstudent";
		String pass = "hbstudent";
		
	// 이것을 database에 연결
			
		try {
			System.out.println("Connecting to database: " + jdbcUrl);
			
			Connection myConn = 
					DriverManager.getConnection(jdbcUrl, user, pass);
			System.out.println("Connection successful!!!");
			
		} catch (Exception exc) {
			exc.printStackTrace();
		}
	}

}

src>com.luv2code.jdbc안에 TestJdbc 클래스를 만들어 준다. lib폴더 안의 JDBC driver가 우리의 자바 코드와 데이터베이스가 잘 연결되는지 확인하기 위해서 위와 같은 과정을 진행했다.

 

1) jdbcURL useSSL=false적어 주는 이유 : mysql이 최근에 소개한 pesky SSL warning을 받지 않기 위해서.

 

최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday