전체 글139 WebClient 사용할때 주의 (5편) Metric 먼저 Webclient 레벨에서 보내는 metric과 내부 구현체인 reactor.netty 레벨에서 보내는 metric 은 서로 다르다. WebClient 레벨에서 보내는 metric은 DefaultWebClientExchangeTagsProvider 에서 설정해서 보내고 있으며, uri template 단위로 태그 하고 있다. public class DefaultWebClientExchangeTagsProvider implements WebClientExchangeTagsProvider { @Override public Iterable tags(ClientRequest request, ClientResponse response, Throwable throwable) { Tag method.. 2021. 11. 11. [구현] 게임 개발 N x M 크기의 2차원 배열에서 규칙에 따라 캐릭터를 이동시키고, 캐릭터가 방문한 칸의 수를 출력한다(3 2021. 11. 8. WebClient 사용할때 주의 (4편) 이전 WebClient 글 예제 코드로 아래와 같이 clientResponse.createException().flatMap() 과 onErrorResume 을 사용했는데 flatMap 을 해서 다시 Mono.error 로 감싸는, 어떻게 보면 비효율적인 코드다. AS-IS .retrieve() .onStatus( httpStatus -> httpStatus != HttpStatus.OK, clientResponse -> { return clientResponse.createException() .flatMap(it -> Mono.error(new RuntimeException("code : " + clientResponse.statusCode()))); }) .bodyToMono(String.class.. 2021. 11. 5. The dark side of distributed systems 분산 시스템은, 존재조차 모르는 서버 오류로 인해 내 서버를 사용할 수 없는 위험성이 있다. 실패(failures)는 피할 수 없다. 원문에서는 failures 라고 되어 있는데 에러로 인한 장애를 피할 수 없다는 말로 이해했다. 분산 시스템이 클수록 이런 역동성(dynamism) 이 커지고 장애가 날 가능성이 높아진다. 쿠버네티스 월드에서 분산 컴퓨팅에 대한 잘못된 생각(많은 사람들이 옳다고 믿는) 8가지가 있다. 1. The network is reliable 2. Latency is zero 3. Bandwidth is infinite 4. The network is secure 5. Topology doesn’t change 6. There is one administrator 7. Transpo.. 2021. 11. 4. [구현] 왕실의 나이트 나이트 위치를 입력을 받았을 때 이동할 수 있는 경우의 수를 출력해보자. def convert(alphabet): if alphabet == 'a': return 1 if alphabet == 'b': return 2 if alphabet == 'c': return 3 if alphabet == 'd': return 4 if alphabet == 'e': return 5 if alphabet == 'f': return 6 if alphabet == 'g': return 7 if alphabet == 'h': return 8 s = input() x = convert(s[0]) y = int(s[1]) dx = [-2, -2, 2, 2, -1, -1, 1, 1] dy = [1, -1, 1, -1, 2, -.. 2021. 10. 31. 여러 API 결과 조합(with 비동기) 최종 결과 데이터를 만들기 위해 여러 API 들을 호출하고, 얻어온 각 API 결과들을 조합하는 로직을 만든다고 해보자. 먼저 아래코드처럼 각 API 결과들을 순차적으로 가져와 조합하는 방법이 있다. @Service public class SimpleContext { @Autowired private FirstJobService firstJobService; @Autowired private SecondJobService secondJobService; @Autowired private ThirdJobService thirdJobService; @Autowired private FourthJobService fourthJobService; public CombineContextResult combine(.. 2021. 10. 31. [그리디] 숫자 카드 게임 2차원 배열에 숫자들이 있다. n,m 을 입력받고 행렬을 만든다. 각 행마다 가장 작은 수들을 고르지만 최종적으로는 가장 큰 수를 출력해야 된다. 아래 예시1을 보면 1행에서는 1, 2행에서는 1, 3행에서는 2가 되서 정답은 2가 된다. [예시] 3 3 3 1 2 4 1 4 2 2 2 다 입력받은 후 작업하는게 아니라 행 하나 입력받을 때마다 min, max 작업을 수행한다. 행 안에서 최소값을 찾은 후에 최대값을 확인해서 계속 갱신해나가는 일반적인 작업이다. n, m = map(int, input().split()) result = 0 for i in range(n): data = list(map(int, input().split())) minValue = min(data) result = max(r.. 2021. 10. 24. jackson-dataformat-xml 이슈 정리 jackson-dataformat-xml(2.12.4) 를 사용하면서 겪은 이슈를 정리했다. cf) 기존 코드는 jaxb-api(2.1) 을 사용중이었다. 1. interface 네이밍 interface 네이밍은 자바에서 예약어기 때문에 xml element 로 좋은 네이밍은 아니다. 하지만 기존 코드와 똑같이 개발해야 했다. 먼저 바인딩 시킬 필드에 아래와 같이 @XmlElement 애노테이션을 붙이고 name을 interface로 지정했다. @XmlElement(name = "interface") private String interFace; 롬복을 썼기 때문에 자동으로 setter는 아래와 같이 setInterFace 네이밍으로 만들어졌다. public void setInterFace(String .. 2021. 10. 19. [그리디] 무지의 먹방 라이브 링크 : https://programmers.co.kr/learn/courses/30/lessons/42891 코딩테스트 연습 - 무지의 먹방 라이브 programmers.co.kr 만약 food_times 가 [3, 1, 2] 이고 k가 6라고 했을 때, 한번 순회하면 k는 3이 되고 [2, 0, 1] 이 된다. 다시 한번 순회한다고 했을 때 가운데 0은 건너 뛰게 되고 [1,0,0] 이 된다. 그러므로 배열 형태를 똑같이 유지한채 for문을 돌 필요가 없다. 오름차순으로 정렬해서 낮은 시간(음식 다 먹는데 적게 걸리는)부터 처리하면 된다. 책에서는 우선순위 큐를 활용한다. 그리고 무지가 먹방을 진행하다 food_times 값들이 모두 0이 됐는데 k 값이 남게 되면 -1을 리턴해야 된다. 하지만 꼭 .. 2021. 10. 17. [그리디] 볼링공 고르기 A, B 두 사람이 볼링을 치고 있다. 볼링공은 총 N개 있고 볼링공의 무게는 각각 다르며 1부터 M까지의 자연수 형태로 무게가 존재한다.(1 2021. 10. 11. [그리디] 만들 수 없는 금액 N 개의 동전을 가지고 있고, 화폐 단위는 1,000,000 이하의 자연수다. 이때 N 개의 동전을 이용하여 만들 수 없는 양의 정수 금액 중 최솟값을 구해라. 예를 들어 N = 5이고 각 동전이 3원, 2원, 1원, 1원, 9원 이라면 만들 수 없는 양의 정수 금액 중 최솟값은 8원이다. 또 다른 예로 N = 3이고 각 동전이 3원, 5원, 7원 이라면 답은 1원이다. 문제를 보고 처음든 생각은 이랬다. 가능한 모든 수를 Set으로 저장해놓고 1부터 1,000,000 까지 for문 돌려서 없는 숫자가 나오면 답인것으로. 그런데 모든 수를 구하기 위한 방식이 마땅치 않았다. 답 코드를 보면 먼저 정렬 한 후에, 구해야 되는 target 숫자를 차례차례 체크하는 방식으로 이루어져 있다. 예를 들어 data.. 2021. 10. 3. [그리디] 문자열 뒤집기 S 문자열은 0과 1로만 이루어져 있다. S 문자열에 있는 모든 숫자를 전부 같게 만드려고 한다. S 에서 연속된 하나 이상의 숫자를 잡고 뒤집을 수 있다. 뒤집는 것은 1을 0으로, 0을 1로 바꾸는것을 의미한다. 예를 들어 S 가 00011000 일때 모두 같게 하려면, 모두 1로 만들거나 모두 0으로 만들어야 한다. 먼저 모두 1로 만든다면 전체를 뒤집으면 1110011이 되고 그 후 4,5번째 문자를 뒤집으면 1111111 이 되어서 두번만에 모두 같은 숫자로 만들 수 있다. 다음 모두 0으로 만든다면 4,5번째 문자를 뒤집으면 00000000 이 되어서 한번만에 모두 같은 숫자로 만들 수 있고 정답은 1이 된다. 이 문제를 보고 처음 고민한 내용들이다. 복기를 위해 잘못된 생각도 그대로 적었다... 2021. 9. 26. 이전 1 ··· 5 6 7 8 9 10 11 12 다음