인프런 커뮤니티 질문&답변
멀티 모듈이 아닌 MSA 환경에서 common
해결된 질문
작성
·
45
0
지금은 멀티 모듈로 프로젝트를 설정해서 common이라는 공통 모듈로 분리해도 문제가 없을 것 같은데, 정말 개발 환경이 달라지면 어떻게 진행이 되나요?
예를 들어, board는 java, comment는 python으로 개발이 된다고 하면, board와 comment에 사용될 common을 팀끼리 약속을 해두고 각각 서버에 구현을 해서 사용하게 되나요?
답변 2
1
newsungk7님, 안녕하세요!
말씀 주신 내용은 정답도 없고 구현하기 나름입니다.
가장 먼저 고려해볼만한 부분은, 굳이 언어 레벨에서까지 분리할 필요성이 있을지 고민해볼 수 있을 것 같습니다.
여러 프로젝트 간에 반드시 공통 코드로 빌드해야 하다면, 그냥 단일 프로젝트에서 모듈로 코드를 공유하는게 생산성이 훨씬 올라가고 관리도 편하므로, 굳이 분리할 이유도 없고 분리하지 않는게 유리한 측면이 많습니다.
특정 기능을 위한 특화된 언어 또는 프레임워크로 분리해서 만들고 싶다면, 아예 별도의 플랫폼을 만들어서 API/이벤트 등의 별도 프로토콜을 열어줄 수도 있습니다. 핵심 비즈니스 도메인은 이러한 플랫폼을 활용해서 필요한 기능을 구현하면 되는 것이고요. 이처럼 하면 API와 같은 인터페이스 레벨에서 내부 언어/프레임워크 등은 추상화되므로 문제될 부분은 없습니다.
각 언어마다 공통 기능으로 호환되는 라이브러리를 만들어서 제공할 수도 있을 것 같습니다.
관련해서 배포된 것들도 이미 많이 보셨을 것 같고요.
불가한 부분은 아니지만 라이브러리 개발 및 배포 비용도 필요하고, 사용처가 많다면 버전 및 호환성 등 관리가 꽤나 복잡하고 귀찮은 부분입니다.
또, 중복 코드를 항상 공통화할 필요는 없기도 합니다. 딱히 중복이 우려되지 않고 지속적으로 관리되어야 하는 코드가 아니라면, 코드 중복으로 관리하는 것도 문제되지 않는 상황이 많습니다.
만약 여러 언어/프레임워크가 모두 다를 수 있는 프로젝트에서 공통으로 동작 시키려는 코드를 동일하게 만들고 싶더라도, 언어가 다르기 때문에 각 프로젝트마다 다르게 구현될 수도 있습니다.
동일한 기능으로 만들어내더라도, 애초에 이미 다른 코드입니다.
내부 동작이 복잡할수록 기능에 대한 명세를 일관되게 유지하는 것도 어려워질 수 있습니다.
아무튼 현 요구사항인 단일한 게시판 서비스를 이루는 시스템이라면, 게시판이라는 상위 도메인 내에서 분류되는 게시글/댓글 하위 도메인 단위까지 별도 프로젝트로 분리를 해야 하는 것인지 필요성부터 다시 검토를 해보게 될 것 같습니다.
적어도 팀 단위의 분리 또는 플랫폼화의 필요성 등이 있을 때에 프로젝트 분리를 고민해보면 좋을 것 같네요!
0
안녕하세요, 인프런 AI 인턴입니다. newsungk7님.
질문해주신 내용은 다중 언어로 구성된 MSA(Microservices Architecture) 환경에서 공통 모듈(common)을 어떻게 관리하고 공유하는지에 관한 것입니다. MSA 환경에서는 각 서비스가 독립적으로 개발되고 운영되기 때문에, 다양한 언어 및 기술 스택이 사용될 수 있습니다.
MSA에서의 common 모듈 관리 방법
공통 모듈 분리와 문서화:
- 모든 서비스가 서로 다른 언어로 개발되더라도, 공통 기능이나 데이터를 공유해야 하는 경우가 있습니다. 예를 들어, 사용자 인증, 로깅, 메시지 형식 등이 이에 해당할 수 있습니다.
- 이러한 공통 기능을 명세(스펙)으로 문서화하고, 각기의 언어에 맞게 해당 스펙을 구현하여 사용합니다. 이로 인해 서비스 간 일관성을 유지할 수 있습니다.
- 모든 서비스가 서로 다른 언어로 개발되더라도, 공통 기능이나 데이터를 공유해야 하는 경우가 있습니다. 예를 들어, 사용자 인증, 로깅, 메시지 형식 등이 이에 해당할 수 있습니다.
서비스 간 계약(Contract) 이용:
API Contracts혹은Interface Specification을 정의하여 서비스가 어떻게 상호작용할지를 명확히 합니다.
- 이를 통해 언어와 상관없이 데이터 전송 형식과 구조가 일관되게 유지됩니다.
컨테이너 및 마이크로서비스 플랫폼 활용:
- Docker와 같은 컨테이너 기술을 사용하면 언어나 런타임 환경에 관계없이 공통 서비스 및 모듈을 쉽게 배포하고 관리할 수 있습니다.
- Kubernetes 등의 플랫폼을 사용하여 각 서비스가 독립적이면서도 중앙에서 관리될 수 있게 합니다.
- Docker와 같은 컨테이너 기술을 사용하면 언어나 런타임 환경에 관계없이 공통 서비스 및 모듈을 쉽게 배포하고 관리할 수 있습니다.
관련된 유사한 질문과 답변을 제공하는 게시글 링크
이러한 방법들을 통해 MSA 환경에서의 공통 기능을 효과적으로 관리할 수 있습니다. 각 팀은 합의된 명세를 따르며 자신에게 맞는 언어로 구현할 수 있다는 유연성을 가질 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





