11.1 보안 서비스 개발
11.1.1 기존 모놀리식 애플리케이션의 보안

모놀리식 애플리케이션은 위와 같이 세션 토큰 확인하도록 작성할 수 있다.
11.1.2 MSA에서의 보안 구현
- 인메모리 보안 컨텍스트: 스레드 로컬 등 메모리를 공유할 수 없어 MSA에서 불가
API 게이트웨이에서 인증 처리
- 로직을 중앙화 하면 문제가 생겨도 한곳만 바로잡으면 되기에 보안 취약점이 노출될 가능성이 줄어든다.

- 클라가 로그인 요청
- API 게이트웨이가 보안 토큰 반환
- 클라는 작업 호출할 때 보안 토큰 담아 요청
- API 게이트웨이는 보안 토큰 검증하고 해당 서비스로 포워딩
인가 처리
인가 로직은 서비스에 구현하는 것이 좋다. 서비스가 직접 역할 기반으로 URL과 메서드를 인가하고 ALC로 애그리거트 접근을 따로 관리하도록 한다.
JWT로 사용자 신원/역할 전달
JWT가 탈취되면 취소할 방법이 마땅치 않다. 따라서 유효기간 짧은 JWT를 발급하도록 한다.
OAuth2.0 응용
- 인증 서버: 엑세스, 리프레시 토큰 획득 API 제공
- 엑세스 토큰
- 리프레시 토큰
- 리소스 서버: 엑세스 토큰으로 접근을 허가하는 서비스
- 클라이언트: 리소스 서버에 접근하려는 클라이언트, MSA에서는 API 게이트웨이가 OAuth 2.0 클라

11.2 구성 가능한 서비스 설계
패턴: 외부화 구성
런타임에 DB 자격증명, 네트워크 위치 등 구성 프로퍼티 값을 서비스에 제공한다.
11.2.1 푸시 기반의 외부화 구성
- OS 환경 변수, 구성 파일 등을 통해 배포 인프라에서 서비스로 프로퍼티 값 전달
@Value
등등
11.2.2 풀 기반의 외부화 구성
- 서비스 인스턴스가 구성 서버에 접속해 프로퍼티 값 읽어옴
- DB, AWS 파라미터 스토어, 스프링 클라우드 컨피그 서버 등
Config 서버가 있다면 중앙화 구성, 민감한 데이터의 투명한 복호화, 동적 재구성 등 장점이 존재한다.
11.3 관측 가능한 서비스 설계
- 관측 가능한 서비스 설계: 헬스 체크, 로그 수집, 분산 추적, 예외 추적, 애플리케이션 지표, 감사 로깅
11.3.1 헬스 체크 API 패턴
GET /health
와 같이 헬스 체크 API 끝점 표출
넷플릭스 유레카 같은 서비스 레지스트리가 끝점을 호출하도록 구성해 네트워크 트래픽이 서비스 인스턴스로 전송되었는지 확인할 수 있다.
11.3.2 로그 수집 패턴
서비스 로그 생성
자바 진영에는 로그백, Log4J, JUL, SLF4J 가 존재한다.
로그 수집 인프라
로깅 인프라는 로그 수집, 저장한다.
- ElasticSearch, Logstash, Kibana
11.3.3 분산 추적 패턴
외부 요청마다 유일한 ID 부여해 한 서비스에서 다음 서비스로 흘러가는 과정을 기록한다.

- 애플리케이션 명, 트레이스 ID, 스팬 ID, 스팬이 분산 추적 서버로 export 했는지 확인 플래그
- 인스트루멘테이션 라이브러리: 스팬 트리를 만들어 분산 추적 서버로 보낸다.
- Spring Colud Sleuth 가 분산 추적 기능을 서비스에 자동 연계한다.
- 분산 추적 서버: 인스트루멘테이션 라이브러리가 분산 추적 서버에 스팬 전송하고, 분산 추적 서버는 전달받은 스팬을 짜집기해 DB에 저장한다.
11.3.4 애플리케이션 지표 패턴
메트릭 수집, 마이크로미터 메트릭스로 JVM 기본 지표 수집가능하다. 이러한 메트릭은 그라파나로 조회할 수 있다.
11.3.5 예외 추적 패턴
- 예외 추적: 서비스는 중복된 예외를 제거하고 알림을 생성하고 예외 해결 과정을 관리하는 중앙서비스에 예외를 보고한다.
허니배저, sentry.io 가 존재한다..
11.3.6 감사 로깅 패턴
- 감사 로깅: 고객 지원, 컴플라이언스 준수, 수상한 동작 감지를 위해 사용자 액션을 DB에 저장한다.
감사 로깅을 구현하는 방법은 다음과 같다.
- 감사 로깅 코드를 비즈니스 로직에 추가: 비즈니스 로직과 섞인다는 단점
- AOP 활용: 어드바이스는 메서드명, 인수만 접근가능해 비즈니스 지향적인 감사 로그 항목 만들기 어렵다.
- 이벤트 소싱 이용: 신원을 각각의 이벤트에 기록, 쿼리는 기록되지 않아 따로 남길땐 다른 방법 강구
11.4 서비스 개발: 마이크로서비스 섀시 패턴
섀시: 예외 추적, 로깅, 헬스 체크, 외부화 구성, 분산 추적 등의 횡단 관심사를 처리하는 프레임워크를 기반으로 서비스 구축

11.4.2 이제는 서비스 메시로
- 서비스 메시: 회로 차단기, 분산 추적, 서비스 디스커버리, 부하 분산, 룰 기반 트래픽 라우팅 등 다양한 관심사가 구현된 네트워킹 계층을 통해 서비스를 드나드는 모든 네트워크 트래픽을 라우팅한다.

메시 덕에 섀시는 외부화 구성, 헬스 체크 등 애플리케이션 코드와 단단히 결합된 관심사만 구현하면 된다.