728x90
반응형

2021/01 14

Java 기본 내용을 위한 북마크

Memory, GC yaboong.github.io/java/2018/05/26/java-memory-management/ 자바 메모리 관리 - 스택 & 힙 개요 Java 에서 메모리 관리는 어떻게 이루어지는지 알아보기 위함. Stack 과 Heap 영역 각 역할에 대해 알아본다. 간단한 코드예제와 함께 실제 코드에서 어떻게 Stack 과 Heap 영역이 사용되는지 살펴 yaboong.github.io yaboong.github.io/java/2018/06/09/java-garbage-collection/ 자바 메모리 관리 - 가비지 컬렉션 개요 Java 가비지 컬렉션에 대해서 공부한 내용을 정리해본다. Java 에서 메모리 관리는 어떻게 이루어지는지 이해하고 있으면 좋다. 자바 메모리 관리 - 스택 &..

Java 2021.01.28

Eureka Server Config 관련 설정들

eureka.client register-with-eureka : 유레카에 등록할지 여부. fetch-registry : 유레카에서 조회할지 여부 registry-fetch-interval-seconds: 클라이언트 측에서 eureka registry를 캐싱하는 시간 disable-delta: 마지막으로 시도한 값에서 변경된 내용만 가지고 오도록 설정. false로 설정 시 바뀌지 않은 내용도 다 가지고 오게 된다. eureka.server enable-self-preservation : 자기보존모드. true일 경우 동작. 네트워크 같은 장애 발생 시 모든 서비스가 eureka에서 일괄 해제되는 현상을 막기 위해 사용. Real에서는 항상 true 여야 한다. eviction-interval-time-..

Architecture/MSA 2021.01.27

Reative 관련 북마크

www.reactivemanifesto.org/ko 리액티브 선언문 탄력성(Resilient): 시스템이 장애 에 직면하더라도 응답성을 유지 하는 것을 탄력성이 있다고 합니다. 탄력성은 고가용성 시스템, 미션 크리티컬 시스템에만 적용되지 않습니다. 탄력성이 없는 시 www.reactivemanifesto.org woowabros.github.io/experience/2019/03/18/tech-toby-reactive.html 3월 우아한 Tech 세미나 후기 - 우아한형제들 기술 블로그 스프링 리액티브 세미나 후기 woowabros.github.io devahea.github.io/2019/04/21/Spring-WebFlux%EB%8A%94-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%A..

Java/Reactive 2021.01.27

명시적인 instance-id 셋팅으로 instance 샤딩하기

2021/01/22 - [Java/Spring] - SQS와 SSE를 이용한 Proxy 서버 만들기 위 글에서 SQS를 Listen 하는 과정에서 Parrparallel 하게 EC2 인스턴스가 생성되게 되면 어느 쪽에서 Queue item을 consume 하게 되는지 알 수 없어서 접속해 있는 고객용 앱에 Event를 내려줄 수 없는 상황에 직면하게 된다. 이를 해결하기 위해 명시적인 샤딩 및 고객번호를 통해 특정 서버로 접속할 수 있도록 분기를 쳐야 하는데, 이렇게 하기 위해서는 일단 Eureka에 등록되는 instance-id를 필요에 맞게 설정하고, consume을 할 수 있는 queue name도 설정해야 한다. 보통 1개의 yml 파일에서 셋팅을 하게 될 경우 동적으로 값을 바꿔 가며 올릴 수 ..

Java/Spring 2021.01.25

SQS와 SSE를 이용한 Proxy 서버 만들기

기사용앱에서 특정 데이터를 승객용 앱에 내려주기 위해서 Server에서 정보를 Proxy 해 주어야 하는데 이와 관련하여 기사용 앱에서 내용을 올려주는 거야 단순히 API 하나를 호출하면 끝나지만, 승객용 앱 입장에서는 언제 내용이 변경되는지 알 수 없어서 고민하던 차에 SQS와 SSE를 사용해서 prototype을 만들어 봤다. 물론 승객용 앱에서 주기적으로 Polling 해서 만들 수도 있지만 조금 더 좋은 방법이 무엇인지 고민하면서 개발을 하게 되었다. 아직 오픈이 안된 상태이므로 잘못된 소스일 수도 있다. 간단한 구조는 아래와 같다. 일단 SQS는 AWS를 쓴다는 입장에서 사용할 수 있는 간단한 Queue 다. 기사용 App에서 특정 API를 호출하게 되면 해당 내용을 SQS에 담는다. @Slf4..

Java/Spring 2021.01.22

Asynchronous Methods 만들기

본 내용은 spring.io/guides/gs/async-method/ 를 참고하여 작성한다. CompletableFuture가 어떻게 동작하는지 확인한다. 코드가 동작하는 시나리오는 https://api.github.com/users/{user} API를 호출하여 그 결과를 보여주는 것이다. 동시에 3개의 API를 호출하게 될 경우 sync로 받게 될 경우 1개의 API 당 1초가 걸리게 될 경우 3초 + Alpha의 시간이 걸릴 것인데 결과는 어떻게 나오게 될지 확인해 본다. 먼저 값을 담아 올 User 객체를 만든다. 참고로 Api Response는 다음과 같다. { "login": "pivotalsoftware", "id": 4247270, "node_id": "MDEyOk9yZ2FuaXphdGl..

Java/Spring 2021.01.14

Spring Cloud Gateway - Custom Filter

Custom Filter의 기본적인 동작 방식에 대해 알아본다. 기본적인 내용은 docs.spring.io/spring-cloud-gateway/docs/2.2.6.BUILD-SNAPSHOT/reference/html/#writing-custom-global-filters 를 참고하면 되지만 매뉴얼의 특성상 자세하게 나오지 않아서 이해를 위해 www.baeldung.com/spring-cloud-custom-gateway-filters 를 참고하였다. 필터는 기본적으로 Proxied Service로 들어가기 전에 수행하는 Pre filter와 나오면서 수행하는 Post filter가 있다. 또한 org.springframework.core.Ordered 인터페이스를 구현하게 되면 순서에 따라 실행 되는데..

Architecture/MSA 2021.01.08

Spring Cloud Gateway - CORS Configuration

Global CORS 정책을 셋팅할 수 있습니다. spring: cloud: gateway: globalcors: cors-configurations: '[/**]': allowedOrigins: "https://docs.spring.io" allowedMethods: - GET 위의 예는 docs.spring.io 에서 GET으로 호출하는 것만 허용하는 경우이다. POST도 포함하고 싶으면 다음 처럼 열거해 주면 된다. - GET - POST CORS와 관련된 기본 정보는 developer.mozilla.org/ko/docs/Web/HTTP/CORS 참고. 위와 같이 CORS를 셋팅해 주지 않을 경우 POSTMAN 을 통한 호출처럼 호출할 경우 상관 없지만 script를 통해 호출할 경우 호출이 안되는..

Architecture/MSA 2021.01.07

Spring Cloud Gateway - Http timeouts configuration

http 관련 타임아웃 설정을 할 수 있다. Global timeouts 전역 설정 식으로 모든 것에 적용 되는 설정을 할 수 있다. spring: cloud: gateway: httpclient: connect-timeout: 1000 response-timeout: 5s Per-route timeouts 각 route 룰 마다 타임아웃을 별도로 줄 수 있다. 아래는 yml 서정 방식 - id: per_route_timeouts uri: https://example.org predicates: - name: Path args: pattern: /delay/{timeout} metadata: response-timeout: 200 connect-timeout: 200 아래는 Java 설정 방식 RESPO..

Architecture/MSA 2021.01.07

Spring Cloud Gateway - Route Metadata Configuration

route 룰에 meta data를 넣을 수 있다. yml 파일의 경우 아래와 같은 방법으로 하면 된다. spring: cloud: gateway: routes: - id: route_with_metadata uri: https://example.org metadata: optionName: "OptionValue" compositeObject: name: "value" iAmNumber: 1 Java 로 할 경우에는 다음과 같이 한다. import static org.springframework.cloud.gateway.support.RouteMetadataUtils.CONNECT_TIMEOUT_ATTR; import static org.springframework.cloud.gateway.suppor..

Architecture/MSA 2021.01.07

Spring Cloud Gateway - Configuration

yml 파일에 기록한 config를 어떻게 적용 시키는지에 대한 내용으로 보임. 기본적으로 RouteDefinitionLocator 인터페이스를 구현한 PropertiesRouteDefinitionLocator 에서 Springboot의 기본 configure 로딩 방법인 @ConfigurationProperties 메카니즘에 의해 설정을 로딩하게 되어 있다. 매뉴얼에서는 Shortcut notation 방법과 이름 기반하의 설정이 동일하다고 말하고 있다. spring: cloud: gateway: routes: - id: setstatus_route uri: https://example.org filters: - name: SetStatus args: status: 401 - id: setstatuss..

Architecture/MSA 2021.01.07

Spring Cloud Gateway - HttpHeadersFilters

ForwardedHeadersFilter from의 헤더를 to 로 복사해서 보내주는 역할을 하는 것으로 보인다. package org.springframework.cloud.gateway.filter.headers; public class ForwardedHeadersFilter implements HttpHeadersFilter, Ordered { /** * Forwarded header. */ public static final String FORWARDED_HEADER = "Forwarded"; ... @Override public HttpHeaders filter(HttpHeaders input, ServerWebExchange exchange) { ServerHttpRequest request..

Architecture/MSA 2021.01.07

Spring Cloud Gateway - Custom Predicate with AbstractRoutePredicateFactory

특정 조건에 특정 route를 적용할 것인지 정의 내리는 것을 predicate 라고 하는데 이미 정의 된 predicate 말고 Custom predicate를 만들 수 있다. AbstractRoutePredicateFactory 추상 클래스를 상속받아 몇 가지만 구현해 주면 된다. import lombok.Getter; import org.springframework.cloud.gateway.handler.predicate.AbstractRoutePredicateFactory; import org.springframework.validation.annotation.Validated; import org.springframework.web.server.ServerWebExchange; import ja..

Architecture/MSA 2021.01.06

Spring Cloud Gateway - Global Filter

기본적인 GlobalFilter 사용법 Global Filter를 커스터마이징 해서 사용하는 방법은 GlobalFilter 인터페이스를 구현하여 filter를 재정의 하면 된다. @Slf4j @Component public class MacaronCustomGlobalFilter implements GlobalFilter, Ordered { @Bean public GlobalFilter customFilter() { return new MacaronCustomGlobalFilter(); } @Override public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { log.info("##################### cust..

Architecture/MSA 2021.01.06
728x90
반응형