해결된 질문
작성
·
779
4
1. h2 사용시 왜 처음 외에는 jdbc:h2:tcp://localhost/~/test 로 접속해야하나요?
그냥 넘어가도 되는 부분이기도 하지만 계속 궁금해서요. 만약 그렇게 하지 않으면 무슨 문제가 생기나요?
2. 그리고 jdbc:h2:~/test 이게 파일로 접근하는 방식이라고 하셨는데요. 이 부분이 잘 이해가 안 갑니다.
예를 들어서 MySQL같은걸 사용하면 데몬서버에 JDBC를 사용하는 클라이언트가 요청을 보내면, MySQL의 엔진과 스토리지 엔진이 돌아가면서 DB에 데이터도 저장하고 읽기도 한다고 알고 있거든요.
h2가 아무리 경량이라고 하더라도 DB라면 데몬 프로그램으로 어딘가 떠서 돌아가고 있고, 거기에 H2 콘솔이 JDBC를 사용해서 TCP로 요청을 보내고 응답을 받으며 작업을 해야할 것 같은데... 파일로 접근한다는 개념은 무엇인지 잘 모르겠습니다.
답변 1
7
안녕하세요. 컴퓨터공부하자님
원래대로 하면 다음과 같이 접근해야 합니다.
[DB 서버를 통한 접근]
애플리케이션 -> DB 서버 -> h2.db 파일
H2 웹 콘솔 -> DB 서버 -> h2.db 파일
이렇게 해야 DB 서버 한곳에서 h2.db 파일을 관리할 수 있습니다.
jdbc:h2:tcp://localhost/~/test
[파일 직접 접근]
파일에 직접 접근하는 것은 H2 데이터베이스만의 특별한 기능인데요.
H2 데이터베이스는 다음과 같이 파일에 직접 접근하는 방식도 제공합니다.
jdbc:h2:~/test
애플리케이션 -> h2.db 파일
H2 웹 콘솔 -> h2.db 파일
그런데 이 경우 h2.db 파일을 여러곳에서 참조하는 문제가 발생합니다.
하나의 파일을 동시에 접근해서 쓰게 되면, 동시성 문제가 발생하기 때문에 이 경우 파일에 락을 걸게 됩니다.
결과적으로 애플리케이션이나 H2 웹 콘솔 둘중 한 곳에서는 쓰기가 불가능한 문제가 발생합니다.
그래서 꼭 DB 서버를 통해서 접근하는 것이 좋습니다.
참고로 이 부분은 H2 데이터베이스의 특별한 방식이어서 사실 중요한 내용은 아닙니다^^
감사합니다.
감사합니다!