오늘은 Spring Cloud Hystrix 에 대해서 포스팅하려한다. 넷플릭스에서 Hystrix 를 만들어서 공개했는데 이를 좀 더 스프링 친화적으로 스프링에서 래핑해놓았다. Hystrix는 Circuit Breaker 패턴을 적용하여 서비스를 제공하는 Supplier에 장애가 생겼을때 Supplier를 호출하는 Consumer까지 장애가 전파되지않도록 Circuit Breaker 를 오픈하는 방식의 라이브러리이다. 외부 API를 호출하는 경우가 있다면 장애전파를 막고자할때 유용하게 사용할 수 있다. 이번 포스팅에서 작성할 애플리케이션은 Supplier, Consumer와 모니터링에 사용할 Dashboard, 그리고 여러 인스턴스를 모아서 모니터링할때 필요한 Eureka와 Turbine까지 총 5개다...
Spring Cloud Config Client지난 포스팅에서 config server를 띄우는것 까지 진행했다. 이제 config server가 구동되고있는 상태에서 그 정보들을 받아올 client 를 구현해보자. config 를 제대로 받아오는지 확인하는 용도의 스프링 부트 웹 애플리케이션을 만들면된다. 아래 의존성을 넣어주면 된다. implementation('org.springframework.boot:spring-boot-starter-web') implementation('org.springframework.cloud:spring-cloud-starter-config') 그리고 아무것도 하지않고 서버를 띄워보자. 8080으로는 이미 config server가 사용되고있으니 아래설정을 넣어주고 ..
보통 스프링 부트 애플리케이션을 만들다보면 설정파일은 properties나 yml 파일로 추출해서 관리하게된다. profile 별로 파일을 분리까지하게되면 그 자체로 훌륭하게 설정을 분리해냈다고 할 수 있다. 하지만 여전히 존재하는 문제중 하나는 설정만 바뀌었음에도 빌드를 다시하고, 배포를 다시해야한다는 점이다. 나같은 경우는 AB 테스트를 진행하게됐고, AB의 비율을 자주 변경해야하는 이슈가 있었는데, 이를 기존대로 설정파일 분리만 해놓을 경우 비율을 바꿀때마다 릴리즈 배포를 해야했다. Spring Cloud Config 는 별도 config 서버를 두고 애플리케이션이 해당 서버에서 설정을 받아오는 방식이다. 중간에 설정이 바뀌는 일이 발생하면 config 서버만 변경해주고 애플리케이션은 설정을 갱신하..
spring cloud config client를 사용하여 갱신된 config 정보를 받아오기위해선 /actuator/refresh 를 호출해야한다. 그런데 이때 전혀 신경도 쓰지않았던 Hikari 에서 예외가 발생하는 경우가 있다. java.lang.IllegalStateException: The configuration of the pool is sealed once started. Use HikariConfigMXBean for runtime changes. 이런 에러메세지가 나오는데 정확히 파본건 아니지만 refresh 를 하면서 config들을 갱신할때 Hikari 쪽을 호출하는듯 하다. 이것도 확인해본건 아니지만 아래처럼 @ConfigurationProperties 애노테이션을 사용해서 생성할..
mac에서 zsh을 이용하고있다. 별 생각없이 세팅하는데 이상한데서 애를 먹은게 있어서 해결법을 적어놓는다. 1. powerline font 적용zsh에 agnoster 테마를 적용하려고 powerline font를 설치했다. https://github.com/powerline/fonts 여길 참고하여 적용하는데 정상적으로 설치해도 폰트가 변경되지않았다. 이것저것 찾다보니 high sierra 부터 수동으로 바꿔줘야한다는데 믿을만한건지는 잘 모르겠다.(난 모하비 사용중)여튼 iterm2 에서 Preferences -> Profiles -> text 에서 xxx Powerline 폰트로 변경해주면 된다. 2. 커맨드라인에서 유저명 지우기$ echo "DEFAULT_USER=\"$USER\"" >> ~/.z..
1. 코드 베이스배포된 애플리케이션은 하나의 코드 베이스만을 가져야한다. 코드는 git 같은 형상관리 도구를 이용해 관리한다. 2. 의존성애플리케이션이 의존하는 시스템 도구나 라이브러리는 명시적으로 드러나야한다. 암묵적인 의존이 존재하여 다른 환경에 배포할때 문제가 되지않도록 해야한다. 3. 설정배포마다 달라지는 설정은 분리하여 관리한다. 보통 local, test, release에 따라 다른시스템에 대한 정보들이 변경되게된다. 이런 설정들은 따로 관리할 수 있도록 한다. 4. 뒷단 서비스애플리케이션의 뒷단에서 실행되는 모든 서비스들은 연결된 리소스로 취급하며, 실행환경에 따라 사용하거나 사용하지않을 수 있어야한다. 5. 빌드, 릴리즈, 실행빌드, 릴리즈, 실행의 각 단계는 엄격하게 분리한다. 6. 프로..
소스 레벨 애노테이션을 정의하고 컴파일을 할때 아래와 같은 에러가 발생했다.. javac -processor processor compileJava 명령어를 치니까.. error: Could not instantiate an instance of processor 'com.yong.java10.AnnotationProcessor' 1 error 왜 안되는건지 정말 오랜시간 탐구했는데....내가 processor 클래스의 접근제어자를 default 로 해놨었다 ㅡㅡ;;IDE가 만들어주는대로 썼으면 public이 붙어있었을텐데 다른데서 작성하고 복붙하다가.... 이것때문에 주말 몇시간 날렸다.
스프링에서 AOP를 구현하는 방법중 하나가 dynamic proxy 를 이용하는 방법이다. 특별한 내용은 아니고, dynamic proxy 를 직접 구현해보는 포스팅을 하나 하고자한다. public interface Inter { String toMessage(); } 먼저 인터페이스를 하나 정의해준다. 예제를 위한 인터페이스라 대충 만들었다. 이제 proxy 를 구현해주자. Proxy 클래스에있는 팩토리메서드를 호출하면 된다. public static Object newProxyInstance(ClassLoader loader, Class[] interfaces, InvocationHandler h)(호출해야할 메서드) 파라미터들을 확인해보자. 클래스로더와 구현해야할 인터페이스, 그리고 호출핸들러를 필..
- Total
- Today
- Yesterday
- mariadb
- java
- java8
- OOP
- generics
- DesignPattern
- frontcode
- MySQL
- servlet
- backend개발환경
- Kotlin
- db
- Git
- JavaScript Core
- JPA
- go-core
- clean code
- frontend개발환경
- programming
- Design Pattern
- Jackson
- code
- javascript
- 정규표현식
- Spring
- toby
- EffectiveJava
- TEST
- http
- spring cloud
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |