TIL

250120 월 TIL

파란배개 2025. 1. 20. 17:48

H2 DB 

H2는 가볍고 빠른 인메모리 데이터베이스로, 테스트 및 개발 환경에서 주로 사용된다.

  • 장점: 설정이 간단하고, 웹 콘솔을 통해 데이터 확인이 가능하다.
  • 특징: 파일 기반 또는 메모리 기반으로 동작하며, 기본적으로 SQL 표준을 준수한다.

H2 콘솔 접속

  • URL: http://localhost:8080/h2-console
  • 위에서 설정한 application.yml의 DB 정보를 입력하여 접속.
  • 직접 데이터베이스를 조작 가능.

 

---

 

 

프로젝트 기본 src 폴더 구조

ArticleRepository

package com.example.jpa.domain.article.repository;

import com.example.jpa.domain.article.entity.Article;
import org.springframework.data.jpa.repository.JpaRepository;

// JpaRepository를 사용해 DB에 데이터를 저장 및 조회 가능
// Long은 Article 엔티티의 primary 키 타입 (래퍼 클래스 사용)
public interface ArticleRepository extends JpaRepository<Article, Long> {
}

ArticleService

package com.example.jpa.domain.article.service;

import com.example.jpa.domain.article.entity.Article;
import com.example.jpa.domain.article.repository.ArticleRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;

@Service
@RequiredArgsConstructor
public class ArticleService {

    private final ArticleRepository articleRepository;

    public Article write(String author, String content) {
        // 1. Article 생성
        Article article = new Article();
        article.setCreatedDate(LocalDateTime.now());
        article.setModifiedDate(LocalDateTime.now());
        article.setAuthor(author);
        article.setContent(content);

        // 2. Repository에 저장
        articleRepository.save(article);

        return article;
    }
}

BaseInitData

package com.example.jpa.global;

import com.example.jpa.domain.article.entity.Article;
import com.example.jpa.domain.article.service.ArticleService;
import lombok.RequiredArgsConstructor;
import org.springframework.boot.ApplicationRunner;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@RequiredArgsConstructor
public class BaseInitData {

    private final ArticleService articleService;

    @Bean
    public ApplicationRunner applicationRunner() {
        return args -> {
            System.out.println("applicationRunner");
            Article a1 = articleService.write("author1", "content1");
            System.out.println(a1.getId() + "번 아티클이 생성되었습니다.");
            Article a2 = articleService.write("author2", "content2");
            System.out.println(a2.getId() + "번 아티클이 생성되었습니다.");
            Article a3 = articleService.write("author3", "content3");
            System.out.println(a3.getId() + "번 아티클이 생성되었습니다.");
        };
    }
}

초기화 흐름

  • BaseInitDataArticleServiceArticleRepositoryArticle