인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

eoyeong님의 프로필 이미지

작성한 질문수

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

인기글 Consumer 설계

인기글 선정과 관련해서 궁금한 점이 있습니다.

해결된 질문

작성

·

137

·

수정됨

0

안녕하세요

 

강의 주제와는 맞지 않는 질문일 수도 있는데


모놀리식 아키텍처에서는 그냥 게시글 생성/수정/삭제, 댓글 생성/삭제 등 이런 로직에서 점수를 업데이트하면 될 것 같아서 그런데

모놀리식 아키텍처에서는 이벤트 방식으로 인기글을 선정하는 방법은 불필요하게 복잡하게 구현하게 되는걸까요?

답변 2

4

쿠케님의 프로필 이미지
쿠케
지식공유자

eoyeong님, 안녕하세요!

 

말씀하신 것도 충분히 좋은 방법입니다.

굳이 작은 규모의 시스템에서는 처음부터 복잡한 시스템(MSA 등)을 구축하며 오버엔지니어링 할 필요는 없습니다.

"분산 데이터 모델링"에서 설명하듯이, 도메인 간 경계만 잘 정리해두면,

나중에 분산의 필요성이 생길 때 비교적 손쉽게 처리할 수도 있고요.

아직 분산의 필요성이 안 보인다면, 그냥 게시글/댓글/조회수 처리되는 시점에 즉시 인기글 점수 산정하는 것이 쉽고 충분합니다.

 

다만, 이 부분은 염두에 두면 좋을 것 같은데요.

트랜잭션의 범위는 잘 고민해보시면 좋습니다.

메인 DB(강의에서는 MySQL)의 리소스는 가장 소중하기 때문에,

트랜잭션 범위를 적절하게 설정해야 효율적으로 사용되거든요. (너무 길어지면 DB커넥션/스레드 등의 리소스가 고갈될 수도 있겠죠!)

원본 데이터 CUD와 인기글 점수 산정 작업을 단일 트랜잭션으로 처리해야하는하는가 대해서는 고민해보시는 것도 좋을 것 같습니다.

그 과정에서 코드 구조를 어떻게 만들어나갈 수 있을지에 대한 고민도 많이 생기고요.

외에도, 동기/비동기(사용자 입장에서 인기글 처리를 기다려야하는가?)에 대한 고민도 같이 해보시면 좋습니다.

뒷단에서 인기글 선정이 되든말든 사용자는 당장 알 수도 없고 관심도 없는데, 인기글 선정을 단일 요청에서 처리 및 대기해야 하고, 그 작업이 길어지면 사용자 응답 지연이 생기게 됩니다.

또, 이벤트는 반드시 카프카와 같이 글로벌한 메시지 브로커를 통해서 발행되어야 하는 건 아닙니다.

이벤트는 단지 어떠한 사건이 발생했음을 알려주는 데이터일 뿐입니다.

어떻게 주고 받을지는 구현에 따라 다양할 수 있습니다.

예를 들어, 스프링부트에서 제공하는 ApplicationEventPublisher를 활용하면, 단일 애플리케이션 내에서 이벤트를 발행하고 수신할 수도 있습니다.

이벤트를 적절히 활용하면서도, 그 구현은 훨씬 간단하고 편한 방법이 많습니다.

이벤트를 활용하면, 어떠한 책임에 대해서 분리하기도 쉬워지고요.

말씀 주신 작업에서는, 원본 데이터 작업과 인기글 선정 작업에 대한 코드를 적절히 분리할 수도 있겠네요.

 

혹시 더 궁금한 점 있으시면 편히 문의 주세요!

eoyeong님의 프로필 이미지
eoyeong
질문자

답변을 항상 자세하고 친절하게 알려주셔서 너무 감사합니다!!

간단한 구조에서도 생각해야 할 부분이 상당히 많네요

쿠케님의 프로필 이미지
쿠케
지식공유자

너무 장황하게 말씀드렸나 싶기도 하네요.. ㅎㅎㅎ

아직 경험이 부족할 때에는 이러한 부분들을 다 고려하면서 만들기는 현실적으로 어려울 수 있어서,

당장은 생각하신대로 만들어보는 것도 좋을 것 같네요!

이후에 고도화하면서 더욱 정리할 필요성이 보일때 차츰 정리해나가시는 것도 충분합니다!

화이팅입니다!!

eoyeong님의 프로필 이미지
eoyeong
질문자

아뇨 전혀 장황하지 않고, 질문에 대한 답변을 너무 정성스럽게 달아주셔서 강의만큼이나 도움이 되는 답변이 많아 좋은 것 같아요!

다른 분들 질문에 대한 답변도 다 읽어보는 중입니다 ㅋㅋ

처음부터 완벽하게 만들어야겠다는 생각을 좀 내려놔야겠네요 ㅎㅎ

1

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. eoyeong님.

모놀리식 아키텍처와 이벤트 기반 아키텍처는 서로 다른 장단점을 가지며, 인기글 선정 방법에 영향을 미칠 수 있습니다. 질문해주신 “모놀리식 아키텍처에서 이벤트 방식으로 인기글을 선정하는 방법”에 대해 간단한 설명을 드리겠습니다.

모놀리식 아키텍처에서의 인기글 선정

  1. 간단한 접근 방식:

    • 모놀리식 아키텍처에서는 데이터베이스 내에서 직접 게시글의 점수를 업데이트하는 방법이 일반적입니다. 이 방법은 코드가 단순하고 이해하기 쉬우며, 동일한 트랜잭션 내에서 여러 작업을 처리할 수 있어 데이터 일관성을 쉽게 유지할 수 있습니다.
  2. 이벤트 기반 접근 방식의 고려사항:

    • 모놀리식 아키텍처에서 이벤트 기반 시스템을 도입하면, 시스템이 과도하게 복잡해질 수 있습니다. 특히, 이벤트 전달 및 처리를 위한 추가적인 인프라가 필요하고 이벤트의 비동기 특성으로 인해 데이터 일관성에 대해 추가적인 고려가 필요합니다.
    • 그러나 이벤트 기반 시스템은 각 컴포넌트의 결합도를 낮출 수 있어 시스템의 부분적인 변화나 확장을 더 쉽게 할 수 있다는 장점이 있습니다.

결론

  • 적용 가능 여부: 모놀리식 아키텍처에서는 단순한 코드와 설계가 더 유리할 수 있습니다. 시스템이 크고 복잡하지 않다면 굳이 이벤트 기반 아키텍처로 구현할 필요가 없을 수 있습니다.
  • 시스템 확장성: 반면, 장기적으로 기능이 추가되고 시스템이 확장될 것이라면 이벤트 기반 아키텍처를 고려하는 것이 유리할 수도 있습니다. 그러나 이 경우에도 모놀리식 구조 내에서 가능한 간소한 형태로 구현하는 것이 좋습니다.

이 주제에 관련된 더 많은 정보는 아래 유사한 질문 답변 링크를 참고하시기 바랍니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

eoyeong님의 프로필 이미지

작성한 질문수

질문하기