인프런 커뮤니티 질문&답변

김진수님의 프로필 이미지

작성한 질문수

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

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

해결된 질문

23.10.08 02:43 작성

·

334

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가 생성되지 않았습니다.(가장 큰 문제)

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

감사합니다.

 

 

답변 2

0

codesweaver님의 프로필 이미지

2023. 10. 13. 14:03

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

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

감사합니다.

0

인프런 AI 인턴님의 프로필 이미지

2023. 10. 10. 02:46

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

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

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

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

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

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