전체 글
-
아이템3. private 생성자나 열거 타입으로 싱글턴임을 보증하라STUDY/이펙티브 자바 2023. 11. 17. 13:59
싱글턴(singleton) 인스턴스를 오직 하나만 생성할 수 있는 클래스 무상태(stateless) 객체 설계상 유일해야 하는 시스템 컴포넌트 싱글턴을 생성하는 방식 1. public static final 필드 방식 public class Elvis { public static final Elvis INSTANCE = new Elvis(); private Elvis() { // private 생성자는 Elvis.INSTANCE 를 초기화할 때 딱 한 번 호출된다. } public void leaveTheBuilding() { } } private 생성자는 public static final 필드를 초기화할 때 딱 한 번만 호출된다. public이나 protected 생성자가 없으므로 클래스가 초기화될 ..
-
아이템2. 생성자에 매개변수가 많다면 빌더를 고려하라.STUDY/이펙티브 자바 2023. 11. 17. 13:58
선택적 매개변수가 많은 클래스 생성 방식 점층적 생성자 패턴(telescoping constructor pattern) 자바빈즈 패턴(JavaBeans pattern) 빌더 패턴(Builder pattern) 1. 점층적 생성자 패턴 필수 매개변수만 받는 생성자, 필수 매개변수와 선택 매개변수 1개를 받는 생성자, 선택 매개변수를 2개까지 받는 생성자, ... 형태로 선택 매개변수를 전부 다 받는 생성자까지 늘려가는 방식 점층적 생성자 패턴을 사용해서 클래스의 인스턴스를 만들려면 원하는 매개변수를 모두 포함한 생성자 중 가장 짧은 것을 골라 호출하면 되는데, 설정하길 원치 않는 매개변수까지 포함되기 쉽다. 하지만 매개변수가 많아지는 경우 클라이언트 코드를 작성하거나 읽기 어려워 진다. 코드를 읽을 때 각..
-
쿠버네티스/도커 - Helm(헬름)STUDY/Docker 2023. 6. 12. 00:07
Helm(헬름)이란? 쿠버네티스에서 패키지를 손쉽게 배포할 수 있도록 패키지를 관리하는 쿠버네티스 전용 패키지 매니저이다. 패키지 매니저는 외부에 있는 저장소에서 패키지 정보를 받아와 패키지를 안정적으로 관리하는 도구로, 설치에 필요한 의존성 파일들을 관리하고 간편하게 설치할 수 있도록 도와주는 것이다. 패키지 매니저의 기능 패키지 검색 : 설정한 저장소에서 패키지를 검색하는 기능을 제공한다. 패키지 관리 : 저장소에서 패키지 정보를 확인하고, 사용자 시스템에 패키지 설치, 삭제, 업그레이드, 되돌리기 등을 할 수 있다. 패키지 의존성 관리 : 패키지를 설치할 때 의존하는 소프트웨어를 같이 설치하고, 삭제할 때 같이 삭제할 수 있다. 패키지 보안 관리 : 디지털 인증서와 패키지에 고유하게 발행되는 체크섬..
-
컨테이너 인프라 환경 구축을 위한 쿠버네티스/도커 Part 3.4STUDY/Docker 2023. 6. 8. 00:13
1. 데몬셋(DaemonSet) 데몬셋은 클러스터 전체 노드에 특정 파드를 실행할 때 사용하는 컨트롤러로, 디플로이먼트의 replicas가 노드 수만큼 정해져 있는 형태라고 할 수 있는데, 노드 하나당 파드 한 개만을 생성한다. 이러한 데몬셋은 Calico 네트워크 플러그인과 kube-proxy를 생성할 때, 또는 MetalLB의 스피커에서도 사용될 수 있다. 이들의 공통점은 노드의 단일 접속 지점으로 노드 외부와 통신한다는 것으로, 파드가 1개 이상 필요하지 않는다. 결국 노드를 관리하는 파드라면 데몬셋으로 만드는 게 가장 효율적이다. 또한 로그 수집, 모니터링, 네트워크 에이전트, 볼륨 관리 등과 같이 모든 노드에서 실행되어야 하는 시스템 레벨의 작업에 이상적이다. 특징 노드 단위 배포 데몬셋은 클러..
-
파티셔닝STUDY/DB 2023. 6. 7. 22:21
파티셔닝이란? 큰 테이블이나 인덱스를 관리하기 쉬운 조각으로, 물리적으로 분할하는 것을 의미한다. 물리적인 데이터 분할이 있더라도, DB에 접근하는 애플리케이션의 입장에서는 이를 인식하지 못한다. Data Partitioning은 큰 테이블과 인덱스의 관리를 보다 쉽게 하기 위해 설계된다. 파티셔닝 사용의 장점 가용성(Availability) : 물리적인 파티셔닝으로 인해 전체 데이터의 훼손 가능성이 줄어들고 데이터 가용성이 향상된다. 파티션은 독립적으로 관리된다. Backup and Restore을 파티션별로 작업할 수 있다. 같은 테이블에서 Unavailable한 파티션은 다른 파티션에 영향을 주지 않는다. 관리용이성(Manageability) : Database의 큰 객체들을 제거하여 관리를 쉽게 ..
-
컨테이너 인프라 환경 구축을 위한 쿠버네티스/도커 Part 3.3STUDY/Docker 2023. 5. 24. 23:54
쿠버네티스 연결을 담당하는 서비스 쿠버네티스에서 서비스란? 외부에서 쿠버네티스 클러스터에 접속하는 방법을 서비스(Service)라고 한다. 서비스를 '소비를 위한 도움을 제공한다'는 관점으로 바라본다면 쿠버네티스가 외부에서 쿠버네티스 클러스터에 접속하기 위한 '서비스'를 제공한다고 볼 수 있다. 1. 가장 간단하게 연결하는 노드포트 외부에서 쿠버네티스 클러스터의 내부에 접속하는 가장 쉬운 방법은 노드포트(NodePort) 서비스를 이용하는 것이다.노트포트 서비스를 설정하면 모든 워커 노드의 특정 포트(노드포트)를 열고 여기로 오는 모든 요청을 노드포트 서비스로 전달한다. 그리고 노드포트 서비스는 해당 업무를 처리할 수 있는 파드로 요청을 전달한다. 2. 사용 목적별로 연결하는 인그레스 노드포트 서비스는 ..
-
RAC(Real Application Clusters)STUDY/DB 2023. 5. 24. 01:35
DB 이중화 구성은 데이터베이스 시스템의 가용성과 내결합성을 향상시키기 위해 사용된다. HA(Hign Availability: 고가용성) OPS(Oracle Parallel Server) RAC(Real Application Clusters) HA(Hign Availability: 고가용성) 두 대의 서버를 동일하게 구성해서 서버 1대는 Active 상태로 두고 다른 1대는 Standby 상태로 설정해서, 만약 Active 상태의 서버에 장애가 발생할 경우 Standby 서버가 즉시 Active 상태로 바뀌면서 서비스 중단이 발생하지 않도록 하는 구성이다. 문제점 비용이 많이 든다. Active 상태의 서버에서 작업을 하다 장애가 발생하면 Standby 상태의 서버로 작업은 가능하지만, 데이터가 동기화 ..
-
DBCP(Database Connection Pool)STUDY/DB 2023. 5. 17. 22:42
DBCP란? 웹 컨테이너(WAS)가 실행되면서 DB와 미리 일정 갯수의 connection(연결)을 만들어 pool에 저장해두었다가, 클라이언트 요청이 오면 connection을 제공하고고, 처리가 끝나면 pool에 다시 반환하여 보관하는 방식을 의미한다. DBCP를 사용하는 이유는 무엇일까? 데이터베이스와 Connection을 맺는 작업은 매우 느리며 자원을 많이 소모하는, 비용이 큰 작업이다. 연결을 매번 생성하면 매 요청마다 연결 생성 비용이 발생하여 애플리케이션의 성능을 저하시킬 수 있고, 만약 다수의 사용자들이 동시다발적으로 데이터베이스의 Connection 연결을 요청한다면 최악의 경우 서버가 다운될 수 있다. 이러한 비용과 같은 문제들을 해결하기 위해 DBCP를 사용할 수 있다. 여러 개의 ..