🤍 전 강의 25% 할인 중 🤍

2024년 상반기를 돌아보고 하반기에도 함께 성장해요!
인프런이 준비한 25% 할인 받으러 가기 >>

  • 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

@PostConstruct로 테이블을 생성하지 못합니다.

23.02.14 21:13 작성 조회수 606

4

 오류 내용을 보니 hello 테이블을 찾을 수 없다고 뜹니다.

그래서, @PostContruct가 안 동작하나? 생각해서 프린트로 찍어보게 메인메서드를 돌리면 잘 찍힙니다.

그리고 기존 방식처럼 jdbctemplate을 주입해서 @BeforeEach로 생성하는 방식으로는 잘 동작하네요.

너무 궁금해서 git 주소를 남겨봅니다 ㅠ

https://github.com/rnwnsgud/helloboot

 

답변 1

답변을 작성해보세요.

0

서버를 실행하고 API 테스트를 수행하는 중에 에러가 난 것인가요?

좀 더 구체적으로 어떤 작업을 수행하는 중에 어떤 에러가(에러 메시지를 다 올려주세요) 났는지를 알려주셔야 원인을 찾아볼 수 있습니다.

구준형님의 프로필

구준형

질문자

2023.02.15

HelloApiTest에서 helloApi()에서 오류발생.

HelloRepositoryTest, HelloServiceCountTEst에서 오류가 발생합니다.

강의 11분 14초 쯤 @PostConstcut로 테이블을 생성하고 위 테스트를 돌리면 에러가 납니다. 아래는 오류 메시지 입니다.

오류메시지 출력전에 디버그 메시지(?) 이게 너무 많네요 일단 전부 올리겠습니다.

올려주신 프로젝트를 받아서 테스트를 해보니 저도 동일한 에러가 발생합니다.

일단 해결 방법은 간단합니다. 강의에서처럼 DataSourceConfig의 DataSource타입을 리턴하는 @Bean 메소드의 순서를 hikariDataSource를 앞으로 가져오면 hikariDataSource가 빈으로 선택되어서 동작하고 테스트까지 문제 없이 잘 동작합니다.

그렇다면 스프링의 SimpleDriverDataSource는 왜 DB 연결도 되고 SQL 실행도 잘 되는데, 생성한 테이블이 다음 요청을 할 때는 사라지는가라는 의문이 남습니다.

강의에서는 SimpleDriverDataSource라는 스프링에 포함된, 실전에서는 절대 사용하지 말라는 아주 단순하게 매번 커넥션을 새로 생성하는 DataSource 구현을 이용해서 일단 DataSource를 통해서 DB 연결까지 잘 수행되는지까지만 테스트를 하는데 사용했습니다. 그런데 왜 이게 생성된 DB 정보가 유지되지 않고 사라지는지는, 아마도 h2 내장형 DB와 관련이 있지 않을까 싶습니다.

이부분은 제가 아직 정확한 원인을 파악은 해보지 못했습니다. Hikari Datasource에서는 잘 동작하는 것으로 봐서는 단순 DataSource에서도 잘 동작해야할 것 같은데, 메모리에만 생성되는 내장형 DB로 동작할 때 뭔가 요구되어지는 다른 처리등이 필요한게 아닌가 싶습니다.

일단 강의에서 설명하는 내용을 테스트 해보시는 용도로는
DataSource hikariDataSource(MyDataSourceProperties properties) 메소드를 앞으로 가져오셔서 사용되게 만드시고 진행을 해보세요.

SimpleDriverDataSource가 내장형 h2를 사용할 때는 왜 에러가 나지 않고 SQL이 잘 동작했음에도, 만들어진 테이블이 사라지는지, 어떤 초기화 등이 돌아가는지 등에 관해서는 제가 시간이 날 때 한번 차근차근 살펴보도록 하겠습니다. 실전에서 쓸 기술은 아니지만, 그래도 궁금하네요.

구준형님의 프로필

구준형

질문자

2023.02.15

자세한 답변 감사드립니다! 좋은 강의 잘 보고 있어요.

채널톡 아이콘