사용자 수에 따른 규모 확장 (2)

문린이·2022년 10월 20일
0

출처 : 원티드 & 멘토 훈님 & AWS & Akamai

기본 개념

1. 데이터베이스 다중화

대부분의 애플리케이션은 읽기의 비율이 절대적으로 높다.

따라서 데이터의 변경과 관련된 행동은 주 데이터베이스에서 처리하고
읽기와 같은 반복적인 행동은 부 데이터베이스에서 처리하는 것이 더 나은 성능을 위해 필요하다.

2. 캐시

캐시란 사전적인 의미로 데이터나 값을 미리 복사해 놓는 임시 장소를 가리킨다.

캐시의 장점은 데이터베이스에 직접 조회하는 것보다 성능이 좋을 뿐만 아니라 데이터베이스 부하를 부하를 줄일 수 있다.

공지사항을 보여주는 api(반복적이고 데이터의 변동이 거의 없는 상황)에서 캐시를 사용한다면 첫 번째 요청 이후부터는 캐시에 저장되어 있는 데이터를 바로 읽어서 전달하면 되기 때문에 시스템 부하를 줄일 수 있다.

로컬 캐시 vs 글로벌 캐시

로컬 캐시(npm cache)

  • 네트워크 호출이 필요없다.
  • 서버 물리 메모리의 직접 접근하므로 빠르다.
  • 서버가 여러대인 경우 동기화 문제가 있다.
  • 인스턴스 물리 메모리 사이즈 제약이 있다.

글로벌 캐시(Redis)

  • 서버 동기화를 걱정할 필요가 없다.
  • 네트워크 호출이 필요하다.
  • 상대적으로 로컬 캐시 보다 느리다.
  • 캐시 서버 장애 대비가 필요하다.

3. CDN (Contents Delivery Network)

CDN이란 데이터 사용량이 많은 애플리케이션의 웹 페이지 로드 속도를 높이는 상호 연결된 서버 네트워크이다.

CDN의 장점

  • 페이지 로드 시간 단축
  • 대역폭 비용 절감
  • 콘텐츠 가용성 제고
  • 웹 사이트 보안 강화

4. 트랜잭션

트랜잭션은 데이터베이스 서버에 여러 개의 클라이언트가 동시에 액세스 하거나 응용프로그램이 갱신을 처리하는 과정에서 중단될 수 있는 경우 등 데이터 부정합을 방지하고자 할 때 사용한다.

AICD

ACID란 Atomicity(원자성), Consistency(일관성), Isolation(고립성), Durability(지속성)의 약자로서, 데이터베이스의 트랜잭션이 안전하게 수행되기 위한 4가지 필수적인 성질을 말한다.

  • Atomicity(원자성) : 하나의 트랜잭션이 더 이상 작게 쪼갤 수 없는 최소한의 업무 단위로 트랜잭션이 데이터베이스에 모두 반영되던지, 아니면 전혀 반영되지 않아야 하며 작업이 부분적으로 실행되거나 중단되지 않는 것을 보장하는 것

  • Consistency(일관성) : 트랜잭션이 완료된 결괏값이 일관적인 DB 상태를 유지하는 것을 말한다.

  • Isolation(고립성) : 하나의 트랜잭션 수행시 다른 트랜잭션의 작업이 끼어들지 못하도록 보장하는 것이다. 즉, 트랜잭션 끼리는 서로를 간섭할 수 없다.

  • Durability(지속성) : 트랜잭션의 성공 결과 값은 장애 발생 후에도 변함없이 보관되어야 한다는 것으로 정상적으로 종료된 다음에는 영구적으로 데이터베이스에 작업의 결과가 저장되어야 한다.

5. DB Lock

낙관적 락 vs 비관적 락

낙관적 락

  • 버전정보를 이용하여 업데이트를 처리하는 방법
  • 경쟁이 심하지 않은 상황이라면 낙관적락이 비관적락보다 비교적 성능이 좋다.
  • 하지만 경쟁이 심하다면 Rollback 비율이 높아지기 때문에 성능이 떨어진다.

비관적 락

  • 트랜잭션의 충돌이 발생한다고 가정하고 우선 락을 거는 방법
  • 락이 걸린 상태에서 다른 트랜잭션은 락이 끝날때까지 대기하는 상태가 된다.
  • 개별 트랜잭션의 성능을 향상 시키는 방법 말고는 락 시간을 줄이는 방법을 찾기 어렵다.

마치며

이번 시간에 배운 게 정말 많다. 배우는 거에서 끝나는 게 아니라 데이터베이스 다중화, 캐시, 트랜잭션 등 실제로 코드를 짜보고 적용해 봐야 할 거 같다.

profile
Software Developer

0개의 댓글