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() + "번 아티클이 생성되었습니다.");
};
}
}
초기화 흐름
- BaseInitData → ArticleService → ArticleRepository → Article