전체 글

'DBA 업무'와 '알게되는 정보'를 기록하는 공간
자바 스레드의 모순 자바 스레드는 프로그램을 병렬처리 흐름으로 할 수 있기 때문에 꼭 필요한 기능입니다. 그러나 스레드를 여러 개 사용할 때에는 주의해야 합니다. 그 이유는 여러개의 스레드에서 단일 필드에 동시에 접근하는 경우에 발생할 수 있습니다. 스레드 모순 예제 프로그램 아래와 같은 프로그램이 있습니다. 클래스 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 을 사용해야 합니다. 클래스..
파일 분할하기 대규모 프로그램을 작성할 때는 여러 사람이 분담하여 프로그램을 작성합니다. 이럴 때 여러 클래스를 하나의 파일을 작성하면 매우 불편하기 때문에 클래스를 다른 파일에 나누어 작성합니다. 파일 분할의 장점 가독성 증가 100개의 클래스로 구성되어 있는 하나의 파일이 있고 1개의 클래스로 구성되어 있는 100개의 파일이 있다고 가정합니다. 어떤게 가독성이 좋을까요? 파일이 많으면 보기 불편하지 않을까요? 라고 하실 수 있겠지만 파일명으로 용도를 구분할 수 있고 1개 파일의 코드도 짧아지기 때문에 가독성도 높아지게 됩니다. 유연성 증가 클래스들을 여러사람이 수정해야 한다고 합니다. 하나의 파일에서 모든사람이 붙어서 수정하는 것과, 파일로 나뉘어져 있는 클래스들을 각각 붙어서 수정하는 것. 어떤 것..
자바 인터페이스란 인터페이스란 '같은 기준으로 구현하기 위한 기본 밑그림' 으로 보시면 됩니다. 이 밑그림 속에 객체가 어떤 추상메소드와 어떤 상수로 구성되는지를 작성합니다. 밑그림만 구성하기 때문에 인터페이스 내부 메소드에는 로직을 작성할 수 없습니다. 인터페이스의 용도 내부 로직을 구현할 수 없는데 그럼 인터페이스는 어떠한 용도로 쓰는걸까? 클래스의 틀을 제공합니다. 대규모 프로젝트 개발 시 정형화된 개발을 위한 표준화로 사용할 수 있습니다. 표준화가 되기 때문에 프로그램의 유지보수성을 높일 수 있습니다. 클래스 간의 관계를 인터페이스로 연결하면, 클래스마다 독립적으로 프로그래밍이 가능합니다. 이 말은 한 클래스의 변경이 관련된 다른 클래스에 영향을 미치지 않도록 프로그래밍이 가능하다는 의미입니다. ..
PostgreSQL 접속 시 에러 OS 계정 명과 일치하지 않는 PostgreSQL 계정을 생성한 후 psql 명령어를 사용하여 접속하려고 하면 아래와 같은 에러메시지가 나옵니다. psql: FATAL: Peer authentication failed for user "psqluser" DB 사용자계정을 생성한 후 DB 에 접속하려고 하는데 접속할 수 없다고 나오며 제가 왜 OS 계정과 일치하지 않는다는 표현을 했을까요. 1 2 3 postgres@VirtualBox:~/10/main$ psql -U psqluser -W Password for user psqluser: psql: FATAL: Peer authentication failed for user "psqluser" cs PostgreSQL 에..
PostgreSQL 사용자란 PostgreSQL 의 Role 은 개념상 운영체제 사용자와 다릅니다. PostgreSQL 의 사용자는 소유하고 있는 DATABASE 안에 있는 객체의 권한을 제어할 수 있습니다. PostgreSQL 사용자 생성하는 방법 psql 에서 CREATE USER 구문으로 사용자를 생성합니다. psql 에서 ALTER USER 구문으로 사용자 비밀번호를 초기화 합니다. CREATE USER 구문에서 PASSWORD 옵션을 사용하여 비밀번호를 초기화를 합니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 postgres=# CREATE USER psqluser; CREATE ROLE postgres=# SELECT * FROM PG_..
계정 로그인 postgres 계정으로 로그인을 해줍니다. PostgreSQL 은 postgres 계정에서 진행해 주어야 합니다. PostgreSQL 기본 디렉터리 확인 Ubuntu 기준 PostgreSQL 은 아래의 경로를 기본값으로 가집니다. 참고로 하위폴더 (예: 10) 는 버전에 따라 값이 달라질 수 있습니다. postgresql.conf 파일을 수정하여 환경설정 값을 변경할 수 있습니다. 용도 경로 데이터 파일 경로 /var/lib/postgresql/10/main/ HBA 파일 경로 /etc/postgresql/10/main/pg_hba.conf 환경설정 파일 경로 /etc/postgresql/10/main/postgresql.conf 소켓 경로 /var/run/postgresql/ Postgr..
꽁담
꽁담