inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

섹션1 JPA와 DB설정, 동작확인 강의에서 Test를 통과했는데 Member 테이블이 생성되지않았습니다

해결된 질문

434

김진수

작성한 질문수 1

0

[질문 템플릿]

1. 강의 내용과 관련된 질문인가요? (예)

2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)

3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]

안녕하세요.

현재 '실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발 강의'에서 'JPA와 DB 설정, 동작확인' 강의를 듣고 있습니다.

H2 데이터베이스에 연결하고, 테스트 코드를 실행해서 통과했다고 나옵니다. 그런데 강의 영상처럼 create table, drop table 등의 메시지가 터미널에 나오기는 하는데 제대로 된 건지 잘 모르겠습니다. 그리고 가장 큰 문제는 H2 데이터베이스에 Member 테이블이 생성되지 않았습니다.

아래 코드와 스크린샷을 첨부합니다.

제가 한 부분 중 잘못된 부분이 있는 건지 궁금합니다.

그리고 어떻게 하면 해결할 수 있는지 궁금합니다.

 

Member

package jpabook.jpashop;

import lombok.Getter;
import lombok.Setter;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
@Getter @Setter
public class Member {

    @Id @GeneratedValue
    private Long id;
    private String username;
}

 

MemberRepository

package jpabook.jpashop;

import org.springframework.stereotype.Repository;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

@Repository
public class MemberRepository {

    @PersistenceContext
    private EntityManager em;

    public Long save(Member member) {
        em.persist(member);
        return member.getId();
    }

    public Member find(Long id) {
        return em.find(Member.class, id);
    }
}

 

application.yml

spring:
  datasource:
    url: jdbc:h2:tcp://localhost/~/jpashop
    username: sa
    password:
    driver-class-name: org.h2.Driver

  jpa:
    hibernate:
      ddl-auto: create
    properties:
      hibernate:
        # show_sql: true
        format_sql: true

logging.level:
  org.hibernate.SQL: debug
  org.hibernate.type: trace #스프링 부트 2.x, hibernate5
  org.hibernate.orm.jdbc.bind: trace #스프링 부트 3.x, hibernate6

 

MemberRepositoryTest

package jpabook.jpashop;

import org.assertj.core.api.Assertions;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.transaction.annotation.Transactional;

import static org.junit.jupiter.api.Assertions.*;

@RunWith(SpringRunner.class)
@SpringBootTest
public class MemberRepositoryTest {

    @Autowired MemberRepository memberRepository;
    
    @Test
    @Transactional
    public void testMember() throws Exception {
        //given
        Member member = new Member();
        member.setUsername("memberA");

        //when
        Long saveId = memberRepository.save(member);
        Member findMember = memberRepository.find(saveId);

        //then
        Assertions.assertThat(findMember.getId()).isEqualTo(member.getId());
        Assertions.assertThat(findMember.getUsername()).isEqualTo(member.getUsername());

    }
}

 

테스트 결과의 일부분 스크린샷

 

이 상태로 H2에 접속했습니다.

테스트 후 H2 데이터베이스의 스크린샷

 

위의 스크린샷처럼 테스트를 실행하면 통과로 나오기는 합니다.
그렇지만 강의 영상처럼 create table, drop table이라고 되어있는 부분이 있지만 제대로 된 건지 모르겠습니다.
그리고 테스트 후 H2 데이터베이스를 보면 Member가 생성되지 않았습니다.(가장 큰 문제)

제 코드나 제가 실행한 부분 중에서 잘못된 부분이 있는지 궁금합니다.
그리고 해결 방법도 궁금합니다.

감사합니다.

 

 

java spring 웹앱 spring-boot jpa

답변 2

0

나무늘보

안녕하세요. 김진수님, 공식 서포터즈 코즈위버입니다. AI 답변에 더하여 답변 드립니다.

INFORMATION_SCHEMA 왼쪽에 + 마크가 보이실 텐데요 이 부분을 클릭하여 Member 테이블이 있는지 확인해주시겠어요?

감사합니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴이에요.

H2 데이터베이스에 연결하고 테스트 코드를 통과했지만, Member 테이블이 생성되지 않은 것 같습니다.
코드는 올바르게 작성되었으며, 문제가 발생한 부분을 찾아보겠습니다.

  1. 우선, H2 데이터베이스의 설정을 확인해보세요. 강의에서 설치한 H2 데이터베이스가 정상적으로 실행되고 있어야 합니다. H2의 콘솔 화면을 확인하거나, 설정파일에 올바른 URL, 유저명, 패스워드를 설정해야 합니다.

  2. 그다음으로, Member 엔티티 클래스에 @Table(name = “테이블이름”) 어노테이션을 추가해보세요. name 속성에는 생성하고자 하는 테이블의 이름을 지정할 수 있습니다. 예를 들어, @Table(name = “MEMBER”)와 같이 작성하면 MEMBER 테이블이 생성됩니다.

  3. 마지막으로, 프로젝트의 로그를 확인해보세요. 로그에는 H2 데이터베이스에서 테이블을 생성하는 로그 메시지가 출력됩니다. 로그에서 오류 메시지나 예외가 발생하지 않았는지 확인해보세요.

위의 세 가지 사항을 확인해보시고, 문제가 해결되는지 확인해보세요. 문제가 여전히 발생한다면, 질문 내용과 함께 상세한 로그나 스크린샷을 함께 첨부해주시면 더 자세한 도움을 드릴 수 있을 것 같아요. 해결하지 못하는 경우에는 개발자 도움이 필요한 문제일 수 있으므로, 강의 상세 페이지의 Q&A나 지식공유자에게 문의해보시는 것도 좋은 방법이 될 수 있어요. 이 점 참고해주세요. 해결되길 바라며, 더 궁금한 점이 있으면 언제든지 말씀해주세요! 좋은 하루 되세요.

sdk 설정 오류

0

53

2

오탈자 - @Transactional

0

56

1

src/test/resources 테스트 경로 문제

0

50

1

상품 등록후 H2 db 출력 순서 바꿀 수 있나요?

0

64

1

MemberRepositoryTest 실행오류

0

81

1

boot 4.x >>> trasasction rolled back log & p6spy(영한님, 수업 자료 업데이트 해주시면 감사하겠습니다!!)

1

183

2

강의 마지막 QueryDSL 사용 부분 질문있습니다

1

142

2

클라이언트에서 isbn과 author 수정 요청을 한 경우에 대해 질문드립니다.

0

51

1

도메인 모델 패턴 vs 트랜잭션 스크립트 패턴

0

71

1

기본 생성자

0

60

1

h2 DB 연결시 jdbc url 변경 이유가 궁금합니다.

0

103

1

멤버서비스테스트 부분에서 막힙니다.

0

165

4

실무에서도 EntityManager를 이용해서 많이 작업하는 편일까요?

0

116

1

초반에 h2 다운로드 과정 꼭 필요한가요?

0

120

2

자신 필드에도 get으로 접근하는 이유가 있을까요?

0

114

1

24분 27초 연관관계 편의 메서드 위치

0

113

1

단건 주문만 가능하게 한건 의도한 부분이신가요?

0

109

2

빌드 툴, Gradle

0

59

1

h2연결은 된 것 같은데 엔티티 테이블까지 작성 후 확인해보아도 테이블이 안보입니다

0

77

2

Repository에서 EntityManager 주입 방식 차이

0

90

1

롬복과 사용자 정의 setter 메서드

0

73

1

주문 목록 조회 fetch join 질문드립니다

0

82

1

dirty checking 질문드립니다.

0

83

1

동시성 관련 질문입니다

0

75

1