
API Gateway 클라이언트와 백엔드 서버 사이의 출입문 (front door) 라우팅 (라우팅, 필터링, API 변환, 클라이언트 어댑터 API, 서비스 프록시) 횡단 관심사 (cross-service concerns) 보안, 인증 (authentication), 인가 (authorization) 일정량 이상의 요청 제한 (rate limiting) 계층 (metering) Netflix Zuul 마이크로 프록시 50개 이상의 AWS ELB의 앞단에 위치해 3개의 AWS 리전에 걸처 하루 백억 이상의 요청을 처리 (2015년 기준) Zuul 이중화 (L4 또는 ELB) API Gateway - Zuul Zuul의 모든 API 요청은 HystrixCommand로 구성되어 전달된다. 각 API 경로 (..

N개의 숫자를 갖는 배열 A를 입력 받아서, 그 배열에 distinct한 숫자 수를 반환하는 문제. // you can also use imports, for example: import java.util.HashSet; import java.util.Set; // you can write to stdout for debugging purposes, e.g. // System.out.println("this is a debug message"); class Solution { public int solution(int[] A) { Set set = new HashSet(); for (int i = 0; i < A.length; i++) { set.add(A[i]); } return set.size(); ..
이 말은 50줄 이상 되는 클래스와 파일이 10개 이상인 패키지는 없어야 한다는 뜻이다. 50줄 이상의 클래스는 보통 한 가지 일 이상을 하는 것이며, 따라서 코드의 이해와 재사용을 점점 더 어렵게 끌고 간다. 50줄짜리 클래스는 스크롤 하지 않고도 한 화면에 볼 수 있다는 부가적인 혜택도 있으며 한눈에 파악하기도 쉽다. 클래스를 작게 작성할 때 난감한 경우는 같이 있어야 말이 되는 동작의 묶음이 있을 때다. 이는 패키지를 최대한 활용해야 하는 곳이기도 하다. 클래스가 점점 작아지고 하는 일이 줄어들며 패키지 크기를 제한함에 따라 패키지가 하나의 목적을 달성하기 위해 모인 연관 클래스들의 집합을 나타낸다는 사실을 알아차리게 된다. 패키지도 클래스처럼 응집력 있고 단일한 목표가 있어야 한다. 패키지를 작게..

A, C, G, T (각 1, 2, 3, 4 impact factor로 매핑되는)로 이루어진 String s과 s의 시작 종료 구간 값을 갖는 P[N], Q[N] 배열을 입력받아 각 구간 별로 가장 작은 impact factor를 갖는 배열을 반환하는 문제. class Solution { public int[] solution(String S, int[] P, int[] Q) { Map map = new HashMap(); map.put('A', 1); map.put('C', 2); map.put('G', 3); map.put('T', 4); int[] result = new int[P.length]; char[] chars = S.toCharArray(); for (int i = 0; i < P.len..

A, B, K 세 숫자를 입력 받아서 A ~ B 사이 숫자 중 K로 나누어떨어지는 개수를 return하는 문제. 처음에는 A ~ B까지 다 loop 돌면서 나누어떨어지는지 확인했으나 시간초과로 100%가 안나왔다. 여러가지 테스트해보다가 A / K, B / K 한 몫이 A에 K로, B에 K로 나누어떨어지는 숫자의 개수인 것을 알게되었고 그 사실을 응용해서 해결하였다. class Solution { public int solution(int A, int B, int K) { // B / K - A / K 해주고 int result = B / K - A / K; // 만약 A가 K로 나누어떨어지는 경우 A도 포함시켜야하기 때문에 + 1 if (A % K == 0) { result++; } return res..
누구나 실은 클래스, 메서드, 또는 변수의 이름을 줄이려는 유혹에 곧잘 빠지곤 한다. 그런 유혹을 뿌리쳐라. 축약은 혼란을 야기하며, 더 큰 문제를 숨기는 경향이 있다. 왜 축약을 하고 싶은지 생각해보라. 계속 반복해서 똑같은 단어를 치기 때문이 아닐까? 만일 그 경우라면 아마도 메서드가 너무 대대적으로 사용되어 중복을 없앨 기회를 놓치고 있는 것이다. 메서드 이름이 길어지고 있기 때문일까? 이는 책임 소재의 오류나 클래스의 부재라는 신호탄일지도 모른다. 클래스와 메서드 이름을 한두 단어로 유지하려고 노력하고 문맥을 중복하는 이름을 자제하자. 클래스 이름이 Order라면 shipOrder라고 메서드 이름을 지을 필요가 없다. 짧게 ship()이라고 하면 클라이언트에서는 order.ship()라고 호출하며..

배열 A에 1 ~ N까지의 숫자가 들어가있는데, 이 숫자들이 1부터 N까지 이루는 순열인지 아닌지를 판단하는 문제. 중간에 빠진 값이 있거나 하는 경우 0을 반환하고, 모든 숫자가 포함된 순열인 경우 1을 반환하면 되는 문제. class Solution { public int solution(int[] A) { // 소팅하고 Arrays.sort(A); // 순차적으로 빠진 값이 있는지 체크 for (int i = 0; i < A.length; i++) { // 빠진 값이 있으면 0을 반환 if (A[i] != (i + 1)) { return 0; } } // 없으면 1 반환 return 1; } } A를 오름차순으로 정렬하고 처음부터 돌면서 각 A의 값이 index+1와 같은지 아닌지 비교 후 아닌 경..

N개의 숫자를 갖는 배열 A가 주어지는데, N개의 숫자 중 1부터 순차적으로 확인했을 때, 그 중 빠진 숫자 중 최소인 숫자를 반환하는 문제. class Solution { public int solution(int[] A) { // 1 ~ 1000000 범위이므로 boolean[] map = new boolean[1000001]; // 소팅하고 Arrays.sort(A); // 만약 최대값도 음수이면 볼 필요 없이 그냥 1 반환 if (A[A.length-1] 0) { map[a] = true; } } // 1부터 돌면서 false인 경우 빠진 케이스이므로 return for (in..
- Total
- Today
- Yesterday
- 프로그래머스 Level 1
- 핸들러 인터셉터
- 필터
- http://www.nextree.co.kr/p6960/
- a
- 프로그래머스
- 동기
- Asynchronous
- 프로그래머스 Level 3
- Filter
- 블로킹
- 인터셉터
- 해시
- non-blocking
- 코딩테스트 고득점 Kit
- Synchronous
- 프로그래머스 Level 2
- blocking
- 비동기
- Handler Interceptor
- 스택/큐
- 논블로킹
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |