[개발 일기] 2025.05.12 - 분산 저장 (파티셔닝, 샤딩)
·
개발 일기
💡 개요 오늘은 DB의 안정성과 성능을 향상하는 방법인 분산 저장 기법(파티셔닝과 샤딩)에 대해 정리 해보자. 🛠️ 파티셔닝 파티셔닝이란 데이터베이스를 특정 조건을 적용해 여러 부분으로 분할하는 것이다. 하나의 DBMS에 너무 큰(많은 컬럼을 관리) 테이블이 들어가면 성능 측면에서 문제가 발생할 수 있다. 이를 방지하기 위해 테이블이나 인덱스를 작은 파티션 단위로 나누어 사용하는 방법을 의미한다. 파티셔닝을 통해 얻을 수 있는 장점은 다음과 같다. ✅ 성능 향상쿼리를 수행하는 테이블의 데이터 수가 감소하기 때문에 검색 속도가 향상된다. ✅ 관리 용이전체 테이블을 대상으로 백업이나 복원을 진행하는 것이 아니라 파티션 단위로 관리를 하기 때문에 데이터 관리가 더 편해진다. 🛠️ 샤딩 샤..
[개발 일기] 2025.05.11 - Redis 만료 원리
·
개발 일기
💡 개요 오늘은 Redis에서 키가 삭제되는 원리에 대해 정리해 보자. 🛠️ Redis 키 삭제 원리 Redis의 키 삭제 방법은 크게 Lazy Expiration (지연 만료)와 Active Expiration (적극 만료)가 있다. ⚙️ Lazy Expiration (지연 만료) 지연 만료란, 클라이언트가 키에 접근할 때, 해당 키가 만료되었으면 그때 삭제하는 것이다. 그렇기 때문에 따로 삭제하는 작업을 수행할 필요가 없다. ⚙️ Active Expiration (즉시 만료) Redis 서버는 초당 10번(기본 값) expire cycle을 실행한다. 각 사이클 과정은 다음과 같다. TTL이 설정된 키 공간에서 임의의 키 20개를 조사한다.만료된 키들을 삭제한다.만약 삭제된 키가 25..
[개발 일기] 2025.05.10 - Bulk을 사용한 저장이 하나씩 저장하는 것 보다 빠른 이유
·
개발 일기
💡 개요 Bulk을 사용한 저장이 하나씩 저장하는 것보다 빠른 이유에 대해 정리해 보자. 🛠️ Bulk Bulk을 사용한 저장이란, 여러 데이터를 한번에 모아 저장하는 것을 말한다. 일반적으로 Batch Insert나 Bulk Insert 등으로 표현된다. 하나씩 저장for (User user : userList) { userRepository.save(user);} 한번에 모아 저장userRepository.saveAll(userList); 한 번에 저장하는 방식이 성능 면에서 유리한 이유는 무엇일까? 가장 큰 이유는 지연 시간 감소에 있다. 일반적으로 데이터베이스는 데이터를 저장할 때 트랜잭션을 사용한다. 데이터를 하나씩 저장하면 그에 따라 커밋도 여러 번 발생하게 되고, 이..
[개발 일기] 2025.05.09 - MIME
·
개발 일기
💡 개요 오늘은 데이터를 주고받을 때 사용되는 데이터 타입인 MIME에 대해 정리해 보자. 🛠️ MIME MIME(Multipurpose Internet Mail Extensions)은 이메일을 비롯한 인터넷을 통한 데이터 전송에서 텍스트 이외의 다양한 형식의 데이터를 전송할 수 있게 해주는 표준이다. 보통 이메일을 전송할 땐 내부에 텍스트 뿐만 아니라 파일을 전송하는 경우가 많다. 그래서 첨부파일과 같은 데이터는 MIME을 사용해 영문과 숫자 조합으로 변환하여 메일 본문 내부에 포함하면, 마치 첨부파일을 텍스트 데이터처럼 처리한다. 한글로 작성된 메일은 7비트 US-ASCII로 표현을 못하기 때문에 위와 같은 방법으로 MIME을 활용하고 있다. 실제로 MIME을 사용한 메일 데이터를 보면..
[개발 일기] 2025.05.08 - 레코드 수준의 잠금(row-level locking)
·
개발 일기
💡 개요 오늘은 DB의 테이블에 적용되는 레코드 수준의 잠금이 뭔지 정리해 보자. 🛠️ 레코드 수준의 잠금 레코드 수준의 잠금은 DB을 공부할 때마다 자주 나오는 용어이다. 여기서 레코드란 테이블의 한 행 을 의미하며, 레코드 수준의 잠금은 특정 행을 하나의 트랜잭션이 점유(lock)함으로써, 다른 트랜잭션이 해당 행에 접근(읽기 또는 쓰기)하지 못하도록 막는 것을 말한다. MySQL에 여러 트랜잭션이 동일한 테이블에 데이터를 삽입할 때 레코드 수준의 잠금 때문에 지연이 발생한다고 알고있다. 내가 보기엔 그러한 이유는 테이블에는 고유한 인덱스가 부여되기 때문인데, 이를 유지하려면 삽입 시 해당 인덱스에 대한 잠금이 필요하기 때문이다. 즉, 동시에 여러 트랜잭션이 같은 인덱스를 갱신하려고 하..
[개발 일기] 2025.05.07 - WebRTC 구현 방식
·
개발 일기
💡 개요 어젠 WebRTC의 연결과정에서 사용되는 기술이나 프로토콜을 정리했다. 오늘은 WebRTC에서 사용되는 화상통화 구현 방식에 대해 정리해 보자. 👨🏻‍💻 WebRTC 구현 방식 WebRTC를 구현할 때 주로 사용되는 서버 형태는 주로 Signaling, SFU, MCU가 있다. ⚙️ Signaling Signaling 서버의 역할은 피어 간에 offer, answer, ICE candidate 등 초기 연결 정보를 중계하는 것이다. 즉, WebRTC 연결이 성립되기 전까지 필요한 메타데이터만 전달할 뿐, 실제 미디어(오디오/비디오) 데이터는 중계하지 않는다. 그렇기 때문에 피어(화상채팅을 하고자하는 사용자)가 서로 연결될 때 서버의 부하가 발생한다. 그 이후엔 별도의 부하는 ..