이 장에서는 H2 데이터베이스를 사용하여 게시판 서버의 데이터를 저장할 데이터베이스를 생성하고 구성하겠습니다.
먼저 프로젝트에 H2 의존성을 추가해야 합니다. 이를 위해 "build.gradle" 파일을 열고 다음 코드를 추가합니다:
dependencies {
// ... other dependencies
runtimeOnly 'com.h2database:h2'
}
다음으로 H2 데이터베이스 연결을 구성해야 합니다. "application.properties" 파일을 열고 다음 코드를 추가합니다:
spring.h2.console.enabled=true
spring.datasource.url=jdbc:h2:mem:bulletinboard
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
# Hibernate ddl auto (create, create-drop, validate, update)
spring.jpa.hibernate.ddl-auto=create
여기서는 H2 콘솔을 활성화하고 데이터베이스 URL을 "jdbc:h2:mem:bulletinboard"로 설정하고 드라이버 클래스 이름을 "org.h2.Driver"로 설정하며 사용자 이름과 비밀번호를 각각 "sa"와 ""(빈 문자열)로 설정합니다. 또한 최대 절전 모드 DDL 자동 모드를 "create"로 설정하여 엔티티 클래스를 기반으로 데이터베이스 스키마를 생성합니다.
이제 게시판 게시물을 나타내는 엔티티 클래스를 만들어 보겠습니다. "src/main/java/com/example/demo" 디렉토리에서 "model"이라는 이름의 새 패키지를 만듭니다. 이 패키지 안에 다음 코드를 사용하여 "BulletinBoardPost"라는 이름의 새 클래스를 생성합니다:
package com.example.demo.model;
import javax.persistence.*;
@Entity
@Table(name = "bulletin_board_posts")
public class BulletinBoardPost {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String title;
@Column(nullable = false)
private String content;
public BulletinBoardPost() {}
public BulletinBoardPost(String title, String content) {
this.title = title;
this.content = content;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
여기서는 클래스에 "@Entity"를 주석 처리하여 JPA 엔티티임을 나타내고, "@Table(name = "bulletin_board_posts")"을 주석 처리하여 엔티티를 저장하는 데 사용할 데이터베이스 테이블의 이름을 지정합니다. 또한 세 개의 필드를 정의합니다: "id", "title", "content". "@Id" 어노테이션은 "id"가 기본 키임을 지정하고, "@Column" 어노테이션은 "title"과 "content"가 널이 될 수 없음을 지정합니다.
다음으로, 엔티티에 대한 CRUD 작업을 처리하기 위해 "BulletinBoardPostRepository" 인터페이스를 만들어 봅시다. "src/main/java/com/example/demo" 디렉토리에 "repository"라는 이름의 새 패키지를 생성합니다. 이 패키지 안에 다음 코드를 사용하여 "BulletinBoardPostRepository"라는 이름의 새 인터페이스를 만듭니다:
package com.example.demo.repository;
import com.example.demo.model.BulletinBoardPost;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface BulletinBoardPostRepository extends JpaRepository<BulletinBoardPost, Long> {
}
여기서는 "JpaRepository" 인터페이스를 확장하고 엔티티 유형과 기본 키 유형을 유형 매개변수로 지정합니다. 이렇게 하면 다음에 액세스할 수 있습니다.
다음으로 게시판 데이터베이스의 스키마와 테이블을 만들어야 합니다. 이 작업은 SQL 스크립트를 사용하여 수행할 수 있습니다.
데이터베이스 스키마와 테이블을 생성하기 위해 "resources" 디렉터리에 "schema.sql"이라는 파일을 만듭니다. 파일에 다음 코드를 추가합니다:
CREATE SCHEMA IF NOT EXISTS `bulletin_board_db`;
USE `bulletin_board_db`;
CREATE TABLE IF NOT EXISTS `post` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`title` VARCHAR(100) NOT NULL,
`content` TEXT NOT NULL,
`created_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
);
위의 코드는 "bulletin_board_db"라는 스키마와 필요한 열이 있는 "post"라는 테이블을 만듭니다. "id" 열은 테이블의 기본 키이며 자동 증가로 설정되어 있습니다. "title" 및 "content" 열은 각각 각 글의 제목과 내용을 저장하는 데 사용됩니다. "created_date" 및 "updated_date" 열은 각각 각 글이 작성 및 업데이트된 시점의 타임스탬프를 저장하는 데 사용됩니다.
다음으로 H2 데이터베이스를 사용하도록 애플리케이션을 구성해야 합니다. "resources" 디렉토리에 "application.properties"라는 파일을 만들고 다음 코드를 추가합니다:
spring.datasource.url=jdbc:h2:mem:bulletin_board_db
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.hibernate.ddl-auto=none
위의 코드는 "jdbc:h2:mem:bulletin_board_db" URL로 H2 데이터베이스 연결을 구성합니다. "spring.datasource.driverClassName" 속성은 H2의 JDBC 드라이버 클래스를 지정합니다. "spring.datasource.username" 및 "spring.datasource.password" 속성은 데이터베이스 연결의 기본 사용자 이름 및 비밀번호를 지정하며, 각각 "sa"와 빈 문자열로 설정됩니다. 마지막으로, "spring.jpa.hibernate.ddl-auto" 속성은 "none"으로 설정되어 최대 절전 모드에 의한 자동 스키마 생성을 비활성화합니다.
이제 애플리케이션을 실행하고 올바르게 작동하는지 확인할 준비가 되었습니다. 이를 위해 IntelliJ IDEA에서 Java 애플리케이션으로 "BulletinBoardApplication" 클래스를 실행할 수 있습니다. 그러면 Spring Boot 애플리케이션이 시작되고 임베디드 Tomcat 서버에 배포됩니다.
애플리케이션이 실행되면 웹 브라우저 또는 "Postman"과 같은 도구를 사용하여 1장에서 만든 RESTful 엔드포인트를 테스트할 수 있습니다. 예를 들어 다음 URL을 사용하여 새 게시물을 만들 수 있습니다:
http://localhost:8080/api/posts
새 글을 작성할 때 JSON 페이로드가 포함된 HTTP POST 요청을 사용할 수 있습니다. 다음은 JSON 페이로드의 모습에 대한 예시입니다:
{
"title": "My First Post",
"content": "Hello, world!"
}
모든 것이 정상적으로 작동하면 서버는 고유 식별자(ID)와 글 작성 및 업데이트 시점의 타임스탬프를 포함하여 새로 작성된 글의 세부 정보가 포함된 JSON 객체로 응답해야 합니다.
축하합니다! 이제 H2 데이터베이스를 사용하여 Spring Boot 애플리케이션을 성공적으로 만들고 RESTful 엔드포인트를 테스트했습니다.