전체 글

'DBA 업무'와 '알게되는 정보'를 기록하는 공간
개요 Redis 와 Sentinel 로 구성된 레디스가 있습니다. Jedis 를 사용하는 어플리케이션에서 Sentinel 에서 마스터 IP 를 조회하여 Redis 에 접속하고 있습니다. sentinel failover 를 수행한 후 어플리케이션에서 새로운 마스터를 인지하지 못하는 상황이 발생했습니다. 모든 Sentinel 에서는 새로운 마스터 IP 로 변경되어 있는 상태였습니다. 원인에 대한 범위 좁히기 왜 어플리케이션에서 새로운 마스터를 찾지 못했을까 Jedis 라이브러리를 사용하는 어플리케이션에서 Pub/Sub 기능을 이용하여 Sentinel 의 메시지를 받고 이 Sentinel 메시지 중 +switch-master 의 메시지를 받으면 Failover 가 수행되도록 쓰레드로 구현이 되어 있습니다. 그..
개요 Redis 에서는 Sentinel 기능이라는 마스터/슬레이브를 모니터링 하는 기능을 제공합니다. Sentinel 은 일명 모니터를 하는 기능으로 마스터/슬레이브를 정해주며 마스터 노드가 Failover 되었을 때 슬레이브 노드를 마스터로 구동 후, 마스터로 접속할 수 있도록 해주는 기능입니다. Jedis 라이브러리에서는 이렇게 Failover 되었을 때 센티넬로부터 새로운 마스터 정보를 얻어와서 변경된 마스터로 접속할 수 있도록 제공하고 있습니다. 테스트 환경 테스트를 하기 위한 환경은 아래와 같고 모든 테스트는 리눅스 환경에서 이루어졌습니다. Jedis 를 사용한 자바 코드도 리눅스 환경에서 동작합니다. OS Ubuntu 18.04 Redis Master 127.0.0.1 6161 Redis Sl..
개요 Java 에서 Jedis 혹은 Lettuce 를 사용하여 Redis 에 접속할 수 있습니다. 이 중 Jedis 를 다뤄볼 예정이고 Jedis 는 Redis 기능을 사용할 수 있는 여러 기능들을 모아놓은 라이브러리라고 보시면 됩니다. 테스트 환경 Jedis 기능을 테스트하기 위해서 Ubuntu 환경에서 진행했습니다. Windows 환경에서 Jedis 기능을 사용하려는 분들에게는 이 포스팅이 적절하지 않을 수 있습니다. OS Ubuntu 18.04 Java openjdk 1.8.0_275 Redis 2.8.21 Jedis 2.9.0 사전에 진행된 부분 1. Ubuntu 에 Java (jdk)가 설치되어 있어야 합니다. 2. Ubuntu 에 Redis 가 설치되어 있어야 합니다. Java 와 Jedis ..
· Linux/개념
상황 Ubuntu 환경에서 apt 명령어를 사용하여 자동으로 설치진행하는 도중 아래와 같은 오류가 발생했습니다. 'kr.archive.ubuntu.com' 의 주소를 알아낼 수 없습니다. 해결방안 1차 해결방안 저 같은 경우는 좀 특이한 케이스인데 VM 에서 호스트전용 어댑터로 설정만 해서 발생하는 문제였습니다. ( 외부와의 통신이 불가능한 상태 ) VM 에서 '호스트전용 어댑터'와 'NAT' 어댑터 2개를 설정한 후 interface 설정을 변경하였습니다. Step 1. enp0s3 는 '호스트전용 어댑터' enp0s8 은 'NAT' 으로 설정되어 있는 상태입니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 root@psh-VirtualBox:~# ifconfig ..
· Linux/개념
상황 우분투에서 yum 명령어 설치를 진행하려고 하던 도중 아래와 같은 에러가 발생했습니다. E: /var/lib/dpkg/lock-frontend 잠금 파일을 얻을 수 없습니다 - open (11: 자원이 일시적으로 사용 불가능함) E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it? E: /var/lib/dpkg/lock-frontend 잠금 파일을 얻을 수 없습니다 - open (11: 자원이 일시적으로 사용 불가능함) E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is anothe..
인터페이스란 인터페이스를 상속받는 다수의 서브클래스에서 같은 기준으로 구현하도록 하기위한 기본 밑그림으로 보시면 편할 것 같습니다. 인터페이스를 상속받는 서브클래스는 다수개가 될 수 있습니다. 서브클래스마다 각각의 함수로 구현을 한다면 나중에 호환이 되지 않아서 오류가 발생할 수 있습니다. 이런 오류를 방지하고자 기본틀을 만들어 주는 기능이 인터페이스 입니다. 인터페이스 구조 인터페이스 선언 시 class 명칭 대신 interface 명칭을 사용합니다. 인터페이스는 필드와 메소드를 가질수 있지만 생성자를 가질수는 없습니다. 일반적으로 인터페이스 멤버에는 어떠한 제한자도 붙이지 않습니다. 그러나 필드는 public static final, 메소드는 abstract 제한자를 붙인것과 동일하게 적용됩니다. 즉..
instanceof 연산자 객체의 클래스를 알아내는 연산자 입니다. 추상클래스를 사용하다 보면 많은 양의 서브 클래스를 다뤄야 하는 경우가 있습니다. 이럴 때 instanceof 연산자를 사용하여 어떤 서브클래스 객체를 사용하는지 알아낼 수 있습니다. instanceof 연산자를 사용하면 좌변의 변수가 가리키는 객체의 클래스가 오른쪽과 같은 클래스인지 여부를 확인할 수 있습니다. 예제 코드 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 31 32 33 34 35 public class instanceofTest { public static void main(String[] args) { // TODO Aut..
추상클래스란 일반적인 방식의 객체생성 불가 일반적인 방식으로 객체를 생성할 수 없는 클래스를 의미합니다. 따라서 new 명령어로 객체 생성이 불가능합니다. 배열 방식으로의 객체 생성 위에서 '일반적인 방식'으로를 언급한 이유는 배열로는 new 연산자로 객체생성이 가능합니다. 이유는 추상클래스로 객체를 만들수는 없지만 그 클래스의 변수나 배열에 서브 클래스의 객체를 담을 수 있기 때문입니다. 추상클래스 사용방법 추상클래스를 사용하기 위해서는 클래스 명 앞에 abstract 를 명시해 주어야 합니다. 또한 추상클래스에서는 추상메소드를 사용할 수 있는데 추상메소드란 몸체가 없는 메소드를 가질 수 있는 함수를 의미합니다. 추상메소드 명 앞에는 abstract 를 명시해 주어야 합니다. 추상클래스 사용이유 그렇다..
오버로딩과 오버라이딩의 차이점 오버로딩과 오버라이딩의 개념은 다음과 같습니다. 개념 설명 오버로딩 메소드 이름이 같지만 인수의 형과 개수가 다른 메소드를 정의 오버라이딩 슈퍼클래스와 서브클래스에서 메소드이름 인수의 형 개수가 모두 똑같은 메소드를 정의 예제 코드 오버로딩 같은 메소드 명에 인자 수가 다른 메소드를 사용하는 방법입니다. 이런 경우에는 인자와 타입에 맞는 메소드가 호출됩니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 public class overloadingTest { public static void main(String[] args) { // TODO Auto-generated method stub ol col = new ol(); col.s..
오버라이딩이란 자바에서는 서브클래스에서 슈퍼클래스와 완전히 동일한 메소드를 선언할 수 있는 기능이 있습니다. 오버로딩의 경우 인자 개수나 타입이 달라야 합니다. 그러나 오버라이딩의 경우는 인자 개수나 타입이 완전히 일치할 수 있습니다. 오버라이딩의 경우 메소드 호출방법 메소드의 이름과 인수의 개수 및 타입이 완전히 같은 메소드가 서브 및 슈퍼클래스에 모두 정의된 경우 서브클래스에서 새롭게 정의한 메소드가 호출됩니다. 이처럼 서브클래스의 메소드가 슈퍼클래스의 메소드를 대신하는 기능을 오버라이딩이라고 합니다. 오버라이딩 장점 같은 기능을 구현한 서브클래스에서 동일한 메소드를 사용함으로 써 코드의 복잡성과 일관성을 제공할 수 있습니다. 예제 코드 eov1 에서 매개인자가 하나인 show 함수를 호출하면 서브클..
꽁담
꽁담