제가 검토한 건 이상 세 가지 안입니다. ADR을 확인해 주세요. 개인적으로는 B안의 설계를 추천합니다. A안은 리드 타임 중심이라 신규 서비스와 기존 서비스가 과하게 의존합니다. C안은 반대로 의도적으로 확장의 여지를 두고 설계됐습니다. 그 중간이 B안입니다.
심정적으로는 C안으로 밀고 싶지만 그럴 수는 없겠지.
매달리온 아키텍처가 괜찮네요. 안 그래도 제대로 된 분석을 기반으로 구축하고 싶었는데...
RDB를 혹사했다가 문제가 생겼을 때 돈으로 해결하는 방식은 피하고 싶어요.
- 카미이나 보탄, 취한 모습은 백합의 꽃 6권 69-70쪽
보탄에 나오는 구죠 카나데는 소프트웨어 회사에서 일도 하고 있기 때문에 가끔 그 이야기가 나온다.
나도 개발자다 보니 알아들을 수 있는 내용도 있었지만 처음 듣는 것도 몇 개 있어서 학습 후 메모한다.
ADR #
Architecture Decision Record를 ADR이라고 한다. 아키텍처에 관한 중요한 결정을 맥락과 함께 설명하고 기록하는 문서다. 간단한 양식으로 문제정의, 결정에 영향을 주는 요구사항, 설계결정 등의 내용을 포함한다. txt나 md로 보통 작성
ADR 도입의 장점은 첫째로 일관된 방식으로 의사결정할 수 있다는 것이다. 예를 들어 문서 양식이 '현재 상태 -> 배경 -> 결정 -> 검토한 다른 대안들'과 같은 식이라면 해당 템플릿을 작성하는 과정에서 모두 같은 고려를 거친다.
두번째로 문서화의 당연한 장점이지만 새로운 팀원의 온보딩에 도움이 된다. 당시의 결정 이유까지 남아 있으니.
다음과 같은 요소들로 이루어진다.
- status: 문서의 현재 상태(proposed, accepted, deprecated, superseded)
- context: 해결하고자 하는 문제
- decision: 제안 내용과 결정의 이유, 고려했던 대안들
- consequences: 결정을 통한 영향. 사용자가 받는 영향이나 다운타임 등
예를 들어 다음과 같이 작성할 수 있다.
# ADR 003: 어드민페이지에 React 사용
## Status
Accepted
## Context
신규 관리자 페이지는 폼, 표, 필터가 많고 화면 상태가 자주 바뀐다. 프론트엔드 개발자 4명 중 3명이 React 경험이 있다.
내년에 프론트엔드 개발자를 추가로 채용할 계획이며 채용 시장은 React 쪽이 가장 크다.
대안으로 Vue와 Svelte도 검토했지만 팀 경험과 채용 풀이 부족하다.
## Decision
우리는 관리자 페이지 프론트엔드를 React로 작성한다.
## Consequences
팀이 바로 개발을 시작할 수 있고 채용도 수월해진다.
React 경험이 없는 1명은 적응 기간이 필요하다. 상태 관리와 라우팅 라이브러리는 따로 골라야 하며, 별도 ADR로 기록한다.
ADR-001과 같이 번호로 관리한다. 새로 ADR 체계를 도입시 이런 문서화가 부담스러워지지 않도록 가볍게 문서를 유지해야.
https://github.com/architecture-decision-record/architecture-decision-record
https://swalloow.github.io/feat-adr/
메달리온 아키텍처 #
메달리온 아키텍처는 데이터 레이크하우스에 사용하는 데이터 설계 패턴이다. 데이터가 아키텍처상의 레이어를 통과하는 동안 구조가 점점 개선되는 걸 지향한다. 이때 브론즈 -> 실버 -> 골드처럼 개선된다고 해서 메달 색깔 같아서 메달리온 아키텍처다.
데이터 레이크하우스라는 말도 처음 들어 봤다.
데이터를 뭐든 다 무작위로 저장하는 걸 데이터 레이크라하고(JSON, 로그 등 무작위 데이터) 그걸 잘 정제해서 담아 놓은 것을 데이터 웨어하우스라고 한다고 한다. 내가 주워들은 snowflake, bigquery 같은 게 유명한 웨어하우스 도구다.
당연히 무작위로 다 때려넣는(s3, r2 등의 스토리지) 데이터레이크가 더 저렴하고 용량 제한도 적다.
이때 레이크 위에 데이터를 정제하는 계층을 두고 웨어하우스처럼 사용할 수 있게 해주는 구조를 레이크하우스라고 한다.
그럼 어떻게 정제하느냐? sql 등이 처리하고, 결과가 되는 테이블 포맷으로는 Iceberg, 아파치 Hudi 등이 있다. sql, spark 등으로 형식을 맞춰서 특정 포맷으로 만드는 것이다.
메달리온 아키텍처는 그러니까 데이터를 어떤 단계로 정제할지, 각 레이어의 결과가 어느 정도로 정제되어야 하는지 정하는 방식 중 하나다.
https://www.databricks.com/kr/blog/what-is-medallion-architecture
데이터 레이크하우스가 뭔지 몰라서 https://www.databricks.com/kr/blog/what-is-data-lakehouse