1. 개요GitLab에는 CICD 시 프로젝트의 Test Coverage를 추출하여 표시할 수 있는 기능을 제공해준다. Build 시 Test Coverage 수치를 로그로 찍어두면, 정규식을 활용하여 추출해낼 수 있고, 아래 사진과 같이 Readme에 표현할 수 있다. 관련 공식 문서는 여기 를 참고하면 된다. 이렇게 추출해둔 커버리지는 회사에서 각 프로젝트들의 테스트 커버리지 현황을 관리할 때 사용하고 있다. 테스트 커버리지가 높다고 장애가 없는, 리팩토링에 안전한 프로젝트라고 장담할 수 없지만 전혀 의미 없는 수치는 아니라고 생각한다. 아무튼 우리 팀은 Spring Boot Multi Module 형식으로 프로젝트를 진행하고 있었기 때문에 전체 모듈에 대한 커버리지를 하나로 표현할 방법을 모색해야..
1. 개요DTO 매핑 방식에는 다양한 방법이 있다. 예를 들어, MapStruct 인터페이스를 활용한 매핑, 별도의 매퍼 클래스를 사용한 매핑, from/toXXX와 같은 static 메서드를 이용한 매핑 등이 있다. 이 중 어떤 방식이 가장 우수하다고 단정 짓기는 어렵다. 여러 가지 이유를 고려한 끝에, 별도의 매퍼 클래스를 활용하는 방식을 선택하기로 했다. 하지만 여기서 또 하나의 고민이 생겼다. 이 매퍼 클래스를 Bean으로 등록하여 주입받아 사용할 것인가, 아니면 static 메서드로 정의하여 사용할 것인가? Spring bean과 Static 함수의 생성 시점은 아래와 같다. 1. Spring bean : JVM 로드 → Tomcat 실행 → Component Scan 시점2. StaticC..
1. 개요레이어드 아키텍처, 클린 아키텍처, 헥사고날 아키텍처 등 많은 아키텍처가 존재하고 아키텍처 없이 개발하는 개발자는 거의 없다. 그런데 이처럼 정해진 아키텍처 규칙이 실제 프로젝트 진행 과정에서 잘 지켜지는 것을 어떻게 보장할 수 있을까? 급하게 개발하는 과정에서 이러한 규칙을 어기는 코드가 생겨났을 때, 개발자들이 일일이 이를 잡아내고 고치는 것은 그 자체로 비용이다. 그리고 이러한 규칙이 하나가 아니라 여러 개 존재한다면 개발자들이 실수할 가능성은 훨씬 높아질 것이다. 그러므로 개발자들이 이러한 규칙에 위배되는 코드를 작성하지 않도록 강제할 수 있는 수단이 필요하다. 의존성을 강제하기 위해선 Spring Multi Module 을 사용할 수 있다. 레이어별 혹은 영역별로 모듈을 생성..
1. APM 이란?APM이란 Application Performance Management / Application Performance Monitoring의 약자이다.즉, 애플리케이션의 성능을 관리/모니터링 을 담당한다. APM 도구를 사용하면 서버에서 발생하는 메트릭(CPU, Memory, Thread, Transaction, …), 이벤트, 로그, 트랜잭션 등을 모니터링할 수 있다. 이렇게 분석한 데이터는 아래의 목적을 위해 활용할 수 있다.성능 문제를 예측하고 방지고객 기대 성능 보장, 고객 경험 향상응답 시간 보장가용성 증대, 다운타임 감소 2. Pinpoint 와 Prometheus+Grafana 차이Prometheus+Grafana도 유명한 모니터링 도구이다. Pinpoi..
1. Spring Security 개요 Spring Security는 위와 같이 인증부터 편의성 유틸리티, 웹 브라우저에서 악용 가능한 세션 고정, 클릭재킹, 크로스 사이트 요청 위조(CSRF) 등의 공격으로부터 보호하는 메커니즘까지 포괄적인 기능을 제공하며, 이러한 기능은 모듈을 추가하는 것만으로도 모두 사용할 수 있다. Spring Security를 도입하면 인증,인가 기능을 표준화 하고 자동화할 수 있어 개발자가 보안 관련 코드를 직접 작성하지 않고도 높은 수준의 보안 기능을 쉽게 구현할 수 있다. 2. Spring Security 주요 아키텍처Spring 에서 클라이언트로부터의 모든 HTTP 요청은 Dispatcher Servlet이 가장 먼저 수신한다. 이는 수신한 HT..
1. Zipkin 이란?Zipkin은 분산 시스템에서의 요청 추적을 위한 오픈소스 도구이다. 마이크로서비스 아키텍처(MSA)와 같이 여러 서비스가 상호작용하는 환경에서 어떤 요청이 어디서 지연되었는지, 문제가 발생했는지를 추적하고 분석할 수 있게 도와준다. Zipkin으로 추적할 수 있는 분산 트랜잭션은 대표적으로 HTTP, gRPC가 있다. 나중에 다룰 내용이지만, Kafka를 사용한 통신 시 Zipkin에서는 흐름을 추적할 수 없다. 이를 해결하기 위한 내용도 다룰 예정이니 참고바란다. 2. Zipkin 관련 컴포넌트 용어 정리Zipkin Client Library서비스에서 트래이스 정보를 수집하여 Zipkin 서버의 Collector로 데이터를 전송하는 역할을 한다. Colle..