|
| 1 | +# 6장 |
| 2 | + |
| 3 | +- 논의 주제 |
| 4 | + - 6장에서 경계 컨텍스트(Bounded Context) 사례로 서비스 C와 D 사이의 데이터 계약 관계에 대해서 말하고 있다. 책에서는 이렇게 데이터를 나누었기 때문에 데이터베이스 D에서 발생한 중대 변경으로 부터 서비스 C가 추상화 되는 장점이 있다고 말하고 있고, 이는 모놀리스 서버를 BC 별로 분리함으로써 얻는 MSA 의 장점으로도 볼 수 있을 거 같은데, 단점은 얘기하고 있지 않고 있다. 어떤 단점이 발생할 수 있을지에 대해서 실제 겪은 일 혹은 머릿속에서 상상해본 사례를 공유해보면 좋을 것 같다 |
| 5 | + - 실제 겪은 일 |
| 6 | + - 경계 컨텍스트(Bounded Context)를 아무리 잘 고려해서, MSA를 구축해도, 비즈니스 복잡도가 심해질 수록, 처음 설계와 다르게 예외상황이 발생함. 이때 선택은 예외가 발생한것을 처리할 MS(Micro Service)를 하나 더 만들지, 기존에 존재하던 MS에 통합할지 두가지 방법이 있다 |
| 7 | + - 하지만, 두 가지 모두 좋지 않은 결과를 초래하는데, MS를 더 만들게 되면, 그만큼 점점 서버 관리 비용이 올라가게 되고, 그렇다고 기존 MS에 통합하게 되면, 기존에 나눠둔 경계 컨텍스트 설계의도가 무색해짐 |
| 8 | + - 이렇게 되면서, 단순히 쿼리조회 1번으로 끝날 작업을 불필요하게 API로 조회요청을 해야하는 경우가 발생하게 되고, 오히려 모놀리식이었으면 금방끝냈을 작업이 여러 MS 들 간에 API호출이 필요하게되는 경우가 발생함 |
| 9 | + - 대개 경계 컨텍스트로 팀이 나뉘는 경우가 많은데, 이런 경우 팀 간의 소통이 필요하게 되고, 소통이 원활하지 않을 때, 소통 비용이 발생하게 됨 |
| 10 | + - 경계 컨텍스트(Bounded Context)를 잘 나누었다는 전제에서, MS간 통신 방식을 EDA(Event Driven Architecture)로 설계 했을 경우, 이벤트 정의, 순서, 소실을 신경써야 하고, 그다지 복잡하지 않은 비즈니스로직을 가진 백엔드 애플리케이션이라면, 배보다 배꼽이 커지는 경우가 발생하게 됨 |
| 11 | +- 요약 |
| 12 | + - 변경으로 인한 장애 격리 가능성을 고려해서 분해를 하고, 데이터를 어떤 서비스에 저장할 것인지를 기준으로 통합을 하자 |
| 13 | +- 키워드 |
| 14 | + - 데이터 분해인 |
| 15 | + - 데이터 통합인 |
| 16 | + - 모놀리식 데이터베이스 분해 5단계 프로세스 |
| 17 | + - 데이터베이스 종류 |
| 18 | +- 내용 |
| 19 | + - 데이터 분해인 |
| 20 | + - 변경 관리 |
| 21 | + - 데이터베이스 스키마 변경이 다른 서비스들을 망가뜨리는 것을 막기 위해 데이터를 나눈다 |
| 22 | + - 커넥션 관리 |
| 23 | + - 서비스들 마다 단위 시간당 필요한 DB 커넥션 수가 다를 수 있기 때문에 이를 별도로 관리하기 위해서 데이터를 나눠서 관리해야한다 |
| 24 | + - 확장성 |
| 25 | + - 서비스는 쉽게 확장되는데, 공유 데이터베이스가 그 속도를 따라가지 못해 발목을 잡는 상황을 막자 |
| 26 | + - 내결함성 |
| 27 | + - 한 바구니에 담긴 달걀을 여러 바구니로 나누어, 하나가 깨져도 나머지는 살리는 전략 |
| 28 | + - 아키텍쳐퀀텀 |
| 29 | + - 아키텍쳐 퀀텀이 1이라면, 그자체가 데이터 분해인 |
| 30 | + - 데이터베이스 타입 최적화 |
| 31 | + - 데이터베이스에 저장하는 데이터 타입에 따라서, 데이터 분해인이 발생할 수 있음 |
| 32 | + - 데이터 통합인 |
| 33 | + - 데이터 관계 |
| 34 | + - 반드시 분해되어야만 하지 않는다면, 통합해서 aggregate 경계 식별을 위해서, 연관 관계를 맺어라(RDB의 경우) |
| 35 | + - 데이터베이스 트랜잭션 |
| 36 | + - 반드시 트랜잭션이 보장되어야 하는지 |
| 37 | +- 내생각 |
| 38 | + - 책 맨 앞에서 설하나 님의 반응은 정상적이라고 생각한다. 최이본 님이 말하는 데이터베이스 분리를 해야하는 이유가 충분치 않기 때문이다. |
| 39 | + - 분해인 과 통합인은 각각 분해를 해야하는 명분과 통합을 해야하는 명분이라고 보면, 좀 더 이해하기가 쉽다 |
| 40 | + - 데이터 분해인들을 종합해서 말하자면, 결국엔 변경으로 인한 장애 격리 가능 여부를 따지는 것으로 볼 수 있다. 쉽게 말하면, 변경하다가 잘못해서 장애가 발생했을 때, 전체에 영향을 미치는지, 제한적으로 격리된 상태로 영향을 미치는지로 보면 된다 |
| 41 | + - 반면에 통합인의 경우는 기준이 다르다. 각 서비스 마다 고유한 데이터를 소유한다고 할 때, 그 고유한 데이터들을 DB에 쓰기를 하는 기준으로 볼 수 있다. 즉, 어떻게 쓰기작업을 원활하게 할 것인가를 기준으로 통합할지에 대한 명분을 고려해볼 수 있다 |
| 42 | + - 이 내용은 DDD의 BC 혹은 aggregate 경계를 식별할 때, 읽기가 아닌, 쓰기를 기준으로 나눈다는 것과 같은 맥락으로 볼 수 있고, 이런 유사한 점들 때문에, MSA와 DDD가 자주 같이 언급된다고 볼 수 있을 것 같다 |
| 43 | + - 그래서, 사실 사가 패턴을 통해서 분산 트랜잭션을 보장해야하는 경우가 있다면, 오히려 데이터 분해와 통합을 제대로 못한 것의 결과로 볼 수 있다고 생각한다. 사가 패턴을 써야하는 상황이라면, 그전에 데이터 분해와 통합이 제대로 되었는지 부터 확인해보는게 필요하다고 생각한다 |
0 commit comments