백엔드 개발에 관심이 있다면 한 번쯤은 들어봤을 MSA
백엔드에 대해서 공부할수록 느껴지는 게 있다.
프레임워크를 능숙히 사용하고, 코드를 우아하게 짜고, 새로운 신기술을 사용하는 것..
모두 정말 중요하다고 생각한다.
나는
스프링, 장고 같은 프레임워크를 깊이 이해해서 요구사항을 빠르고 쉽게 해결하고 싶다.
불필요한 중복을 최소화하면서 객체지향적인 코드를 짜고 싶다.
새로운 신기술을 도입해서 기술적 역량을 확장시키고 싶다.
근데 위 3가지를 연습하면서도 최종적으로 바라봐야 할 '숲' 같은 존재는 인프라/아키텍쳐 부분이라고 생각한다.
같은 프로젝트를 수행하더라도 더 확장하기 쉽고, 변경이 쉬운 구조를 설계하는 사람이 되고 싶다.
그런 설계 방식 중 하나가 마이크로 서비스 아키텍처이다.
한 단계 더 깊이 생각하는 백엔드 엔지니어가 되기 위해서 MSA를 이해하고 구축해보기로 마음먹었다.
그래서 우선, 진행하려는 프로젝트에 MSA를 적용하는 경우 생기는 장단점을 정리해보았다.
내가 생각하는 MSA의 장점 2가지는 다음과 같다.
1. 모든 기능이 개별적으로 분리되어있기 때문에 문제의 효율적인 처리가 가능하다.
예를 들어 만약 로그인, 결제, 검색 기능 중에서 결제 기능에 문제가 발생한다면 결제 기능을 담당하는 컨테이너에만 문제가 생길 것이고, 로그인과 검색 기능에는 문제가 없을 것이다.
따라서 검색만 수행하는 회원들의 경우에는 서비스에 장애가 발생했다는 사실조차 모를 것이다.
2. 다양한 언어 사용 가능
서비스에 알맞은 특성을 가진 언어 혹은 개발자마다 각자 숙련된 언어로 개발이 가능하다.
서비스 간의 통신 규칙을 잘 설정하고, 메시지 브로커를 잘 사용한다면 사용언어에 제약이 없는 애플리케이션이 만들어질 것이다.
Django를 어느 정도 사용했고, 이제 Spring을 새로 배우는 중이다.
Spring을 배우고 있지만 앞으로 개발하면서 이전에 사용했던 Django 지식을 안 쓰게 될 것 같은게 아까웠다.. 그래서 Spring과 Django가 합쳐진 백엔드를 구성해보고 싶었다.
MSA의 단점은?
사실 내가 만들려는 서비스가 절대 거대한 서비스가 아니기 때문에 장점보다는 단점이 훨씬 많을 것으로 예상된다..
DB 분리로 인한 테이블 join의 복잡성 증가(원하는 정보들을 받고, 비즈니스 로직에서 table join을 구현해야 할 것 같다..)
네트워크 비용 증가(서비스간의 통신이 모두 HTTP통신으로 바뀌므로 요청 시간도 오래 걸릴 것이고, 서버에 부담도 많이 갈 것이다.)
배포의 복잡도 증가(단순히 Django앱 하나의 배포가 아니라 Spring과 함께 연동해서 배포를 해야 한다.)
테스트의 어려움(unit테스트가 아니라 통합 테스트를 하기 위해서는, 사실상 로컬에서 모든 서비스를 배포하는 것처럼 실행시켜야만 테스트가 가능할 것이다.)
이외에도 정말 많은 단점이 있지 않을까?
누군가 간단한 토이 프로젝트 수준에 왜 MSA를 적용하냐고 묻는다면..
솔직한 대답은 '언젠간 스스로 MSA를 구축해본 경험이 도움이 되지 않을까 해서'이다.
즉, 개발적인 욕심을 채우기 위한 아키텍팅이 목적이다.
..
어떤 velog에서 '억지 마이크로 서비스'라는 글을 읽었다. 링크는 첨부하지 않겠다.. 궁금하면 댓글 달아주세요
그 글을 작성하신 분은 주니어 현업자 분이신 것 같았다.
많은 후회와 회의감이 느껴지는 글이었다.
본인이 선택한 프로젝트였고, 설계 방식이었는데 '그 프로젝트에 msa를 적용하지 말걸'같은 뉘앙스의 말과
'당신의 프로젝트에는 MSA가 전혀 필요 없을 거예요'라는 말에 자극을 받았다.
마치 MSA 설계를 해보려는 나의 발목을 잡는 듯한 글이었다.
솔직히 글을 읽고 조금 흔들렸다.
MSA로 구축해서 계속 유지보수를 원활히 할 수 있을까
초라한 지식을 가지고 MSA로 만들어봤자 너무 볼품없지 않을까
다른 개발 공부를 하는게 더 도움이 되지 않을까
순간 이런 잡생각들이 들긴 했는데 스스로 반박을 할 수 있었다. 자기합리화인가..?
구축을 했으면 책임감이 생길 것이다. 이건 프로젝트를 끝까지 맡게되는 원동력이 될 것이다.
초라한 지식이라도 가졌음에도 불구하고 아무것도 하지 않는다면 그때서야 진짜로 쓸모없고 초라한 지식이 될 것이다.
백엔드의 숲은 인프라/아키텍쳐라고 생각한다. 다른 개발공부를 해도 결국엔 아키텍쳐로 귀결될 것이다.
이상 주니어 백엔드 개발자가 되고싶은 사람의 MSA에 대한 짧은 생각이었습니다
'Back-End > MSA' 카테고리의 다른 글
[Cloud Native] 분산 시스템의 기초 개념들 (3) | 2022.11.05 |
---|---|
[MSA] 리액티브 마이크로 서비스 패턴 (0) | 2022.05.18 |
RabbitMQ, Redis, Kafka의 특징 (0) | 2022.01.18 |
모놀리식 & 마이크로서비스 아키텍처(분산 시스템) (0) | 2022.01.13 |