목록Language & Framework/Spring (27)
고딩왕 코범석
안녕하세요! 이번 포스팅에서는 스프링에서 주로 사용되는 디자인 패턴인 템플릿 메서드 패턴, 전략 패턴, 템플릿 콜백 패턴에 대해 정리해보려 합니다. 가정 상황 이 세 가지 패턴을 설명드리기 앞서 이 포스팅에서는 두 수와 연산(더하기, 빼기 등등..)명령을 입력 받고 수식을 출력한 후 그에 대한 결과를 출력해야하는 상황을 가정하고 디자인 패턴을 설명드리겠습니다. 템플릿 메서드 패턴 정의 동작 상의 알고리즘의 뼈대를 정의하고, 알고리즘의 구조를 변경하지 않고 변하는 부분을 다시 정의할 수 있는 디자인 패턴 우선, 해당 패턴에서 두 수와 연산 명령을 입력받고 연산식과 결과를 출력하는 함수를 추상 클래스로 두겠습니다. @Slf4j public abstract class AbstractCalculate { pub..
안녕하세요! 이번 포스팅에서는 제가 JPA를 사용하면서 엔티티에 따라 어떤 쿼리가 날라가고, 제 나름대로 생각한 최선의 방법이 무엇인지 정리해보려고 합니다. 항상 제 의견이 맞는건 아니니 틀린 지식에 대한 피드백은 환영합니다! 이번 포스팅 목차 겸 확인할 부분 orphanremoval=true 에서 delete 쿼리 orphanremoval=false 에서 변경 감지 Cascade=ALL 남발 주의하기 우선, 제가 확인해보고 싶은 부분 및 기능을 정의해보겠습니다. 기능 회원과 게시글이 있으며, 회원은 게시글을 찜할 수 있다. 회원이 게시글을 찜할 경우, 여러 게시글을 동시에 찜할 수 없다. 즉, 게시글 하나씩 찜을 하거나 삭제할 수 있다. 어떤 게시글을 삭제할 때, 이 게시글을 찜한 회원들의 찜목록에서도..
안녕하세요! 이번 포스팅에서는 다형성을 활용하여 JSON 객체를 받아본 내용을 정리하는 포스팅입니다. 버르장머리 있는 말투는 너무 오랜만이라 어색합니다. 항상 가짜뉴스 제보는 환영합니다! 상황 꺼진 JPA도 다시 보기 위해 김영한님의 강의인 JPA 활용편과 비슷하게 모델링해서 진행했습니다. 완전 똑같지는 않고 차이점이 몇가지 있는데 다음과 같습니다. Item과 Album, Book, Movie는 원래 싱글테이블 전략이었으나 조인 전략으로 변경하였고, Category와 Item의 연관 관계가 ManyToMany였으나 OneToMany, ManyToOne으로 바꿔서 진행했습니다. Album과 Book, Movie를 등록할 때 단순히 컨트롤러에 api를 추가하면 되지만, 저는 한 메서드로 처리하고 싶었습니다...
이번에 적용해볼 것들 Order Service에 요청된 주문의 수량 정보를 Catalog Service에 반영 Order Service에서 Kafka Topic으로 메세지 전송 -> Producer Catalog Service에서 Kafka Topic에 전송된 메세지 취득 -> Consumer kafka 의존성 추가 org.springframework.kafka spring-kafka Catalog Service @EnableKafka @Configuration public class KafkaConsumerConfig { // Consumer 빈 설정 및 등록 @Bean public ConsumerFactory consumerFactory() { Map properties = new HashMap();..
Kafka Broker 실행된 Kafka 애플리케이션 서버 개념 3대 이상의 Broker Cluster 구성 Zookeeper 이러한 브로커들을 컨트롤해주는 역할 즉, 클라이언트가 서로 공유하는 데이터를 관리해주는 역할 분산되어 있는 각 애플리케이션의 정보를 중앙에 집중하고 구성관리, 그룹관리 네이밍, 동기화 등을 제공 Kafka Client Kafka와 데이터를 주고 받기 위해 사용하는 자바 라이브러리 Producer, Consumer, Admin, Stream 등 각종 API 제공 다양한 Third Party Library 존재 Kafka 실행해보기 Zookeeper를 먼저 실행한 다음, Kafka 서버를 기동하자 # window 기준, zookeeper 실행 $KAFKA_HOME/bin/window..
기존의 Spring Cloud Config가 변경되었을 경우 해당 마이크로 서비스에 적용하는 방법 각 마이크로서비스 서버와 Config 서버를 재기동하는 방법 서버를 재기동 하는 것 자체가 굉장히 불편하다. Actuator를 활용하여 POST refresh를 요청해 애플리케이션을 재기동 하지 않고 적용하는 방법 http로 call하여 변경을 감지해 적용하는 것은 좋으나, 마이크로서비스가 많을 경우 이것도 불편하다. 각각의 마이크로서비스 마다 refresh를 호출해야 하기 때문이다. Spring Cloud Bus 분산 시스템의 노드(마이크로서비스)를 경량 메세지 브로커와 연결 각각의 시스템 상태 및 구성에 대한 변경사항을 연결된 노드(마이크로서비스)에게 전달 순수 Actuator만 적용하면 각 마이크로서비..
Spring Cloud Config 분산 시스템에서 서버, 클라이언트 구성에 필요한 설정 정보(application.yml or application.properties)를 외부 시스템에서 관리 하나의 중앙화 된 저장소에서 구성요소가 관리 가능하다. 각 서비스를 다시 빌드하지 않고, 바로 적용이 가능하며, 동적으로 환경 변경이 가능하다. 또한, 애플리케이션 배포 파이프라인을 통해 환경에 맞는 구성 정보를 사용한다. 그럼 이러한 Config 설정들의 우선순위는 어떻게 될까? Spring Cloud Config에서 우선순위들을 설정할 수 있다. 위의 그림 처럼 application.yml > application-name.yml > application-name-profile.yml 순서로 설정된다. app..
Reverse Proxy 리버스 프록시는 요청을 대신해서 보내는 것이다. 클라이언트의 요청을 받아 적절한 웹 서버로 요청을 전송한다. 요청을 받은 서버는 응답을 전송할 떄, 다시 이 리버스 프록시에게 전달하여 그 응답을 클라이언트에게 제공한다. 대표적으로는 nginx가 우리가 잘 알고있는 리버스 프록시 서버이다. Api Gateway? 사용자가 설정한 라우팅 설정에 따라서 각 엔드 포인트로 클라이언트 대신해서 요청을 하고 응답받으면 다시 클라이언트에게 전송하는 reverse proxy 역할 클라이언트가 마이크로서비스를 직접 호출하는 구조는 별로 좋지 않음 시스템의 내부 구조는 숨기고 외부의 요청에 대해 적절한 형태로 가공하여 응답을 클라이언트에게 전달하는 장점을 갖고 있다. 클라이언트와 각 마이크로서비스..