[면접] 기술 면접 - 모놀리식 vs 마이크로서비스 아키텍처
모놀리식 아키텍처와 MSA의 장단점은 무엇인가요?
"모놀리식 아키텍처는 애플리케이션의 모든 기능이 하나의 코드베이스에 통합되어 있는 구조로, 초기 개발과 배포가 간단하다는 장점이 있습니다. 이는 특히 작은 규모의 프로젝트나 단순한 애플리케이션에서 유리하며, 트랜잭션 관리가 용이합니다. 그러나 애플리케이션이 커지면서 복잡성과 유지보수 난이도가 증가하고, 전체 시스템의 재배포가 필요해지는 단점이 있습니다.
반면에, 마이크로서비스 아키텍처는 애플리케이션을 작고 독립적인 서비스로 분할하여 개발하고 배포합니다. 이는 큰 규모의 애플리케이션을 용이하게 관리하고 확장할 수 있게 하며, 다양한 기술 스택의 사용을 가능하게 하는 기술적 유연성을 제공합니다. 단, 서비스 간의 통신 복잡성, 데이터 일관성 유지, 분산 시스템 운영을 위한 추가적인 인프라와 도구가 필요하다는 도전이 있습니다.
결론적으로, 선택은 프로젝트의 규모, 팀의 역량, 그리고 비즈니스 요구사항에 따라 달라질 수 있으며, 초기에는 모놀리식으로 시작해 나중에 마이크로서비스 아키텍처로 전환하는 방법도 고려할 수 있습니다."
꼬리 질문과 답변
> 모놀리식 아키텍처에서의 가장 큰 단점은 무엇인가요?
"모놀리식 아키텍처의 가장 큰 단점은 애플리케이션이 커짐에 따라 관리와 확장이 어렵다는 점입니다. 시스템 전체의 복잡성이 증가하면, 새로운 기능 추가나 버그 수정 시 전체 시스템의 재배포가 필요할 수 있으며, 이는 개발 속도를 늦출 수 있습니다."
> 마이크로서비스를 사용할 때 데이터 일관성을 어떻게 유지하나요?
"데이터 일관성을 유지하기 위해, 마이크로서비스 간에는 분산 트랜잭션을 사용하거나, 이벤트 소싱과 같은 패턴을 활용하여 데이터 변경 사항을 이벤트로 관리할 수 있습니다. 또한, 각 서비스가 데이터를 독립적으로 관리하면서 필요한 경우 다른 서비스와 통신을 통해 데이터 일관성을 보장합니다."
> 마이크로서비스 아키텍처의 서비스 발견은 어떻게 작동하나요?
"서비스 발견은 마이크로서비스 아키텍처에서 중요한 부분입니다. 일반적으로 서비스 레지스트리를 사용하여 각 서비스의 위치와 상태 정보를 관리합니다. 서비스는 시작할 때 자신을 레지스트리에 등록하고, 필요할 때 다른 서비스의 위치 정보를 조회하여 통신할 수 있습니다."
> 모놀리식 아키텍처를 마이크로서비스로 전환하는 과정에서 어떤 어려움이 있나요?
"전환 과정에서는 기존의 단일 코드베이스를 여러 서비스로 분리해야 하며, 이 과정에서 데이터 모델을 재설계하고, 서비스 간 통신 방식을 결정해야 합니다. 또한, 각 서비스의 배포, 모니터링, 로깅 시스템을 개별적으로 설정해야 하며, 이는 초기에 상당한 시간과 노력이 필요합니다."
> 마이크로서비스 아키텍처에서 흔히 발생하는 보안 문제와 해결 방안은 무엇인가요?
"마이크로서비스 아키텍처에서는 서비스 간 통신이 빈번하게 발생하기 때문에, 통신 경로에서의 보안 문제가 발생할 수 있습니다. 이를 해결하기 위해, SSL/TLS와 같은 프로토콜을 사용하여 데이터를 암호화하고, API 게이트웨이를 통해 인증과 권한 부여를 관리할 수 있습니다."
> 모놀리식 아키텍처에서 시작한 프로젝트를 언제 마이크로서비스 아키텍처로 전환하는 것이 좋나요?
"애플리케이션의 규모가 커져 개발과 배포가 느려지거나, 팀이 특정 서비스에 대해 더 빠르게 반복하고자 할 때, 마이크로서비스 아키텍처로의 전환을 고려할 수 있습니다. 또한, 시스템의 특정 부분이 자주 변경되거나, 서로 다른 기술 스택을 요구하는 경우에도 마이크로서비스로의 전환을 고려하는 것이 좋습니다."
> 마이크로서비스 간의 통신에는 어떤 방식이 사용되나요?
"마이크로서비스 간 통신에는 주로 HTTP/REST, gRPC, AMQP(Advanced Message Queuing Protocol) 같은 경량 통신 프로토콜이 사용됩니다. 각각의 프로토콜은 사용 사례에 따라 장단점이 있으며, 예를 들어 HTTP/REST는 보다 단순하고 범용적으로 사용되는 반면, gRPC는 고성능과 강력한 타입 체크를 제공합니다."
> 마이크로서비스 아키텍처에서 모니터링과 로깅은 어떻게 관리하나요?
"마이크로서비스 아키텍처에서는 각 서비스의 모니터링과 로깅 정보를 중앙 집중화하여 관리하는 것이 일반적입니다. Prometheus, Grafana, ELK(Elasticsearch, Logstash, Kibana) 스택 같은 도구를 사용하여 서비스별 성능 지표와 로그를 수집하고 분석할 수 있습니다."
> 마이크로서비스 아키텍처에서 데이터베이스를 어떻게 관리하나요?
"마이크로서비스 아키텍처에서는 각 서비스가 자신의 데이터베이스를 독립적으로 가지는 패턴이 일반적입니다. 이를 통해 서비스 간의 느슨한 결합이 유지되며, 각 서비스는 자신의 데이터 스키마를 자유롭게 변경할 수 있습니다. 하지만, 이로 인해 데이터 일관성과 통합 쿼리 처리가 도전적일 수 있습니다."
> 마이크로서비스 아키텍처에서 API 게이트웨이의 역할은 무엇인가요?
"API 게이트웨이는 마이크로서비스 아키텍처에서 클라이언트 요청을 적절한 서비스로 라우팅하는 중앙 집중형 진입점 역할을 합니다. 또한, 인증, SSL 종료, 요청의 사전 처리 및 후처리 같은 공통 기능을 처리하여 각 마이크로서비스의 복잡성을 줄여줍니다."