목록Study (268)
전공공부
HorizontalPodAutoscaler Deployments를 자동으로 업데이트 하며 target resource의 설정 값에 따라서 replica를 늘리고 줄이는 등의 행위를 하는 리소스입니다. 이를 사내 서비스에 Deployments의 Request.memory 기준으로 70%로 설정해서 배포하려고 하였는데 생긴 이슈가 있었습니다. 오류 내용은 Unable to get metrics for resource memory: no metrics returned from resource metrics API 와 같았습니다. 이때, 제가 1차로 의심 한 것은 metric server의 동작 유무를 체크하였습니다. 하지만, 명령어로 확인해보았으나 정상적으로 cpu, memory 사용량 등이 적절히 출력되었습..
설명 가중치가 부여된 그래프 상에서 단방향 일 때 모든 정점 쌍 간의 최단 경로를 찾는 알고리즘인 플로이드 와샬 알고리즘을 사용하면 거리를 쉽게 구할 수 있습니다. 먼저 2차원 배열을 초기화 합니다. 각 배열의 정점에서 다른 모든 정점으로의 직접적으로 도착하는 이동거리를 찾습니다. 그 후, 알고리즘 상세를 살펴 보자면 X -> Y 까지의 최소 비용을 구한 것arr[X][Y]으로 이러한 방식으로 비용을 찾아나가는데. 예시로 X -> Y -> Z 가 만일, X->Z 최소 이동거리라면 arr[X][Y] + arr[Y][Z]를 구합니다. 즉, for문을 보면 알겠지만 출발지 i , 목적지 j, 중간 지점을 k로 둡니다. 이미 i -> j가 최소인 경우에는 탐색을 하지 않겠지만 만일, k를 거쳐서 갈 때 최소가 ..

Networking Basic Switching and Routing, DNS, Network Namespace, Docker Namespace 등에 대해서 개념적인 의미 그리고 시스템에서 어떻게 사용되는지 알아봅시다. 우리는 네트워크 엔지니어가 아니니 가볍게 볼 거지만 적어도 기본적으로 용어나 어떤 행동을 하는지 알아야 깊이 있는 이해가 가능하기 때문에 한 번 알아봅시다. Switching Switch는 네트워크 내부에서만 통신 할 수 있게 도와줍니다. 각각의 VM 또는 데스크톱이 있다고 합시다. 우리는 서로 소통하기 위해서 이들을 스위치에 연결하고, 스위치는 이 두 시스템을 포함하는 네트워크를 생성합니다. 이들을 스위치에 연결하기 위해서는 각 호스트에 인터페이스가 필요한데요. 호스트에 따라 물리적인 ..

Volume 우선 쿠버네티스의 볼륨을 알아보기 전에 도커의 볼륨에 대해서 먼저 알아봅시다. 도커에 볼륨은 영구히 쓰기 위해서 컨테이너가 붙기 전에 먼저 host에 /data 와 같은 폴더에 볼륨을 두고 있습니다.이를 컨테이너를 연결 시켜서 써서 영구히 쓰려고 하죠 자 쿠버네티스에서 보면 pod도 일시적이고 pod 내부에 data도 일시적이죠. 그렇기 때문에 volume을 씁니다. 그래서, pod가 삭제가 되어도 volume이 data를 유지를 해주죠. 아래 그림을 보면 알 수 있듯이 pod는 보라색 동그라미이고 volumeMounts는 pod의 /opt 폴더의 값을 volume에 마운트 하겠다는 소리입니다. 이렇게 만들어 두면 volume이 실제 host에 생성이 되고 pod가 삭제되어도 이미 volum..
MVC 패턴은 일반적으로 Controller, Service, Repository 각 계층의 역할과 책임을 분리하여 애플리케이션 유지보수성을 높이기 위해서 사용합니다. 하지만, MVC 패턴은 비즈니스 로직과 외부 서비스의 로직 결합도를 완전히 분리하지 못한다는 단점이 있는데요. 이를 같이 알아봅시다. MVC @Service public class OrderService { private final OrderRepository orderRepository; private final String filePath; public OrderService(OrderRepository orderRepository, @Value("${file.path}") String filePath) { this.orderRepos..
File System /var/lib/docker 폴더에 모두 이미지든 도커 파일들이 쌓입니다. 그리고, Layer 구조로 저장이 되는데요. Dockerfile을 열어서 보면 이미 Ubuntu image가 설치 되었다고 치면 이미 마주치면서 있는 계층의 것들을 다운로드하지 않습니다. 필요한 부분만 변경해서 업데이트가 될 뿐이죠. 그리고, 이러한 Dockerfile의 처리들은 Image Layer로 처리가 되고 이를 컨테이너 레이어를 만들고 글을 쓸 수 있는 레이러를 하나 더 올려서 처리 할 수 있습니다. Container Layer가 RW를하죠. 이해하기 쉽게 예제를 들겠습니다 docker build Dockerfile -t username/custom-app #이미지 레이어 생성 위 명령어로 이미지 레..
단위 테스트는 소프트웨어 개발의 중요한 부분입니다. Mockito는 Java에서 단위 테스트를 작성할 때 널리 사용되는 프레임워크 중 하나입니다. 하지만 Mockito를 사용하면서 발생할 수 있는 몇 가지 이슈가 있었고 이를 정리해봤습니다. 문제 : NullPointerException / MockitoException Cannot invoke "org.springframework.jdbc.core.JdbcTemplate.queryForObject(String, Object[], org.springframework.jdbc.core.RowMapper)" because "this.jdbcTemplate" is null 이 에러는 UserDaoImpl 클래스의 인스턴스가 생성될 때 JdbcTemplate 객..
설명 다익스트라를 사용해서 직접 각 시작점에서 시작해서 가지는 모든 곳을 체크했습니다. 또한, 처음 시작하는 곳은 내가 이미 시작 할 때 방문 한 여부를 찾는것이 아닌 다른 지점에서 처음 시작 지점을 들어오는 것을 체크하는 것이라서 그에 대한 방문 처리를 해주었습니다. 코드 package shortest_path; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.LinkedList; import java.util.Queue; import java.util.StringTokenizer; public class BOJ_11403 { static int[][] m..