[강사 인터뷰] SAP,AWS,삼성전자 출신 테크 리드가 말하는 정답이 없는 MSA에서 능력을 키우는 법

#MSA #마이크로서비스아키텍처 #백엔드 #DevOps


정답이 없는 마이크로 서비스에서
우리는 어떻게 나아가야 할까요?

안녕하세요! 자기소개 부탁드립니다.

현재 에듀테크 스타트업에서 SRE 팀을 리딩하고 있는 김성진이라고 합니다. 엔터프라이즈 어플리케이션을 만드는 자바 개발자로 커리어를 시작했고, 대학원에서 시스템 소프트웨어 전공을 이후에는 시스템 엔지니어, DevOps 엔지니어로 일을 해오고 있습니다.

AWS, SAP에서 근무하셨을 때는 어떠한 일들을 해오셨나요?

AWS에서는 Solutions Architect로 일을 했습니다. 클라우드에서 서비스를 구성하는 것을 레고 만들기에 비유하곤 하는데요. 200개가 넘는 수많은 AWS 서비스 블록들을 어떻게 적절히 구성하여 클라우드에 최적화된 서비스를 만들어 낼 수 있는지 도움을 드리는 역할을 했습니다.

SAP에서는 HANA Database 팀의 DevOps Engineer로 일을 했습니다. HANA 데이터베이스는 이미 수많은 엔터프라이즈 환경에서 검증이 된 데이터베이스긴 하지만, Kubernetes라는 새로운 컴퓨팅 환경에 구동되면서 새로운 이슈들이 발생하는 부분이 있었고, 이를 개선하기 위한 다양한 활동을 진행했습니다.

현재는 테크 리더로서 어떤 업무를 맡고 계실까요?

현재 있는 회사는 스타트업이다보니 아무래도 성장이 더 중요한 상황이었구요. 그 과정에서 일부 놓치고 있거나, 또한 알고는 있지만 미뤄놨던 운영 업무들이 존재하는 상황이었습니다. 제 업무는 이런 일들을 개발리더 분들과의 회의를 거쳐 회사의 우선순위에 맞게 하나씩 해결해 나가는 일을 진행하고 있습니다.

MSA 환경을 어려워하는 경우가 많은데, MSA 환경에서의 데브옵스가 어려운 점은 무엇일까요?

MSA를 단순하게 하나의 큰 Monolithic한 앱을 업무 도메인별로 작은 단위의 서비스로 분리한 것이라고 생각해보면, 기존에 있던 DevOps 환경을 하나가 아닌 아닌 복수로 구성하면 되는 게 아닐까라고 생각해볼 수도 있을 것 같습니다. 하지만, MSA에서 지향하는 다양한 개념들을 지탱하기 위해 DevOps와 관련한 새로운 작업들이 필요합니다.

예를 들어 Monolithic 환경에서는 하나의 언어를 사용해 개발이 진행됩니다. 하지만, MSA환경에서는 마이크로 서비스의 목적에 맞게 언어나 프레임워크를 사용하는 것을 지향하고, CI/CD 환경도 이를 위해 여러 환경에 맞게 구성되어야 합니다. 장애를 분석하는 경우에도, Monolithic 환경에서는 하나의 어플리케이션 내부만 확인하더라도 문제를 쉽게 찾아낼 수 있습니다. 하지만 MSA 환경에서는 하나의 요청이 다른 마이크로 서비스를 호출하는 구조로 구성되고, 호출들은 Chaining된 형태로 또다른 서비스들을 호출해 나가는 구조가 될 수 있습니다. 또한 큐나 메시지 브로커들이 연관되어 호출이 진행되는 경우, 복잡도는 더 높아지게 되어 있습니다.

즉, MSA의 장점은 명확하지만, 이처럼 DevOps 측면에서는 더 많은 도전 과제들이 존재합니다.

MSA를 다루려면 어떤 기술이 필요할까요?
이를 우리 강의에서는 어떻게 학습하나요?

강의에서는 클라우드 및 MSA환경과 관련되어 개발자 관점에서 필요한 주요 DevOps 개념들을 설명 드리고, 실무에 활용할 수 있는 실습도 진행할 예정입니다.

그중 한가지 예를 들자면, 카오스 엔니지어링이 있습니다. 사람도 독감 예방주사를 맞는 것 처럼, 서비스도 여러 장애 상황을 미리 주입해서 발생 가능한 문제점들을 사전에 찾아낼 수 있는 유용한 방법인데요. 이번 강의에서는 카오스 엔지니어링에서 사용하는 장애 종류에 대해 알아보고, 간편결제 프로젝트에 직접 오류를 주입해서 동작을 확인해보는 실습을 진행해 보겠습니다.

SRE 테크 리더로서, DevOps나 SRE 직군에서 요구하는 핵심역량은 무엇이라고 생각하세요? 그 핵심 역량을 키우기 위해 어떻게 해야할까요?

DevOps는 넓은 범위의 지식이나 업무 경험이 필요해서 핵심 역량을 몇가지로 꼽기가 어렵긴한데요. 손흥민 선수가 항상 강조하는 것 처럼, 저도 기본기가 중요하다고 말씀드리고 싶습니다. 클라우드, 시스템 디자인, 리눅스, 네트워크, 코딩 등 튼튼한 기본기를 잘 준비하시는게 중요한 것 같습니다.

또한, DevOps 업무에는 자동화를 위해 여러 도구를 활용하는데, 이 과정에서 특정 도구들에 매몰되지 않는 것도 중요합니다. 도구는 문제를 푸는 여러 수단 중 하나이기 때문에, 문제를 정확히 파악하고 적절한 도구를 선택해서 문제를 해결해 나가는 경험을 지속적으로 쌓는 것이 DevOps 핵심 역량을 키우는 좋은 방법이 될 수 있어요.

MSA는 '언제 해야되고 , 어떻게 해야한다' 라는 정답이 없다고들 말합니다. 이에 대해서 성진님의 생각은 어떠신가요?

오래전에 나온 말이지만 "소프트웨어 공학에서 실버불릿은 없다"라는 말이 여기에도 적용이 될 것 같습니다. 각 회사나 프로젝트의 상황에 맞게 적절한 선택을 하는 것이 정답이지 않을까요? 개인적인 의견으로는, 팀에 가장 익숙한 방법을 선택해서 시작하고, 중간중간 기술 부채가 너무 늘어나지 않도록 잘 관리를 하면서, 점진적으로 아키텍처를 진화해 나가면 좋을 것 같습니다.

이번 강의는 타사에서는 만들지 않았던 커리큘럼의 강의인데, 강의의 어떤 부분이 제일 특별하다고 이야기할 수 있을까요?

기존 강의는 하나의 기술을 전달하는 경우가 많은데, 이번 강의는 프로젝트를 기반으로 MSA로 구성된 실무 환경에서 겪을 수 있는 소프트웨어 개발 라이프 사이클 전반의 과정을 배워볼 수 있는 부분이 차별화 되고 의미 있는 부분이라고 생각합니다.

성진님 파트를 듣는다면 수강생이 얻어갈 수 있는 것을 3가지로 말씀해주실 수 있을까요?

DevOps 파트에서는 다음 세가지 관점으로 강의를 구성했습니다.

첫번째는 DevOps 팀과 협업에 필요한 지식입니다.
DevOps 팀과 회의시 자주 나오게 되는 개념이나 용어들에 대해 설명드릴 예정입니다.

두번째는 운영환경의 이해입니다.
개발 환경은 모든 것이 다 허용된 상황이고, 운영환경은 모든게 다 제한된 상황입니다. 어떤 제한들이 추가가 되는지 설명드릴 예정입니다.

세번째는 프로젝트에 기반한 핸즈온입니다.
업무에 빠르게 적응하고 배운 내용을 적용하실 수 있도록, 실무와 유사한 환경으로 실습을 진행할 예정입니다.

강의를 들을 수강생에게 응원이나 조언해주실 수 있을까요?

AWS CTO가 말한 You build it you run it이란 개념처럼, 이제는 개발자가 자신이 개발한 소프트웨어를 실제 운영환경에서 직접 관리하고 유지보수 할 수 있는 능력을 필요로 합니다.
그래서 개발자 분들도 클라우드나 DevOps에 대한 강의나 책을 찾아본 경험이 다들 있으실텐데요. 하지만 대부분 TMI를 경험한 경우가 많을 것 같습니다.
이번 강의에서는 개발자 관점에서 필요한 클라우드나 DevOps와 관련된 내용만을 선을 넘지않고 전달 드릴테니, 재밌게 강의 들으셨으면 좋겠습니다.


지금 패캐머들이 읽고있는 BEST 아티클이 궁금하다면

이 글과 연관된 주제의 추천 강의