메모리 베이스 H2 디비 만들기 (연습용)

Yeeun·2025년 4월 24일
0

SpringBoot

목록 보기
22/46
post-thumbnail


application.properties 설정 파일

application.properties 설정 파일은 Spring Boot 프로젝트에서 H2 인메모리 데이터베이스를 사용하면서 JPA 설정을 테스트 용도로 구성한 예입니다. 각 항목이 어떤 역할을 하는지 부드럽게 정리해드릴게요:


🌱 기본 애플리케이션 정보

spring.application.name=BootTest01
  • 프로젝트 이름을 지정해요.
  • 이건 Spring Cloud를 쓰는 경우 유용하지만, 기본적으로는 큰 영향 없어요.

💾 데이터베이스 설정 (H2 인메모리 DB)

spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:test
spring.datasource.username=sa
spring.datasource.password=abcd
  • H2 DB는 Java로 된 가벼운 인메모리 DB입니다.
  • mem:test는 메모리 위에 test라는 이름의 임시 DB를 만드는 거예요.
  • 서버가 꺼지면 DB도 사라져요.
  • sa는 기본 사용자 이름, 비밀번호는 abcd로 설정했어요.

🧱 JPA + Hibernate 설정

spring.jpa.hibernate.ddl-auto=create
  • 앱 시작 시 DB 스키마를 자동 생성(create) 합니다.
  • 모든 테이블이 새로 만들어지고, 기존 데이터는 다 사라져요.
  • 실무에서는 보통 validate, update, 또는 none을 써요.
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format-sql=true
  • SQL 쿼리를 콘솔에 보여줍니다.
  • format-sql=true는 그 쿼리를 예쁘게 정렬해서 출력해줘요.
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
  • Hibernate가 어떤 DB에 맞춰 쿼리를 작성할지 정해주는 설정입니다.
  • H2에 맞게 쿼리를 만들어주는 Dialect를 지정한 거예요.

🧾 로그 설정

logging.level.org.hibernate=info
  • Hibernate 관련 로그의 출력 레벨을 INFO 수준으로 설정해요.
  • 필요하다면 debug로 바꿔서 더 많은 정보를 볼 수도 있어요.

✅ 이 설정은 어떤 상황에 좋아요?

  • JPA 학습이나 테스트 프로젝트를 할 때 매우 유용해요.
  • 가볍고 빠르게 테스트할 수 있고, 별도 DB 설치도 필요 없어요.
  • 메모리 DB라서 앱 껐다 켜면 초기화되기 때문에 실수해도 부담이 없어요.


DataInit 클래스파일 ( 어플리케이션러너 인터페이스를 상속받아 실행시 바로 실행됨. 컴포넌트 어노테이션)
아주 좋은 질문이에요! 이 코드에서 DataInit 클래스가 자동으로 실행되는 이유는 두 가지가 함께 작용하기 때문이에요:


✅ 정답 요약

@Component로 등록되었기 때문에 Spring이 관리하고,
ApplicationRunner를 구현했기 때문에 애플리케이션 시작 직후 자동 실행됩니다.


💡 자세히 설명하면:

1. @Component 때문에 Spring이 이 클래스를 빈(Bean) 으로 등록합니다.

  • Spring이 시작할 때 @Component, @Service, @Repository, @Controller 등의 어노테이션이 붙은 클래스를 스캔해서 빈으로 등록해요.
  • 등록되면 @Autowired 같은 의존성 주입도 자동으로 작동해요.

2. ApplicationRunner 인터페이스를 implements 했기 때문에 run() 메서드가 자동 실행됩니다.

  • Spring Boot는 애플리케이션이 완전히 시작된 후,
    ApplicationRunner 또는 CommandLineRunner 를 구현한 클래스의 run() 메서드를 자동 호출해요.
  • 여기서 초기 데이터 세팅이나 설정값 로그 출력 같은 걸 자주 합니다.

✍️ 쉽게 풀어 설명하면

Spring이 "이거 컴포넌트네? 실행 중 관리해야지!"
Spring Boot가 "이 클래스 ApplicationRunner 구현했네? 앱 시작할 때 run() 실행하자!"



h2앱이 구동됐는지와는 상관없이 코드 실행 후 웹브라우저에 http://localhost:8080/h2-console/ 치고 접속하면 메모리베이스 디비생성.

📌 http://localhost:8080/h2-console/ 로 들어가야만 하는가?

그건 바로 H2 데이터베이스는 브라우저 기반의 웹 콘솔을 별도로 제공하기 때문이에요.

🔹 기본적으로 H2는

  • 인메모리 DB라서 시작할 때 만들어지고, 종료하면 사라져요.
  • H2 DB의 내용을 확인하려면 h2-console 이라는 웹 기반 툴을 열어야 돼요.
  • 이 툴을 통해 DB에 접속해서 SQL도 직접 날려보고, 테이블/데이터 확인도 가능해요.

🔹 spring.h2.console.enabled=true

이 설정이 있어야만 콘솔을 사용할 수 있어요.

spring.h2.console.enabled=true

없으면 http://localhost:8080/h2-console/ 에 접속해도 404 에러가 나요.


✅ 접속 흐름 요약

  1. application.propertiesh2-console 을 열 수 있게 설정함
  2. 서버 실행 시 인메모리 DB가 만들어지고, DataInit 클래스에서 더미 데이터를 넣음
  3. 웹 브라우저로 http://localhost:8080/h2-console/ 접속
  4. 다음 정보를 입력 후 Connect:
    • JDBC URL: jdbc:h2:mem:test (설정한 대로)
    • User Name: sa
    • Password: 비워두기 (설정 안 했으니까)

💡 참고: http://localhost:8080/h2-console/ 은 Spring이 만든 게 아님

이건 H2 Database가 제공하는 UI이고, Spring Boot가 이 콘솔을 Web App에 자동으로 통합해주는 것이에요.


🔍 혹시 "왜 그냥 주소만 쳐서 안 되냐"는 의미였을까요?

h2-console웹 페이지지만, Spring Boot에서는 명시적으로 열어줘야 활성화돼요.
그게 spring.h2.console.enabled=true인 거죠.


필요하시면 h2-console 접속 시 입력하는 항목들 예쁘게 표로 정리해드릴게요.
혹은 이제 이 데이터를 조회하거나 QueryDSL, JPA, JPQL로 검색해보고 싶은지도 알려줘요! 😊

0개의 댓글