데이터 중심 애플리케이션 설계 (5) 썸네일형 리스트형 [데이터 중심 애플리케이션 설계] 분산 시스템의 골칫거리 1) 서문- 지난 몇 개 장에서 되풀이됐던 주제는 시스템이 잘못된 것을 어떻게 처리하느냐였다. 예를 들어, 복제 서버 장애 복구, 복제 지연, 트랜잭션의 동시성 제어를 설명했다. 실제 환경 시스템에서 나타날 수 있는 다양한 에지 케이스를 잘 이해할수록 이것들을 잘 처리할 수 있다. - 그러나 결함에 관한 많은 얘기를 했지만, 지난 몇 개 장은 아직도 너무 낙관적이었다. 현실은 훨씬 더 암울하다. 이제 비관주의를 최대한으로 끌어올려 어떤 것이든지 잘못될 가능성이 있다면 잘못된다고 가정한다. - 분산 시스템을 다루는 것은 한 컴퓨터에서 실행되는 소프트웨어를 작성하는 일과는 근본적으로 다르다. 그리고 핵심적인 차이는 뭔가 잘못될 수 있는 새롭고 흥미진진한 방법이 많다는 점이다. 이번 장에서는.. [데이터 중심 애플리케이션 설계] 관계형 모델과 문서 모델 1) 서문 - 데이터 모델은 아마도 소프트웨어 개발에서 제일 중요한 부분일 것이다. 왜냐하면 데이터 모델은 소프트웨어가 어떻게 작성됐느닞 뿐만 아니라 해결하려는 문제를 어떻게 생각해야 하는지에 대해서도 지대한 영향을 미치기 때문이다. - 대부분의 애플리케이션은 하나의 데이터 모델을 다른 데이터 모델 위에 계층을 둬서 만든다. 각 계층의 핵심적인 문제는 다음 하위 계층 관점에서 데이터 모델을 표현하는 방법이다. 예를 들어 보자. (1) 애플리케이션 개발자는 현실(사람, 조직, 상품, 행동, 자금 흐름, 센서 등)을 보고 객체나 데이터 구조, 그리고 이러한 데이터 구조를 다루는 API를 모델링한다. 이런 구조는 보통 애플리케이션에 특화돼 있다. (2) 데이터 구조를 저장할 때는 .. [데이터 중심 애플리케이션 설계] 트랜잭션 1) 개요- 냉혹한 현실 세계에서 데이터 시스템은 여러 가지 문제가 생길 수 있다 (1) 데이터베이스 소프트웨어나 하드웨어는 (쓰기 연산이 실행중일때를 포함해서) 언제라도 실패할 수 있다(2) 애플리케이션은 (연속된 연산이 실행되는 도중도 포함해서) 언제라도 죽을 수 있다(3) 네트워크가 끊기면 애플리케이션과 데이터베이스의 연결이 갑자기 끊기거나 데이터베이스 노드 사이의 통신이 안될 수 있다(4) 여러 클라이언트가 동시에 데이터베이스에 쓰기를 실행해서 다른 클라이언트가 쓴 내용을 덮어쓸 수 있다(5) 클라이언트가 부분적으로만 갱신돼서 비정상적인 데이터를 읽을 수 있다(6) 클라이언트 사이의 경쟁 조건은 예측하지 못한 버그를 유발할 수 있다 - 시스템이 신뢰성을 지니려면 이런 결함을 처리해서 전체 .. [데이터 중심 애플리케이션 설계] 유지보수성 - 소프트웨어 비용의 대부분은 초기 개발이 아니라 지속해서 이어지는 유지보수에 들어간다는 사실은 잘 알려져 있다. 이런 유지보수에는 버그 수정, 시스템 운영 유지, 장애 조사, 새로운 플랫폼 적응, 새 사용 사례를 위한 변경, 기술 채무 상환, 새로운 기능 추가 등이 있다. - 유감스럽게도 여전히 소프트웨어 시스템상에서 일하는 많은 사람은 소위 레거시 시스템 유지보수 작업을 좋아하지 않는다. 어쩌면 다른 사람의 실수를 고쳐야 하거나 한물 간 플랫폼에서 작업해야 하거나 정말 하기 싫은 일을 해야 하는 시스템에 관여해야 하기 때문이다. 모든 레거시 시스템은 각자 나름대로의 불편함이 있다. 그래서 이런 레거시 시스템을 다루기 위해 일반적으로 추천할 만한 방법을 제시하는 일은 매우 어렵다. - 하.. [데이터 중심 애플리케이션 설계] 부하 대응 접근 방식 1) 부하 증가에 대한 대응 - 부하 매개변수가 어느 정도 증가하더라도 좋은 성능을 유지하려면 어떻게 해야 할까? 부하 수준 1단계에 적합한 아키텍처로는 10배의 부하를 대응할 수 없다. 급성장하는 서비스를 맡고 있다면 부하 규모의 자릿수가 바뀔 때마다 혹은 그보다 자주 아키텍처를 재검토해야 할지 모른다 - 사람들은 확장성과 관련해 용량 확장(scale up), 규모확장(scaling out)으로 구분해서 말하곤 한다. 다수의 장비에 부하를 분산하는 아키텍처를 비공유 아키텍처라 부른다. 현실적으로 좋은 아키텍처는 실용적인 접근 방식의 조합이 필요하다. 예를 들어, 적절한 사양의 장비 몇 대가 다량의 낮은 사양 장비보다 여전히 훨씬 간단하고 저렴하다. 2) 탄력적 시스템 vs 비탄력적 시스.. 이전 1 다음