h2 처음 사용시 몇 가지 의문점
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 데이터베이스의 특별한 방식이어서 사실 중요한 내용은 아닙니다^^
감사합니다.
spring initialiser 어떤걸 선택해야될지 모르겠어요
0
51
2
트랜잭션 템플릿이 체크예외는 커밋하는 이유가 궁금합니다.
0
62
1
jdbc 학습하다 궁금해서 질문드려요
0
93
1
정상이체와 이체중 예외발생 차이
0
77
2
이번 강의부터가 JDBC 직접 사용 맞나요?
0
97
1
순수한 서비스 계층에 대한 의문???
0
86
2
3_4test, 4test 자동 리소스 안됨
0
62
2
데이터베이스 선택 관련 질문.
0
75
2
after 메서드 사용 유무
0
65
2
데이터베이스 접근 및 DB 락
0
62
1
@SpingBootTest, @TestConfiguration
0
62
1
Read Committed 격리 수준 사용 관련 질문
0
57
1
AopCheck Test 부분의 EnhancerBySpring 확인 법??
0
73
2
커리큘럼 관련 질문
0
80
1
서비서 계층 스프링 프레임워크 사용
0
96
1
validation(toMember)의 위치
0
88
2
데이터 계층에서 서비스 로직의 datasource를 인식하는 방법
0
171
2
member 상수 질문
0
131
2
ctrl + F6 이후로 con 인식이 안 됩니다
0
167
2
DrivenManager 와 Connection 반환에 대한 질문입니다!
0
115
1
섹션5 트랜잭션 템플릿관련 질문(이기종 DB)
0
122
1
세션1 테이블 조회결과 그림은 Redo 로그에 속하나요?
0
105
1
트랜잭션이 필요하지 않은 경우 DB 대신 파일 시스템을 사용하는 것이 더 효율적인가?
0
100
1
강의 14분쯤 Exception 질문
0
119
2





