AMQP란? AMQP(Advanced Message Queing Protocol)는 메시지 지향 미들웨어를 위한 개방형 표준 응용 계층 프로토콜이다. 흔히 알고 있는 MQ의 오픈소스에 기반한 표준 프로토콜을 의미한다. 등장 배경 이전에도 상용화된 MQ 제품들은 많았지만, 한 가지 문제가 있다면 대부분 플랫폼 종속적인 제품들이었기 때문에 서로 다른 이기종간에 메시지를 교환하기 위해서는 메시지 포맷 컨버전을 위한 메시지 브리지를 이용하거나 (속도 저하 발생) 시스템 자체를 통일시켜야 하는 불편함과 비효율성이 있었다. 이러한 기존의 MQ들의 약점을 보완하기 위해 등장한것이 AMQP이다. 즉, AMQP의 목적은 서로 다른 시스템간에 최대한 효율적인 방법으로 메시지를 교환하기 위한 MQ 프로토콜인 것이다. 벤더에..
상속과 합성의 개념 상속(Inheritance) 부모 클래스와 자식 클래스 사이의 의존성은 컴파일 타임에 해결 is-a 관계 부모클래스의 구현에 의존 결합도가 높음. 클래스 사이의 정적인 관계 부모 클래스 안에 구현된 코드 자체를 물려받아 재사용 합성(Composition) 두 객체 사이의 의존성은 런타임에 해결 has-a 관계 구현에 의존하지 않음. 내부에 포함되는 객체의 구현이 아닌 인터페이스에 의존. 객체 사이의 동적인 관계 포함되는 객체의 퍼블릭 인터페이스를 재사용 상속(Inheritance)이란 클래스 상속을 통해 자식 클래스는 부모 클래스의 자원을 물려받게 되며, 부모 클래스와 다른 부분만 추가하거나 재정의함으로써 기존 코드를 쉽게 확장할 수 있다. 그래서 상속 관계를 is-a 관계라고 표현하..
Spring Boot Actuator란? 시스템을 운영하다 보면 시스템이 사용하고 있는 Thread, Memory, Session 등의 요소에 대해서 모니터링은 필수적인 요소다. 운영되는 시스템은 아무리 잘 만들어졌다고 할지라도 버그가 있을 수 있다. 우리는 이런 상황을 대비하기 위해서 모니터링을 해야 한다. Spring Boot에서는 Spring Boot Actuator라는 자체모니터링 툴을 제공한다. Spring Boot 공식 Reference에 나와있는 Actuator에 대한 간략한 설명이다. Spring Boot includes a number of additional features to help you monitor and manage your application when you push i..
Observer Pattern이란? 옵저버 패턴(Observer Pattern)은 옵저버(관찰자)들이 관찰하고 있는 대상자의 상태가 변화가 있을 때마다 대상자는 직접 목록의 각 관찰자들에게 통지하고, 관찰자들은 알림을 받아 조치를 취하는 행동 패턴이다. 옵저버 패턴은 여타 다른 디자인 패턴들과 다르게 일대다(one-to-many) 의존성을 가지는데, 주로 분산 이벤트 핸들링 시스템을 구현하는 데 사용된다. Pub/Sub(발행/구독) 모델로도 알려져 있기도 하다. 이 패턴을 이해하는 데 있어 유튜브로 비유해 보면 쉽다. 유튜브 채널은 발행자(Subject)가 되고 구독자들은 관찰자(Observer)가 되는 구조로 보면 된다. 유튜버가 영상을 올리면 구독자들은 영상이 올라왔다는 변화를 감지하여 알림이 오게 ..
전략 패턴(Strategy Pattern) 전략 패턴은 실행(런타임) 중에 알고리즘 전략을 선택하여 객체 동작을 실시간으로 바뀌도록 할 수 있게 하는 행위 디자인 패턴이다. 여기서 '전략'이란 일종의 알고리즘이 될 수도 있으며, 기능이나 동작이 될 수도 있는 특정한 목표를 수행하기 위한 행동 계획을 말한다. 즉, 어떤 일을 수행하는 알고리즘이 여러 가지 일 때, 동작들을 미리 전략으로 정의함으로써 손쉽게 전략을 교체할 수 있는, 알고리즘 변형이 빈번하게 필요한 경우에 적합한 패턴이다. 전략 패턴 구조 전략 알고리즘 객체들 : 알고리즘, 행위, 동작을 객체로 정의한 구현체 전략 인터페이스 : 모든 전략 구현체에 대한 공용 인터페이스 컨텍스트(Context) : 알고리즘을 실행해야 할 때마다 해당 알고리즘과..
템플릿 메서드 패턴(Template Method Pattern) 템플릿 메서드(Template Method) 패턴은 여러 클래스에서 공통으로 사용하는 메서드를 템플릿화 하여 상위 클래스에서 정의하고, 하위 클래스마다 세부 동작 사항을 다르게 구현하는 패턴이다. 즉, 변하지 않는 기능(템플릿)은 상위 클래스에 만들어두고 자주 변경되며 확장할 기능은 하위 클래스에서 만들도록 하여, 상위의 메소드 실행 동작 순서는 고정하면서 세부 실행 내용은 다양화될 수 있는 경우에 사용된다. GoF 디자인 패턴에서는 템플릿 메서드 패턴을 다음과 같이 정의했다. 템플릿 메서드 디자인 패턴의 목적은 다음과 같습니다. 작업에서 알고리즘의 골격을 정의하고 일부 단계를 하위 클래스로 연기합니다. 템플릿 메서드를 사용하면 하위 클래스..
들어가며 프로젝트를 진행하면서 프론트엔드 개발자분들이 API가 안 돼요!! 하지만 프론트엔드와 백엔드 코드 모두 문제가 없어 보이는 경우가 이따금 있었다. 에러문을 자세히 보면 localhost에서 해당 링크에 접근하는데 CORS policy에 의해 blocked 되었다고 나온다. 여기서 CORS란 무엇이고 어떤 이유로 우리를 이렇게 고생시키는 걸까? CORS란? CORS는 함축 단어로 풀어보면 Cross-Origin Resource Sharing이라는 단어로 이루어져 있다. 이 문작을 직역 하면 "교차 출처 리소스 공유 정책"이라고 해석할 수 있는데, 여기서 교차 출처라고 하는 것은 (엇갈린) 다른 출처를 의미한다. 여기서 출처란 어떤 것을 의미하는지 간단하게 살펴보자 출처(Origin)란? 우리는 어..
들어가며 Spring Cloud Gateway를 공부하던 중 SCG는 Spring webFlux로 동작한다는 사실을 알게 되었다. 그럼 Spring webFlux가 뭐지? Spring webFlux는 Spring 5에서 새롭게 추가된 모듈로 client, server에서 reactive 스타일의 어플리케이션 개발을 도와주는 모듈이라고 한다. non-blocking에 reactive stream을 지원하며 Spring MVC의 Tomcat과 달리 Netty를 사용한다고 한다. Netty의 공식홈페이지에 가면 다음과 같이 설명하고있다. Netty는 유지 관리 가능한 고성능 프로토콜 서버 및 클라이언트의 신속한 개발을 위한 비동기 이벤트 기반 네트워크 애플리케이션 프레임워크입니다. 비동기(async), non..