2. Spring 게시판 무작정 따라하기

테이블 생성 및 H2 DB 연결
HootJem's avatar
Aug 14, 2024
2. Spring 게시판 무작정 따라하기
💡
테이블 생성 및 H2 DB 연결
 

1. H2 설정

위의 URL에 접속하면 다음과 같은 화면이 나타난다.
(이전 과정에서 프로젝트 생성할 때 H2 디펜던시 설정 했기 때문에 프로젝트 실행 시 함께 돌아감)
notion image
  • 라이브러리
runtimeOnly 'com.h2database:h2'
 
  • application.properties 에서 name 과 Password 설정을 한다.
spring.datasource.driver-class-name=org.h2.Driver spring.datasource.url=jdbc:h2:mem:test spring.datasource.username=sa
만약 H2 콘솔 화면의 URL이 위의 설정과 다르다면, 설정을 콘솔 화면에 맞게 수정해야 한다.
 

데이터 프레임워크의 발전사… JDBC→DataSource→DB Framework
  • JDBC (Java Database Connectivity)
    • 초기 단계: JDBC는 자바에서 데이터베이스에 직접 연결하고 SQL 쿼리를 실행할 수 있는 API입니다. 개발자는 데이터베이스 연결, SQL 쿼리 작성, 결과 처리 등을 직접 관리해야 했습니다.
    • 단점: JDBC는 매우 낮은 수준의 작업을 요구하기 때문에, 코드의 양이 많고 유지보수가 어렵습니다. 데이터베이스 연결, 자원 해제 등의 반복적인 작업을 수작업으로 처리해야 합니다.
  • DataSource
    • 중간 단계: DataSource는 데이터베이스 연결을 더 효율적으로 관리하기 위한 방법입니다. 연결 풀링(Connection Pooling)을 통해 데이터베이스 연결을 재사용하여 성능을 개선할 수 있습니다.
    • 도입 이유: DataSource를 사용하면 데이터베이스 연결의 효율성을 높일 수 있으며, 연결 풀을 사용해 응답 시간을 줄일 수 있습니다. 그러나 여전히 SQL 쿼리와 자원 관리를 직접 해야 하는 부담이 있습니다.
  • DB Framework (예: Hibernate, MyBatis)
    • 현대적 접근: 데이터베이스와의 상호작용을 더 쉽게 하기 위해 ORM(Object-Relational Mapping) 프레임워크가 등장했습니다. 하이버네이트(Hibernate)와 같은 프레임워크는 객체 지향 프로그래밍 방식으로 데이터베이스 작업을 처리할 수 있게 해줍니다.
    • 장점: ORM 프레임워크는 SQL을 자동으로 생성하고, 데이터베이스 매핑을 통해 자바 객체를 데이터베이스 테이블과 연결해줍니다. 이를 통해 반복적인 코드를 줄이고, 개발 생산성을 높일 수 있습니다.
 

2. 하이버네이트 설정

  • application.properties 에서 추가
spring.jpa.hibernate.ddl-auto=create spring.jpa.show-sql=true

3. 테이블 생성

notion image
notion image
notion image
생성된 것을 볼 수 있음, 생성되는 테이블 명을 변경하고 싶으면 @Table(name = "테이블_명") 하면 된다.
notion image
notion image
 
notion image
프로젝트를 실행하면 하이버네이트가 테이블을 생성해 준다.
이는 Board 클래스에 @Entity 때문
 
  • 하이버네이트 주의점
 
notion image
매번 서버가 시작될 때 마다 create 되기 때문에 서비스 환경에선 사용할 수 없다.
그러므로 배포시엔 create -> none 으로 변경시켜야한다.
 
select 요청 하면 DBMS 는 테이블데이터 로 응답을 해준다.
MyBatis 나 하이버네이트는 데이터 타입을 자동으로 정렬해준다.(→ object mapping)
(@Entity 라고 되어있는 클래스를 탐색해서 하이버네이터가 new 해서 setter 로 넣어서 리턴해줌)
 
엔티티에 디폴트 컨스트럭쳐가 필요한 이유는
하이버네이트가 new 해서 setter 하여 조회해온 값을 가져오기 때문이다.
그래서 빌더 만들거면 클래스에 어노테이션 @NoArgsConstructor 넣어야함
 
💡
엔티티 클래스에 기본 생성자가 필요한 이유는 Hibernate가 리플렉션을 통해 객체를 생성하고 setter를 사용하여 값을 주입하기 때문이다. 기본 생성자가 없으면 Hibernate는 객체를 올바르게 생성할 수 없다.
 
Share article

[HootJem] 개발 기록 블로그