밤빵's 개발일지
[TIL]20240913 내부DB & 그냥DB 그리고 동기화 본문
🤓내부 DB와 외부 DB, 그리고 데이터 동기화
나는 내부 DB와 외부 DB의 개념, 그리고 데이터 동기화(Data Synchronization)에 대해 고민할 기회가 있었다. 이 용어들은 많이 들어봤지만, 실제로 어떤 차이가 있는지 명확히 이해하지 못했기 때문에 이번 개발일지를 통해 그 차이와 데이터 동기화의 중요성을 정리하고자 했다.
▶내부 DB와 외부 DB
먼저 내부 DB와 외부 DB의 차이부터 알아보았다. 내부 DB와 외부 DB는 그 용도와 위치에 따라 구분되며, 애플리케이션의 데이터 관리 방식에 큰 영향을 미친다.
▶내부 DB (Internal DB)
내부 DB는 애플리케이션이 실행되는 서버 혹은 로컬 환경에서 직접 접근할 수 있는 데이터베이스를 의미한다. 보통 애플리케이션이 실행되는 환경과 가까운 위치에 있어 접근 속도가 빠르며, 네트워크 장애가 발생해도 애플리케이션이 DB와 통신하는 데 문제가 적다. 예를 들어, 로컬에 설치된 SQLite, 서버 내부에 설치된 MySQL 등이 내부 DB로 활용될 수 있다.
▷ 내부 DB의 장점:
→ 빠른 응답 속도:
데이터베이스가 애플리케이션과 물리적으로 가까워 데이터 접근 속도가 빠르다.
→ 네트워크 의존도 낮음:
네트워크 문제로 인한 지연이나 장애에 덜 민감하다.
▷ 내부 DB의 단점:
→ 확장성 부족:
내부 DB는 하나의 서버에 제한되어 있어 대규모 확장이 어렵다.
→ 데이터 중복 위험:
여러 서버에 분산된 내부 DB를 관리하는 경우, 데이터의 일관성을 유지하기 어려울 수 있다.
▶외부 DB (External DB)
외부 DB는 애플리케이션이 외부 네트워크를 통해 접근해야 하는 데이터베이스이다. 이는 클라우드 상의 데이터베이스 서비스나 외부 데이터 센터에 위치한 데이터베이스일 수 있다. 외부 DB는 중앙집중식으로 관리되며, 다양한 애플리케이션이 동시에 접근할 수 있다. 대표적인 외부 DB로는 AWS RDS, Google Cloud SQL, MongoDB Atlas 등이 있다.
▷외부 DB의 장점:
→ 확장성:
클라우드 기반 외부 DB는 트래픽에 따라 자동으로 확장 가능하다.
→ 중앙 집중 관리:
여러 애플리케이션이나 서버가 같은 DB를 공유할 수 있어 일관된 데이터를 제공할 수 있다.
▷외부 DB의 단점:
→네트워크 의존성:
외부 네트워크에 문제가 생기면 DB에 접근하는 데 지연이 발생하거나 접속이 불가능할 수 있다.
→ 응답 속도:
내부 DB에 비해 네트워크를 경유하기 때문에 응답 속도가 상대적으로 느릴 수 있다.
▶데이터 동기화란?
내부 DB와 외부 DB를 함께 사용하는 환경에서는 데이터 동기화가 매우 중요하다. 데이터 동기화는 서로 다른 위치에 저장된 데이터가 일관성을 유지할 수 있도록 맞춰주는 작업을 의미한다. 예를 들어, 로컬 서버에서 처리된 데이터를 외부 DB와 동기화해야 하거나, 여러 서버 간의 데이터를 동기화해야 할 때 이 과정이 필요하다.
▶데이터 동기화의 필요성
내부 DB와 외부 DB 간의 데이터 동기화가 필요해지는 이유는 여러 서버나 클라이언트가 동시에 데이터를 처리할 때 데이터의 일관성을 유지하기 위해서다. 동기화되지 않은 상태에서는 각 서버나 클라이언트가 서로 다른 데이터를 사용할 수 있어, 데이터의 무결성이 깨질 위험이 있다.
▶동기화 방식
데이터 동기화는 크게 실시간 동기화와 비동기 동기화로 나눌 수 있다.
→ 실시간 동기화:
실시간으로 데이터를 일관되게 유지하는 방식으로, 데이터가 변경될 때마다 즉시 다른 DB나 서버로 전송된다. 주로 트랜잭션이 중요한 시스템에서 사용되며, 데이터의 즉각적인 일관성을 유지할 수 있다. 하지만 네트워크 지연이나 부하가 있을 경우 성능 저하가 발생할 수 있다.
→ 비동기 동기화:
데이터를 일정 주기로 동기화하는 방식이다. 실시간 동기화에 비해 네트워크 부하가 적지만, 그만큼 데이터의 일관성을 즉각적으로 보장하지 못한다. 주로 비즈니스의 특성상 일정한 주기로만 데이터 업데이트가 필요한 시스템에서 사용된다.
▶동기화 문제 해결
내부 DB와 외부 DB 간의 데이터 동기화 과정에서 발생할 수 있는 대표적인 문제는 충돌(Conflict)이다. 충돌은 여러 서버에서 동시에 데이터가 변경될 때 발생할 수 있으며, 이를 방지하거나 해결하기 위해서는 다양한 전략이 필요하다.
→ 락(Lock):
데이터를 수정할 때 한 번에 하나의 프로세스만 데이터를 수정할 수 있도록 락을 거는 방법이다. 하지만 락을 사용하는 방식은 성능 저하를 유발할 수 있다.
→ 최종 일관성(Eventual Consistency):
즉각적인 일관성을 보장하지 않고, 일정 시간이 지나면 일관성이 보장되는 방식이다. 이 방식은 성능을 유지하면서도 일관성을 확보할 수 있는 장점이 있지만, 모든 시스템에서 적합하지는 않다.
▶결론
내부 DB와 외부 DB의 차이점, 그리고 이 두 DB 간의 데이터 동기화의 중요성에 대해 학습할 수 있었다. 내부 DB는 성능 면에서 유리하지만 확장성이 부족하고, 외부 DB는 확장성은 뛰어나지만 네트워크 의존성이 크다. 또한, 데이터 동기화는 여러 서버나 데이터 소스 간의 데이터 일관성을 유지하기 위해 반드시 필요하고, 이를 제대로 처리하지 않으면 데이터 무결성에 큰 문제가 발생할 수 있음을 이해하게 되었다.
'개발Article' 카테고리의 다른 글
[WIL]20240915 JSON직렬화/역직렬화 (0) | 2024.09.15 |
---|---|
[TIL]20240914 Gradle과 Maven의 차이점 (0) | 2024.09.15 |
[TIL]20240912 리플렉션(Reflection)과 자바철학 (0) | 2024.09.12 |
[TIL]20240911 웹과 애플리케이션 (0) | 2024.09.11 |
[TIL]20240910 리젝(Reject) (0) | 2024.09.10 |