이번 포스팅에서는 Proxy Pattern 에 대한 개념과 Spring Boot 에서 이러한 Proxy Pattern 을 사용한 예시에 대해서 살펴보려고 한다. Proxy 패턴이란? Proxy 패턴은 특정 객체가 호출되기 전에 그에 대한 접근을 제어하기 위해 사용되는 디자인 패턴이다. 즉 특정 객체가 호출될 때 해당 접근을 가로채 Proxy 객체가 그 역할을 대신하는 것을 의미한다. 제어권을 가져와 부가적인 기능을 수행한 후 기존 객체를 다시 Delegate 방식으로 호출할 수도 있다. 그림을 통해서 설명하면 기존에 클라이언트가 RealSubject.DoAction() 메소드를 호출하는 흐름을 Proxy 객체의 DoAction() 메소드로 가져와서 처리하고, 거기서 Delegate 하게 RealSubje..
이번 포스팅에선 IoC & DI, Spring AOP 와 함께 Spring 의 3대 특징인 Spring PSA 에 대해서 살펴보려고 한다. Spring PSA 란? Spring PSA 는 Portable Service Abstraction 의 약자로 휴대용 서비스 추상화라는 의미를 가진다. 우선, 서비스 추상화란 무엇일까? 특정 서비스가 추상화되어있다는 것은 서비스의 내용을 모르더라도 해당 서비스를 이용할 수 있다는 것을 의미한다. 예를 들어, 우리는 JDBC Driver 를 사용해 데이터베이스에 접근하지만 JDBC Driver 가 어떻게 구현되어 있는지는 관심이 없다. 실제 구현부를 추상화 계층으로 숨기고 핵심적인 요소만 개발자에게 제공함으로써 실제 구현부를 모르더라도 해당 서비스를 이용할 수 있도록 ..
순환참조문제란? 위 예외는 애플리케이션 로딩 과정에서 순환참조가 발생함을 알리는 예외이다. 순환참조 문제란 A 클래스가 B 클래스의 Bean 을 주입받고, B 클래스가 A 클래스의 Bean 을 주입받는 상황처럼 서로 순환되어 참조할 경우 발생하는 문제를 의미한다. 그럼 이러한 순환참조 문제는 어떠한 상황에서 발생하는지 살펴보자. 왜 발생할까? 특정 클래스에서 IoC 컨테이너에 있는 Bean 을 주입받기 위해서 세 가지 방법을 사용할 수 있다. 필드 주입방식, Setter 주입방식, 생성자 주입방식이 이에 해당한다. 갑자기 의존성 주입 방식에 대해서 이야기하는 이유는 생성자 주입방식과 나머지 두 가지 주입방식에서의 순환참조문제가 조금 다르게 발생하기 때문이다. 먼저, 필드 주입방식과 Setter 주입방식에..
Spring Cloud Config 란? Spring Cloud Config 는 분산 시스템에서 설정 정보(application.yml) 를 외부에 보관할 수 있도록 지원해주는 서비스이다. 이러한 Spring Cloud Config 를 이용했을 때 얻을 수 있는 장점은 다음과 같다. 여러 서버의 설정 파일을 중앙 서버에서 관리할 수 있다. 서버를 재배포 하지 않고 설정 파일의 변경사항을 반영할 수 있다. 위 도식은 Spring Cloud Config 가 동작하는 과정이다. 조금 간단하게 설명하자면 우선 세 가지 요소로 생각하면 좋다. 실제로 설정파일이 저장되는 Config 저장소(Git Repository, File System 등)가 있고, 이러한 저장소와 연결되어 설정파일을 관리해주는 Spring C..
Servlet 3.0 이전 Servlet 3.0 에는 Servlet Thread 만 존재했다. 예를들어 Thread per Request Model 을 사용하는 Tomcat 의 경우에는 기본적으로 200개의 Servlet Thread 를 가졌고 내부적으로 Blocking 되는 코드가 있다면 서버의 Latency 가 길어지게 된다. 왜냐하면 하나의 Request 에 대해서 하나의 Servlet Thread 를 할당하게 되는데, 해당 Servlet Thread 가 Blocking 상태에 빠지게 된다면 더 이상 Servlet Thread Pool 에는 남아있는 Thread 가 없게되고 Request 는 Servlet Thread 가 반환될 때까지 기다리게 되는 것이다. 이러한 문제를 해결하기 위해 Servle..
성능테스트란? 쉽게 말하면 내가 만든 웹 서버(API)가 얼마나 많은 사용자들을 감당할 수 있는지 테스트하는 것을 말한다. 이외에도 두 가지 설계에 대해서 어떤 설계가 더 좋은 성능을 내는지 확인하기 위해서도 사용될 수 있다. 성능의 지표 성능을 판단하는 대표적인 지표로는 Throughput(처리량)과 Latency(지연시간)이 있다. Throughput 은 시간당 처리량을 의미하고 TPS(Transaction per seconds), RPS(Request per seconds) 와 같은 세부항목이 있다. 이러한 수치들은 해당 서비스가 1초당 어느정도의 작업을 처리할 수 있는지 나타내기 때문에 높은 수치일수록 성능이 좋다고 말할 수 있다. Latency 는 지연시간을 의미하고 이는 시스템이 클라이언트로부..
