목록분류 전체보기 (57)
charminseok
다중 컨테이너 파드 생성 컨테이너 간 디스크 스토리지를 공유하기 위한 볼륨 생성 파드 내부에 깃 리포지터리 사용 파드에 GCE 퍼시스턴트 디스크와 같은 퍼시스턴트 스토리지 연결 사전 프로비저닝된 퍼시스턴트 스토리지 퍼시스턴트 스토리지의 동적 프로비저닝 파드 내부의 각 컨테이너는 고유하게 분리된 파일시스템을 가진다. 컨테이너가 시작할때 컨테이너 이미지를 빌드할 때 추가한 파일들을 갖는 컨테이너를 시작한다. 이미지를 통해 파일을 가져오기 때문에 컨테이너가 재실행 된다면 이전에 실행했던 컨테이너에 쓰여진 파일시스템은 볼 수 없다. 이런 상황에서 특정 데이터를 가진 디렉터리를 보존하고 싶을 경우, 쿠버네티스에서 제공하는 기능이 볼륨이다. 스토리지 볼륨은 파드와 같은 최상위 리소스는 아니지만 파드의 일부분으로 정..
IP 주소나 호스트 네임으로 요청하는 것과 다르게 쿠버네티스에서는 이런 방식으로 동작하지 않는다. 파드는 일시적이고, 파드의 IP 주소를 클라이언트가 알 수 없기 때문이다. 쿠버네티스느 이러한 문제를 해결하기 위한 방법으로 서비스를 제공한다. 서비스란? 동일한 서비스를 제공하는 파드 그룹에 지속적인 단일 접점을 만들때 생성하는 리소스 서비스가 존재하는한 절대 바뀌지 않는 IP와 포트번호를 가지고 있다. 해당 IP와 포트로 접속하면 파드 중 하나로 연결된다. 서비스는 다른 리소스와 같이 레이블 셀렉터를 통해 파드와 연결된다. 세션 어피니티 동일한 클라이언트에서의 요청을 매번 같은 파드로 리디렉션할 수 있다. 서비스의 spec 부분에 sessionAffinity: ClientIP로 주면 된다. 멀티 포트 한..

AI 모델과 데이터의 버전을 관리할 수 있는게 필요했는데 Data Version Control이란 것이 있었다. git과 거의 비슷하게 사용할 수 있어 git을 사용해 봤다면 어렵지않게 사용가능한 장점이 있다. Data Version Control or DVC is a command line tool and VS Code Extension to help you develop reproducible machine learning projects: Version your data and models. Store them in your cloud storage but keep their version info in your Git repo. Iterate fast with lightweight pipeline..
4. 레플리케이션과 그밖의 컨트롤러: 관리되는 파드 배포 파드의 안정적인 유지 동일한 파드의 여러 인스턴스 실행 노드 장애 시 자동으로 파드 재스케줄링 파드의 수평 스케줄링 각 클러스터 노드에서 시스템 수준의 파드 실행 배치 잡 실행 잡을 주기적 또는 한 번만 실행하도록 스케줄링 3장에서 파드를 수동으로 생성, 감독, 관리하는 것을 배웠지만 직접 하는 일은 없을 것이다. 대신 레플리케이션 컨트롤러 또는 디플로이먼트와 같은 유형의 리소스를 생성해 실제 파드를 생성하고 관리한다. 4장에서는 이러한 컨트롤러들이 파드를 자동으로 관리해줘 파드를 안정적으로 유지하는 방법을 알아볼 것이다. 파드를 안정적으로 유지하기 쿠버네티스의 주요 이점은 쿠버네티스에 컨테이너 목록을 제공해 해당 컨테이너를 클러스터에서 계속 실행..

MSA 이전에는 소프트웨어 애플리키이션이 하나의 프로세스 또는 몇 개의 서버에 분산된 프로세스로 실행되는 모노리틱 시스템이였다. 이런 시스템은 업데이트가 비교적 느리고 전체 패키지를 빌드하고 배포 후 모니터링한다. 문제가 생기면 사용 가능한 서버로 직접 마이그레이션한다. 이런 거대한 모노리틱 서비스는 마이크로서비스라는 독립적으로 실행되는 더 작은 요소로 분리된다. 마이크로서비스로 분리되어 개별적으로 개발, 배포, 업데이트, 확장이 가능하다. 하지만 마이크로서비스들이 점점 늘어나 유지 관리하는데 어려움이 생겨 배포, 구성, 관리, 장애처리를 자동화 하는 쿠버네티스가 나온 것이다. 쿠버네티스는 하나의 거대한 컴퓨팅 리소스를 제공해 각 구성 요소를 쉽게 관리할 수 있어 실행하는 모든 애플리케이션을 알 필요가 ..
객체지향 언어인 자바는 함수형 프로그래밍을 지원하기위해 자바8부터 stream API, 람다식 등이 추가되었다. Stream API를 사용하면 기존 for문을 사용하지 않고 함수를 사용해 컬렉션 데이터를 처리할 수 있다. String[] words = {"java", "python", "javascript", "C++"}; // 1. 4글자 이상 단어 출력 for (String s : words) { if (s.length() > 4) { System.out.println(s); } } // 2. 정렬 후 출력 Arrays.sort(words); for (String s : words) { System.out.println(s); } 위의 코드처럼 for문을 사용하는 것보다 더 간단하고 가독성있게 작성할..

테스트를 통해 코드가 의도한 방식으로 동작하는지 검증하기 위한 절차로 문제를 방지하기 위한 것이기도 하고, 코드 변경으로 인한 사이드 이펙트를 줄일 수 있기도 한다. 단위 테스트 단위 테스트는 하나의 모듈을 기준으로 독립적으로 진행되는 가장 작은 단위의 테스트다. 작은 단위로 테스트를 하며 이 단위는 하나의 기능 또는 메소드가 될 수도 있다. 통합 테스트 통합 테스트는 모듈을 통합하는 과정에서 모듈 간의 호환성을 확인하기 위해 수행되는 테스트이다. 애플리케이션은 여러 모듈들로 구성되어 있고 이런 모듈들끼리 호출하면서 기능을 수행한다. 그래서 독립적인 기능에 대한 테스트가 아니라 통합적인 실행과정이 올바르게 동작하는지 확인하는 것이다. JUnit 스프링 부트를 만들면 자동적으로 JUnit5를 사용할 수 있..
데이터베이스의 조인연산에는 nested loop join, sort-merge join, hash join 등이 존재합니다. Nested Loop Join 2개 이상의 테이블에서 하나의 집합을 기준으로 순차적으로 상대방 row를 결합하여 원하는 결과를 조합하는 방식입니다. 중첩된 for문을 검색하는 것과 같은 방식입니다. 먼저 선행 테이블의 처리 범위를 하나씩 엑세스하면서 추출된 값으로 연결할 테이블을 조인합니다. 좁은 범위에 유리한 성능을 보여준다. 순차적으로 처리하여 Random Access 위주 후행 테이블에는 조인을 위한 인덱스 생성 필요 선행테이블에 row 수가 많다면 그만큼 반복해서 후행테이블을 검색해야 하기 때문에 성능이 나빠질 것입니다. 테이블 중 row가 적은 쪽을 선행테이블로 설정하는 ..