본문 바로가기

책/데이터 중심 어플리케이션 설계

신뢰할 수 있고 확장이 가능하며 유지보수하기 쉬운 어플리케이션 (1)

반응형

 

오늘날 애플리케이션은 계산 중심이 아닌 데이터 중심이다
애플리케이션의 성능은 computing power 가 아닌
데이터의 양, 복잡도 변화 속도, 신선도이다.



일반적으로 데이터 중심 애플리케이션이 공통으로 필요한 기능은 다음과 같다.

  • 데이터를 저장, 수집, 찾을 수 있게 해주는 [데이터베이스]
  • 읽기 속도가 빠르지만 그만큼 자원이 많이 드는 [캐시]
  • 사용자가 키워드로 데이터를 검색하거나 다양한 방법으로 필터링할 수 있게 제공[검색 색인]
  • 비동기 처리를 위해 다른 프로세스로 메시지 보내기 [스트림(실시간 처리)]
  • 주기적으로 대량의 누적된 데이터를 분석 [배치(일괄 처리)]

 

 

이러한 기능을 개발자들이 생각없이 적재적소를 빠르게 할 수 있는 이유는 뭔가?

설마...!?
마사카!!




시스템 추상화가 잘되어 있어서 그렇다..
우리가 뭘 만들때 테이블을 어떻게 만들까 생각하지..
DB를 어떻게 만들까 생각하진 않잖아요?

뭔 상상을 한겨 ㅋㅋㅋㅋㅋㅋㅋㅋ



하지만.. 모든 상황 속에 저기 있는 기능을 다 사용한다 라는 건 간단하진 않죠..
애플리케이션마다 요구사항이 다르고 프로젝트마다 요구사항이 다르기 때문에...!

저기 있는 모든 표준 기능을 요구사항마다 적절히 사용하여 서비스를 만들어내는 것이 능력이고 실력이라고 보고 있습니다..

 

 

 

 

각 기능의 특성을 잘 이해하고 사용해야지만 더욱더 좋은 서비스를 만들어 낼 수 있습니다
무조건 아는걸 다 사용한다고 좋은 서비스는 안나옵니다.





데이터 시스템에 대한 생각

일반적으로 [데이터베이스, 큐, 캐시] 등을 매우 다른 범주에 속하는 도구로 생각한다.
데이터베이스와 메시지 큐는 표면적으로 비슷하더라도(잠깐의 시간이라도 데이터를 저장하니깐) 접근 패턴이 아예 다르다..
그러므로 구현 또한 매우 다르다.

 

 

그러면 여기서 하나 의문이 드는데 왜 데이터 시스템이라는 포괄적인 용어로 묶어야 하나?

에? 왜?

 

 

  1. 데이터 저장과 처리를 위한 도구들은 비교적 최근에 만들어져 다양한 사례에 최적화되어 있기 때문에 전통이라고 부를 수 있나 싶다..
    1. 카프카처럼 지속성을 보장하는 메시지큐 도 있지..
    2. 데이터 스토어인 레디스도 있지..  
      1. 분류 간 경계가 흐릿해서 전통이라고 부를 수 있을까 싶다..
  2. 점점 더 많은 애플리케이션이 단일 도구로는 더 이상 데이터 처리와 저장 모두를 만족시킬 수 없는 과도하고 광범위한 요구사항을 갖고 있음.
    1. 그래서 효율적으로 수행할 수 있도록 task를 나누고 다양한 도구들은 코드를 통해서 서로 연결할 수 있음 
      1. 엘라스틱 이나 솔라 마냥 검색 서버의 경우 DB나 캐시 색인을 유지할 수 있음 

 

 

 

모듈식 프로그래밍을 위해서 인터페이스나 API는 보통 클라이언트가 모르게 구현 세부사항을 숨긴다.

복합 데이터 시스템은 외부 클라이언트가 일관된 결과를 보장할 수 있게끔
캐시를 올바르게 무효화나 업데이트 등의 보장 기능을 제공할 수 있음

개발자는 데이터 시스템도 고려하는 시스템 설계자 인 셈

ㄱ..개발자는 만능이 아니야.!

 

 

데이터 시스템이나 서비스를 설계할 때 까다로운 문제가 발생한다.

  • 내부적으로 문제가 있어도 데이터를 정확하고 안전하게 유지하려면?
  • 시스템 일부 성능이 저하되더라도 클라인트에 일관되게 성능을 제공할 수 있는가?
  • 부하 증가를 다루기 위해 어떻게 규모를 확장하는가?
  • 서비스가 를 위해 좋은 API는 무엇인가?

 

 

관련자의 숙련도 , 의존성, 조직성에 따라 시스템 설계에 영향을 줄 수 있다.

 




이 책에서는 세 가지 중점을 두는데 다들 공감할 거다

  1. 신뢰성
    1. 어떤 오류 나 상황 속에서 시스템은 지속적으로 올바르게 동작
  2. 확장성
    1. 시스템의 데이터 양, 트래픽  양, 복잡도가 증가하면서도 처리할 수 있는 적절한 방법이 있어야 함 
  3. 유지보수성 
    1. 시간이 지나도 모든 사용자 또는 개발자가 생산적으로 작업할 수 있어야 한다. 


다음에 이 3가지를 자세히 알아보자

반응형