Skip to content
Open
Changes from all 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,59 @@
# 소프트웨어 아키텍처 The Hard Parts
## 10장 ~ 12장
---
## 논의 내용
* 보상 트랜잭션 자체가 실패할 수도 있는 가능성은 정말로 무시할 수 없는 수준인가에 대해서 논의해보고 싶습니다. 그대로 적용 할거면 실패에 대한 또다른 예외 처리를 해야하는데 이는 너무 복잡해 질 수도 있다고 생각했습니다(예외를 위한 예외처리). 또한 보상 트랜잭션이 실패했던 경험이 있으면 공유해도 좋을 것 같습니다(실제 사례가 궁금해요!)
Copy link
Member

Choose a reason for hiding this comment

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

지난 시간에 사람이 직접 에러를 보고 보상 트랜잭션을 처리하는지도 논의 했었는데
근주님과 태형님이 그렇다고 한걸 봐서는 종종 있는 일이라고 느꼈습니다.

만약 실패에 대한 보상 트랜잭션이 너무 복잡하다면 책의 설명대로 원자적 트랜잭션 보다는 최종 일관성 쪽으로 하는게 맞다고 봅니다.

Comment on lines +4 to +5
Copy link
Collaborator

Choose a reason for hiding this comment

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

평시에는 크게 문제가 없는데, 주로 장애상황에서 지옥이 펼쳐지는 경우가 있었습니다

주로, 저희 회사의 주문의 상태와 / 외부사의 주문 상태가 틀어져서, 이부분을 맞추기 위해서, 주문을 취소 처리하는 보상 트랜잭션을 수동으로 적용하는 경우가 있었는데요

장애가 발생하게 되었을 때, 예상치못한 많은 일(?)들이 있었는데.. 뭔가 말로 설명드리기 힘드네요

아무튼 워크플로우에 많은 MS가 엮여있고, 복잡하고 다양한 케이스가 있을수록 변수가 많아서 장애가 발생했을 때, 지옥을 많이 경험했었습니다

Copy link
Collaborator

Choose a reason for hiding this comment

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

그대로 적용 할거면 실패에 대한 또다른 예외 처리를 해야하는데 이는 너무 복잡해 질 수도 있다고 생각했습니다(예외를 위한 예외처리)

저희의 경우 보상 트랜잭션 실패 시에는 자동으로 보상트랜잭션 실패를 다시 커버하는 코드를 작성해서 대응하기 보다는 로그를 통해서 상황파악후에, 실패한 구간 부터 다시 수동ㅇ로 보상 트랜잭션을 재실행 시키도록 하는 방식으로 많이 대응했던 것 같습니다

Copy link
Contributor

Choose a reason for hiding this comment

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

최종적 일관성을 어느 수준까지 보장해줄것인가에 따라서 다른 것 같습니다.
예를 들어 조회수나 좋아요와 같이 어느 정도의 불일치가 허용되는 서비스라면 적당히 재시도/로그 정도로 끝내도 될 것 같습니다.
하지만 재고, 결제와 같이 민감한 서비스는 보상 트랜잭션의 실패도 충분히 고려해서 설계하는 게 좋다고 생각합니다.

이처럼 도메인에 따라서 "구현이 복잡한 것"과 "장애 상황에서 복잡한 것"을 저울질하면서 적용해보면 좋을 것 같습니다.

Copy link
Contributor

Choose a reason for hiding this comment

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

저희는 보상 트랜잭션 실패한 적이 꽤 됩니다. 결제 호출은 성공했으나 어떠한 이유로 전체 결제 프로세스에서 한 부분이 실패했고, 결제 호출했던 것에 대해 취소를 날리는데, 이 때 실패를 한 경우입니다.

저희는 이러한 경우를 위해 다음 날 오전에 전체 데이터를 모아서 JOIN하여 대사를 해서 몇 건 안 된다면 어드민 통해하고, 장애로 인해 너무 많은 건이 존재한다면 배치로 처리합니다.


## Chapter 10 - 분산 데이터 액세스
데이터가 분해된 상태에서는 단순 조회조차 쉽지 않다.
책은 서비스가 자신이 소유하지 않은 데이터를 읽는, 다시 말해 데이터를 필요로 하는 서비스의 경계 콘텍스트 외부에서 읽기 액세스를 획득하는 패턴으로 4가지를 소개한다.
책에서 나온 패턴으로는 서비스 간 통신 패턴, 컬럼 스키마 복제 패턴, 복제 캐싱 패턴, 데이터 도메인 패턴이 있다.

서비스 간 통신 패턴 같은 경우에는 책에서 말한 것과 같이 가장 일반적이고 흔히 사용되는 패턴인 것 같다.
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

문장의 간결성을 위해 '같은 경우에는'을 '은/는'으로 변경하는 것이 좋습니다.

Suggested change
서비스 간 통신 패턴 같은 경우에는 책에서 말한 것과 같이 가장 일반적이고 흔히 사용되는 패턴인 것 같다.
서비스 간 통신 패턴은 책에서 말한 것과 같이 가장 일반적이고 흔히 사용되는 패턴인 것 같다.

회사 내에서도 이 패턴을 가장 많이 사용하는 것이 보이기 때문에 익숙했다.
대신 레이턴시라는 트레이드 오프가 발생하고, 서비스 커플링 또한 발생하기도 한다.

컬럼 스키마 복제 패턴은 많지는 않지만 쓰이긴 하는 패턴이라 너무 새롭지 않았다.
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

'쓰이긴 하는 패턴이라'는 표현보다 '사용 빈도가 높지는 않지만 익숙한 패턴이라'와 같이 좀 더 자연스러운 표현으로 변경하는 것을 제안합니다.

Suggested change
컬럼 스키마 복제 패턴은 많지는 않지만 쓰이긴 하는 패턴이라 너무 새롭지 않았다.
컬럼 스키마 복제 패턴은 사용 빈도가 높지는 않지만 익숙한 패턴이라 너무 새롭지 않았다.

비동기 통신으로 데이터 변경을 알리고, 데이터를 빠르게 읽어 갈 수 있다는 장점을 느꼈다.

복제 캐싱 패턴은 조금 새로웠다.
캐시 자체가 생소하지는 않지만, 이렇게 데이터 액세스 용도로 캐시를 사용하는 부분은 처음 알게 되었고, 꽤 흥미 있게 보았다.
특히 시작 디펜던시, 데이터양, 데이터 변경 빈도 트레이드오프를 잘 고려하면 사용에는 무리 없어 보였다.

데이터 도메인 패턴은 일반적으로 잘 사용되지 않을 것 같다는 생각이 들었다.
서비스 기반 아키텍처라면 모르겠지만, 마이크로 서비스가 추구하는 것과는 꽤 거리가 있어보인다.

4가지의 패턴을 읽고 한빛가이버는 어떤 패턴을 사용할지 예상했고, 서비스 간 통신 패턴 또는 복제 캐싱 패턴을 생각했다.
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

'한빛가이버는' 대신 '한빛가이버가'로 변경하여 주어와 서술어의 관계를 명확히 하는 것이 좋습니다.

Suggested change
4가지의 패턴을 읽고 한빛가이버는 어떤 패턴을 사용할지 예상했고, 서비스 간 통신 패턴 또는 복제 캐싱 패턴을 생각했다.
4가지의 패턴을 읽고 한빛가이버가 어떤 패턴을 사용할지 예상했고, 서비스 간 통신 패턴 또는 복제 캐싱 패턴을 생각했다.


## Chapter 11 - 분산 워크플로 관리
2장에서 분산 아키텍처는 통신, 일관성, 조정이라는 세 가지 커플링 힘이 서로 영향을 미친다고 했었고, 이번 장에서는 조정에 집중한다.
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

'했었고'를 '했고'로 변경하여 문장을 간결하게 만들 수 있습니다.

Suggested change
2장에서 분산 아키텍처는 통신, 일관성, 조정이라는 세 가지 커플링 힘이 서로 영향을 미친다고 했었고, 이번 장에서는 조정에 집중한다.
2장에서 분산 아키텍처는 통신, 일관성, 조정이라는 세 가지 커플링 힘이 서로 영향을 미친다고 했고, 이번 장에서는 조정에 집중한다.

분산 아키텍처의 두 가지 기본적인 조정 패턴은 오케스트레이션과 코레오그래피다.

오케스트레이션은 워크플로 중앙화, 에러 처리, 복원성, 상태 관리 면에서는 장점을 보여주지만 응답성, 내고장성, 확장성, 서비스 커플링이라는 단점이 존재한다.
신기하게도 코레오그래피는 오케스트레이션과 장단점이 뒤바뀌어 있다.

소프트웨어 아키텍처가 다 그렇듯이 오케스트레이션과 코레오그래피 어느쪽도 완벽한 솔루션이 아니다.
수많은 핵심 트레이드로프를 잘 분석해서 상황에 맞게 둘 중 한가지를 올바르게 선택해야한다.
Comment on lines +35 to +36
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

'어느쪽도'는 '어느 쪽도'로, '한가지를'은 '한 가지를'로, '선택해야한다'는 '선택해야 한다'로 띄어쓰기를 수정하여 가독성을 높일 수 있습니다.

Suggested change
소프트웨어 아키텍처가 다 그렇듯이 오케스트레이션과 코레오그래피 어느쪽도 완벽한 솔루션이 아니다.
수많은 핵심 트레이드로프를 잘 분석해서 상황에 맞게 둘 중 한가지를 올바르게 선택해야한다.
소프트웨어 아키텍처가 다 그렇듯이 오케스트레이션과 코레오그래피 어느 쪽도 완벽한 솔루션이 아니다.
수많은 핵심 트레이드오프를 잘 분석해서 상황에 맞게 둘 중 한 가지를 올바르게 선택해야 한다.


조금 쉽게 예시를 들자면, 높은 확장성이 필요하고 에러가 발생할 일이 드문 워크플로우는 정교한 에러 처리를 희생하는 대신에 코레오그래피 특유의 높은 확장성을 노려볼 만하다.
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

'워크플로우'는 '워크플로'로 표기하는 것이 일반적입니다. 일관성을 위해 수정하는 것을 제안합니다.

Suggested change
조금 쉽게 예시를 들자면, 높은 확장성이 필요하고 에러가 발생할 일이 드문 워크플로우는 정교한 에러 처리를 희생하는 대신에 코레오그래피 특유의 높은 확장성을 노려볼 만하다.
조금 쉽게 예시를 들자면, 높은 확장성이 필요하고 에러가 발생할 일이 드문 워크플로는 정교한 에러 처리를 희생하는 대신에 코레오그래피 특유의 높은 확장성을 노려볼 만하다.

그러나 나중에 워크플로에 포함된 시맨틱 복잡도가 증가할수록 아무래도 오케스트레이터가 있는 편이 더 실용적이다.

## Chapter 12 - 트랜잭셔널 사가
개인적으로 책에서 가장 궁금하면서도, 어려웠던 챕터였던 것 같다.
트랜잭션 사가는 구현 방법과 동적 커플링에서 서로 맞물리는 통신, 일관성, 조정이라는 힘의 속성으로 이루어져있다.
이 속성들은 각각 2 개씩 방식이 있어 2 X 2 X 2 = 8 이라는 경우의 수가 나와 8 개의 패턴이 존재한다.
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

'2 개씩'은 '2개씩'으로 붙여 쓰는 것이 자연스럽습니다.

Suggested change
이 속성들은 각각 2 개씩 방식이 있어 2 X 2 X 2 = 8 이라는 경우의 수가 나와 8 개의 패턴이 존재한다.
이 속성들은 각각 2개씩 방식이 있어 2 X 2 X 2 = 8 이라는 경우의 수가 나와 8 개의 패턴이 존재한다.

그리고 처음에는 외우기 정말 부담스러운 이름들이 각각 있다 (에픽 사가, 앤솔로지 사가 등등).

그러나 이름 자체를 외운다기 보다는, 각각 어떤 속성을 지녔는지 천천히 알아본다면 난이도가 조금 떨어진다.
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

'외운다기 보다는'은 '외운다기보다는'으로 붙여 쓰는 것이 맞습니다.

Suggested change
그러나 이름 자체를 외운다기 보다는, 각각 어떤 속성을 지녔는지 천천히 알아본다면 난이도가 조금 떨어진다.
그러나 이름 자체를 외운다기보다는, 각각 어떤 속성을 지녔는지 천천히 알아본다면 난이도가 조금 떨어진다.

통신, 일관성, 조정이 어떤 방식인지 집중하니 비로소 트랜잭셔널 사가의 의미를 알게 되었다.

소프트웨어 아키텍처가 늘 그렇듯이 각각의 장단점이 있었고, 상황에 따라 모두 쓰일 수는 있는 패턴이다.
다만, 서비스의 특성이나 워크플로의 다양한 케이스들을 잘 고려해야 알맞는 사가를 선택할 수 있는 것 같다.
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

'알맞는'은 '알맞은'으로 변경하는 것이 올바른 표현입니다.

Suggested change
다만, 서비스의 특성이나 워크플로의 다양한 케이스들을 잘 고려해야 알맞는 사가를 선택할 수 있는 것 같다.
다만, 서비스의 특성이나 워크플로의 다양한 케이스들을 잘 고려해야 알맞은 사가를 선택할 수 있는 것 같다.


보상 트랜잭션이라는 단어만 보면, 한번 잘 구축해두면 예외 케이스를 잘 커버한 것으로 착각할 수 있지만 결국 그에 따른 부수 효과가 일어날 수 있다.
트랜잭션을 되돌려도 그 이전에 업데이트한 데이터에 대해 이미 다른 서비스가 어떤 작업을 수행했을지 알 수 없고, 이게 아니어도 그냥 간단히 되돌릴 수 없는 경우도 있다고 한다.
심지어 보상 트랜잭션 자체가 실패하는 경우도 있어 후속 조치할 작업들이 서로 뒤엉켜 비일관성과 혼란이 빚어질 수 있다.

트랜잭셔널 사가를 알아가면서 의외로 또 새롭게 배운 것은 문서화가 중요할 수도 있다는 것이었다.
트랜잭셔널 사가는 일련의 워크플로우이기 때문에 분산 아키텍처에서는 한 곳에 모이지 않을 수도 있다(코레오그래피).
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

'워크플로우이기'는 '워크플로이기'로 변경하여 일관성을 유지하는 것이 좋습니다.

Suggested change
트랜잭셔널 사가는 일련의 워크플로우이기 때문에 분산 아키텍처에서는 한 곳에 모이지 않을 수도 있다(코레오그래피).
트랜잭셔널 사가는 일련의 워크플로이기 때문에 분산 아키텍처에서는 한 곳에 모이지 않을 수도 있다(코레오그래피).

따라서 state machine 등을 통해 다양한 상태와 액션을 다이어그램으로 나타내고 어디선가는 문서화가 되어 있어야 유지보수 등이 편할 것 같다고 느꼈다.
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

파일의 마지막에 새 줄(newline)이 없습니다. 이는 일부 시스템에서 문제를 일으킬 수 있으므로 추가하는 것이 좋습니다.

Suggested change
따라서 state machine 등을 통해 다양한 상태와 액션을 다이어그램으로 나타내고 어디선가는 문서화가 되어 있어야 유지보수 등이 편할 것 같다고 느꼈다.
따라서 state machine 등을 통해 다양한 상태와 액션을 다이어그램으로 나타내고 어디선가는 문서화가 되어 있어야 유지보수 등이 편할 것 같다고 느꼈다.