전체 글

'DBA 업무'와 '알게되는 정보'를 기록하는 공간
PostgreSQL 백업 방법 PostgreSQL 은 장애시 복구를 위해 3가지 백업방법이 있습니다. 3가지 방법은 SQL 덤프 / 파일 시스템 기반 백업 / 아카이브 모드 백업입니다. 이 중 SQL 덤프에 대해 다뤄보겠습니다. SQL 덤프 백업방법 이 백업방식은 pg_dump 명령어로 진행합니다. pg_dump 를 실행하면 DB_NAME 데이터베이스에 생성된 객체와 데이터들을 SQL 구문 텍스트 형식으로 백업합니다. 기본적으로 표준출력이기 때문에 리다이렉션 기능을 사용하여 파일로 저장합니다. 1 $ pg_dump DB_NAME > postgres_DB_NAME_bak.sql cs pg_dump 에서 제공하는 연결 옵션 옵션을 보면 일반 클라이언트와 동일하게 원격으로 접속할 수 있는 옵션을 제공하고 있습..
인터페이스와 추상클래스 개념 모두 추상이라는 개념을 사용하여 자식클래스의 기능을 구현해줍니다. 추상클래스 뒤에 클래스라고 붙은 것처럼, 추상클래스는 클래스의 한 종입니다. 클래스의 일종이기 때문에 자식클래스에서 추상클래스를 상속받아 사용할 수 있고, 추상클래스에서 추상클래스를 상속받아서도 사용할 수 있습니다. ( 자식클래스는 일반 혹은 추상클래스 중 한개만 상속가능 ) 추상클래스는 추상메소드를 사용할 수 있고, 자식클래스에서 추상메소드의 구현을 강제하도록 합니다. 추상클래스를 상속받은 자식클래스에서 추상메소드 구현을 안하면 오류가 발생합니다. 인터페이스 클래스의 유형이 아니기 때문에 자식클래스는 여러개의 인터페이스를 상속받을 수 있습니다. 인터페이스도 마찬가지로 추상메소드를 구현할 수 있습니다. 다만, ..
일반클래스와 추상클래스 차이 일반클래스는 클래스 앞에 abstract 명령어가 붙지 않는 반면 추상클래스는 클래스 앞에 abstract 명령어가 붙는 클래스를 의미합니다. 일반클래스 내에서 함수에 abstract 를 붙일 수 없는 반면 추상클래스 내에서는 함수에 abstract 를 붙일 수도 붙이지 않을 수도 있습니다. 일반클래스는 부모클래스라고 하더라도 객체 생성이 가능한 반면 추상클래스는 객체생성이 불가능 합니다. 자식클래스는 일반클래스 혹은 추상클래스를 상속을 통해 부모클래스로 둘 수 있습니다. ( 한 개만 가능 ) 일반 클래스 1 2 3 4 5 6 7 8 class A { public A () { } // 생성자 메소드 abstract public void f_a() { } // 이렇게 추상메소드..
오류 발생 이클립스에서 자바 프로그램을 작성 후, 실행을 했는데 아래와 같은 오류가 발생했습니다. The selection cannot be launched, and there are no recent launches. 이 오류는 실행모드가 저장이 안되어 있어서 발생하는 오류이며, 저같은 경우에는 이클립스 실행 시 metadata 충돌로 metadata 폴더를 삭제 후 발생했습니다. 오류 해결 방법 1. 이클립스에서 Window - Preferences 로 들어갑니다. 2. Launching 에서 Launch the associated project 를 선택합니다. 설정을 보니 Launch the previously launched application 으로 되어있던데, 이는 프로그램 실행 이전에 실행했..
자바 코드의 기초 자바의 모든 프로그램은 public static void main (String[] args) 함수로 시작합니다. 왜 모든 코드는 위의 구문으로 실행이 되어야 할까요? 이 의미를 파헤쳐 보도록 하겠습니다. ( 자바의 기초를 아시는 분들은 이해하기가 좀 더 쉬울 수 있습니다. ) 코드 파헤치기 public 제한자 부분으로, 모든 함수의 앞에는 이 함수를 어디에서 접근할 수 있는지 범위를 지정할 수 있습니다. 제한자는 public, private, protected 종류를 지정할 수 있지만 main 함수만은 public 을 지정해야 합니다. private 나 protected 를 사용하게 되면 아래와 같은 에러가 발생합니다. 왜그럴까요? main 함수는 모든 실행프로그램의 기본이 되는 함수..
자바 스레드의 모순 자바 스레드는 프로그램을 병렬처리 흐름으로 할 수 있기 때문에 꼭 필요한 기능입니다. 그러나 스레드를 여러 개 사용할 때에는 주의해야 합니다. 그 이유는 여러개의 스레드에서 단일 필드에 동시에 접근하는 경우에 발생할 수 있습니다. 스레드 모순 예제 프로그램 아래와 같은 프로그램이 있습니다. 클래스 2개가 쓰레드로 돌면서 add 함수를 호출하여 tmp 값을 더하고 있습니다. tmp 라는 변수는 이 2개의 스레드에서 들어오는 값을 누적하는 용도로 사용됩니다. 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 36 37 38 39 40 41 42 public class ..
스레드란 일반적인 자바 프로그램을 실행하면 작성한 코드가 위에서부터 아래로 순차적으로 실행합니다. 이러한 흐름을 하나의 스레드라고 표현합니다. 따라서 자바를 실행하면 "하나의 스레드가 실행되었다." 라고 표현할 수 있습니다. 그러나 대규모 프로그램의 경우 하나의 스레드로만 구현할 수 없는 경우가 많이 있습니다. 이런경우 다중스레드로 구현하면 각각의 스레드가 동시에 수행되면서 프로그램을 병렬처리 할 수 있습니다. 스레드 기동 스레드를 기동하기 위해서는 먼저 클래스 라이브러리의 Thread 클래스를 상속받아야 합니다. 상속받은 자식클래스는 반드시 run( ) 메소드를 작성해야 합니다. run( ) 안에 작성된 코드는 일반적인 흐름과 달리 병렬로 동작하며 run ( ) 메소드가 시작점이 됩니다. 1 2 3 4..
자바 예외의 원리 프로그램 실행 시 아래와 같은 다양한 오류가 발생할 수 있습니다. - 파일을 읽는 프로그램을 실행시켰으나 파일을 찾을 수 없는 경우 - 문자열을 숫자로 변환하는 프로그램을 실행했으나 숫자로 변환할 수 없는 문자열인 경우 - 배열의 범위를 벗어나는 경우 이러한 오류들은 코드를 컴파일 할 때는 찾을 수 없으며 프로그램을 실행시켜서 위의 상황에 맞는 경우에만 에러가 발생합니다. 자바는 이러한 오류에 대응하기 위해 '예외 처리' 기능을 제공합니다. 예외처리 가 없을 경우 아래의 코드를 보면 배열의 범위를 벗어나게 입력했다는 것을 알 수 있지만 컴퓨터는 실행하기 전까지 오류가 있다는 것을 알 수 없습니다. 따라서 아래 코드는 정상적으로 컴파일 및 num[4] 위의 코드까지 실행되다가 num[4]..
자바 임포트란 다른 패키지 안의 클래스를 사용하기 위해서는 클래스 이름 앞에 패키지를 붙여야 합니다. 하지만 다른 패키지에 속한 클래스의 이름 앞에 매번 패키지 이름을 붙이는 것은 상당히 번거로운 작업이기 때문에 파일의 앞머리에 임포트(import)라는 작업으로 패키지를 매번 입력하는 단점을 없애 줄 수 있습니다. 임포트 작업을 해주면 다른 패키지 안의 클래스를 사용할 때 클래스 이름만 적어주면 됩니다. 임포트 기능의 단점(?) 임포트의 경우 다른 패키지와 클래스 명칭이 겹치면 자바에서는 이를 구분할 수 없기 때문에 클래스 충돌이 발생합니다. The import Package conflicts with a type defined in the same file. 아래 사진은 Chapter13_package..
자바 패키지란 자바 패키지란 클래스들의 모음집 입니다. 패키지를 통해서 라이브러리끼리 구분이 가능합니다. 패키지를 사용하는 이유는 클래스명의 고유성을 보장하기 위함입니다. 때로는 서로 다른 용도의 라이브러리를 도입할 때 이름이 충돌하는 클래스들이 있을 수 있는데 이럴 때 패키지 기능을 사용하여 클래스의 이름이 충돌하는 것을 방지할 수 있습니다. 네임스페이스란 많은 클래스를 다루어야 하는 대규모 프로그램을 작성하는 경우 이름이 같은 클래스를 사용해야 하는 상황이 있습니다. 이렇게 패키지에 의해 나뉘어진 클래스의 이름의 모임을 일컬어 '네임스페이스' 라고 부릅니다. 다른 패키지 안의 클래스를 사용하기 위한 조건 1. 다른 패키지의 클래스에서 사용될 클래스의 이름 앞에 public 을 사용해야 합니다. 클래스..
꽁담
꽁담