작성
·
495
0
브라우저로 접속하였을 때는 테이블이 정상적으로 생성되는데
인텔리제이 자체에서 확인하면 왜 테이블이 보이지 않는걸까요?
새로고침해봐도 나타나지 않습니다
답변 2
0
안녕하세요, 이도원입니다.
강의에서 사용하고 있는 H2 DB는 in-memory 타입으로 사용하고 있습니다. 해당 서비스가 기동되면, DB도 작동되고, 서비스가 중지되면 DB도 삭제되는 형식입니다. Intellij에서 DB 접속을 하는 것은 서비스와는 별개로 접속을 하고 있어서(실행하고 있는 프로세스의 메모리에 있는 DB가 아님), DB의 내용을 보실 수 없습니다. 만약 H2르 tcpip 모드로 실행하게 되면, H2 DB에서도 실행되게 할 수 있습니다.
ex) java -cp bin/h2-[version].jar org.h2.tools.Server -web -webAllowOthers -tcp -tcpAllowOthers -baseDir /home/manoj/dev/h2/h2db_6.0
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
님께서 제시하신 문제는 인텔리제이 환경에서 H2 데이터베이스의 인-메모리 모드를 사용할 때 발생할 수 있는 일반적인 현상입니다.
인-메모리 데이터베이스는 휘발성이므로 애플리케이션이 시작될 때 생성되고 애플리케이션 종료 시 데이터가 손실됩니다. 또한, 스프링 부트 애플리케이션과 IDE 내에서 데이터소스를 다른 인스턴스로 실행하게 되면 서로 다른 데이터베이스 인스턴스를 바라보게 될 수 있습니다.
이를 해결하기 위해 ‘spring.datasource.generate-unique-name’ 속성을 ‘true’로 설정하여 각 애플리케이션 컨텍스트가 별도의 임베디드 데이터베이스를 사용하도록 할 수 있습니다.
또 다른 해결 방법으로는 인-메모리 데이터베이스 대신 파일 기반 데이터베이스를 설정할 수도 있습니다. 이렇게 하려면 JDBC URL을 ‘jdbc:h2:mem:testdb’에서 ‘jdbc:h2:file:/data/testdb’와 같이 파일 경로를 포함하도록 변경하면 됩니다. 그러면 데이터베이스가 파일로 유지되어 IDE에서도 동일한 데이터베이스 인스턴스를 볼 수 있게 됩니다.
테이블이 보이지 않는 문제는 IDE의 데이터 소스 구성이나 스프링 부트 애플리케이션 실행 방식에 따라 달라질 수 있습니다. 인-메모리 데이터베이스를 IDE에서 확인하기 원하신다면 앞서 설명한 방법들을 시도해보시길 권장드립니다.