지금까지 이 책에서 서비스들 간의 연동은 인증이나 권한 부여 과정 없이 처리했다. 모든 HTTP 요청은 아무 문제없이 예상한 응답을 보내주었다. 이와 같이 평화로운 상황을 실제 서비스 환경에서는 다음과 같은 2가지 이유로 기대하기 어렵다.
서비스를 호출한 사용자가 누구인지 알아야 하며(인증), 그 사용자가 해당 서비스를 호출할 수 있게 허락했는지(권한 부여) 알아야한다. 예를 들어 인증을 거치지 않은 익명의 사용자가 데이터베이스 항목을 아무 제한 없이 조작하게 두고 싶지는 않을 것이다.
모놀리식 웹 애플리케이션에서 인증은 로그인 폼으로 처리하며, 사용자가 식별되면 쿠키에 관련 정보를 추가해서 이후의 모든 요청에 사용한다.
마이크로서비스 기반 시스템에서는 이 방식을 모든 서비스에 적용할 수 없다. 서비스는 사용자가 아니므로 웹 폼을 사용해서 인증할 수 없기 때문이다. 그래서 각 서비스 사이의 요청을 자동으로 수락하거나 거부할 수 있는 다른 방법이 필요하다.
OAuth2 프로토콜은 사용자와 서비스 양쪽 모두를 인증하는 데 사용할 수 있기 때문에 마이크로서비스에 인증과 권한 부여를 추가할 때 유연성을 제공한다. 7장에서는 OAuth2의 중요 내용을 살펴보고 어떻게 마이크로서비스의 인증 구현에 적용하는지 알아본다. 이러한 인증 구현은 서비스 간의 연동을 보호하는 데 목적이 있다.
서비스 보안을 통해 시스템 교란(fraud)이나 남용(abuse)을 막을 수 있다. 예를 들어 클라이언트가 고의적으로, 또는 예상치 못한 버그로 인해 서버에 과도한 요청을 보낸다고 가정하다자. 서버는 이 상황을 감지해서 시스템을 보호할 수 있어야 한다. 물론 대규모 DDos 공격에 대해 취할 수 있는 조치는 많지 않다. 하지만 기본 웹 애플리케이션 방화벽을 구성하는 건 어려운 작업이 아니며, 기본 공격으로부터 시스템을 보호할 수 있는 훌륭한 방법이기도 하다.
서비스를 보호하기 위해 코드 레벨에서 구현할 작업도 있다. 예를 들어 시스템 호출을 제어하거나 HTTP 리다이렉트를 통해 변조된 페이지에 연결되지 않도록 하는 처리다. 7장의 마지막 부분에서 이러한 작업들에 대해 설명하며, 지속적으로 코드를 스캔해서 잠재적인 보안 이슈를 발견하는 방법도 알아본다.
7장에서 다루는 내용은 다음과 같다.