기존의 Netfilx Zuul의 단점 : 비동기/Functional 지원 X 또는 스프링 라이브러리와 호환성 문제 Spring Cloud Gateway- 비동기 서비스 지원- 서블릿 X -> 기존에 사용하던 ServletRequest/Response 쓰지 않고 ServerRequest/Response 사용 1. Spring Cloud Gateway 서버 구성하기application.ymlserver: port: 8080eureka: client: register-with-eureka: false fetch-registry: false service-url: defaultZone: http:localhost:8761/eurekaspring: application: na..
1. API 게이트웨이 서비스사용자의 라우팅 설정에 따라서 클라이언트를 대신해 요청하고 응답을 받으면 클라이언트에게 전달해주는 proxy 역할 시스템 내부구조 숨기고 외부의 요청에 대해 적절한 형태로 가공해 응답 가능 모바일/웹 앱에서 요청한 것(프론트 형태에 상관없이)을 API게이트웨이가 각각의 마이크로 서비스로 요청되는 모든 정보에 대해 일괄처리클라이언트는 마이크로서비스를 직접 호출하지 않고, API 게이트웨이만 상대. 스프링 클라우드에서 MSA간의 통신 방법1. RestTemplate 2. Feign Client 로드밸런서 위치?1) Netflix Ribbon : 현재는 비동기처리가 잘 되지 않아 사용하지 않음 -> 현재는 Spring cloud loadbalancer- 외부 마이크로 ..
Spring Cloud 특징1. centralized configuration managementsping cloud config server 를 사용하여 설정 정보를 외부에 저장한다.2. Location transparency서비스 등록, 위치정보 확인, 검색 등 -> 넷플릭스의 유레카서버 사용 가능3. Load Distribution (Load Balancing) / 또는 API Gateway서버 요청정보 분산. Ribbon, Spring Cloud Gateway 4. Easier Rest Clinents 서비스 디스커버리: Eureka로드밸런서? 서비스 디스커버리?외부의 다른 서비스들이 마이크로 서비스를 검색하기 위해 사용되는 개념이다.서버/서비스가 어떤 위치에 있는지 저장하여 검색에 관련된 ..
Cloud Native Application특징1. CI/CD (지속적인 통합 / 지속적 배포)2. MicroServices3. DevOps- 개발조직 + 운영조직 통합 : 마이크로서비스에 문제가 발생했을 경우에 바로 수정해서 다시 배포하는 과정을 반복- 시스템 기획 -> 구현 -> 테스트 -> 배포 과정을 시스템 종료될때까지 무한 반복 -> 고객이 원하는 최상의 결과물 만드는 데 목적- 기존의 방식은 개발기간이 6~10개월정도로., 고객 요구사항/변경사항 등등은 필요할 때 마다 바로 반영/수정될 수 있도록 하는 구조- 클라우드 -> 서비스 구조를 작은단위로 분하랗여 더 자주 통합/테스트/배포 가능한 구조4. Containers (가상화)- 운영체제 위에 컨테이너 서비스를 작동 하고, 컨테이너에서는 공통..
DFS와 BFS는 그래프(정점node와 간선edge로 이루어진 자료구조) 탐색 방법입니다.문제 풀이는 백준을 이용했습니다.import java.util.*;import java.io.*;public class Main { static int N,M,V; static int[][] arr; static boolean[] checked; static Queue q = new LinkedList(); static StringBuilder sb = new StringBuilder(); public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReade..
메시지 큐는 분산 시스템에서 컴포넌트간의 데이터를 전달하는데 주로 사용되는 통신 방법입니다. (MSA에서도 중요한 역할)대량의 데이터를 분산 시스템에서 다룰 때 큰 시스템 개선 효과를 볼 수 있습니다. 특징1. 비동기 메시지 전달queue에 메시지를 넣고 수신자의 응답을 기다릴 필요 없이 다음 작업으로 넘어갈 수 있습니다. 2. 데이터 유실 방지HTTP 직접 통신이 아닌 queue를 사용하기 때문에, 수신자쪽의 서버에 문제가 생기더라도 데이터가 유실되지 않은 채로 보관이 가능합니다.피크시간에 발생하는 부하가 분산되기 때문에 장애에 유연하고 독립적인 설계가 가능합니다.이 때 , 메시지 전달 속도의 차이를 조절하면 시스템의 전체적인 성능이 향상될 수 있습니다. 3. 발신자(producer)/수신자(consu..
실시간 알림, 채팅과 같이 실시간으로 통신이 필요한 기능을 구현하기 위해선 어떤 방식을 사용할 수 있을까요?1. polling일정 주기를 가지고 서버의 API를 호출하는 방법입니다.기본적인 HTTP 통신을 기반으로 하기 떄문에, 호환성이 좋다는 장점이 있습니다. 하지만 업데이트 주기가 길 경우 실시간으로 데이터가 갱신되지 않고, 짧을 경우 갱신 사항이 없음에도 서버에 요청이 들어와 서버에 부하가 생길 수 있습니다. 2. long-polling업데이트가 발생할 때에만 서버에서 응답을 보냅니다.서버로 요청이 들어올 경우, 일정 시간동안 대기했다가 요청한 데이터가 업데이트되면 응답을 보냅니다.하지만 마찬가지로 업데이트가 빈번하게 일어난다면 연결을 위한 요청이 똑같이 발생해, 서버에 부하가 일어날 수 있습니다..
앞선 글을 통해, JPA는 엔티티 매니저를 통해서 DB와 어플리케이션 사이의 객체인 엔티티를 다루어 수정/변경/삭제등이 이루어집니다.이 엔티티 매니저를 어떻게 설정하는지, 스프링에 의존하지 않는 순수 Java의 설정 방법과 스프링의 DI에 의존하는 2가지 방법을 통해 알아보겠습니다.순수 Java 설정Entity Manager Factory → Entity Manager 의 생성은 Persistence 클래스를 사용하여 구현할 수 있습니다.1. 설정1.1. EntityManagerFactory 생성 ... Persistence는 createEntityManagerFactory(String persistenceUnitName)메서드를 통해 엔티티매니저팩토리를 생성합니다..
해당 글 스프링의 엔티티매니저 관리와 상관 없는 기초적인 JPA의 동작 원리를 기술하고 있습니다.1. 기본 개념JPA (Java Persistence API)는 관계형 데이터베이스를 사용하는 방식을 정의하는 인터페이스로, Java ORM 기술의 표준 명세라고 할 수 있습니다.💡 ORM(Object Relational Mapping)객체를 통해 간접적으로 DB 데이터를 다루는 방법으로, DB 데이터와 Object 필드를 매핑합니다.예) JPA, Hibernate💡 SQL MapperSQL문으로 DB를 직접 조작합니다.예) MyBatis, jdbcTemplate JPA를 다룰 때 필요한 엔티티 매니저(EntityManager)는 인터페이스로 정의되어 있습니다.public interface EntityMa..
캐시재사용 가능성이 높은 데이터를 메모리(RAM)에 저장하여 DB보다 빠르게 접근하기 위해 사용됩니다.단순하거나 변경이 잘 되지 않고, 자주 조회되는 데이터가 캐싱하기 적합합니다.데이터베이스에 접근하지 않고 저장된 데이터를 조회함으로써, 불필요한 트래픽을 줄이고 서버의 부하를 줄입니다. ✅ 단점용량의 한계가 있기 때문에 사용자증가/트래픽 증가 시 DB 성능이 떨어지고(매 트랜잭션마다 디스크에 접근) 시스템 다운의 위험이 있습니다.캐시와 DB 두 곳에서 같은 데이터임에도 값이 다를 경우가 존재하게 되는 데이터 정합성 이슈 (데이터불일치)가 있습니다. 응답캐싱웹서버의 응답을 메모리에 캐싱하는 방법으로, 다음 중 하나를 사용합니다.1. Local Cache애플리케이션 서버의 로컬 인메모리(메모리/디스크)에 저..