LinuxPostgreSQL가 설치 되어 있는데 신규 프로젝트를 위한 DB를 생성할 일이 발생했습니다.

PostgreSQL에 사용자 계정을 생성하고 신규 Database를 만들어 외부에서 접속 가능하도록 설정을 하려고 합니다작업 순서도 계정 생성, DB생성, 접속 설정 순으로 진행 합니다.


postgresql user database create


작업시 주의사항은 root 권한으로 하는 작업과 postgres 권한으로 하는 작업 그리고 DB에 접속해서 하는 작업이 섞여 있습니다.

 

우선 postgresql에 접속을 합니다.

$ sudo -u postgres psql

 

접속이 성공하면 계정 생성과 디비 생성을 진행 합니다.

 

- 계정 및 권한

postgres=# CREATE USER copycoding SUPERUSER;


- 비번 생성

postgres=# ALTER USER copycoding WITH PASSWORD 'copycopy';


- DB 생성

postgres=# create database copycodingdb with owner copycoding encoding 'UTF8';

postgresql user database create


이제 postgresql을 재시작 해주는데 설치를 어떻게 했냐에 따라 뒤에 버전 정보가 붙을 수도 있습니다저는 9.6을 설치하며 버전정보를 그냥 사용했습니다.

 

$ sudo systemctl restart postgresql-9.6

 

DB가 잘 생성이 되었는지 확인하기 위해 다시 DB에서 명령어로 확인합니다.

postgres=# \l


postgresql user database create


상단에 생성된 DB가 보이니 잘 만들어 졌습니다

 

이제 외부에서 접속 할 수 있도록 설정 합니다설정 파일 위치를 확인 하고

postgres=# show hba_file;

              hba_file              

-------------------------------------

 /var/lib/pgsql/9.6/data/pg_hba.conf

(1 row)

 

 

계정을 postgres로 변경 합니다.

[root@localhost copycoding]# su postgres

 

그리고 검색한 파일을 수정 합니다.

$ vi /var/lib/pgsql/9.6/data/pg_hba.conf


파일을 열고 IPv4 부분을 찾아 라인을 하나 추가 합니다.

host    all             copycoding      0.0.0.0/0               md5


postgresql user database create


신규 User 정보를 추가가 끝나면 저장하고

 

postgres=# pg_ctl reload

 

디비를 재시작 합니다.

# sudo systemctl restart postgresql-9.6

 

아직 설정이 하나 더 남아 있습니다.  postgres 계정으로 conf 파일을 수정 합니다.


bash-4.2$ vi /var/lib/pgsql/9.6/data/postgresql.conf

 

파일에서 주석이 되어 있으면 주석을 풀고 다음처럼 수정 합니다.

 

listen_addresses = '*'

port = 5432


postgresql user database create


방화벽도 설정을 합니다.

$ firewall-cmd --permanent --add-port=5432/tcp

$ firewall-cmd --reload

 

설정이 모두 완료 되었습니다.

Windows에서 pgAdmin III를 이용하여 접속을 해 봅니다.


postgresql user database create


서버에서 디비를 생성할때 기록한 정보를 입력하고 OK 버튼을 클릭 합니다.


postgresql user database create


9.6을 설치해서 pgAdmin III는 지원이 잘 안될 수 있다고 하는데 무시하고 확인버튼을 클릭 합니다.


postgresql user database create


접속이 잘 되는 군요아직 Table 작업은 안되어있긴 하지만 성공입니다.


- copy coding -


CentOS 7 PoatgreSQL을 설치하려면 먼저 운영체제 종류와 버전 별로 제품의 어떤 버전이 지원 되고 있는지 확인을 해야 합니다.


centos postgresql install


PostgreSQL도 홈페이지에 들어가 보면 202005월 현재 지원 하는 상황을

PostgreSQL Version

64 Bit Platforms

32 Bit Platforms

10

RHEL / CentOS / OEL 7.x & 6.x

RHEL / CentOS / OEL 6.x

9.6

RHEL / CentOS / OEL 7.x & 6.x

RHEL / CentOS / OEL 6.x

9.5

RHEL / CentOS / OEL 7.x & 6.x

RHEL / CentOS / OEL 6.x

이렇게 알려주고 있습니다.

 

지원하는 패키지가 많이 있지만 주요 패키지 구성은

postgresql-client

libraries and client binaries

postgresql-server

core database server

postgresql-contrib

additional supplied modules

postgresql-devel

libraries and headers for C language development

 

이런거라네요당연히 server는 설치를 해야 하는 거고 나머지는 필요하면 같이 설치 해도 되고 나중에 따로 설치를 하면 됩니다이제 설치를 진행 합니다.

 

1. PostgreSQL 설치

 

설치하기 전에 yum을 업데이트 합니다.

$ sudo yum update -y

 

현재 상태에서 어떤 버전이 설치 가능 한지 확인 해 봅니다.

$ yum list | grep ^postgresql



centos postgresql install


현재는 재가 설치한 CentOS에서는 9.2 버전을 설치 할 수 있군요저는 다른 버전을 설치 하고 싶은데 그러려면 먼저 rpminstall 해야 합니다.  다운로드 사이트에 접속해서

https://download.postgresql.org/pub/repos/yum/srpms/


centos postgresql install


원하는 버전 별로 찾아 들어가 rpm 주소를 복사해서 설치를 하면 됩니다꼭 아래처럼 하지 않아도 본인이 원하는 파일을 찾아서 설치 하세요.

$ sudo yum install https://yum.postgresql.org/9.6/redhat/rhel-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm


centos postgresql install


설치를 완료하고 다시 $ yum list | grep ^postgresql  명령을 실행해보면


centos postgresql install


이제는 9.4, 9.5, 9.6, 10, 11, 12등 설치할 수 있는 버전이 많아졌습니다.

이중 설치하려는 버전 번호를 붙여서 명령어를 생성하면 됩니다.

$ sudo yum install postgresql96 postgresql96-server


centos postgresql install


설치가 완료되면 자동으로 postgres라는 계정이 하나 생성 됩니다.  /etc/passwd에 추가되고 /var/lib/pgsql/에 설치 됩니다.

 

2. PostgreSQL 초기화

 

initdb 명령으로 초기화를 진행 합니다.

 

$ sudo /usr/pgsql-9.6/bin/postgresql96-setup initdb


centos postgresql install


PostgreSQL을 등록하고 서버 재시작 후에도 자동으로 실행되도록 합니다.

$ sudo systemctl start postgresql-9.6

$ sudo systemctl enable postgresql-9.6


centos postgresql install


초기화 작업과 등록 작업이 완료 되었습니다.

 

3. PostgreSQL 설치 확인

 

다음 명령으로 설치를 확인해 봅니다.

 

$ ps -ef | grep post


centos postgresql install


데이터 베이스에 접속해 봅니다.

$ sudo -u postgres psql


centos postgresql install


설치 작업이 잘 되었습니다.


- copy coding -


postgresql을 설치하고 pgAdmin III를 이용하여 데이터베이스와 테이블을 생성하는 작업을 해봅니다.


pgAdmin III postgresql


먼저 설치된 프로그램에서 pgAdmin III을 찾아 실행 합니다.

 

1. postgreSQL 접속


pgAdmin III postgresql


접속을 하기 전에는 빨간색으로 X 표시가 되는데 postgreSQL에 마우스를 놓고 우측 버튼을 클릭하고 Connect을 선택 합니다.


pgAdmin III postgresql


접속을 위한 비밀번호를 물어보는데 설치 할때 입력한 비밀번호를 사용하면 됩니다.

비밀번호 저장을 클릭하고 OK 버튼을 클릭하면


pgAdmin III postgresql


비밀번호를 저장할거냐고 한번더 물어보는데 OK 버튼 클릭


pgAdmin III postgresql


connect가 성공하면 빨간색 X 표시가 사라지고 구성 요소를 볼 수 있습니다.

 

2. User 생성

 

먼저 새로운 사용자를 하나 생성 합니다.


pgAdmin III postgresql


Login Roles에 마우스를 놓고 우측 버튼을 클릭하여 New Login Role 메뉴를 선택 합니다.


pgAdmin III postgresql


Properties 탭에서 Role name에 이름을 입력하고 


pgAdmin III postgresql


Definition 탭에서 비밀번호도 적어주고


pgAdmin III postgresql


Role privileges에서 권한은 잘 보고 선택하면 되는데 귀찮으면 Superuser를 선택 해주고 OK 버튼 클릭 합니다.


pgAdmin III postgresql


그러면 copycoding이라는 사용자가 한명 생성되었습니다.

 

3. Database 생성

 

이제 새로운 데이터베이스를 만들어 볼까요?


pgAdmin III postgresql


Databases 항목에 마우스를 놓고 오른쪽 버튼을 클릭하고 New Database 메뉴를 선택 합니다.


pgAdmin III postgresql


Properties 탭에서 NameDB명을 입력하고

Owner에 위에서 생성한 copycoding 사용자를 선택해 줍니다.


pgAdmin III postgresql


Privileges 탭에서 DB 권한도 용도에 따라 선택을 해줍니다그리고 OK 버튼을 클릭 하면


pgAdmin III postgresql


새로운 DB도 생성이 되었습니다.

 

4. Table 생성

 

이제 DB에 테이블을 만들어 봅니다.


pgAdmin III postgresql


생성된 copycodingdb를 확장하여 Tables를 찾아 마우스를 놓고 우측버튼을 클릭하여 New Table을 선택 합니다.


pgAdmin III postgresql


properties 탭에서 Name에 만들려는 테이블 이름을 입력 하고 Owner에 사용자를 선택 해줍니다.


pgAdmin III postgresql


Columns 탭에서 Add 버튼을 클릭하고


pgAdmin III postgresql


이렇게 column을 하나씩 입력하여


pgAdmin III postgresql


필요한 column을 다 입력하고 


pgAdmin III postgresql


필요하다면 Privileges 탭에서 권한도 설정을 하고 OK 버튼을 클릭 합니다.


pgAdmin III postgresql


테이블이 하나 생성이 되었습니다필요한 수만큼 Table을 생성하여 사용하면 됩니다.


pgAdmin III postgresql


새로 생성한 테이블을 조회해 보았습니다아직 insert한 데이터가 없군요윈도우에서 작업하면 눈으로 확인이 가능해서 참 편한것 같습니다.


- copy coding -


 

프로그램 할 때 query log가 안보이면 제대로 실행이 되고 있는 건지 디버깅도 힘들고 답답하기 때문에 로그 보는 설정을 먼저 진행하게 됩니다오늘 진행하는 작업은 대부분의 Database가 동일한 방법으로 작업이 가능 합니다.

 

먼저 maven을 이용하여 log4j2를 추가 합니다.


pom.xml 

        <dependency>

            <groupId>org.bgee.log4jdbc-log4j2</groupId>

            <artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>

            <version>1.16</version>

        </dependency>

 

그리고 추가한 라이브러리가 작동할 수 있도록 application.properties

spring.datasource.driverClassName=net.sf.log4jdbc.sql.jdbcapi.DriverSpy

를 추가하고 source urllog4jdbc 를 추가 해줍니다


application.properties

## PostgreSQL

spring.datasource.driverClassName=net.sf.log4jdbc.sql.jdbcapi.DriverSpy

#spring.datasource.url=jdbc:postgresql://localhost:5432/copydb

spring.datasource.url=jdbc:log4jdbc:postgresql://localhost:5432/copydb

spring.datasource.username=copycoding

spring.datasource.password=copy123

 

다른 데이터 베이스를 사용 하는 경우에도 첫 번째 라인인 DriverSpy는 추가해 주고 url 부분을 다음처럼 변경을 합니다.

spring.datasource.url=jdbc:log4jdbc:oracle:thin:@localhost:1521/xe

spring.datasource.url=jdbc:log4jdbc:mariadb://localhost:3306/testdb

spring.datasource.url=jdbc:log4jdbc:mysql://localhost/testdb

 

그리고 실행을 하면 아래 그림처럼


sql query log


모든 값들이 정리되지 않고 나오게 되는데 이제 정리를 하기 위한 설정을 추가해 줍니다.


 

src/main/resources 폴더에 properties 파일을 하나 생성 합니다.


log4jdbc.log4j2.properties

log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator

log4jdbc.dump.sql.maxlinelength=0

  

src/main/resources 폴더에 추가로 xml 파일을 생성 합니다.


logback.xml

<?xml version="1.0" encoding="UTF-8"?>

 

<configuration>

  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">

    <encoder>

      <pattern>%d{yyyyMMdd HH:mm:ss.SSS} [%thread] %-3level %logger{5} - %msg %n</pattern>

    </encoder>

  </appender>

 

  <logger name="jdbc" level="OFF"/>

 

  <logger name="jdbc.sqlonly" level="OFF"/>

  <logger name="jdbc.sqltiming" level="DEBUG"/>

  <logger name="jdbc.audit" level="OFF"/>

  <logger name="jdbc.resultset" level="OFF"/>

  <logger name="jdbc.resultsettable" level="DEBUG"/>

  <logger name="jdbc.connection" level="OFF"/>

 

  <root level="INFO">

    <appender-ref ref="STDOUT" />

  </root>

 

</configuration>

 

이제 다시 실행을 하고 console을 보게 되면 


sql query log


보기 좋게 형식을 갖추어 출력이 됩니다.


- copy coding -


123

+ Recent posts