Post

[데이터 중심 애플리케이션 설계] 01장 - 신뢰할 수 있고 확장 가능하며 유지보수하기 쉬운 애플리케이션

[데이터 중심 애플리케이션 설계] 01장 - 신뢰할 수 있고 확장 가능하며 유지보수하기 쉬운 애플리케이션

오늘날 많은 애플리케이션은 계산 중심(compute-intensive)과는 다르게 데이터 중심(data-intensive)적이다. 이러한 애플리케이션의 경우 CPU 성능은 애플리케이션을 제한하는 요소가 아니며, 더 큰 문제는 보통 데이터의 양, 데이터의 복잡도, 데이터의 변화 속도다.


1. 신뢰성 (Reliability)


1. 하드웨어 결함

하드디스크가 고장 나고, 램에 결함이 생기고, 대규모 정전 사태가 발생하고, 누군가가 네트워크 케이블을 잘못 뽑는 것과 같은 것을 하드웨어 결함이라고 하며 많은 장비를 다루는 규모가 큰 데이터센터 같은 곳에서는 늘상 발생하는 일이다.

하드웨어 결함에 대한 대응으로는 각 하드웨어 구성 요소에 중복(redundancy)을 추가하는 방법이 일반적이다. 디스크는 RAID 구성으로 설치하거나 서버는 이중 전원 디바이스와 핫 스왑(hot-swap) 가능한 CPU를, 데이터센터는 건전지와 예비 전원용 디젤 발전기를 갖출 수 있다. 구성 요소 하나가 죽으면 고장 난 구성 요소가 교체되는 동안 중복된 구성 요소를 대신 사용할 수 있다.


2. 소프트웨어 오류

하드웨어 결함은 보통 약한 상관관계가 있는 거의 무작위적인 결함으로 생각한다. 반면 소프트웨어 결함은 각 노드간 상관관계 때문에 시스템 오류를 더욱 많이 유발하는 경향이 있고 예상하기 어렵다는 특징이 있다. 이런 소프트웨어 오류는 신속한 해결책이 없어서 빈틈없는 테스트, 프로세스 격리, 모니터링 등 다양한 방법으로 예방해야 한다.(npm left-pad 사건)


3. 인적 오류

사람은 소프트웨어 시스템을 설계하고 구축하며, 운영자로서 시스템을 계속 운영한다. 이들이 최선의 의도를 갖고 있어도 사람은 실수할 수 있는데 한 대규모 인터넷 서비스에 대한 연구에 따르면 운영자의 설정 오류가 중단의 주요 원인인 반면 하드웨어 결함은 중단 원인의 10~25% 정도에 그친다고 한다.


2. 확장성 (Scalability)


1. 부하 기술하기

부하는 부하 매개변수(load parameter)라 부르는 몇 개의 숫자로 나타낼 수 있으며 부하 매개변수는 웹 서버의 초당 요청 수, 데이터베이스의 읽기 대 쓰기 비율, 캐시 적중률 등 시스템 설계에 따라 달라진다.

트위터의 경우 사용자가 트윗(tweet)을 작성하는 기능과 사용자가 팔로우한 사람의 트윗을 볼 수 있는 기능이 주요 동작이다. 여기서 읽기 요청의 부담이 크다면 Fan-out on Write, 쓰기 요청이 부담의 크다면 Fan-out on Read, 혹은 두 방식의 장점을 취하는 Hybrid Fan-out 전략을 취할 수 있다.


2. 성능 기술하기

클라이언트가 몇 번이고 반복해서 동일한 요청을 하더라도 매번 응답 시간이 다르다. 실제로 다양한 요청을 다루는 시스템에서 응답 시간은 많이 변한다. 그러므로 응답 시간은 단일 숫자가 아니라 측정 가능한 값의 분포로 생각해야 한다. 이런 응답 시간 분포에서 중앙값(median)을 사용하는 것이 좋은데, 산술 평균은 얼마나 많은 사용자가 실제로 지연을 경험했는지 알려주기 않기 때문이다.

중앙값은 p50, p95, p99, p999 등 다양한 수치들이 있으며 각각 50%, 95%, 99%, 99.9%의 사용자가 해당 응답 시간보다 빠르게 응답을 받았다는 뜻이 된다. 응답 시간의 증가는 사용자 만족도 저하를 유발하기 때문에 최적화 비용과의 트레이드 오프를 맞춰 개선해야 한다.


3. 유지 보수성 (Maintainability)


소프트웨어 비용의 대부분은 초기 개발이 아니라 지속해서 이어지는 유지보수에 들어간다. 이런 유지보수에는 버그 수정, 시스템 운영 유지, 장애 조사, 새로운 플랫폼 적용, 새 사용 사례를 위한 변경, 기술 부채 상환, 새로운 기능 추가 등이 있다.

유지보수는 많은 개발자들이 꺼려하는 업무인데 운영성(operability), 단순성(simplicity), 발전성(evolvability)의 원칙에 주의를 기울인다면 유지보수의 고통을 최소화하게끔 소프트웨어 설계를 할 수 있다.


Ref


  • 데이터 중심 애플리케이션 설계 - p.3 ~ p.25

This post is licensed under CC BY 4.0 by the author.