Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
## Summary

- https://github.com/jongfeel/BookReview/issues/1622

## Review

- https://github.com/jongfeel/BookReview/issues/1622#issuecomment-3921793581

### 8.6 코드 재사용 예시와 가치에 대한 설명

보험회사의 각자 다른 팀의 예시로 설명했는데 이 예시를 보고 든 내 생각은 이렇다.
지금은 휴대폰 번호로 개인 인증을 하는 시대이고 다른 방법으로 인증을 한다고 해도 이름, 성별, 주민등록번호, 휴대폰 번호 등은 공통 고객 정보가 될 것이다.
이 정보는 통합 고객 정보로 두고 각 팀별로 원하는 정보는 팀별 고객 데이터베이스에 두는 것이다.
만약 다른 팀에서 고객 정보를 원한다면 이미 가입되어 있는 고객인지만 체크하고 이후 팀에 맞는 도메인 고객 정보는 그 팀에서 추가로 관리하는 방법으로 해도 될 것 같다는 생각이다.

그러면 아키텍처적인 문제를 해결할 수 있다.

1. 팀별 도메인과 시나리오는 팀별 고객 정보를 통해 처리할 수 있다.
2. 아키텍처적인 취약점, 즉 한 팀이 고객 정보를 변경하면 모든 팀에 문제가 생기는 예시지만 내가 제안한 방법은 자신의 팀의 도메인에 맞는 고객 정보만 변경되는 것이다. 즉 공통 고객 정보는 최초 가입 이후에는 변경이 없다.

이후 재사용 문제도 해결 가능하다.

1. 추상화, 이미 공통 고객 정보로 추상화가 가능해진 상태가 되었다.
2. 변경 빈도, 이름, 성별, 주민등록번호, 전화번호는 거의 변경될 일이 없다. 그나마 변경 빈도가 있는 건 전화번호인데 한 사람이 평생 전화번호를 바꿀 일이 몇 번 있을까? (나의 경우라서 적절하진 않겠지만 최초 016에서 010으로 바꿀 때 한 번 빼고 전화번호를 변경한 일이 없다)
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
## Summary

- https://github.com/jongfeel/BookReview/issues/1623

## Review

- https://github.com/jongfeel/BookReview/issues/1623#issuecomment-3921813903

### 9.8.3 이벤트 기반 패턴

이벤트 메시지를 처리하는 방법에 있어서 실패하면 어떻하지라는 생각은 읽기 전 부터 들긴 했는데
지속 가능 구독자라는 기능도 흥미롭고 무엇보다도 수신자가 처리에 실패하면 데드 레터 큐라는 곳에 보낸다는 것도 합리적이라는 생각이 들었다.
사실 이런 내용도 메시지 큐 관련 내용 찾아보면 나올텐데 책 내용을 읽으면서 자연스럽게 이해가 되면서 합리적이었다가 맞다고 볼 수 있을 것 같다.
여태까지 읽어봤던 아키텍처 책에는 이런 설명은 구체적으로 나와있지 않았고 이걸 쓰는 게 맞고 특징이 무엇이고만 나와 있었기 때문이다.

## 논의 내용

9.8 최종 일관성 패턴을 설명하는 세가지 방법에서 오케스트레이티드 요청 기반 패턴과 이벤트 기반 패턴에서 에러 처리할 때 트랜잭션 보상도 문제가 생기면 사람이 해결해야 한다는 내용이 나와 았습니다.
Comment thread
jongfeel marked this conversation as resolved.
Outdated
사실 제가 과거에 작업했던 내용을 떠올려 보면 제가 직접 롤백하는 쿼리를 비즈니스 로직 처리 레벨이 아니라 직접 쿼리 명령 실행 프로그램을 통해 쿼리를 만들어 두고 파일로 저장해 뒀다가 정말 직접 실행해서 에러 처리에 대한 롤백 업데이트를 했었습니다.

이게 다른 분들한테도 흔하게 있는 일인지 궁금하네요.
흔하게 있는 일이라면 사람이 에러 처리하는 방법도 임시적인 방법이었다가 아닌 얼마나 체계적이었는가도 얘기해 보면 좋겠습니다.
Comment thread
jongfeel marked this conversation as resolved.
Outdated
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이게 다른 분들한테도 흔하게 있는 일인지 궁금하네요.

  • 제 경우는 흔한 일 입니다. 다만, 제가 쿼리를 직접 수행하진 않고(권한 없음), DBA를 통해서 요청해서 진행 했었습니다.
  • 단순히 DB만 변경하면 될 때는 위와같이 쿼리를 통해서 해결하지만, 이벤트 발행이 누락되었다던지, API 호출을 다시해줘야한다던지 할 때는 python interpreter 환경에서 직접 코드를 수동으로 동작할 때도 있었고, 아니면, 장애 발생 시, 복구를 위한 slack bot 기능을 만들어두고, 쓰곤 했었습니다

흔하게 있는 일이라면 사람이 에러 처리하는 방법도 임시적인 방법이었다가 아닌 얼마나 체계적이었는가도 얘기해 보면 좋겠습니다.

  • MSA 환경에서는 언제든 장애가 발생할 수 있다고 전제하고, 장애 발생 시 빠르게 조치하기 위해서, 서비스 별 run book을 운영 했습니다. 기본적으로는 매뉴얼하게 빠르게 장애 조치할 수 있는 형태로 운영 되었고, 위에 말씀드린 것 처럼 slack bot 기능으로 처리하거나, python interpreter 활용 혹은 DB만 문제있을 때는 DBA에 요청 등등을 run book에 기록해두고 수행했었습니다