• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

임베디드 모드(메모리 모드)

24.04.17 16:13 작성 조회수 102

0

=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
여기에 질문 내용을 남겨주세요.3장의 14페이지의 부분입니다. 위의 url의 방식을 사용하면 임베디드(메모리 모드)로 동작한다고 적혀있습니다.그런데 db의 모드를 공부하다 보니 궁금증이 생겨 질문드립니다. db 모드에는 3가지 모드가 있습니다.

server mode

url: jdbc:h2:tcp://localhost/~/myShopProject이런 url 예시가 있으며 tcp 방식을 통해 네트워크 통신을 이용하여 서버의 디스크에 저장하는 것으로 이해했습니다.위의 경우는 localhost이므로 저의 로컬 컴퓨터의 디스크에 저장될 것 같습니다.만약 위의 localhost가 다른 ip라면 그 ip의 디스크에 저장될 것 같습니다.  

임베디드 모드(Embedded Mode)는

jdbc:h2:<databasePath>
이런 url 예시가 있으며 위의 경우는 데이터 베이스가 애플리케이션과 함께 하나의 프로세스 내에서 실행합니다.위의 databasePath에 데이터페이스 파일이 저장됩니다.로컬 컴퓨터의 애플리케이션에서 실행되므로 tcp 통신은 발생하지 않습니다. 

인메모리 모드(In-Memory Mode)는

jdbc:h2:mem:mydb
이런 url 예시가 있으며 위의 경우에는 데이터베이스가 메모리에만 저장되고, 따라서 파일의 경로를 지정할 필요가 없습니다.이렇게 하면 데이터베이스가 메모리에만 생성되며 디스크에 저장되지 않습니다.  그런데 위의 교재에서는 임베디드 모드는  위처럼 메모리 모드로 동작하는 기능이라고 설명해주고 있습니다. 하지만 제가 공부했던 임베디드 모드는 파일의 경로를 지정해서 영구히 저장해 주는 것으로 알았습니다.위의 임베디드 모드에 대한 설명이 잘 이해가 되지 않았습니다.=================================================================================정리하자면->jdbc:h2:mem:db 이므로 인메모리 모드로 동작하는 H2 데이터 베이스이다. 라고 바꿔야 하지 않을까요..?  임베디드 모드(메모리 모드) 라는 표현이 잘 이해가 안된다 -> 두개는 별개의 모드로 이해하고 있습니다. (메모리 모드와 인메모리 모드가 같은 의미라고 이해하고 있습니다.) + 위의 임데디드 모드에 대한 정의와 설명이 잘 이해되지 않았습니다.  좀 설명이 중구난방하고 제가 학습이 부족하여 잘 이해하지 못한 것 같습니다! 설명해주시면 감사하겠습니다!!    

답변 2

·

답변을 작성해보세요.

2

David님의 프로필

David

2024.04.17

안녕하세요. ml505050님, 공식 서포터즈 David입니다.

공식문서에 따르면 (connection) Mode는 3가지입니다.

Embedded Mode, Server Mode, Mixed Mode

임베디드 모드에 괄호치고 메모리 모드라고 적어놓은 이유는 임베디드 모드의 동작때문인 것 같습니다.

임베디드 모드는 데이터베이스를 애플리케이션과 같은 JVM에서 띄워서 사용합니다. 당연히 애플리케이션이 종료되면 H2 데이터베이스도 함께 종료됩니다. 이런 과정을 쉽게 이해할 수 있도록 임베디드 모드와 메모리 모드를 병기한 것 같습니다.

참고로 임베디드 모드는 임베디드 데이터베이스와 인메모리 데이터베이스를 모두 지원합니다.

이 부분은 공식문서를 참고해 주세요:)

https://www.h2database.com/html/features.html#connection_modes

https://www.h2database.com/html/features.html#embedded_databases

감사합니다.

ml505050님의 프로필

ml505050

질문자

2024.04.17

감사합니다!

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.04.17

안녕하세요, 인프런 AI 인턴입니다.

ml505050님께서 질문하신 H2 데이터베이스의 임베디드 모드와 인메모리 모드에 대한 혼동에 대해 설명드리겠습니다.

임베디드 모드(Embedded Mode)와 인메모리 모드(In-Memory Mode)는 H2 데이터베이스를 구동하는 두 가지 다른 방식입니다.

  • 인메모리 모드(jdbc:h2:mem:mydb)에서는, 데이터베이스가 애플리케이션의 메모리 내에서만 존재하며, 애플리케이션이 종료되면 데이터가 사라집니다. 이 모드는 주로 테스트 환경에서 데이터베이스의 빠른 초기화와 소멸이 필요할 때 사용됩니다.
  • 임베디드 모드에서는, 데이터베이스가 애플리케이션과 같은 JVM에서 실행되며, 파일 시스템 내에 데이터 파일(databasePath)을 저정하여 영구적으로 데이터를 저장할 수 있습니다. 이 모드는 서버 인스턴스 없이 독립적인 애플리케이션으로 데이터베이스를 포함하고자 할 때 사용됩니다.

교재에서 “임베디드 모드(메모리 모드)“라고 설명된 부분은 이해의 혼동을 일으킬 수 있습니다. 실제로는 “임베디드 모드”가 메모리 내에서 데이터를 유지하는 “인메모리 모드”의 특성을 가지면서도 애플리케이션과 함께 동작한다는 점을 강조한 것으로 보입니다.

이와 유사한 질문에 대한 답변을 아래 링크에서 확인하실 수 있습니다:
- 인메모리 DB h2에서는 H2 인메모리 데이터베이스가 JVM 내에서 메모리 모드로 작동함을 설명합니다.

이 내용이 ml505050님의 질문에 대한 혼동을 해소하는데 도움이 되기를 바랍니다. 임베디드 모드와 인메모리 모드 각각의 정의와 사용 사례를 명확히 이해함으로써, db를 어떻게 구성하고 활용해야 할지 더욱 명확해질 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

ml505050님의 프로필

ml505050

질문자

2024.04.17

그럼 제가 설명했던 부분에 오류는 없을까요..?