데이터를 생성 하고 웹과 앱에서 동시에 사용하기 좋은 장소로 cloud가 딱인것 같아 한번 구성을 해보았습니다.  Firebase 뿐만 아니라 google에서 제공하는 cloud 관련 서비스를 사용 하려면 구글 계정이 있어야 합니다.




https://firebase.google.com/


firebase project create delete


처음부터 크롬 브라우저 우측 상단의 로그인을 클릭 하던가 아니면 그림 속 [시작하기] 버튼을 클릭 하면 구글 로그인 페이지로 이동하니 로그인을 합니다그리고 다시 파이어베이스 페이지로 돌아와 시작하기 버튼을 클릭 하여 Firebase에 들어오면 아무것도 없습니다.

 

Firebase 프로젝트 생성


firebase project create delete


[프로젝트 만들기] 버튼을 클릭해서 새로운 프로젝트를 생성해서 사용하면 되는데 프로젝트는 여러개 생성 가능 합니다그럼 프로젝트 생성을 시작해 봅니다.


firebase project create delete


적당한 프로젝트 이름을 입력해 줍니다. 그리고 [계속하다] 버튼을 클릭 합니다.


firebase project create delete


로그 분석 설정입니다필요 없으면 하단의 설정을 취소하고 [계속하다] 버튼을 클릭 합니다.


firebase project create delete


계정을 설정 하거나 신규로 생성 합니다. 신규로 생성하는 경우


firebase project create delete


체크박스를 모두 선택 해야 프로젝트 만들기 버튼이 활성화 됩니다계정을 선택 또는 만들기를 하고 최종적으로 [프로젝트 만들기] 버튼을 클릭 합니다.


firebase project create delete


프로젝트가 생성중입니다.


firebase project create delete


프로젝트가 생성 되었습니다.  [계속하다] 버튼을 클릭하면 콘솔 화면으로 이동 합니다.


firebase project create delete


프로젝트는 여러개 생성이 가능 합니다.  Firebase 메인 페이지로 이동하면


firebase project create delete


다음과 같이 새로 생성된 프로젝트가 보이고 추가 버튼도 있습니다프로젝트 추가를 누르면 앞에서 했던 새로운 프로젝트 생성이 진행 됩니다.

 

 

Firebase 프로젝트 삭제

 

물건을 구매하고 단순 변심에 의한 환불은 안되지만 firebase로 생성한 프로젝트가 마음에 들지 않거나 필요 없는 경우에는 언제든지 삭제가 가능 합니다.


firebase project create delete


삭제 하려면 일단 삭제 하려는 프로젝트를 클릭 하여 firebase console로 이동 합니다


firebase project create delete


해당 파이어베이스 프로젝트 콘솔로 이동을 하고 나서 프로젝트 개요의 우측에 설정 아이콘을 클릭하면 팝업 메뉴가 나타납니다.  [프로젝트 설정] 메뉴를 선택 합니다.


firebase project create delete


설정 화면에서 [프로젝트 삭제]를 클릭 합니다.


firebase project create delete


경고 프로젝트 삭제 팝업 창에서 모든 체크박스를 선택하면 [프로젝트 삭제] 버튼이 빨간색으로 활성화 됩니다이제 [프로젝트 삭제] 버튼을 클릭하면 프로젝트가 삭제 됩니다.


- copy coding -


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 -


java로 프로그램을 할 때 파라미터로 가장 많이 사용하게 되는 ObjectVO 객체이고 VO로 값을 받거나 전달해야 하는 경우 VO의 값을 확인 하려면 디버깅모드에서 Variables에 있는 값을 확인 하거나 Vo.getXxx()로 하나씩 출력을 해봐야 하는 불편함이 있는데 ObjectMapper를 이용하면 VoJSON 형태로 변환하여 사용할 수 있습니다.



 

먼제 pom.xml에 라이브러리를 등록 합니다.

 

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->

        <dependency>

            <groupId>com.fasterxml.jackson.core</groupId>

            <artifactId>jackson-databind</artifactId>

            <version>2.11.0</version>

        </dependency>

 

main 으로 사용할 VO 파일을 생성 합니다.

 

public class SampleVo {

 

        private String username; /* 사용자ID*/

        private String name; /* 이름*/

        private Map<String, Object> mobile; /* 휴대전화*/

        private Map<String, Object> tel; /* 전화번호*/

       

        //getXxx, setXxx 생략

       

}

 

VO를 또 생성 합니다이건 Map<String, Object>로 설정한 mobile을 위한 Vo 입니다.


public class MovileVo {

 

        private String mobile1; /* 휴대전화1*/

        private String mobile2; /* 휴대전화2*/

        private String mobile3; /* 휴대전화3*/

       

        //getXxx, setXxx 생략

       

}

 

 

tel을 위한 Vo도 하나 더 추가 합니다.


public class TelVo {

 

        private String tel1; /* 전화번호1*/

        private String tel2; /* 전화번호2*/

        private String tel3; /* 전화번호3*/

       

        //getXxx, setXxx 생략

}

 

 

이제 Controller를 하나 만들고 코딩을 합니다.

MovileVo TelVo에 값을 설정하고 SampleVoMobileVoTelVo를 이용하여 값을 설정 합니다.



import com.fasterxml.jackson.databind.ObjectMapper;


        @RequestMapping(value = "/sample/test")

        public void sampleMethod(Model model) throws Exception {

              

               SampleVo sampleVo = new SampleVo();

               MovileVo movileVo = new MovileVo();

               TelVo telVo = new TelVo();

              

               movileVo.setMobile1("010");

               movileVo.setMobile2("1111");

               movileVo.setMobile3("2222");

              

               telVo.setTel1("02");

               telVo.setTel2("111");

               telVo.setTel3("2222");

              

               Map<String, Object> movileMap = new HashMap<String, Object>();

               Map<String, Object> telMap = new HashMap<String, Object>();

              

               movileMap.put("movile1", movileVo.getMobile1());

               movileMap.put("movile2", movileVo.getMobile2());

               movileMap.put("movile3", movileVo.getMobile3());

              

               telMap.put("tel1", telVo.getTel1());

               telMap.put("tel2", telVo.getTel2());

               telMap.put("tel3", telVo.getTel3());

              

               sampleVo.setUsername("copycoding");

               sampleVo.setName("카피코딩");

               sampleVo.setMobile(movileMap);

               sampleVo.setTel(telMap);

              

               ObjectMapper mapper = new ObjectMapper();

               String samString = mapper.writeValueAsString(sampleVo);

              

               System.out.println("=== sampleVo ===" + samString);

        }

 

ObjectMapper mapper = new ObjectMapper();

String samString = mapper.writeValueAsString(sampleVo);

ObjectMapper를 설정 하고 writeValueAsString()을 이용하면 JSON 형태의 String 값을 얻을 수 있습니다.

 

localhost:8080/sample/test를 호출하여 실행을 하여 log를 확인 해 봅니다.

 

=== sampleVo ==={"username":"copycoding","name":"카피코딩","tel":{"tel1":"02","tel2":"111","tel3":"2222"},"mobile":{"movile1":"010","movile3":"2222","movile2":"1111"}}

 

String형이라 다시 정리 하면

=== sampleVo ===

{

"username":"copycoding",

  "name":"카피코딩",

  "tel":{

        "tel1":"02",

        "tel2":"111",

        "tel3":"2222"

      },

  "mobile":{

        "movile1":"010",

        "movile3":"2222",

        "movile2":"1111"

      }

}

 

이런 결과를 볼 수 있습니다.


- copy coding -


1···9101112131415···61

+ Recent posts