데이터베이스 타입 - tcp, embeded, mem

c.Hano·2025년 2월 27일

스프링

목록 보기
1/1

1. TCP(server) 모드 - jdbc:h2:tcp://localhost...

터미널에서 ./h2.sh 을 실행하여 직접 데이터베이스 어플을 실행시킨다.

  • 여러 외부 어플리케이션에서 동일한 db를 공유할 수 있다.
  • 서버(h2 어플리케이션)이 꺼지지 않는 한 계속해서 접근할 수 있다. (h2 어플리케이션을 누르면 된다.)

-> yml의 url에서 jdbc:h2:tcp://localhost.. 를 입력해야한다.


2. Embedded 모드 - jdbc:h2:~/...

  • H2 데이터베이스가 애플리케이션 내부에서 실행된다.
  • 어플리케이션이 종료되면 DB도 같이 종료된다.
  • 파일로 저장하여 (tcp도 동일) 어플리케이션 종료 후에도 데이터가 유지 된다.
  • tcp보다 처리속도가 빠르다 (네트워크 소켓을 거치지 않기 때문)
  • 한 어플리케이션에서만 접근이 가능하다.

3. MEM 모드 - jdbc:h2:mem:...

  • H2 데이터베이스를 메모리에서 실행하는 방식.
  • 어플리케이션이 종료되면 데이터도 삭제된다.
  • 주로 테스트 환경에서 사용한다.
  • 어플리케이션 실행 중에만 데이터가 유지된다.

📌 최종 비교표

모드데이터 저장 방식애플리케이션 종료 후 데이터 유지멀티 프로세스 접근속도
TCP(Server) 모드파일(.mv.db)✅ 유지됨✅ 여러 애플리케이션 가능⬇ 느림 (네트워크 필요)
Embedded(임베디드) 모드파일(.mv.db)✅ 유지됨❌ 단일 애플리케이션만 사용 가능⬆ 빠름 (로컬 접근)
MEM(메모리) 모드메모리(RAM)❌ 유지 안됨❌ 단일 애플리케이션만 사용 가능🚀 가장 빠름

📌 언제 어떤 모드를 사용해야 할까?

상황추천 모드이유
운영 환경 (실제 서비스 배포)TCP(Server) 모드여러 애플리케이션에서 같은 DB 접근 가능, 데이터 유지됨
로컬 개발 환경 (파일 기반 데이터 저장)Embedded 모드단일 애플리케이션에서 사용, 데이터 유지됨
테스트 환경 (테스트 실행 시마다 초기화됨)MEM(메모리) 모드빠르고 테스트 종료 후 자동 삭제됨

🚀 결론

운영 환경에서는 TCP(Server) 모드를 사용하여 여러 애플리케이션이 동일한 DB를 공유하도록 설정.
로컬 개발 환경에서는 Embedded 모드를 사용하여 쉽게 데이터베이스를 유지하면서 개발 가능.
테스트 환경에서는 MEM 모드를 사용하여 빠른 테스트 실행과 자동 초기화가 가능.

profile
꼬질이

0개의 댓글