본문 바로가기

분류 전체보기

(54)
템플릿 메서드 패턴 알고리즘의 뼈대를 정의하고, 일부 단계를 서브클래스에 연기하는 방법이다. 재사용성과 확장성을 중시하는 상황에서 유용하다. 템플릿 메서드 알고리즘의 골격(어떤 작업을 수행하는 데 필요한 여러 단계의 순서)을 제공한다. 메서드는 자체적으로 변경되지 않으며, 서브클래스에서 오버라이드할 수 있는 하나 이상의 추상메서드를 호출한다. 추상 메서드 서브클래스에서 구현해야 하는 메서드이다. 템플릿 메서드는 이러한 메서드들을 호출해 전체 알고리즘의 일부를 구성한다. 후크 메서드 선택적으로 오버라이드할 수 있는 메서드이다. 서브클래스에서 필요에 따라 구현할 수 있으며, 알고리즘의 특정 포인트에서 추가적인 작업을 수행할 수 있게 한다. 장점 코드 재사용성: 공통된 알고리즘의 코드를 상위 클래스에 한 번만 작성해 여러 하위 ..
systemd 시스템과 서비스 시스템 컴퓨터 하드웨어, 소프트웨어, 네트워크 리소스 및 데이터를 포함한 전체 컴퓨팅 환경을 뜻한다. 리눅스 운영체제에서 시스템은 커널, 시스템 라이브러리, 사용자 인터페이스(CLI, GUI), 응용 프로그램 등을 포함한다. 시스템 관리는 이러한 요소들을 포함한 컴퓨터 시스템의 구성, 유지보수, 운영 및 보안과 관련된 작업을 의미한다. 서비스 백그라운드에서 실행되는 프로세스나 응용프로그램을 지칭한다. 사용자의 직접적인 개입 없이 특정 기능을 제공한다. daemon으로도 불린다. 예 웹서버 파일서버 데이터베이스서버 프린트서버 … 시스템의 부팅시 자동으로 시작되거나, 수동으로 시작되고, 중지될 수 있다. 일반적으로 네트워크를 통한 요청에 응답하거나 특정 작업을 주기적으로 수행한다. 리눅스에서..
리눅스 환경변수 리눅스 시스템은 로그인 프로세스 중에 특정 위치에 있는 파일을 자동으로 읽는다. 각 파일은 특정 목적과 적용 범위를 가지고 있으며, 시스템 시작 시, 사용자 로그인 시, 새 shell 시작 시 등의 상황에 따라 로드된다. 리눅스 시스템에서 환경변수와 설정을 읽어들이는 일반적인 파일 /etc/environment 시스템 전체에 적용되는 환경변수 PAM 모듈을 통해 시스템의 모든 사용자에게 영향을 미치는 변수를 설정한다. /etc/profile 모든 사용자의 모든 로그인 shell 세션에 적용되는 글로벌 설정 시스템 전체의 기본 환경, 로그인 쉘 시작 스크립트 및 기타 system-wide 환경 설정을 포함한다. ~/.bash_profile, ~/.profile, ~/.bash_login 사용자의 홈 디렉터..
리두로그와 언두로그 리두로그 트랜잭션이 만들어내는 모든 변경사항을 순차적으로 기록한다. 주로 시스템이 비정상적으로 종료되었을 때 트랜잭션의 변경사항을 복구하는데 사용된다. 시스템이 비정상적으로 종료되었을 떄, 마지막 체크포인트 이후에 발생한 모든 트랜잭션을 다시 실행해 데이터를 복구하는데 사용된다. 동작 트랜잭션이 커밋될 때 메모리의 로그 버퍼에 먼저 기록되고, 이후 디스크에 플러시된다. 체크포인트는 더티 페이지를 디스크에 플러시 하는 것과 관련이 있으며, 리두 로그와는 별도의 프로세스이다. 체크포인트 발생시, 변경된 데이터 페이지가 디스크의 데이터 파일에 플러시되어 데이터의 일관성을 유지한다. WAL 원칙 데이터 페이지를 디스크에 기록하기 전에 해당 변경 사항을 먼저 리두 로그에 기록한다. (버퍼 풀의 페이지보다도 리두로..
바이너리 로그의 복제 데이터 포맷 바이너리 로그 MySQL에서 발생하는 모든 변경 사항을 순서대로 기록하는 로그 데이터의 변경 내역, 테이블의 구조 변경, 계정이나 권한의 변경 정보까지 모두 저장된다. 바이너리 로그에 기록된 각 변경 정보들을 이벤트라고 한다. 복제 데이터 포맷 Statement 변경 이벤트를 발생시킨 SQL문을 기록하는 방식 장점 로그 크기가 작다. 저장 공간이 얼마 들지 않는다. 레플리카 서버에서 복제할 때 빠르게 처리할 수 있다. 단점 비결정적인 쿼리의 경우, 복제 시 소스 서버와 레플리카 서버 간에 데이터가 달라질 수 있다. 데이터에 락을 더 많이 건다. 트랜잭션 격리 수준이 REPEATABLE-READ 이상이어야 한다. 하나의 트랜잭션 내에서도 각 쿼리가 실행되는 시점마다 데이터 스냅숏이 달라질 수 있는데, 이로..
리플렉션의 InvocationTargetException Java의 리플렉션 API를 사용해 메서드를 호출할 때 해당 메서드가 예외를 던지면 리플렉션 메커니즘은 이 예외를 InvocationTargetException 으로 감싸서 다시 던진다. 왜? 리플렉션을 사용해 메서드를 동적으로 호출하는 과정에서 발생하는 예외와 실제 메서드 내부에서 발생하는 예외를 구분하기 위함이다. 리플렉션 API를 사용하는 코드는 메서드 호출과 관련된 다양한 문제로 인해 예외가 발생할 수 있다. IllegalAccessException : 메서드에 접근할 수 없는 경우 IllegalArgumentException : 인자가 잘못된 경우 NoSuchMethodException … 메서드 자체가 실행되는 도중에 예외를 던지는 경우는 메서드의 로직과 관련된 문제이다. 리플렉션 API는 이..
WeakHashMap과 약한 참조 WeakHashMap의 특징 약한 참조 WeekHashMap은 키에 대한 약한 참조를 저장한다. 키 객체에 대한 다른 참조가 없다면 Garbage Collector에 의해 수거된다. 키 객체가 Garbage Collector에 의해 수거되면 해당 키와 연관된 엔트리도 자동으로 제거된다. → 메모리 누수를 방지할 수 있다. 동기화 x 동기화를 지원하지 않는다. 여러 스레드에서 동시에 WeakHashMap을 사용하려면 외부에서 동기화 처리를 해야한다. Null 허용 key와 value에서 모두 null을 허용한다. null 키는 약한 참조가 아니기 때문에 GarbageCollecor에 의해 수거되지 않는다. WeakHashMap 키에 대한 참조 없을 때 GC에 의해 수거되는지 확인 import java.ut..
[Real MySQL] 인덱스 (2) 8.6 함수 기반 인덱스 칼럼의 값을 변형해서 만들어진 값에 대해 인덱스를 구축할 수 있게 한다. 인덱스 내부적인 구조 및 유지관리 방법은 B-Tree 인덱스와 동일하다. 함수 기반 인덱스를 구현하는 방법 가상 칼럼을 이용한 인덱스 함수를 이용한 인덱스 8.6.1 가상 칼럼을 이용한 인덱스 ALTER TABLE user ADD full_name VARCHAR(30) AS (CONCAT(first_bame,' ',last_name)) VURTUAL, ADD INDEX ix_fullname (full_name); 가상 칼럼은 VIRTUL과 STORED 옵션이 있다. 테이블에 새로운 칼럼을 추가하는 것과 같은 효과를 내기 때문에 실제 테이블의 구조가 변경된다는 단점이 있다. 8.6.2 함수를 이용한 인덱스 M..