Java
프로그래머스 가장먼 노드 // 자바에서 인접리스트, bfs 하는법
https://school.programmers.co.kr/learn/courses/30/lessons/49189?language=java\ import java.util.*;class Solution { static ArrayList> adj = new ArrayList(); static int[] vis = new int[20004]; static int n; public int solution(int _n, int[][] edge) { n=_n; for(int i=0;i()); } for(int i=0;i q = new LinkedList(); q.add(0); vis[0]=1; ..
![[spring-jpa] 1:N 컬렉션 조회 최적화](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnOq5f%2FbtsMEyXcf0f%2FILAjGP1tmYBqDSIyzWmxZK%2Fimg.png)
[spring-jpa] 1:N 컬렉션 조회 최적화
* 문제1order는 1개의 member를 가진다.order는 1개의 delivery를 가진다.order는 여러개의 orderItem을 가진다.item과 order는 다대다 관계이다. (중간테이블은 orderItem)이 상태에서, order를 조회하는 api를 개발해보자.public List findAllWithItem() { return em.createQuery( "select o from Order o" + " join fetch o.member m" + " join fetch o.delivery d" + " joi..
![[스프링-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}로 시작하는 값..