반응형
오늘날 애플리케이션은 계산 중심이 아닌 데이터 중심이다
애플리케이션의 성능은 computing power 가 아닌
데이터의 양, 복잡도 변화 속도, 신선도이다.
일반적으로 데이터 중심 애플리케이션이 공통으로 필요한 기능은 다음과 같다.
- 데이터를 저장, 수집, 찾을 수 있게 해주는 [데이터베이스]
- 읽기 속도가 빠르지만 그만큼 자원이 많이 드는 [캐시]
- 사용자가 키워드로 데이터를 검색하거나 다양한 방법으로 필터링할 수 있게 제공[검색 색인]
- 비동기 처리를 위해 다른 프로세스로 메시지 보내기 [스트림(실시간 처리)]
- 주기적으로 대량의 누적된 데이터를 분석 [배치(일괄 처리)]
이러한 기능을 개발자들이 생각없이 적재적소를 빠르게 할 수 있는 이유는 뭔가?
시스템 추상화가 잘되어 있어서 그렇다..
우리가 뭘 만들때 테이블을 어떻게 만들까 생각하지..
DB를 어떻게 만들까 생각하진 않잖아요?
하지만.. 모든 상황 속에 저기 있는 기능을 다 사용한다 라는 건 간단하진 않죠..
애플리케이션마다 요구사항이 다르고 프로젝트마다 요구사항이 다르기 때문에...!
저기 있는 모든 표준 기능을 요구사항마다 적절히 사용하여 서비스를 만들어내는 것이 능력이고 실력이라고 보고 있습니다..
각 기능의 특성을 잘 이해하고 사용해야지만 더욱더 좋은 서비스를 만들어 낼 수 있습니다
무조건 아는걸 다 사용한다고 좋은 서비스는 안나옵니다.
데이터 시스템에 대한 생각
일반적으로 [데이터베이스, 큐, 캐시] 등을 매우 다른 범주에 속하는 도구로 생각한다.
데이터베이스와 메시지 큐는 표면적으로 비슷하더라도(잠깐의 시간이라도 데이터를 저장하니깐) 접근 패턴이 아예 다르다..
그러므로 구현 또한 매우 다르다.
그러면 여기서 하나 의문이 드는데 왜 데이터 시스템이라는 포괄적인 용어로 묶어야 하나?
- 데이터 저장과 처리를 위한 도구들은 비교적 최근에 만들어져 다양한 사례에 최적화되어 있기 때문에 전통이라고 부를 수 있나 싶다..
- 카프카처럼 지속성을 보장하는 메시지큐 도 있지..
- 데이터 스토어인 레디스도 있지..
- 분류 간 경계가 흐릿해서 전통이라고 부를 수 있을까 싶다..
- 점점 더 많은 애플리케이션이 단일 도구로는 더 이상 데이터 처리와 저장 모두를 만족시킬 수 없는 과도하고 광범위한 요구사항을 갖고 있음.
- 그래서 효율적으로 수행할 수 있도록 task를 나누고 다양한 도구들은 코드를 통해서 서로 연결할 수 있음
- 엘라스틱 이나 솔라 마냥 검색 서버의 경우 DB나 캐시 색인을 유지할 수 있음
- 그래서 효율적으로 수행할 수 있도록 task를 나누고 다양한 도구들은 코드를 통해서 서로 연결할 수 있음
모듈식 프로그래밍을 위해서 인터페이스나 API는 보통 클라이언트가 모르게 구현 세부사항을 숨긴다.
복합 데이터 시스템은 외부 클라이언트가 일관된 결과를 보장할 수 있게끔
캐시를 올바르게 무효화나 업데이트 등의 보장 기능을 제공할 수 있음
개발자는 데이터 시스템도 고려하는 시스템 설계자 인 셈
데이터 시스템이나 서비스를 설계할 때 까다로운 문제가 발생한다.
- 내부적으로 문제가 있어도 데이터를 정확하고 안전하게 유지하려면?
- 시스템 일부 성능이 저하되더라도 클라인트에 일관되게 성능을 제공할 수 있는가?
- 부하 증가를 다루기 위해 어떻게 규모를 확장하는가?
- 서비스가 를 위해 좋은 API는 무엇인가?
관련자의 숙련도 , 의존성, 조직성에 따라 시스템 설계에 영향을 줄 수 있다.
이 책에서는 세 가지 중점을 두는데 다들 공감할 거다
- 신뢰성
- 어떤 오류 나 상황 속에서 시스템은 지속적으로 올바르게 동작
- 확장성
- 시스템의 데이터 양, 트래픽 양, 복잡도가 증가하면서도 처리할 수 있는 적절한 방법이 있어야 함
- 유지보수성
- 시간이 지나도 모든 사용자 또는 개발자가 생산적으로 작업할 수 있어야 한다.
다음에 이 3가지를 자세히 알아보자
반응형
'책 > 데이터 중심 어플리케이션 설계' 카테고리의 다른 글
저장소와 검색 (2) (1) | 2024.10.01 |
---|---|
저장소와 검색 (1) (0) | 2024.09.30 |
신뢰할 수 있고 확장이 가능하며 유지보수하기 쉬운 어플리케이션 (3) (1) | 2024.09.09 |
신뢰할 수 있고 확장이 가능하며 유지보수하기 쉬운 어플리케이션 (2) (0) | 2023.04.03 |