
베스핀글로벌? / 윤영기
1. 마이크로서비스란?
마이크로서비스?아키텍처는??단일서버에서?실행되도록?설계된?전통적인?Big?애플리케이션(모놀리스?애플리케이션)과?달리?여러?개의?서버(또는?컨테이너)에서?각자?실행?되면서?전체?기능을?집합적으로?제공할?수?있는?Small?애플리케이션(마이크로서비스)들의?집합을?의미한다.?
최근?우리는?Big?애플리케이션을?모놀리스?애플리케이션(Monolithic?Application),?Small?애플리케이션을?마이크로서비스(Microservice)라?부르고?있다.?
마이크로서비스는?독립적으로?배포되고,?상호간에?느슨하게?결합됨으로써?향상된??확장성과?유연한?기술의?다양성을?부여받게?되며,?독립적으로?배포될?수?있어?변경?요구에?빠르게?대응할?수?있기?때문에?비즈니스?민첩성이?높다는?장점으로?많은?기업이?도입을?고려하고?있다.?
마이크로서비스의?출현이?2002년?경?아마존의?제프베이조스에?의해서라는?견해도?있고,?2011년?베니스에서?개최된?소프트웨어?아키텍처?워크숍에서라는?견해도?있다.?어쨌든?마이크로서비스가?출현한?지?10년이?훨씬?지난?지금,?아직도?마이크로서비스?표준?기술스펙이나?거버넌스는?정립되지?않았다고?필자는?생각한다.?
마이크로서비스?아키텍처를?도입한다는?것은?Big?애플리케이션을?Small?애플리케이션으로?나누고?이를?프로그래밍을?하는?것?뿐?아니라?프로그래밍?된?Small?애플리케이션이?문제없이?잘?돌아가는지,?다른?애플리케이션들과?약속된?상호작용을?잘?하는지에?대한?검증절차도?중요할?것이다.?
본?문서에서는?마이크로서비스를?테스트하는?방법들에?대해서?알아보고,?그?테스트의?목적과?특징에?대해서도?알아보고자?한다.?
2. 마이크로테스트 종류
마이크로서비스도?하나의?프로그램이기?때문에?모놀리스?애플리케이션의?테스트?방법과?비슷한?점도?있을것이고?다른?점도?있을?것이다.?
특히 모놀리스 애플리케이션의 테스트는 내부 모듈 또는 내부 모듈간 상호작용의 오류를 검사하는데 중점을 두는 반면, 마이크로서비스의 테스트는 내부 모듈 뿐 아니라 다른 서비스와의 상호작용 오류를 검사하는 것도 중요하다는데 그 차이점이 있다고 할 수 있다.?

[그림1. 마이크로서비스 아키텍처]
2-1. 단위테스트 (Unit Test)
단위테스트는?개발단계에서?수행되는?가장?기본적인?테스트이며,?서비스?내의?특정?기능이나?특정?메서드,?클래스?등을?테스트?하는?것에?목적을?둔다.?
테스트중인?코드는?데이터베이스나?외부?API,?기타?서비스와?같은?종속성에서?격리되어야?하며,?필요?시?dumy개체를?만들어야?할?때도?있다.??
JUnit,?NUnit,?Jest?같은?테스트?도구나?프레임워크를?사용하여?단위테스트를?할?수?있으며,?코드커버리지?도구를?CI?파이프라인과?엮어서?단위테스트를?자동화?할?수도?있다.?

[그림2. 마이크로서비스 단위테스트 대상]
2-2. 통합테스트 (Integration Test)
통합테스트는?서로?다른?마이크로서비스?또는?외부?시스템과의?상호작용을?검증하는데?목적을?둔다.?
내가?개발한?마이크로서비스가?API나?Event?또는?Message를?통해?다른?서비스와?상호작용을?해야?한다면?테스트전략을?수립할?때?필수?테스트?항목으로?고려해야?할?것이다.?

[그림3. 마이크로서비스 통합테스트 대상]
통합테스트를?하는?방법은?여러?가지가?있겠지만,?세?가지?정도를?생각해?볼?수?있다.?
첫번째?방법은,?상호작용을?하는?마이크로서비스를?함께?실행한?후?실제?데이터를?주고받는?방법이?있을?것이다.??하지만?이?방법은?여러가지?제약이?있다.?
호출받는?쪽의?마이크로서비스도?개발이?완료상태여야?하며?데이터?또한?입력된?상태여야?한다.?만약?호출되는?쪽의?개발이?덜?끝났다면?내?서비스의?테스트도?할?수?없게?된다.?

[그림4. 마이크로서비스 통합테스트 방법-1]
두번째?방법은,?호출되는?서비스의?스텁(Stub)을?만들어서?테스트하는?방법이?있을?것이다.?
Stub을?사용하는?것은?일반적인?테스트?과정에서도?자주?사용되는?방법이다.?
하지만?이?방법도?단점이?있다.??대부분의?경우?스텁은?테스트하는?쪽에서?만들어야?하기?때문에?요청값과?응답값이?실제?호출받는?쪽의?마이크로서비스에서?제공하는?API와?일치하지?않을?수?있다.?
또한,?마이크로서비스?아키텍처에서?스텁은?개별?서비스형태로?실행되어야?하기?때문에?개발자의?부담도?무시할?수?없을것이다.?

[그림5. 마이크로서비스 통합테스트 방법-2]
세번째?방법은,??계약?테스트(Contract?Test)를?활용하는?방법이다.?
소비자?중심?계약?테스트(Consumer?Driven?Contract?Test?ㅣ?약어?CDC)라고?부르기도?하는?계약테스트는?호출하는?서비스(소비자)관점에서?요청값과?응답값을?정의한?후?이것이?잘?실행되는지?호출하는?서비스(소비자)에서?테스트하는?방법이다.?
이?테스트는?Spring?Cloud?Contract?나?Pact?같은?Contract?Test?도구를?이용하면?효과적으로?테스트?할?수?있다.?
마이크로서비스에서?계약이라면?API를?의미하기도?한다.?그래서?계약테스트는?얼핏?API?테스트와?같아?보이지만,?이?둘?사이에는?조금?차이가?있다.?
API테스트는?내?서비스의?내부?기능이?정상적으로?동작하는지?테스트?하기?위해서?내?서비스에서?제공하는?API를?실행해?보는?방법이라면,?계약테스트는?서비스와?서비스?사이에서?주고받는?데이터의?일치여부를?검증하기?위해서?내?서비스에서?필요한?데이터를?상대방?서비스로?부터?잘?받고?있는지?테스트하기?위함이다.?

[그림6. 마이크로서비스 통합테스트 방법-3]
계약테스트는?통합테스트?뿐?아니라?서비스를?운영하는?과정에서?내?서비스의?API를?변경하기?전에?API를?사용중인?소비자를?식별하고?API변경에?대한?영향도를?파악하는?목적으로도?활용된다.?
2-3. 기능테스트 (Component Test)
기능테스트는?내가?개발한?마이크로서비스가?의도한?기능?요구?사항을?충족하는지?확인하기?위한?테스트이다.?
기능테스트는?내?서비스의?API를?테스트하는?방법으로?테스트를?할?수?있으며,?Swagger나?Postman?등의?도구를?이용해서?손쉽게?할?수?있다.?

[그림7. 마이크로서비스 기능테스트 대상]
2-4. 엔드 투 엔드 테스트 (End to End Test)
엔드?투?엔드?테스트란?전체?애플리케이션의?기능을?처음부터?끝까지?검증하는?것을?목적으로?한다.?때문에?모든?마이크로서비스?및?사용자?UI,?데이터베이스,?외부?시스템?등이?모두?가동상태?이거나?최대한?유사한?환경이?구성되어져야?한다.
시나리오를?기반으로?실제?사용자처럼?사용해보면서?테스트하게?되며,?이?테스트를?통해서?기능의?문제나?서비스간?상호작용의?오류뿐?아니라?사용자에게?적절한?가치(UX)를?제공하도록?개발이?되었는지도?검증을?할?수?있다.?
또한,?경우에?따라서?성능이나?부하테스트를?함께?진행할?수도?있다.?
엔드?투?엔드?테스트?자동화를?위해서는?잘?알려진?UI테스트?도구인?Selenium을?이용할?수?있고,?UI가?존재하지?않는?애플리케이션일?경우?앞서?언급한?Swagger나?Postman?같은?API?Test?도구를?사용할?수?있다.?

[그림8. 마이크로서비스 엔드 투 엔드 테스트 대상]
2-5. 오류주입 테스트 (Chaos engineering)
오류주입?테스트란?네트워크?오류나?타임아웃,?응답?오류?등과?같은?오류를?강제로?주입함으로써?장애상황에서의?복원력과?내결함력을?검증하는?데?목적이?있다.?
이?테스트개념은?넷플릭스에서?처음?소개가?되었다는?견해가?있으며,?그래서인지?테스트?도구로?넷플릭스의?Chaos?Monkey가?가장?잘?알려져있다.?또한,?Kubernetes를?전용으로?개발된??Chaos?Mesh도?CNCF(Cloud?Native?Computing?Foundation)에서?정식?프로젝트로?진행되고?있는?테스트?도구이다.?
오류주입?테스트는?실?운영환경에서?발생할?수?있는?다양한?상황에?대해서?시스템의?신뢰성을?테스트?해야?하기?때문에?운영환경에서?테스트하는?것을?권고하고?있다.?
참 고 문 헌
- https://martinfowler.com/articles/microservice-testing/
- https://automationstepbystep.com/2020/04/21/what-is-contract-testing/
저작권 정책
K-ICT 클라우드혁신센터의 저작물인 『마이크로서비스 테스트에 대한 고찰』은 K-ICT 클라우드혁신센터에서 베스핀글로벌 윤영기님에게 집필 자문을 받아 발행한 전문정보 브리프로, K-ICT 클라우드혁신센터의 저작권정책에 따라 이용할 수 있습니다.
다만 사진, 이미지, 인용자료 등 제3자에게 저작권이 있는 경우 원저작권자가 정한 바에 따릅니다.