Java
![[스프링-msa] 프로메테우스 , 그라파나 docker 연동](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0jC6a%2FbtsMsNHAU5o%2Fo5oxJAGbOkfkDRL9uS0HK1%2Fimg.png)
[스프링-msa] 프로메테우스 , 그라파나 docker 연동
먼저 docker-compose.yml 작성로컬의 prometheus.yml을 볼륨마운트를 통해 도커에 넣어줘야 한다.prometheus: image: prom/prometheus container_name: prometheus volumes: - D:\JavaProject\monitor:/etc/prometheus ports: - 9090:9090 restart: always networks: my-network: ipv4_address: 172.18.0.106 grafana: image: grafana/grafana container_name: grafana ports: - 3000:3000 res..
![[스프링 msa] zipkin을 이용한 msa 분산추적](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxxQed%2FbtsMtsPYMQW%2FVVN0FYkuBMDGZNcbKofCR0%2Fimg.png)
[스프링 msa] zipkin을 이용한 msa 분산추적
spring 3.0 이후로는 brave를 사용해야함의존성 추가implementation 'io.zipkin.reporter2:zipkin-reporter-brave'implementation 'org.springframework.boot:spring-boot-starter-actuator'implementation 'io.micrometer:micrometer-tracing-bridge-brave'implementation 'io.github.openfeign:feign-micrometer'이걸해야 요청마다 동일한 TraceId 부여@Configurationpublic class MonitorConfig { @Bean public Capability capability(final MeterRe..
![[스프링 msa] 서킷브레이커를 이용한 장애전파 차단](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIVc4I%2FbtsMkB7dkyQ%2FdvKcVkS3RAXkkoxcAFmmD1%2Fimg.png)
[스프링 msa] 서킷브레이커를 이용한 장애전파 차단
* 문제order-service를 끄고 user-service에 요청시 500 error가 발생* 해결서킷브레이커 도입@Configurationpublic class Resilience4JConfig { @Bean public Customizer globalCustomConfiguration() { CircuitBreakerConfig circuitBreakerConfig = CircuitBreakerConfig.custom() .failureRateThreshold(4) // 4번 이상 실패하면 .waitDurationInOpenState(Duration.ofMillis(1000)) // 1초 동안 ..
![[스프링 msa] msa 예외처리 // errorDecoder 이용](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdvbG4x%2FbtsMiJX4YRH%2Fk8pioTyiR55QvM3KEcSXRK%2Fimg.png)
[스프링 msa] msa 예외처리 // errorDecoder 이용
* 목적order-service에 문제가 있어도 user-service는 정상작동해야 한다.일부러 error 만들어보기@FeignClient(name = "order-service")public interface OrderServiceClient { @GetMapping("{userId}/orders_ng") //api gateway를 거치지 않음 List getOrders(@PathVariable String userId);}error msg를 하드코딩 하는 대신 yml 파일 에 값을 넣어두기error msg 수정이 필요할때 1곳만 수정하면 된다!!@Component@RequiredArgsConstructorpublic class FeignErrorDecoder implements Error..
![[스프링 msa] RestTemplate로 서비스간 통신하기, restTemplate 404 해결](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzizYF%2FbtsMe4IDvrN%2FT52Gl6LSEBW47de6q88lIk%2Fimg.png)
[스프링 msa] RestTemplate로 서비스간 통신하기, restTemplate 404 해결
먼저 서비스를 키려면config-server를 켜야 yml파일을 읽어올수 있음docker의 rabbit mq 도 켜야함user-service에서 orders를 order_service에 요청해서 받아오기@Override public UserDto getUserByUserId(String userId) { UserEntity userEntity = userRepository.findByUserId(userId); if(userEntity==null){ throw new UsernameNotFoundException("User not found"); } UserDto userDto = new ModelMapper().map(userE..
![[스프링 msa] 대칭키를 이용한 암호화](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbC5lem%2FbtsMdKiZzqa%2FUIjC6IAk9WhHjhMXEKbHE0%2Fimg.png)
[스프링 msa] 대칭키를 이용한 암호화
* 문제user-service같은곳의 yml에 비밀번호가 바로 노출되어있음이를 config-server에서 일괄로 관리하고, 암호화하고자 함 * 해결(구현)yml에 값도 암호화한 값을 저장!!Spring Cloud Config Server의 암호화 기능에 대해 상세히 설명해드리겠습니다. 1. 작동 원리: ```yaml encrypt: key: abcdefwefkorgkreogkeogke015684648 ``` 이 설정을 bootstrap.yml에 추가하면, Spring Cloud Config Server는 자동으로 다음 기능들을 활성화합니다: - /encrypt 엔드포인트 생성 (암호화용) - /decrypt 엔드포인트 생성 (복호화용) - 프로퍼티 값들의 자동 복호화 ({cipher}로 시작하는 값..
![[Spring] spring cloud bus 써보기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbg9qBj%2FbtsL6JDRgE1%2Fce3KUgvAc6yK3JR0tndUlK%2Fimg.png)
[Spring] spring cloud bus 써보기
Spring Cloud Bus는 분산 시스템의 구성 변경사항을 실시간으로 전파하는 메시징 시스템주요 특징: - 메시지 브로커(RabbitMQ/Kafka)를 통한 마이크로서비스 간 통신 - Config Server의 설정 변경사항 자동 전파 - @RefreshScope 빈들의 자동 갱신 - /actuator/busrefresh 엔드포인트로 수동 갱신 가능 설정 예시:config-serveruser-service, api-gateway레빗mq, 액츄에이터를 yml에 써주면 된다. 설정 변경 시 동작 과정:1. 설정 변경2. /actuator/bus-refresh 호출3. Spring Cloud Bus가 변경사항을 모든 서비스에 전파4. 각 서비스의 @RefreshScope 빈 갱신 * 결과yml 값을 바꾸고..
![[MVC] Servlet 실습 / 터미널에서 http 로그 찍는법](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdCSjSU%2FbtsJfB9XvPu%2FGI4fGvXA8Kgzj3yY9vxmNK%2Fimg.png)
[MVC] Servlet 실습 / 터미널에서 http 로그 찍는법
package hello.servlet;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.web.servlet.ServletComponentScan;@ServletComponentScan //서블릿 직접등록후 사용하겠음.@SpringBootApplicationpublic class ServeltApplication { public static void main(String[] args) { SpringApplication.run(ServeltApplication.class,..