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..
1. 개요김영한 강사님의 강의를 들으며 웹 개발을 공부하기 시작한 이후, 기본 키 전략을 설정할 때 항상 인조키를 사용해왔다.특별히 이유를 고민해보지 않고 습관적으로 인조키를 선택해왔는데, 최근 코드 리뷰 중에 "이미 고유한 값이 존재하는데, 왜 굳이 별도의 컬럼을 추가해 인조키를 사용했느냐"는 질문을 받게 되었다. 한 번도 깊이 생각해본 적 없는 부분이었기에, 이번 기회에 자연키와 인조키의 장단점을 비교해보고, 어떤 키를 선택하는 것이 더 좋은지 정리해보려 한다. 2. 자연키? 인조키?자연키란 비즈니스 모델에서 자연스럽게 나오는 속성이다.회원 데이터를 예로 들면, 회원 ID는 고유한 값이며 변경될 가능성의 거의 없다. 또한 주민등록번호도 고유한 값으로 자연키의 한 예가 될 수 있다. ..
1. 개요매일 개발하며 사용해오던 @Transactional 어노테이션에 대해 아는게 너무 없다고 느꼈다. 여러 전파 전략, 옵션이 있다는거 정도만 알고있었지만, 깊게 고려해보진 않았던 것 같다. 이참에 공부하고 제대로 알고 사용하고자 이 글을 작성한다. 2. 트랜잭션이란?@Transactional 을 알아보기 앞서 트랜잭션에 대해 한번 더 짚고 넘어가자. 트랜잭션(Transaction)의 사전적 의미는 거래이고,컴퓨터 과학 분야에서의 트랜잭션(Transaction)은 "더이상 분할이 불가능한 업무처리의 단위"를 의미한다. 이것은 하나의 작업을 위해 더이상 분할될 수 없는 명령들의 모음, 즉, 한꺼번에 수행되어야 할 일련의 연산모음을 의미한다. 데이터베이스와 어플리케이션의 데이..