Work

[번역 서비스] 번역 시스템 설계

sw_develop 2024. 12. 29. 23:18

라운지 커뮤니티 : https://lounge.onstove.com/

 

📌 기능 요구사항

Q. 번역은 어디에 적용되나요?

  • 게시글과 댓글에 모두 적용된다.
  • 게시글은 조회했을 때 요청 언어에 해당하는 번역이 자동으로 노출되어야 하고, 댓글은 사용자가 '번역 보기'를 클릭했을 때 번역이 노출되어야 한다.
  • 게시글, 댓글이 수정된 경우 수정된 내용에 대한 번역이 노출되어야 한다.

 

Q. 실시간 시스템이어야 하나요?

  • 게시글 번역은 준 실시간 시스템을 허용한다. 게시글 등록 및 수정 후 새로고침했을 때 번역이 자동으로 노출되면 된다.
  • 댓글 번역은 사용자가 '번역 보기'를 클릭했을 때 번역이 바로 노출되어야 한다.

 

Q. 번역은 누가 만들 수 있나요?

  • 게시글 번역은 게시글 등록 및 수정되었을 때 자동으로 생성되어야 한다. 따라서 서버측에서 생성한다.
  • 댓글 번역은 사용자가 '번역 보기'를 클릭했을 때 번역이 생성된다. 따라서 서버측에서 생성한다.

 

📌 설계

번역 구현 방안

  • 사내 번역 서비스를 사용한다. (해당 번역 서비스는 google 번역을 사용하고 있음)
  • 사내 번역 서비스는 언어 감지 및 번역 생성 기능을 제공한다.

 

번역 생성 방안

1) 동기 방식

게시글 번역

  • 게시글 등록/수정 요청 시 등록/수정 처리와 함께 번역을 생성한다.

 

댓글 번역

  • 댓글 번역보기 요청 시 번역을 생성한다.

 

문제점

  • 게시글 번역
    • 라운지의 모든 요청을 처리하는 메인 서버에 게시글 번역 기능까지 추가하게 되면 역할이 너무 커진다.
    • 게시글 등록/수정 처리 로직에서 번역 생성까지 동기적으로 처리하게 되면 로직이 커지게 된다.
    • 번역은 외부 서비스 통신이 필요하기 때문에 성능 병목이 생길 수 있고, 외부 서비스의 장애로 인해 게시글 등록/수정이 영향을 받을 수 있다. (번역 생성은 실패하더라도 게시글 등록/수정에는 영향이 없어야 함)

 

2) 비동기 방식 --> 최종적으로 선택한 구조

게시글 번역

  • 게시글 번역은 준 실시간을 허용하므로 Kafka를 사용해 게시글 번역 생성을 비동기로 처리한다.

 

선택 이유

  • Kafka를 사용해 게시글 등록/수정과 번역 생성 처리를 분리하여 기존 로직에 영향을 주지 않고 느슨한 결합을 만들 수 있다.
  • 라운지 서비스와 번역 처리 서버가 독립적으로 확장 가능하다.